Будет ли btrfs автоматически сжимать существующие файлы, когда сжатие включено?

26

Я выбрал btrfs в качестве формата моей /файловой системы в установщике Ubuntu 12.04 LTS. После завершения установки я добавил compress=lzoопции монтирования /etc/fstabи перезагрузил.

Будут ли существующие файлы автоматически сжиматься или я должен явно что-то сделать, чтобы это произошло?

ændrük
источник
1
Вам не нужно перезагружаться, вы можете просто sudo mount -o remount /и новые опции fstab вступят в силу.
Sep332
Обратите внимание, что вам может понадобиться использовать параметр сжимать-принудительно, иначе некоторые файлы останутся без сжатия, независимо от того, что вы делаете ...
rogerdpack
Примечание относительно силы сжатия. У обычного сжатия есть особенность, заключающаяся в том, что, если он обнаруживает, что сжатие мало что дает или не приносит пользы, он не мешает продолжать сжатие для этого конкретного файла (тем самым экономя впустую ЦП). Используя силу сжатия, он все равно пытается бесполезное сжатие. Хорошие примеры, где это применимо, для файлов, которые уже сжаты (мультимедиа, zip-файлы и т. Д.). Другими словами, сила сжатия, как правило, плохая идея. ;)
zaTricky

Ответы:

27

Вам нужно будет запустить btrfs fi defragmentпринудительное повторное сжатие существующих данных. В противном случае будут сжаты только новые данные.

Из FAQ :

... подумайте о перемонтировании с помощью -o compressи либо переписайте определенные файлы на месте, либо запустите btrfs fi defragmentдля повторного сжатия всего. Это может занять некоторое время.

Норберт Фабрициус
источник
btrfs fi дефрагментация -r -clzo / path / to / fs
Дэвид Гудвин
2
Как насчет autodefragопции монтирования? Делает ли это также сжатие ранее несжатых файлов при автоматической дефрагментации?
Геремия,
1
Убедитесь, что вы используете «-r» рекурсивный флаг для сжатия в каталогах.
салями
10

Я сделал то, что сказал Норберт Фабрициус, но я не заметил какого-либо сжатия в существующих файлах - df -h / before btrfs fi defragment = 658MB | df -h / после дефрагментации btrfs fi = 658 МБ. Новые файлы в порядке. В поисках немного принеси мне эту цитату:

Запуск этого:

# btrfs filesystem defragment ~/stuff

не дефрагментирует содержимое каталога.

Это по замыслу. btrfs fi defrag работает с единственным объектом файловой системы, переданным ему. Это означает, что команда дефрагментирует только метаданные, содержащиеся в каталоге> объект, а не содержимое каталога. Если вы хотите дефрагментировать содержимое каталога, вам может пригодиться что-то вроде этого:

# find -xdev -type f -exec btrfs fi defrag '{}' \;

После этого мой / это занимает 656 МБ - ничего огромного, но, конечно, есть сжатие.

Источник: https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work

Надеюсь, это поможет.

Извините мой английский.

Дж. Нето
источник
1
1. При использовании btrfs не используйте и не доверяйте df . 2. Для лучшей степени сжатия используйте zlib (однако, он медленнее)
ignis
3
Разве ваша командная строка не должна включать defrag -clzoили defrag -czlibвместо просто defrag, если вы хотите на самом деле сжать вещи?
jbo5112
5
Есть рекурсивный флаг "-r", так что вы можете просто сделать это сейчас:btrfs fi defrag -r -czlib ~/stuff
Салями
8

Согласно документации Oracle, вы можете сжать существующие файлы в существующей сетевой файловой системе, дефрагментируя каждый файл в ней с помощью параметров -c, -clzo или -czlib. LZO рекомендуется для скорости.

find / -xdev \( -type f -o -type d \) -exec btrfs filesystem defragment -v -clzo -- {} +

При этом используется команда find для запуска дефрагментатора btrfs для каждого файла в корневой файловой системе (задается косой чертой сразу после команды «find» в начале). Если у вас есть другие подчиненные тома, вы можете использовать его снова с путем к вложенному объему (например, у меня есть в / home) вместо одиночного слеша.

Для этого вам понадобятся привилегии суперпользователя, поэтому добавьте sudo на первый план, если вам это нужно.

Видеть:

Geoff
источник
3

Согласно https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options доступны следующие алгоритмы сжатия:


compress,compress-force
Enable compression. Starting with kernel 2.6.38 you can choose the algorithm for compression:

 - compress=zlib - Better compression ratio. It's the default and safe for olders kernels.
 - compress=lzo - Faster compression.
 - compress=no - Disables compression (starting with kernel 3.6). 

compress-force= - Enable compression even for files that don't compress well, like videos and dd images of disks. The options compress-force=zlib and compress-force=lzo works for kernels >2.6.38.

Note that old (before 2012) btrfs-progs versions will probably fail some operations (e.g. fsck) on filesystems with LZO compression. 

Примечание: этот пост является ответом на дополнительный вопрос о том, какой тип алгоритмов сжатия доступен, который был задан ниже ... поэтому, пожалуйста, не вините меня.

Ростислав Стрибрный
источник
2

Согласно ArchWiki :

Совет: Сжатие также можно включить для каждого файла без использования compressопции монтирования; просто примените chattr +cк файлу. При применении к каталогам новые файлы будут автоматически сжиматься по мере их поступления.

Очень хорошо! Боже, благослови БТРФС!

Также из вики BTRFS :

Можно ли принудительно сжимать файл, не используя параметр монтирования сжатия ?

Да. Утилита chattrподдерживает настройку атрибута файла c, который отмечает индекс для сжатия вновь записанных данных.

Geremia
источник
-9

Сжатие по умолчанию включено в Btrfs, поэтому, если вы явно не отключили его, оно должно быть сжато.

Диего
источник
11
Не правда, вы должны передать compression=«ваш любимый алгоритм сжатия» в fstab, чтобы включить его.
турбо
@turbo Какие алгоритмы сжатия доступны?
Восстановить Монику - ζ--
Похоже, что в настоящее время разрешено 2 сжатия (ну, 3, если считать «нет»): btrfs.wiki.kernel.org/index.php/…
rogerdpack