ZFS简介

网友投稿 960 2022-05-28

基本概念

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池有如下类型:

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  -

ZFS简介

可以看到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很适合放虚机或者容器镜像,因为这些镜像里大部分文件都是重复的。

软件开发 云计算

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:删除千万级数据量导致的慢查询优化
下一篇:深度图解spark的cacheManager和DiskManager原理
相关文章