云社区 博客 博客详情

ZFS简介

nanjunjie 发表于 2019-12-27 18:16:18 2019-12-27
0
0

【摘要】 本文简单介绍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很适合放虚机或者容器镜像,因为这些镜像里大部分文件都是重复的。


登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 0
点赞
分享文章到微博
分享文章到朋友圈

上一篇:GlusterFS与Kubernetes持久卷

下一篇:Go命令行开发

评论 (0)


登录后可评论,请 登录注册

评论