透明压缩文件系统与ext4结合使用


26

我正在尝试使用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**  -

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上。是否有解决方案使压缩对配额透明?


当然。您能否列出操作系统/发行版/版本以及要存储的数据性质的详细信息?
ewwhite

还有硬件细节。
ewwhite

1
软件RAID6中的@ewwhite 8x3TB。数据将是来自其他服务器的同步备份,因此混合了数据类型以及各种最终用户,文档等。CentOS 6.5 x64。
2014年

您确定需要这个吗?您有很多大而稀疏的文件吗?这些天磁盘空间很便宜。
安德鲁·舒尔曼

@AndrewSchulman:从我的计算来看,利用压缩是更好的方法。支持额外磁盘和控制器的磁盘的成本高于CPU的成本。
user235918 2014年

Answers:


27

我将Linux上的ZFS用作卷管理器,并为传统文件系统提供其他保护和功能。这包括将块级快照,复制,重复数据删除,压缩和高级缓存引入XFS或ext4文件系统。

有关其他说明,请参见:https//pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/

在我最常见的用例中,我利用ZFS zvol功能在现有zpool上创建稀疏卷。可以像普通ZFS文件系统一样设置zvol的属性。此时,您可以设置诸如压缩类型,卷大小,缓存方法等属性。

创建此zvol将向Linux提供一个块设备,可以使用您选择的文件系统对其进行格式化。使用fdiskparted创建分区和mkfs完成的卷。

挂载此文件,您实际上就拥有了一个由zvol及其所有属性支持的文件系统。


这是我的工作流程...

创建一个由四个磁盘组成的zpool:
您将需要使用ashift=12指令来指定要使用的磁盘类型。在这种情况下,zpool名称为“ vol0”。

zpool创建-o ashift = 12 -f vol0镜像scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042镜像scsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044

设置初始zpool设置: 如果我用更大的驱动器替换磁盘或在ZFS镜像设置中扩展池,
则将其设置autoexpand=on为zpool级别。由于性能不佳以及无法扩展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设备:
应该是/ dev / ZD0用于第一zvol;的/ dev / zd16,的/ dev / zd32等用于后续zvols

fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)


在新创建的分区/ 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性质(注意到referencedcompressratiovolsize)。

[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/sdbvs 的论点/dev/sdb1
ewwhite 2014年

1
感谢你的信息。这里有很多好的建议。我要测试一下。
user235918 2014年

2
@MichaelHampton顺便说一句,这些天来,我不再分区了……尤其是在虚拟机上。
ewwhite

1
您能否说明一下此设置中ZFS层的额外资源成本(RAM,CPU)?
Sz。

4

您还需要在ext4文件系统上启用丢弃。如果没有丢弃,则zfs不会在删除文件时回收空间。这最终可能导致ext4文件系统报告和zfs卷报告之间存在很大的空间差异。


4
红帽不建议您使用“丢弃挂载”选项(使用ext4或xfs)在线进行此操作,因为这会影响性能。定期运行fstrim命令比较干净。
ewwhite

关于丢弃挂载会影响性能的评论:旧的,低质量的SSD就是如此。较新的不是这样。
Stoat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.