ZFS是一个新型的文件系统,周末在Ubuntu上进行了安装和测试,性能还是有了很惊人的提升。不过,不同的磁盘配置和存储模式选择,对性能的影响是很大的,需要根据自己的需求来设置和调整。
ZFS如果使用全盘加入其存储池,会抹去盘上的所有数据。因此,一旦存放数据后,就很难再去改变,需要在新系统建立时就做好规划。下面是一些实验过程的操作,你可以通过这个过程来了解你所建立的存储系统的大概运行参数,以便选择和优化。
安装ZFS
非常简单,运行:
sudo apt install zfsutils-linux
List Disks
列出磁盘上的所有活动的驱动器(未挂载的不会显示)。
df -h
显示所有的存储设备(包含ID信息):
ls -l /dev/disk/by-id
在建立zpool时推荐使用ID信息,以免磁盘调整时其标签发生改变导致挂载错误。
Create ZPool
创建ZFS的存储池,运行:
zpool create zpool /dev/sdb
上面的命令创建一个简单存储池,只包含一个磁盘。
其中,zpool为存储名称,可以改为其它名称,后面是磁盘的标识,可以空格隔开加入多个。
如果需要高性能和高可靠,建议使用“镜像+条带”的存储模式。
ZFS cache
在SSD上创建存储池的缓存(普通机械盘意义不大)来进行读数据时的加速。可以创建一个文件(也可以使用整块SSD,但是必须独立。因为Linux系统盘不能划出分区来单独使用。),如下(可以自行修改缓冲区文件的大小):
dd if=/dev/zero of=/home/supermap/zcachex.img bs=1M count=40960
添加到zpool之中,将会立即启用:
sudo zpool add zpool cache /home/supermap/zcachex.img -f
ZFS log
ZFS log文件放到快速盘上,可以加速文件访问。在SSD上创建一个文件用于ZIL(log)数据的存储。
dd if=/dev/zero of=/home/supermap/zlogx.img bs=1M count=40960
添加到zpool之中,将会立即启用:
sudo zpool add zpool log /home/supermap/zlogx.img -f
创建文件系统
在/zpool的根目录可以创建目录,但通过下面的方式创建文件系统,可以单独指定其特性,如配额、压缩、权限等等。
sudo zfs create zpool/data
指定配额:
sudo zfs set quota=10G zpool/data
启用压缩:
sudo zfs set compression=on mypool/projects
ZFS IO测试
创建测试文件
在磁盘上创建20G的测试文件:
sudo dd if=/dev/zero of=/zpool/testx.img bs=1M count=20480
结果如下:
记录了20480+0 的读入
记录了20480+0 的写出
21474836480 bytes (21 GB, 20 GiB) copied, 8.41227 s, 2.6 GB/s
复制文件测试
将文件复制一份:
sudo dd if=testx.img of=/zpool/test2.img bs=1M count=20480
结果如下:
记录了20480+0 的读入
记录了20480+0 的写出
21474836480 bytes (21 GB, 20 GiB) copied, 45.976 s, 467 MB/s
读出文件测试
读出文件,如下:
sudo dd if=/zpool/test2.img of=/dev/null bs=1M count=20480
这里输出到/dev/null,没有进行写入操作。
结果如下:
记录了20480+0 的读入
记录了20480+0 的写出
21474836480 bytes (21 GB, 20 GiB) copied, 2.24908 s, 9.5 GB/s
测量读出的时间:
time sudo dd if=/zpool/test2.img of=/dev/null bs=1M count=20480
结果如下:
记录了20480+0 的读入
记录了20480+0 的写出
21474836480 bytes (21 GB, 20 GiB) copied, 2.28752 s, 9.4 GB/s
real 0m2.317s
user 0m0.023s
sys 0m2.292s
Copy操作测试
time sudo cp test2.img /zpool/test3.img
结果如下:
real 0m43.401s
user 0m0.188s
sys 0m17.172s
专业性能测试
更多参考: