Прозрачная файловая система сжатия в сочетании с ext4

26

Я пытаюсь протестировать проект, которому требуется сжатое хранилище, с использованием файловой системы 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. Есть ли решение сделать сжатие прозрачным для квот?

user235918
источник
Конечно. Можете ли вы перечислить ОС / дистрибутив / версию и подробную информацию о характере данных, которые вы собираетесь хранить?
ewwhite
Также детали оборудования.
ewwhite
1
@ewwhite 8x3TB в программном RAID6. Данные будут rsynced резервные копии с других серверов, поэтому смешанные типы данных и различных конечных пользователей, документов и т. Д. CentOS 6.5 x64.
user235918
Вы уверены, что вам это нужно? У вас есть много больших, редких файлов? Дисковое пространство дешевое в наши дни.
Эндрю Шульман
@AndrewSchulman: Использование преимуществ сжатия - лучший метод из моих расчетов. Стоимость дополнительных дисков и контроллеров, которые их поддерживают, превышает стоимость процессора.
user235918

Ответы:

27

Я использую 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

Устройство разделов zvol:
( должно быть / 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
ewwhite
источник
Почему раздел звол? Разве это не может быть использовано напрямую?
Майкл Хэмптон
3
@MichaelHampton Главным образом для выравнивания и последовательности. Кроме того, я хочу гибкости, если я расширяю основной объем. Здесь есть несколько уровней абстракции. Это похоже на аргумент использования /dev/sdbпротив /dev/sdb1.
ewwhite
1
Спасибо за Вашу информацию. Здесь много полезных советов. Я собираюсь проверить это.
user235918
2
@MichaelHampton Кстати, в наши дни я больше не делаю разделы ... особенно с виртуальными машинами.
ewwhite
1
Расскажите, пожалуйста, о дополнительных затратах ресурсов для слоя ZFS в этой настройке (ОЗУ, ЦП)?
СЗ
4

Вам также необходимо включить сброс в файловой системе ext4. Без сброса zfs не освобождает место при удалении файлов. Это может привести к большим несоответствиям между данными файловой системы ext4 и отчетами о томах zfs.

Девон
источник
4
Red Hat не рекомендует делать это онлайн с опцией монтирования сброса (с ext4 или xfs), так как это влияет на производительность. Чище периодически запускать fstrimкоманду.
ewwhite
В отношении комментария об отказе от креплений, влияющих на производительность: это верно для старых низкокачественных твердотельных накопителей. Это не так с новыми.
Stoat