- если ext4 на 480гб SSD диске, то доступно 440 гигабайт (16к на иноду)
- если ext4 на 480гб SSD диске, то доступно 419 гигабайт (4к на иноду)
- если просто ZFS то 430 гигабайт
- если ext4 на ZVOL - 398 гигабайт (blocksize=4k)
- если ext4 на ZVOL - 417 гигабайт (blocksize=16k)
ext4 на ZVOL нам нужно, потому что сжатие в 1.75-2.5 раза, а дедупликация большинства файлов в 100+ раз. При этом мы привязаны к OpenVZ, которое привязано к ext4.
Все тесты проводятся на 480 гб SSD диске.
# parted /dev/sda unit s p free
Model: ATA INTEL SSDSC2BW48 (scsi)
Disk /dev/sda: 937703088s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 937701375s 937699328s primary
937701376s 937703087s 1712s Free Space
16к на иноду по умолчанию:
mkfs.ext4 -m 0 /dev/sda1 # default -i 16384
# df -h /vz3
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 440G 71M 440G 1% /vz3
А что если сделать 4k на иноду? У нас 65% файлов менее 1 килобайта
mkfs.ext4 -m 0 -i 4096 -b 4096 /dev/sda1
# df -h /vz3
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 420G 71M 419G 1% /vz3
Если не указывать ashift
при создании, то будет ashift=0, означающий auto. И в данном случае это окажется ashift=9:
# zpool create -o vzpool /dev/sda1
# zpool get all vzpool | grep ashift
vzpool ashift 0 default
# zdb | grep ashift
ashift: 9
zpool create -o ashift=9 vzpool /dev/sda1
zfs create -o mountpoint=/vz3 vzpool/private
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vzpool 95K 430G 19K /vzpool
vzpool/private 19K 430G 19K /vz3
zfs destroy vzpool/private
zpool destroy vzpool
Ок, если использовать просто ZFS - у нас 430 гигабайт. Если использовать сразу ext4 - у нас получалось 440 гигабайт.
zpool create -o ashift=12 vzpool /dev/sda1
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vzpool 240K 430G 96K /vzpool
Ничего не поменялось. Ок..
# zfs create -b 4096 -V 430G vzpool/vz3
cannot create 'vzpool/vz3': out of space
...
# zfs create -b 4096 -V 405G vzpool/vz3
cannot create 'vzpool/vz3': out of space
# zfs create -b 4096 -V 404G vzpool/vz3
И как я должен был угадать, что нужно именно 404G? Перебирать вручную каждый раз?
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vzpool 429G 692M 96K /vzpool
vzpool/vz3 429G 430G 64K -
Но как, как из 404 гигабайт получилось 429??? Мистика.
mkfs.ext4 -m 0 /dev/vzpool/vz3
mount /dev/vzpool/vz3 /vz3
# df -h /vz3
Filesystem Size Used Avail Use% Mounted on
/dev/zd0 398G 71M 398G 1% /vz3
398 гигабайт всего? Вместо 440. Печаль.
# zpool create vzpool /dev/sda1
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
vzpool 444G 64K 444G - 0% 0% 1.00x ONLINE -
# zfs create -b 16384 -V 423G vzpool/vz3
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vzpool 430G 474M 19K /vzpool
vzpool/vz3 430G 430G 8K -
mkfs.ext4 -m 0 /dev/vzpool/vz3
mount /dev/vzpool/vz3 /vz3
# df -h /vz3
Filesystem Size Used Avail Use% Mounted on
/dev/zd0 417G 71M 417G 1% /vz3
При volblocksize=16k получаем 417 гигабайт ext4.