use*_*918 29 linux zfs filesystems compression ext4
我正在尝试使用 ext4 文件系统测试需要压缩存储的项目,因为我使用的应用程序依赖于 ext4 功能。
是否有任何用于在 ext4 上进行透明压缩的生产/稳定解决方案?
我尝试过的:
启用压缩的ZFS 卷上的Ext4。这实际上产生了不利影响。我尝试创建一个启用 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** -
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Fusecompress: 似乎可以工作,但不是 100% 稳定。寻找替代品。
LessFS: 是否可以将 Lessfs 与 ext4 结合使用?我还没有尝试过,但会对用户洞察感兴趣。
一个主要问题:不是真正的透明度
An issue I saw with fusecompress was quotas. For example, if I enabled compression on the filesystem, I would want my system to benefit from the compression, not necessarily the end user. If I enabled a quota of 1GB for a user, with a compression ratio of 1.5, they would be able to upload 1.5GB of data, rather than 1GB of data and the system benefiting from the compression. This also appeared to show on df -h. Is there a solution to have compression transparent to quotas?
eww*_*ite 31
我在 Linux 上使用ZFS作为卷管理器和一种为传统文件系统提供额外保护和功能的方法。这包括将块级快照、复制、重复数据删除、压缩和高级缓存引入 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 mirror scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042 mirror scsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044
设置初始 zpool 设置:
我autoexpand=on
在 zpool 级别进行设置,以防我用更大的驱动器替换磁盘或在ZFS 镜像设置中扩展池。由于性能不佳且无法扩展 zpool,我通常不使用 ZFS raidz1/2/3。
zpool set autoexpand=on vol0
Run Code Online (Sandbox Code Playgroud)
设置初始 zfs 文件系统属性:
请为新的 ZFS 安装使用lz4
压缩算法。一直开着也没关系。
zfs set compression=lz4 vol0
zfs set atime=off vol0
Run Code Online (Sandbox Code Playgroud)
创建 ZFS zvol:
对于 Linux 上的 ZFS,使用大块大小非常重要。-o volblocksize=128k
在这里绝对是必不可少的。该-s
选项会创建一个稀疏的 zvol,并且在需要之前不会消耗池空间。如果您非常了解您的数据,您可以在这里过度使用。在这种情况下,池中有大约 444GB 的可用磁盘空间,但我向 XFS 提供了 800GB 的卷。
zfs create -o volblocksize=128K -s -V 800G vol0/pprovol
Run Code Online (Sandbox Code Playgroud)
分区zvol设备:
(应该是/ dev / ZD0用于第一zvol;的/ dev / zd16,的/ dev / zd32等用于后续zvols)
fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)
Run Code Online (Sandbox Code Playgroud)
在新创建的分区 /dev/zd0p1 上创建并挂载文件系统: mkfs.xfs 或 ext4。
mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1
Run Code Online (Sandbox Code Playgroud)
获取 UUIDblkid
并修改/etc/fstab
.
UUID=455cae52-89e0-4fb3-a896-8f597a1ea402 /ppro xfs noatime,logbufs=8,logbsize=256k 1 2
Run Code Online (Sandbox Code Playgroud)
挂载新的文件系统。
mount /ppro/
Run Code Online (Sandbox Code Playgroud)
结果...
[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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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 - - - -
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)