Чи автоматично btrfs стискає наявні файли, коли компресія включена?


26

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

Чи будуть автоматично стискатися існуючі файли зараз, чи я повинен явно щось зробити, щоб це сталося?


1
Вам не доведеться перезавантажувати, ви можете просто, sudo mount -o remount /і нові варіанти fstab набудуть чинності.
sep332

Зверніть увагу, що вам може знадобитися скористатися параметром стиснення сили, або деякі файли залишатимуться нестисненими незалежно від того, що ви робите ...
rogerdpack

Примітка щодо сили стиску. Звичайний стиснення має особливість у тому, що якщо він виявить, що стиснення мало користі, воно не турбує продовження стиснення для цього конкретного файлу (тим самим заощаджуючи марний процесор). Використовуючи силу стиснення, вона все-таки намагається марно стиснути. Хороші приклади, коли це стосується файлів, які вже стиснуті (мультимедіа, zip-файли тощо). Іншими словами, сила стиснення, як правило, погана ідея. ;)
zaTricky

Відповіді:


27

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

З FAQ :

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


btrfs fi defragment -r -clzo / path / to / fs
Девід Гудвін

2
Як щодо autodefragваріанту кріплення? Це також змушує його стискати раніше нестиснені файли, коли він автоматично дефрагментує?
Геремія

1
Обов’язково використовуйте "-r" рекурсивний прапор для стиснення в каталогах.
Саламі

10

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

Запуск цього:

# btrfs filesystem defragment ~/stuff

не дефрагментує вміст каталогу.

Це за дизайном. btrfs fi defrag працює на єдиному об'єкті файлової системи, переданому йому>. Це означає, що команда дефрагментує лише метадані, що містяться у каталозі> об'єкт, а не вміст каталогу. Якщо ви хочете дефрагментацію вмісту> каталогу, щось подібне було б кориснішим:

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

Після цього мій / він займає 656MB - нічого величезного, але, безумовно, є стиснення.

Джерело: 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" на початку). Якщо у вас є інші підтомники, ви можете використовувати їх знову з контуром підтомника (у мене він є, наприклад, вдома) замість однієї косої риски.

Для цього вам знадобляться кореневі привілеї, тому додайте sudo на фронт, якщо потрібно.

Побачити:


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, який позначає inode для стиснення нещодавно записаних даних.


-9

Стиснення в Btrfs увімкнено за замовчуванням, тому, якщо ви явно не відключили його, його слід стиснути.


11
Неправда, вам потрібно передати compression="улюблений алгоритм стиснення" у fstab, щоб увімкнути його.
турбо

@turbo Які алгоритми стиснення доступні?
Відновіть Моніку - ζ--

виглядає так, що на даний момент дозволено 2 компресії (ну 3, якщо порахувати "жодне"): btrfs.wiki.kernel.org/index.php/…
rogerdpack
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.