我将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设置:
如果我用更大的驱动器替换磁盘或在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性质(注意到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