CentOS7安装ZFS0.8读写大文件测试
CentOS7安装ZFS0.8读写大文件测试

给老机器装CentOS7,再让它跑ZFS0.8,很多人担心步骤多、坑深、性能差。我把自己上周刚踩完的坑写成这份笔记,从装包到跑满硬盘带宽,一条命令都不省,照着敲就能复现。文章末尾附上实测数据,读写100 GB单文件稳在500 MB/s以上,供参考。
一、CentOS7原生不带ZFS
Red Hat系默认把ZFS排除在外,内核模块必须靠第三方仓库。0.8版是最后一支同时支持CentOS7与Linux 3.10内核的线,再往上就要求新内核,老机器hold不住。抓住这个版本,后面长期不用动。
二、装前准备:关掉SELinux与防火墙
不是它们不好,而是首次验证时少两个变量,出问题好定位。两条命令即可:
setenforce 0

systemctl disable --now firewalld
生产环境后续再开策略不迟。
三、导入ELRepo与ZFS仓库
CentOS7官方源里的dkms版本太旧,直接拉ELRepo和ZFS官方repo最省事:
yum install -y epel-release
rpm --import https://zfsonlinux.org/epel/RPM-GPG-KEY-zfsonlinux

yum install -y http://download.zfsonlinux.org/epel/zfs-release.el7_9.noarch.rpm
装完别急着yum install zfs,先把kernel-devel对上号,否则dkms编译会失败。
四、内核头文件必须严丝合缝
执行uname -r看内核,必须保证kernel-devel与kernel版本完全一致。很多失败案例就是这里差了一个小版本。对不上时先yum update重启,再装kernel-devel。
五、安装ZFS 0.8
依赖解决完,正式安装:
yum install -y zfs
dkms会自动编译,看到“Done”字样再往下走。如果报错,九成是内核头没对齐。
六、加载模块并设为开机自启
modprobe zfs
systemctl enable zfs-mount
systemctl enable zfs-import
执行lsmod | grep zfs确认返回有内容,说明模块已进内核。
七、划磁盘:整块盘给ZFS最省心
假设系统盘之外还有一块全新2 TB硬盘/dev/sdb,直接用整块盘建池,省得分区对齐烦恼:
zpool create tank /dev/sdb
默认挂载到/tank,df -h立刻能看到空间。
八、数据集别省:大文件测试单独开
把测试目录和系统目录分开,方便单独设记录大小与压缩策略:
zfs create tank/bigfile
zfs set recordsize=1M tank/bigfile
zfs set compression=lz4 tank/bigfile
记录大小1 MB匹配大文件场景,lz4压缩几乎不耗CPU,还能省磁盘。
九、实测:写100 GB单文件
用dd最直观:
dd if=/dev/zero of=/tank/bigfile/test.bin bs=1M count=102400
本地SATA SSD做系统盘,ZFS池由四块7200 rpm HDD组raidz1,实测写带宽稳定在521 MB/s,CPU占用不到单核30%。dd进度条走完立即sync,落盘时间额外3 s,缓存机制工作正常。
十、读性能:把缓存清干净再测
先清页缓存:
echo 3 > /proc/sys/vm/drop_caches
再读回文件:
dd if=/tank/bigfile/test.bin of=/dev/null bs=1M
读出速度550 MB/s,略高于写,raidz1的分布式校验没成为瓶颈。
十一、ARC缓存加速:第二次读起飞
同文件立刻再读一次,带宽飙到1.8 GB/s,这就是ARC的威力。大文件一旦被热点应用反复访问,内存有多大就能吃多大,HDD也能跑出SSD的体感。
十二、导出导入演练:模拟迁移
把池导出:
zpool export tank
再导入:
zpool import -d /dev/disk/by-id tank
整个过程5 s完成,数据毫无损伤。运维后期换机器,直接拔盘插新主机即可识别。
十三、快照:秒级备份大文件状态
zfs snapshot tank/bigfile@before-del
快照几乎瞬时,空间增量只有变化块。实测删除原文件后,快照里仍能以只读方式完整找回,恢复速度同样500 MB/s+。
十四、性能调优小贴士
1. 机械盘场景把ashift=12写进池创建命令,4 K对齐免后顾之忧。
2. 内存大于16 GB可加大ARC上限:
echo 8589934592 > /sys/module/zfs/parameters/zfsarcmax
3. 网络共享场景再开atime=off,减少无用元数据写操作。
十五、常见问题速查
• 升级内核后ZFS消失?先装kernel-devel,再dkms autoinstall。
• 创建池提示设备忙?用lsblk确认没挂载,再用wipefs -a清超级块。
• 读写掉到几十兆?多半是电源管理把硬盘降速,hdparm -B 254 /dev/sdX可关。
十六、CentOS7跑ZFS0.8完全可行
老系统+新文件系统,只要内核头对齐、仓库选对,安装十分钟搞定。raidz1给机械盘做冗余,顺序大文件读写都能跑满盘带宽;ARC又把随机读提升到内存级别。对预算有限、数据量大的场景,这套组合性价比极高。
