我正在尝试使用ext4文件系统测试需要压缩存储的项目,因为我使用的应用程序依赖于ext4功能。
是否有用于ext4上透明压缩的生产/稳定解决方案?
我尝试过的:
Ext4 over ZFS卷启用了压缩。这实际上产生了不利影响。我尝试创建启用了lz4压缩的ZFS卷,并在/ dev/zvol /上制作了一个ext4文件系统,但是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中看到的一个问题是配额。例如,如果我在文件系统上启用了压缩功能,那么我希望系统受益于压缩功能,而不必是最终用户。如果我为用户启用了1GB的配额(压缩率为1.5),那么他们将能够上传1.5GB的数据,而不是1GB的数据,系统将从压缩中受益。这似乎也显示在df -h上。是否有解决方案使压缩对配额透明?
我使用 Linux上的ZFS 作为卷管理器,并为传统文件系统提供其他保护和功能。这包括将块级快照,复制,重复数据删除,压缩和 高级缓存 引入XFS或ext4文件系统。
请参阅: https://pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ 了解其他说明。
在我最常见的用例中,我利用ZFS zvol功能在现有zpool上创建稀疏卷。可以像普通ZFS文件系统一样设置zvol的属性。此时,您可以设置诸如压缩类型,卷大小,缓存方法等属性。
创建此zvol将向Linux提供一个块设备,可以使用您选择的文件系统对其进行格式化。使用fdisk
或parted
创建分区,并使用mkfs
完成卷。
挂载此文件,您实际上就拥有了一个由zvol及其所有属性支持的文件系统。
这是我的工作流程...
创建一个包含四个磁盘的zpool:
您需要使用ashift=12
指令来表示要使用的磁盘类型。在这种情况下,zpool名称为“ vol0”。
zpool创建-o ashift = 12 -f vol0镜像scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042镜像scsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044
设置初始zpool设置:
我在zpool级别设置autoexpand=on
,以防万一我用更大的驱动器替换磁盘或以ZFS mirrors设置扩展池。由于性能不佳以及无法扩展zpool,我通常不使用ZFS raidz1/2/3。
zpool set autoexpand=on vol0
设置初始zfs文件系统属性:
对于新安装的ZFS,请使用 lz4
压缩算法 。可以一直将其保留。
zfs set compression=lz4 vol0
zfs set atime=off vol0
创建ZFS zvol:
对于Linux上的ZFS,使用较大的块大小非常重要。 -o volblocksize=128k
在这里绝对必要。 -s
选项创建一个稀疏的zvol,并且直到需要时才消耗池空间。如果您非常了解自己的数据,则可以在此处过量使用。在这种情况下,池中大约有444GB的可用磁盘空间,但是我向XFS提供了800GB的卷。
zfs create -o volblocksize=128K -s -V 800G vol0/pprovol
分区zvol设备:
(对于第一个zvol,应为/ dev/zd0;对于后续的zvol,应为/ dev/zd16,/ dev/zd32等)
fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)
创建并挂载文件系统:
mkfs.xfs或新创建的分区/ dev/zd0p1上的ext4。
mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1
用blkid
抓取UUID并修改/etc/fstab
。
UUID=455cae52-89e0-4fb3-a896-8f597a1ea402 /ppro xfs noatime,logbufs=8,logbsize=256k 1 2
挂载新文件系统。
mount /ppro/
结果...
[[email protected] ~]# 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文件系统列表。
[[email protected] ~]# 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列表。
[[email protected] ~]# 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
)。
[[email protected] ~]# 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卷报告之间存在很大的空间差异。