我正在尝试使用ext4文件系统来testing需要压缩存储的项目,因为我使用的应用程序依赖于ext4function。
有什么生产/稳定的解决scheme在那里透明压缩ext4?
我曾经尝试过:
启用压缩的ZFS卷上的Ext4 。 这实际上有一个不利的影响。 我试图创build一个启用了lz4压缩的ZFS卷,并在/ dev / zvol /上创build了一个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创build命令
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:是否可以使用Lessf与ext4结合使用? 我还没有尝试,但会对用户洞察感兴趣。
一个主要问题:不是真正的透明度
我用fusecompress看到的一个问题是配额。 例如,如果我在文件系统上启用了压缩,我希望我的系统从压缩中受益,而不一定是最终用户。 如果我为用户启用了一个1GB的配额,压缩比为1.5,则他们将能够上传1.5GB的数据,而不是1GB的数据,系统将从压缩中受益。 这也出现在df -h上。 有没有一种解决scheme使压缩对配额透明?
我在Linux上使用ZFS作为卷pipe理器,并为传统文件系统提供额外的保护和function。 这包括将块级快照,复制,重复数据删除,压缩和高级caching引入XFS或ext4文件系统。
有关另一种解释,请参阅: https : //pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ 。
在我最常见的用例中,我利用ZFS zvolfunction在现有zpool上创build稀疏卷。 zvol的属性可以像普通的ZFS文件系统一样设置。 在这个时候,你可以设置压缩types,卷大小,caching方法等属性。
创build这个zvol将一个块设备提供给Linux,可以使用您select的文件系统进行格式化。 使用fdisk
或parted
来创build你的分区和mkfs
成品卷。
安装这个,你基本上有一个由zvol支持的文件系统和所有的属性。
这是我的工作stream程
创build一个包含四个磁盘的zpool:
你需要为你正在使用的磁盘types指定ashift=12
指令。 在这种情况下,zpool名称是“vol0”。
zpool创build-o ashift = 12 -f vol0镜像scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042镜像scsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044
设置初始zpool设置:
我在zpool级别设置了autoexpand=on
,以防我用更大的驱动器replace磁盘,或者在ZFS镜像设置中扩展池。 我通常不使用ZFS raidz1 / 2/3,因为性能较差,无法扩展zpool。
zpool set autoexpand=on vol0
设置初始zfs文件系统属性:
请为新的ZFS安装使用lz4
压缩algorithm 。 可以随时离开。
zfs set compression=lz4 vol0 zfs set atime=off vol0
创buildZFS zvol:
对于Linux上的ZFS,使用大块大小非常重要。 -o volblocksize=128k
在这里是绝对必要的。 -s
选项创build一个稀疏的zvol,在需要之前不消耗池空间。 如果你很了解你的数据,你可以在这里过度使用。 在这种情况下,池中有大约444GB的可用磁盘空间,但是我向XFS提供了800GB的容量。
zfs create -o volblocksize=128K -s -V 800G vol0/pprovol
分区zvol设备:
( 对于第一个zvol,应该是/ dev / zd0;对于后续的zvols,应该是/ dev / zd16,/ dev / zd32等 )
fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)
创build并挂载文件系统:
在新创build的分区/ dev / zd0p1上使用mkfs.xfs或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/
结果…
[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卷报告之间的空间差异较大。