У меня есть диск (SD-карта) с несколькими разделами ext4, но также есть некоторое нераспределенное пространство. fstrim
Утилита может работать только в пределах файловой системы. Прежде чем я изобрету колесо и напишу один, есть ли другая утилита, которая может TRIM нераспределенное пространство (или которая может TRIM явно заданный диапазон)?
Я могу убедиться, что большая часть нераспределенного пространства на устройстве в настоящее время не известна контроллеру как свободная, так как я заметил, что на этой конкретной карте выполняется считывание обрезанных пробелов с возвратами 0, но сканирование устройства показывает осталось много мусорных данных.
Изменить: у меня возникла проблема с использованием hdparm
. В приведенном ниже примере отбрасывается первый сектор, но я вижу одинаковые результаты независимо от указанного диапазона. fstrim
не имеет проблем на устройстве:
root@ubuntu:~# hdparm --please-destroy-my-drive --trim-sector-ranges 0:1 --verbose /dev/mmcblk0
/dev/mmcblk0:
trimming 1 sectors from 1 ranges
outgoing cdb: 85 0d 06 00 01 00 01 00 00 00 00 00 00 40 06 00
outgoing_data:
00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ioctl(fd,SG_IO): Invalid argument
FAILED: Invalid argument
Я продолжаю расследование, но есть ли у кого-нибудь понимание?
blkdiscard
их, чтобы обрезать все устройство.blkdiscard
, кажется, не доступно в моих стандартных репозиториях пакетов (Ubuntu 12.04, кажется, не присутствует вutil-linux
).hdparm
какой-то причине мне так и не удалось поработать на меня, но я взял источник util-linux с github.com/karelzak/util-linux/tree/stable/v2.23 , собрал его (./autogen.sh ; ./configure ; make blkdiscard
), и он отлично работает. Все еще озадачен,hdparm
ноblkdiscard
делает именно то, что я хочу. Бонус: нет необходимости сначала создавать временную файловую систему, вы можете использовать,sfdisk -l
чтобы выяснить пространство между разделами иblkdiscard
обрезать его.blkdiscard
возможности работать с опциями смещения / длины. Поэтому временные разделы, которые я предложил, даже не нужны. Ницца!Ответы:
Если у вас есть достаточно свежая версия
util-linux
, она содержит инструмент,blkdiscard
который способен TRIM целых устройств или диапазонов в пределах устройства, используя--offset
и--length
параметры.Пожалуйста, обратите внимание:
blkdiscard
это опасно, если вы позволите ему TRIM неправильные регионы, ваши данные исчезнут!Таким образом, вы можете выяснить неразделенные (свободные) области вашей таблицы разделов, а затем ОТПРАВИТЬ их, используя этот инструмент. Для
msdos
иgpt
разделов,parted
предоставляет свободные регионы следующим образом:Добавить цикл к нему ...
какие отпечатки
Убедитесь, что этот вывод правильный для вас, добавьте дополнительные параметры, если вам нравится (подробный?), И, наконец, удалите,
echo
чтобы он действительно выполнялся, и вы должны быть настроены.Вторая команда этого примера на самом деле терпит неудачу, потому что длина слишком мала - возможно, стоит проверить внутри цикла, игнорировать области размером менее 1 МБ, так как они вряд ли будут успешно обрезаны.
Если вы используете LVM вместо разделов, вы можете создать LV для незанятого пространства и урезать его:
Если вы установили
issue_discards = 1
свойlvm.conf
, вы можете пропуститьblkdiscard
вызов, так как LVM сам выдаст TRIMlvremove
.источник
blkdiscard
наличии; вы можете получить исходный код util-linux с github.com/karelzak/util-linux/tree/stable/v2.23, а затем собратьblkdiscard
(запустить./autogen.sh ; ./configure ; make blkdiscard
) - он собран чисто (хотя вам, возможно, придется установить некоторые зависимости иconfigure
параметры настройки ) и как Пока вы не устанавливаете его, он не конфликтует с существующим util-linux.blkdiscard
, но заметил, что значения основаны на смещении, а не на длине. Возможно, есть проблемаblkdiscard
, я нахожусь в процессе расследования. См. Unix.stackexchange.com/questions/98473/…hdparm --trim-sector-ranges
может обрезать диапазон. Страница man предупреждает о необходимости ее использования, так что вам лучше убедиться, что вы получили правильный диапазон и синтаксис.Я думаю, что отправка обрезки для всех данных вне раздела была бы опасной, поскольку там иногда есть некоторые скрытые данные, такие как код загрузчика или таблицы второго раздела. Вам нужно знать точное, какие области за пределами разделов действительно не используются.
источник
hdparm
, неиспользуемые диапазоныsfdisk
и обрезать соответственно. Я знаю, что на драйве. Если существует схема разбиения, которая скрывает данные в доступных, но нераспределенных областях, это нарушит основные функциональные возможности любого редактора разделов. Я полагаю (надеюсь), что от любых подобных схем уже давно отказались (хотя я не знаю ни одной из них). Все известные мне схемы хранят MBR в известном нераспределенном пространстве в начале устройства и VBR / EBR в выделенных разделах. Могут быть старые неясные схемы, которые отличаются. :)hdparm
, я отредактировал свой вопрос с деталями; интересно, есть ли у вас понимание.