ZFS简介
【摘要】 本文简单介绍ZFS卷管理在Linux的使用。梳理基本概念,剖析适用场景,并给出 一些实际操作的例子。
基本概念
ZFS有三个概念:
1. Z池 - zpool
2. Z集 - dataset
3. Z卷 - volume
Z池
zpool create local /dev/sdb /dev/sdc /dev/sdd /dev/sde
这就创建了一个名叫local的Z池。
Z池有如下类型:
类型 | 描述 | 创建命令 |
Single | 单磁盘,快,但一旦有盘损坏数据全丢 | zpool create local /dev/sdb |
Mirror | 镜像 | zpool create local mirror /dev/sdb /dev/sdc |
RaidZ1 | 相当RAID 3, 可丢1块盘 | zpool create local raidz1 /dev/sdb /dev/sdc |
RaidZ2 | 相当RAID 5, 可丢2块盘 | zpool create local raidz2 /dev/sdb /dev/sdc /dev/sdd |
RaidZ3 | 相当RAID 7, 可丢3块盘 | zpool create local raidz3 /dev/sdb /dev/sdc /dev/sdd /dev/sde |
Z集
当一个Z池创建出来,附带有一个同名的Z集也创建出来了:
zfs list #=> NAME USED AVAIL REFER MOUNTPOINT local 7.86G 185G 24K /local
注意这个Z集挂载在/local, 这个目录可以做一个正常的目录来用。
可以在Z集上创建新的Z集:
zfs create local/data zfs list #=> NAME USED AVAIL REFER MOUNTPOINT local 7.86G 185G 24K /local local/data 24K 185 24K /local/data
Z卷
创建Z卷:
zfs create -V 10G local/vda
Z卷是一个块设备,可以按需要分区,格式化:
mkfs.xfs /dev/zvol/local/vda
冗余删除
zfs有两个杀手级的特性: 1. 重复数据删除, 2. 实时压缩。
默认这两个特性是关闭的,可以这样打开:
zfs set dedup=on local zfs set compress=lz4 local
注意这是在最顶层local打开的,最顶层打开子Z集或Z卷自动继承。也可以对 某个子Z集或Z卷打开。
下面做一些测试。
生成1G随机文件:
cd /local/data dd if=/dev/urandom of=data.1g count=1024 bs=1M 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.42638 s, 198 MB/s
拷贝1000份:
for ((i=0; i<1000; i++)); do cp data.1g $i.data.1g done
简单算一下,这么得有1000G的数据,而Z池local也就200G的容量。不开启 dedup是装不下的。列一下:
zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT local 199G 955M 198G - 2% 1% 910.78x ONLINE -
可以看到DEDUP有910多倍。
注意这个DEDUP是跨Z集和Z卷的。现拷贝10个文件到Z卷:
mount /dev/zvol/local/vda /mnt cp -v [0-9].data.1g /mnt
用zpool list查看使用情况几乎没有涨。而du显示:
du -hs /local/data #=> 789G /local/data/ du -hs /mnt #=> 7.9G /mnt
因此zfs很适合放虚机或者容器镜像,因为这些镜像里大部分文件都是重复的。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)