Прозора файлова система стиснення в поєднанні з 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. Чи є рішення, щоб компресія була прозорою до квот?


Звичайно. Чи можете ви перелічити OS / distro / версію та детальну інформацію про характер даних, які ви збираєтесь зберігати?
ewwhite

Також деталі апаратних засобів.
ewwhite

1
@ewwhite 8x3TB в програмному RAID6. Дані будуть синхронізованими резервними копіями з інших серверів, тому змішані типи даних та різні кінцеві користувачі, документи тощо 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 ГБ корисного дискового простору, але я представляю XFS об'ємом 800 Гб.

zfs create -o volblocksize=128K -s -V 800G vol0/pprovol

Пристрій zvol розділу:
( повинен бути / dev / zd0 для першого zvol; / dev / zd16, / dev / zd32 тощо для наступних звуків )

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

Навіщо розділити zvol? Не можна просто використовувати його безпосередньо?
Майкл Хемптон

3
@MichaelHampton Головним чином для вирівнювання та послідовності. Також я хочу гнучкості, якщо розширюватимуть основний обсяг. Тут є кілька шарів абстракції. Це схоже на аргумент використання /dev/sdbversus /dev/sdb1.
ewwhite

1
Дякуємо за інформацію! Тут багато хороших порад. Я збираюся це перевірити.
user235918

2
@MichaelHampton BTW, в наші дні я більше не розбиваюся ... особливо з віртуальними машинами.
ewwhite

1
Чи можете ви, будь ласка, розповісти про додаткові витрати на ресурси для шару ZFS у цій установці (оперативна пам'ять, процесор)?
Sz.

4

Вам також потрібно ввімкнути скасування у файловій системі ext4. Без відкидання, zfs не повертає простір під час видалення файлів. Це може призвести до великих розбіжностей між тим, про що повідомляє файлова система ext4, і звітами про обсяг zfs.


4
Red Hat не рекомендує робити це в Інтернеті за допомогою параметра кріплення відкидання (з ext4 або xfs), оскільки це впливає на продуктивність. Чистіше періодично запускати fstrimкоманду.
ewwhite

wrt коментар про кріплення для скидання, що впливають на продуктивність: Це стосується старих, низькоякісних SSD. Це не так з новими.
Stoat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.