Прозрачная файловая система сжатия в сочетании с ext4
Я пытаюсь протестировать проект, которому требуется сжатое хранилище, с использованием файловой системы ext4, поскольку приложение, которое я использую, использует функции ext4.
Существуют ли какие-либо производственные / стабильные решения для прозрачного сжатия на ext4?
Что я пробовал:
Ext4 поверх тома ZFS с включенным сжатием. Это на самом деле оказало негативное влияние. Я попытался создать том ZFS с включенным сжатием lz4 и создать файловую систему ext4 в /dev/zvol/..., но том zfs показал удвоенное фактическое использование, и сжатие, похоже, не оказало никакого влияния.
# du -hs /mnt/test
**1.1T** /mnt/test
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool 15.2T 2.70G 290K /pool
pool/test 15.2T 13.1T **2.14T** -
Команды создания ZFS
zpool create pool raidz2 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde2 /dev/sdf1 /dev/sdg1 /dev/sdh2 /dev/sdi1
zfs set recordsize=128k pool
zfs create -p -V15100GB pool/test
zfs set compression=lz4 pool/test
mkfs.ext4 -m1 -O 64bit,has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink /dev/zvol/pool/test
Fusecompress: Кажется, работает, но не на 100% стабильно. Ищем альтернативы.
LessFS: возможно ли использовать Lessfs вместе с ext4? Я еще не пробовал, но был бы заинтересован в понимании пользователей.
Одна главная проблема: не настоящая прозрачность
Проблема, с которой я столкнулся в fusecompress - это квоты. Например, если бы я включил сжатие в файловой системе, я бы хотел, чтобы моя система получала выгоду от сжатия, а не обязательно от конечного пользователя. Если бы я включил квоту в 1 ГБ для пользователя с коэффициентом сжатия 1,5, он мог бы загружать 1,5 ГБ данных вместо 1 ГБ данных, и система получала выгоду от сжатия. Это также появилось, чтобы показать на df -h. Есть ли решение сделать сжатие прозрачным для квот?
2 ответа
Я использую ZFS в Linux в качестве менеджера томов и средства для обеспечения дополнительной защиты и функциональности для традиционных файловых систем. Это включает создание моментальных снимков на уровне блоков, репликацию, дедупликацию, сжатие и расширенное кэширование в файловых системах XFS или ext4.
Смотрите: https://pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ для другого объяснения.
В моем наиболее распространенном случае использования я использую функцию ZFS zvol для создания разреженного тома в существующем zpool. Свойства этого zvol могут быть установлены как обычная файловая система ZFS. На этом этапе вы можете установить такие свойства, как тип сжатия, размер тома, метод кэширования и т. Д.
Создание этого zvol представляет собой блочное устройство для Linux, которое может быть отформатировано в выбранной вами файловой системе. использование fdisk
или же parted
создать свой раздел и mkfs
законченный объем.
Смонтируйте это, и у вас по существу будет файловая система, поддерживаемая zvol и со всеми ее свойствами.
Вот мой рабочий процесс...
Создайте zpool, состоящий из четырех дисков:
Вы будете хотеть ashift=12
директива для типа дисков, которые вы используете. В этом случае имя zpool - "vol0".
zpool create -o ashift = 12 -f vol0 зеркало scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042 зеркало scsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044
Установите начальные настройки zpool:
Я поставил autoexpand=on
на уровне zpool на случай, если я когда-нибудь заменю диски на диски большего размера или увеличу пул в настройке зеркал ZFS. Обычно я не использую ZFS raidz1/2/3 из-за низкой производительности и невозможности расширения zpool.
zpool set autoexpand=on vol0
Установите начальные свойства файловой системы zfs:
Пожалуйста, используйте lz4
алгоритм сжатия для новых установок ZFS. Можно оставить все время включенным.
zfs set compression=lz4 vol0
zfs set atime=off vol0
Создайте ZFS zvol:
Для ZFS в Linux очень важно использовать большой размер блока. -o volblocksize=128k
здесь абсолютно необходимо. -s
Опция создает разреженный zvol и не использует пространство пула, пока не понадобится. Вы можете сделать это здесь, если хорошо знаете свои данные. В этом случае у меня есть около 444 ГБ доступного дискового пространства в пуле, но я представляю том объемом 800 ГБ для XFS.
zfs create -o volblocksize=128K -s -V 800G vol0/pprovol
Устройство перегородки звол:
(должно быть /dev/zd0 для первого zvol; /dev/zd16, /dev/zd32 и т. д. для последующих zvols)
fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)
Создайте и смонтируйте файловую систему:
mkfs.xfs или ext4 во вновь созданном разделе, /dev/zd0p1.
mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1
Возьмите UUID с blkid
и изменить /etc/fstab
,
UUID=455cae52-89e0-4fb3-a896-8f597a1ea402 /ppro xfs noatime,logbufs=8,logbsize=256k 1 2
Смонтируйте новую файловую систему.
mount /ppro/
Результаты...
[root@Testa ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sde2 20G 8.9G 9.9G 48% /
tmpfs 32G 0 32G 0% /dev/shm
/dev/sde1 485M 63M 397M 14% /boot
/dev/sde7 2.0G 68M 1.9G 4% /tmp
/dev/sde3 12G 2.6G 8.7G 24% /usr
/dev/sde6 6.0G 907M 4.8G 16% /var
/dev/zd0p1 800G 398G 403G 50% /ppro <-- Compressed ZFS-backed XFS filesystem.
vol0 110G 256K 110G 1% /vol0
Список файловой системы ZFS.
[root@Testa ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vol0 328G 109G 272K /vol0
vol0/pprovol 326G 109G 186G - <-- The actual zvol providing the backing for XFS.
vol1 183G 817G 136K /vol1
vol1/images 183G 817G 183G /images
ZFS Zpool список.
[root@Testa ~]# zpool list -v
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
vol0 444G 328G 116G 73% 1.00x ONLINE -
mirror 222G 164G 58.1G -
scsi-AccOW140403AS1322043 - - - -
scsi-AccOW140403AS1322042 - - - -
mirror 222G 164G 58.1G -
scsi-AccOW140403AS1322013 - - - -
scsi-AccOW140403AS1322044 - - - -
Свойства ZFS zvol (обратите внимание на referenced
, compressratio
а также volsize
).
[root@Testa ~]# zfs get all vol0/pprovol
NAME PROPERTY VALUE SOURCE
vol0/pprovol type volume -
vol0/pprovol creation Sun May 11 15:27 2014 -
vol0/pprovol used 326G -
vol0/pprovol available 109G -
vol0/pprovol referenced 186G -
vol0/pprovol compressratio 2.99x -
vol0/pprovol reservation none default
vol0/pprovol volsize 800G local
vol0/pprovol volblocksize 128K -
vol0/pprovol checksum on default
vol0/pprovol compression lz4 inherited from vol0
vol0/pprovol readonly off default
vol0/pprovol copies 1 default
vol0/pprovol refreservation none default
vol0/pprovol primarycache all default
vol0/pprovol secondarycache all default
vol0/pprovol usedbysnapshots 140G -
vol0/pprovol usedbydataset 186G -
vol0/pprovol usedbychildren 0 -
vol0/pprovol usedbyrefreservation 0 -
vol0/pprovol logbias latency default
vol0/pprovol dedup off default
vol0/pprovol mlslabel none default
vol0/pprovol sync standard default
vol0/pprovol refcompressratio 3.32x -
vol0/pprovol written 210M -
vol0/pprovol snapdev hidden default
Вам также необходимо включить сброс в файловой системе ext4. Без сброса zfs не освобождает место при удалении файлов. Это может привести к большим несоответствиям между данными файловой системы ext4 и отчетами о томах zfs.