ZFS: 文件系统空间使用率的疑惑

刚开始使用 ZFS 时,对 ZFS 文件系统的使用率比较疑惑, 发现初始时每个已 mount 的 zfs 文件系统的 Size( df -Th 输出 ) 都一样.

zfs 对文件系统的处理有所不同, 每个数据集(dataset)都能使用整个池子的空间. 每个 dataset 的可使用最大值为所在池子剩余空间大小, 这和 LVM 的理念不同, 下面通过实验测试下:

1 创建文件

1
2
dd if=/dev/zero of=/tmp/file1 bs=1G count=1  
dd if=/dev/zero of=/tmp/file2 bs=1G count=1

备注: 预先分配大小的文件也可用来创建 ZFS, 但不推荐使用, 这里仅用来做测试.

2 创建 zpool

1
2
3
4
5
6
7
8
9
10
11
12
root@francs:~  # zpool create zp1 /tmp/file1 /tmp/file2  

root@francs:/data1 # zpool status zp1
pool: zp1
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zp1 ONLINE 0 0 0
/tmp/file1 ONLINE 0 0 0
/tmp/file2 ONLINE 0 0 0

备注:创建一个大小为 2.0 GB 的池子.

3 创建四个 dataset

1
2
3
4
root@francs:~  # zfs create -o mountpoint=/data1 zp1/data1   
root@francs:~ # zfs create -o mountpoint=/data2 zp1/data2
root@francs:~ # zfs create -o mountpoint=/data3 zp1/data3
root@francs:~ # zfs create -o mountpoint=/data4 zp1/data4

4 查看文件系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@francs:~  # df -Th  
Filesystem Type Size Used Avail Capacity Mounted on
zroot/ROOT/defaultzfs 16G 3.4G 12G 22% /
devfs devfs 1.0K 1.0K 0B 100% /dev
zroot/tmp zfs 12G 704K 12G 0% /tmp
zroot/usr/home zfs 12G 156K 12G 0% /usr/home
zroot/usr/ports zfs 13G 874M 12G 7% /usr/ports
zroot/usr/src zfs 13G 545M 12G 4% /usr/src
zroot/varzfs 13G 636M 12G 5% /var
zroot/var/crash zfs 12G 148K 12G 0% /var/crash
zroot/var/log zfs 12G 384K 12G 0% /var/log
zroot/var/mail zfs 12G 152K 12G 0% /var/mail
zroot/var/tmp zfs 12G 152K 12G 0% /var/tmp
zp1 zfs 2.0G 31K 2.0G 0% /zp1
zp1/data1 zfs 2.0G 31K 2.0G 0% /data1
zp1/data2 zfs 2.0G 31K 2.0G 0% /data2
zp1/data3 zfs 2.0G 31K 2.0G 0% /data3
zp1/data4 zfs 2.0G 31K 2.0G 0% /data4

备注: 可以看到 /data1 ,/data2, /data3,/data4 四个已 mount 的目录. 每个目录的 Size 都为 2.0 GB.

5 向 /data1 目录写入数据

1
2
3
4
root@francs:/data1 # dd if=/dev/zero of=/data1/file_test.img bs=100M count=3    
3+0 records in
3+0 records out
314572800 bytes transferred in 37.706116 secs (8342753 bytes/sec)

备注: 在 /data1 目录里写入一个 300 MB 的文件.

6 再次查看文件系统使用率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@francs:/data1 # df -Th  
Filesystem Type Size Used Avail Capacity Mounted on
zroot/ROOT/defaultzfs 16G 3.4G 12G 22% /
devfs devfs 1.0K 1.0K 0B 100% /dev
zroot/tmp zfs 12G 2.1M 12G 0% /tmp
zroot/usr/home zfs 12G 156K 12G 0% /usr/home
zroot/usr/ports zfs 13G 874M 12G 7% /usr/ports
zroot/usr/src zfs 13G 545M 12G 4% /usr/src
zroot/varzfs 13G 636M 12G 5% /var
zroot/var/crash zfs 12G 148K 12G 0% /var/crash
zroot/var/log zfs 12G 384K 12G 0% /var/log
zroot/var/mail zfs 12G 152K 12G 0% /var/mail
zroot/var/tmp zfs 12G 152K 12G 0% /var/tmp
zp1 zfs 1.7G 31K 1.7G 0% /zp1
zp1/data1 zfs 2.0G 300M 1.7G 15% /data1
zp1/data2 zfs 1.7G 31K 1.7G 0% /data2
zp1/data3 zfs 1.7G 31K 1.7G 0% /data3
zp1/data4 zfs 1.7G 31K 1.7G 0% /data4

备注:发现 /data2,/data3,/data4 目录的 SIze 都降为 1.7GB , 说明 zfs 文件目录的最大使用 Size 是会变化的, 每一个 zfs 目录都可以使用整个池子的容量.

7 接着往 /data2 目录写入一个 200M 的文件

1
2
3
4
root@francs:/data1 # dd if=/dev/zero of=/data2/file_test.img bs=100M count=2    
2+0 records in
2+0 records out
209715200 bytes transferred in 19.487790 secs (10761364 bytes/sec)

8 再次查看文件系统使用率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@francs:/data1 # df -Th  
Filesystem Type Size Used Avail Capacity Mounted on
zroot/ROOT/defaultzfs 16G 3.4G 12G 22% /
devfs devfs 1.0K 1.0K 0B 100% /dev
zroot/tmp zfs 12G 2.8M 12G 0% /tmp
zroot/usr/home zfs 12G 156K 12G 0% /usr/home
zroot/usr/ports zfs 13G 874M 12G 7% /usr/ports
zroot/usr/src zfs 13G 545M 12G 4% /usr/src
zroot/varzfs 13G 636M 12G 5% /var
zroot/var/crash zfs 12G 148K 12G 0% /var/crash
zroot/var/log zfs 12G 384K 12G 0% /var/log
zroot/var/mail zfs 12G 152K 12G 0% /var/mail
zroot/var/tmp zfs 12G 152K 12G 0% /var/tmp
zp1 zfs 1.5G 31K 1.5G 0% /zp1
zp1/data1 zfs 1.8G 300M 1.5G 17% /data1
zp1/data2 zfs 1.7G 200M 1.5G 12% /data2
zp1/data3 zfs 1.5G 31K 1.5G 0% /data3
zp1/data4 zfs 1.5G 31K 1.5G 0% /data4

备注: 这时就比较清楚了. 池子好比是公共资源, 同一个池子的每一个目录都能使用这些资源, 先用先得。

9 查看 ZFS 空间使用

1
2
3
4
5
6
7
8
root@francs:~  # zpool iostat -v zp1  
capacity operations bandwidth
pool alloc free read write read write
------------ ----- ----- ----- ----- ----- -----
zp1 501M 1.50G 0 2 21 94.8K
/tmp/file1 251M 765M 0 1 10 47.5K
/tmp/file2 250M 766M 0 1 11 47.3K
------------ ----- ----- ----- ----- ----- -----

备注: 数据均匀地写入到了文件 /tmp/file1 和 /tmp/file2。

原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/238632.html

(0)
上一篇 2022年2月6日
下一篇 2022年2月6日

相关推荐

发表回复

登录后才能评论