У меня есть LUKS
раздел, /dev/sda1
который я luksOpen с --allow-discards
:
cryptsetup --allow-discards luksOpen /dev/sda1 root
Затем я монтирую ext4
файловую систему с discard
опцией:
grep /dev/mapper/root /proc/mounts
/dev/mapper/root / ext4 ro,relatime,block_validity,discard,delalloc,barrier,user_xattr,acl 0 0
Затем я обрежу свободное место на смонтированном разделе:
fstrim -v /
с df
, я вижу, /
имеет 80% свободного места. Это означает, что /dev/sda1
80% диска являются двоичными нулями.
Если я клонирую изображение с cat
cat /dev/sda1 > sda1.img
и сжать изображение xz
, я ожидаю, что все нули на диске будут сжаты. Поскольку 20% данных на диске зашифрованы, они должны выглядеть случайными и быть несжимаемыми. Следовательно, xz-сжатое изображение должно быть приблизительно. 20% от необработанного размера.
Однако полученное xz-сжатое изображение имеет примерно такой же размер, что и необработанный оригинал.
Правильно ли мои рассуждения?
Почему моя теория не воплощается в практику?
dmsetup table | grep allow_discards
Ответы:
Ваша логика не неверна. Но он действителен только при соблюдении некоторых условий.
Команда TRIM , как указано в наборе команд ATA , может или не может обнулять секторы, против которых она выдана.
На самом деле, стандарт фокусируется на том, какие данные должны быть возвращены после того, как TRIM был выпущен 1 :
Таким образом, что ваше устройство возвращает после
fstrim
зависит от функций, которые оно реализует. Если он не поддерживает RZAT, предположение о том, что данные, считанные с обрезанного устройства, будут иметь только нули, не выполняется.Вы можете использовать
hdparm
для проверки этого:Я провел несколько тестов, используя два SSD,
sda
иsdb
. Один и тот же производитель, разные модели, с разным соответствием ATA:Два SSD имеют разную поддержку TRIM:
Я могу подтвердить, что после выдачи
fstrim
диск, поддерживающий «детерминированные нули чтения после TRIM» (RZAT), фактически обнажил соответствующий раздел почти полностью. И наоборот, другой диск, кажется, обнулел (или иным образом заменен каким-либо сильно сжимаемым рисунком) только незначительную часть освобожденного пространства.1 Онлайн источник: INCITS 529: Информационные технологии - Набор команд ATA / ATAPI - 4 (ACS-4)
Примечание по тестированию:
Как указывает frostschutz в комментариях, чтение после
fstrim
может возвращать данные из кэша операционной системы, а не из урезанного устройства. Это, например, то, что произошло в этой кастрации .(Я бы также указал на этот ответ на тот же вопрос для альтернативного метода тестирования TRIM).
Между
fstrim
и последующим чтением вам может понадобиться удалить кеш, например, с помощью:В зависимости от размера раздела, с которым вы играете, может не хватить сброса кэша, чтобы ваши тесты не сработали.
Примечание по вашей настройке:
Опция
discard
монтирования включает непрерывную TRIM, то есть в любое время файлы удаляются. Это не требуетсяfstrim
. Действительно, TRIM по требованию и непрерывный TRIM - это два разных способа управления операциями TRIM. Для получения дополнительной информации я бы указал на твердотельный накопитель на Arch Linux Wiki, в котором подробно рассматривается этот вопрос.источник
Имеет ли SSD встроенный аппаратный уровень шифрования? Если он есть, блоки TRIMmed могут иметь все нули (или, возможно, все единицы) на уровне аппаратного обеспечения, но, поскольку компьютер видит их через уровень шифрования, они будут отображаться как псевдослучайная тарабарщина после прохождения всех Обнуление сырого блока в процессе дешифрования.
Такой уровень аппаратного шифрования будет иметь некоторые преимущества:
источник
Сброс не совпадает с нулем.
Если вы хотите обнулить с помощью cryptsetup, вы можете уменьшить fs, затем блок crypt и затем использовать неиспользуемое пространство тома.
Если вы хотите знать, работал ли триммер, выполнение теста скорости должно быть показателем после интенсивного использования.
https://linux.die.net/man/8/fstrim https://en.m.wikipedia.org/wiki/Trim_(computing)
источник
df
Сообщение о свободном пространстве не означает обнуление пространства.trim
сообщает устройству хранения, что блоки не используются. Я не думаю, что это обнуляет их.источник