Файловая система Btrfs поддерживает сжатие данных на уровне файловой системы. Это означает, что данные файловой системы будут автоматически сжиматься по мере записи новых данных в файловую систему. При доступе к файлам, хранящимся в файловой системе Btrfs, данные этих файлов будут автоматически распакованы.
Эта функция файловой системы сэкономит вам много места на диске и сэкономит много времени, которое вы бы потратили на сжатие файлов вручную.
В этой статье мы собираемся показать вам, как включить сжатие на уровне файловой системы Btrfs в файловой системе Btrfs. Итак, приступим.
Чтобы попробовать примеры из этой статьи:
У нас есть sdb жесткого диска на 20 ГБ на машине Ubuntu. Мы создали на этом жестком диске 2 раздела sdb1 и sdb2 . В этой статье мы будем использовать раздел sdb1.
$ sudo lsblk -e7
Ваш жесткий диск или SSD может иметь другое имя, чем наше, как и разделы. Так что не забудьте заменить их теперь своими.
На момент написания этой статьи файловая система Btrfs поддерживает следующие алгоритмы сжатия:
i) LZO: LZO – это алгоритм сжатия блоков в реальном времени без потерь. LZO делит данные на блоки и сжимает/распаковывает данные по блокам в реальном времени. Это алгоритм сжатия по умолчанию файловой системы Btrfs.
ii) ZLIB: ZLIB – это библиотека, используемая для сжатия данных. Он использует алгоритм сжатия данных DEFLATE. Алгоритм сжатия данных DEFLATE представляет собой комбинацию алгоритмов кодирования LZ77 и Хаффмана. Файловая система Btrfs поддерживает алгоритм сжатия данных ZLIB.
Вы также можете указать желаемый уровень сжатия. Уровень может быть любым числом от 1 до 9. Более высокий уровень указывает на более высокую степень сжатия. Таким образом, уровень 9 сэкономит больше дискового пространства, чем уровень 1 (уровень 9 имеет более высокую степень сжатия, чем уровень 1). Если вы не укажете используемый уровень сжатия ZLIB, файловая система Btrfs по умолчанию будет использовать уровень сжатия 3 ZLIB.
ZSTD: ZSTD или Zstandard – это высокопроизводительный алгоритм сжатия данных без потерь. Он был разработан в Facebook Yann Collect. Его степень сжатия сопоставима с алгоритмом DEFLATE, который используется в ZLIB, но он быстрее. Файловая система Btrfs поддерживает алгоритм сжатия данных ZSTD.
Вы также можете указать желаемый уровень сжатия. Уровень может быть любым числом от 1 до 15. Более высокий уровень указывает на более высокую степень сжатия. Таким образом, уровень 15 сэкономит больше дискового пространства, чем уровень 1 (уровень 15 имеет более высокую степень сжатия, чем уровень 1). Если вы не укажете используемый уровень сжатия ZSTD, файловая система Btrfs по умолчанию будет использовать уровень сжатия 3 ZSTD.
Чтобы поэкспериментировать со сжатием данных на уровне файловой системы Btrfs, вам необходимо создать файловую систему Btrfs.
Чтобы создать файловую систему Btrfs с данными метки в разделе sdb1, выполните следующую команду:
$ sudo mkfs.btrfs -L data /dev/sdb1
Чтобы включить сжатие на уровне файловой системы Btrfs, вы должны смонтировать файловую систему Btrfs, которую вы создали, на раздел sdb1 с помощью опции монтирования compress или compress-force.
1) опция монтирования compress: опция монтирования compress будет просто включить Btrfs сжатия файловой системы на уровне. Файловая система Btrfs определяет, увеличивает ли сжатие файл, подлежащий сжатию, размер исходного (несжатого) файла. Если сжатие увеличивает размер файла по сравнению с исходным, файловая система Btrfs не сжимает этот файл.
2) опция монтирования compress-force: в отличие от параметра монтирования с сжатием, если файловая система Btrfs монтируется с использованием параметра монтирования с принудительным сжатием, то каждый файл в файловой системе Btrfs будет сжат, даже если сжатие увеличивает размер файла.
Создайте каталог /data с помощью следующей команды:
$ sudo mkdir -v /data
Чтобы включить сжатие LZO, смонтируйте файловую систему Btrfs, которую вы создали ранее, в каталог /data с помощью следующей команды:
$ sudo mount -o compress=lzo /dev/sdb1 /data
Чтобы включить принудительное сжатие LZO, смонтируйте файловую систему Btrfs, созданную вами ранее, в каталог /data следующим образом:
$ sudo mount -o compress-force=lzo /dev/sdb1 /data
Таким же образом вы можете смонтировать файловую систему Btrfs в каталоге /data следующим образом, чтобы включить сжатие ZLIB:
$ sudo mount -o compress=zlib /dev/sdb1 /data
Чтобы установить уровень сжатия ZLIB (скажем, уровень 7), вы можете смонтировать файловую систему Btrfs в каталоге /data следующим образом:
Чтобы включить сжатие ZSTD, смонтируйте файловую систему Btrfs в каталоге /data следующим образом:
$ sudo mount -o compress=zstd /dev/sdb1 /data
Чтобы установить уровень сжатия ZSTD (скажем, уровень 10), вы можете смонтировать файловую систему Btrfs в каталоге /data следующим образом:
$ sudo mount -o compress=zstd:10 /dev/sdb1 /data
Файловая система Btrfs, которую вы создали в разделе sdb1, должна быть смонтирована в каталоге /data.
$ df -h /data
Чтобы проверить, сжимает ли файловая система Btrfs файлы, находящиеся в файловой системе Btrfs, мы смонтируем файловую систему Btrfs в каталог /data с параметром compress-force. Для демонстрации мы будем использовать самый высокий уровень сжатия алгоритма сжатия ZSTD.
Сначала размонтируйте файловую систему Btrfs, которую вы могли смонтировать в каталоге /data, следующим образом:
$ sudo umount /data
Смонтируйте файловую систему Btrfs с наивысшим уровнем сжатия (уровень 15 ) алгоритма сжатия ZSTD в каталог /data следующим образом:
$ sudo mount -o compress-force=zstd:15 /dev/sdb1 /data
Мы скопировали около 717 МБ данных в файловую систему Btrfs, смонтированную в каталоге /data. Как видите, в файловой системе Btrfs используется только 661 МБ дискового пространства, хотя размер данных, хранящихся в файловой системе, составляет 717 МБ. Итак, сжатие на уровне файловой системы Btrfs работает.
Если вы хотите автоматически монтировать файловую систему Btrfs во время загрузки с включенным сжатием (что вы, скорее всего, делаете), то этот раздел для вас.
Сначала найдите UUID файловой системы Btrfs, которую вы хотите включить сжатие и автоматически монтировать во время загрузки:
$ sudo btrfs filesystem show /data
Как видите, UUID файловой системы Btrfs равен a8e75a9d-a6f6-4c6e-be41-c10bc1077aa2 в нашем случае. Для вас все будет иначе. Так что не забудьте заменить его теперь своим.
Откройте файл /etc/fstab в текстовом редакторе nano следующим образом:
$ sudo nano /etc/fstab
Введите следующую строку в конце файла /etc/fstab :
UUID=a8e75a9d-a6f6-4c6e-be41-c10bc1077aa2 /data btrfs compress=lzo 0 0
Когда вы закончите, нажмите <Ctrl> + X, затем Y и <Enter>, чтобы сохранить файл /etc/fstab.
Чтобы изменения вступили в силу, перезагрузите компьютер с помощью следующей команды:
$ sudo reboot
После загрузки компьютера файловая система Btrfs должна быть смонтирована в каталоге /data.
$ df -h /data
В этой статье мы обсудили алгоритмы сжатия, поддерживаемые файловой системой Btrfs: LZO, ZLIB и ZSTD. Мы также показали вам, как включить сжатие на уровне файловой системы в файловой системе Btrfs.