asa*_*ari 5 linux filesystems zfs ubuntu
我有一个 zfs 格式化分区,使用 zfs-fuse for linux (Ubuntu)。
我已经使用了一段时间,然后在其上启用了重复数据删除和压缩(zfs set compression=on/dedup=on)。现在我想我有一些文件被删除和压缩,还有一些文件还没有。
没关系,但有时我很困惑。让我们看看,以下命令将消耗我的 zfs 存储空间的近 4GB:
cp oldfile.4GB newfile.4GB
.. 这将消耗几乎为零:
cp newfile.4GB newfile.4GB.2
这是因为旧文件尚未压缩,所以我认为没有发生重复数据删除。
我的想法是——如果我能找到尚未重复数据删除/压缩的旧文件,我可以执行批量复制/重命名/删除它们以消除重复和冗余。但我怎么能检查呢?
我知道我可以重新复制我的存储的全部内容应该可以工作(检查每个文件的时间戳甚至更好),但如果我有zfsstat显示某些文件属性的类似工具,我会更高兴。
编辑:在我的环境中验证了 jlliagre 的提示。
First, made some dataset and directories:
$ sudo zfs create zfs/test
$ sudo install -d -m 1777 /zfs/test/orig /zfs/test/copy
Created some files:
$ yes > /zfs/test/orig/yes.1s & sleep 1; kill %1
$ dd if=/dev/zero of=/zfs/test/orig/zero.1M bs=1K count=1024
$ dd if=/dev/urandom of=/zfs/test/orig/rand.1M bs=1K count=1024
Turned compression on, and copy above files:
$ sudo zfs set compress=on zfs/test
$ cp /zfs/test/orig/* /zfs/test/copy
Now the directories look like:
$ ls -hil /zfs/test/*
/zfs/test/copy:
total 1.5K
10 -rw-r--r-- 1 kimura kimura 1.0M Mar 2 01:30 rand.1M
11 -rw-r--r-- 1 kimura kimura 40M Mar 2 01:30 yes.1s
12 -rw-r--r-- 1 kimura kimura 1.0M Mar 2 01:30 zero.1M
/zfs/test/orig:
total 42M
9 -rw-r--r-- 1 kimura kimura 1.0M Mar 2 01:29 rand.1M
7 -rw-r--r-- 1 kimura kimura 40M Mar 2 01:29 yes.1s
8 -rw-r--r-- 1 kimura kimura 1.0M Mar 2 01:29 zero.1M
And zdb tool shows some information:
kimura@kimura-desktop:~$ sudo zdb zfs/test
Dataset zfs/test [ZPL], ID 196, cr_txg 108306, 44.2M, 12 objects
Object lvl iblk dblk dsize lsize %full type
0 7 16K 16K 16K 16K 37.50 DMU dnode
-1 1 16K 512 1K 512 100.00 ZFS user/group used
-2 1 16K 512 1K 512 100.00 ZFS user/group used
1 1 16K 512 1K 512 100.00 ZFS master node
2 1 16K 512 1K 512 100.00 ZFS delete queue
3 1 16K 512 1K 512 100.00 ZFS directory
4 1 16K 512 1K 512 100.00 ZFS directory
5 1 16K 512 1K 512 100.00 ZFS directory
6 1 16K 512 1K 512 100.00 ZFS directory
7 3 16K 128K 39.8M 39.8M 100.00 ZFS plain file
8 2 16K 128K 1.00M 1M 100.00 ZFS plain file
9 2 16K 128K 1.00M 1M 100.00 ZFS plain file
10 2 16K 128K 1.00M 1M 100.00 ZFS plain file
11 3 16K 128K 1.41M 39.8M 100.00 ZFS plain file
12 2 16K 128K 0 128K 0.00 ZFS plain file
Run Code Online (Sandbox Code Playgroud)
我可以看到“是”和“零”被很好地压缩。
您可以使用该zdb -D poolname命令获取重复数据删除的总体统计信息。
对于每个文件压缩状态,它不是很简单,但您可以使用它:
zdb dataset | grep plain
Run Code Online (Sandbox Code Playgroud)
这将输出如下所示的行:
8 2 16K 128K 3.03M 5.00M 100.00 ZFS plain file
9 2 16K 128K 3.03M 5.00M 100.00 ZFS plain file
10 2 16K 128K 5.00M 5.00M 100.00 ZFS plain file
11 2 16K 128K 3.03M 6.00M 83.33 ZFS plain file
Run Code Online (Sandbox Code Playgroud)
第一列是 inode 编号,第 5 列和第 6 列表示磁盘大小和文件大小,第 7 列表示文件实际存在的百分比。任何在 6 和 7 中具有不同值以及 100% 为 8 的文件都会被压缩。
| 归档时间: |
|
| 查看次数: |
5746 次 |
| 最近记录: |