硬盘初始化
确认设备
lsblk
清除旧分区表(可选)
sudo wipefs -a /dev/sda
使用 gdisk 分区
sudo gdisk /dev/sda
- 输入
o
→ 新建空 GPT 表 - 输入
n
→ 新建分区(整盘) - 类型代码:=BF00= (Solaris / ZFS)
- 输入
w
→ 写入
完成后得到
/dev/sda1
- 输入
创建 ZFS 池
sudo zpool create -f backup /dev/sda1
优化设置
sudo zfs set mountpoint=/mnt/backup backup sudo zfs set compression=zstd backup
卸载/挂载池
sudo zpool export backup # 卸载 sudo zpool import # 查看可导入的池 sudo zpool import -d /dev/disk/by-id backup # 重新挂载(指定设备路径)
检查池状态
sudo zpool status backup sudo zfs list backup
本地移动硬盘备份
创建快照
sudo zfs snapshot zroot/home@2025-09-25
传输前验证快照存在
sudo zfs list -t snapshot | grep hourly
直接传输到 ZFS 移动硬盘(带进度显示)
sudo zfs send zroot/home@2025-09-25 | pv | sudo zfs recv -F backup/home
增量备份(带进度显示)
sudo zfs send -i zroot/home@2025-09-01 zroot/home@2025-09-25 | pv | sudo zfs recv -F backup/home
存成文件(目标盘非 ZFS 时)
sudo zfs send zroot/home@2025-09-25 | pv > /mnt/usb/zroot_home_20250925.zfs
恢复:
pv /mnt/usb/zroot_home_20250925.zfs | sudo zfs recv backup/home
优化选项
- 压缩存档:恢复:
sudo zfs send zroot/home@2025-09-25 | pv | gzip > /mnt/usb/home_20250925.zfs.gz
pv /mnt/usb/home_20250925.zfs.gz | gunzip | sudo zfs recv backup/home
- 大文件传输稳定性(=mbuffer= + 进度):
sudo zfs send zroot/home@2025-09-25 | pv | mbuffer -s 1M -m 4G | sudo zfs recv -F backup/home
- 压缩存档:
远程 SSH 备份
完整快照传输(带进度)
sudo zfs send zroot/home@2025-09-25 | pv | ssh user@remote "sudo zfs recv -F backup/home"
增量快照传输(带进度)
sudo zfs send -i zroot/home@2025-09-01 zroot/home@2025-09-25 | pv | ssh user@remote "sudo zfs recv -F backup/home"
传输为文件(带进度)
sudo zfs send zroot/home@2025-09-25 | pv | ssh user@remote "cat > /mnt/usb/home_20250925.zfs"
恢复:
ssh user@remote "pv /mnt/usb/home_20250925.zfs" | sudo zfs recv -F backup/home
网络优化传输(带进度和缓冲)
sudo zfs send zroot/home@2025-09-25 | pv | mbuffer -s 1M -m 4G | ssh user@remote "mbuffer -s 1M -m 4G | sudo zfs recv -F backup/home"
预估传输大小
sudo zfs send -n zroot/home@2025-09-25 # 完整快照大小 sudo zfs send -n -i zroot/home@2025-09-01 zroot/home@2025-09-25 # 增量大小
快照管理
列出所有快照
sudo zfs list -t snapshot
列出特定数据集的快照
sudo zfs list -t snapshot -r zroot/home
删除指定快照
sudo zfs destroy zroot/home@2025-09-01
批量删除旧快照(保留最近7个)
zfs list -t snapshot -o name -s creation | grep "zroot/home@hourly" | head -n -7 | xargs -I {} sudo zfs destroy {}
定期维护
数据校验(每月执行)
sudo zpool scrub backup
检查校验进度
sudo zpool status backup
查看池健康状态
sudo zpool list backup sudo zfs get used,avail,compressratio backup
检查快照空间占用
sudo zfs list -t snapshot -o name,used,refer zroot/home
故障排除
池无法导入
sudo zpool import -f backup # 强制导入 sudo zpool import -D backup # 忽略设备ID变化 sudo zpool import -d /dev/sda1 backup # 指定设备路径导入
检查池错误
sudo zpool status -v backup # 详细错误信息 sudo zpool clear backup # 清除错误状态
恢复中断的传输
- 删除未完成的接收:
sudo zfs destroy backup/home
- 重新开始传输
- 删除未完成的接收:
检查传输失败原因
dmesg | tail -20 # 查看系统日志 sudo zpool events backup # 查看ZFS事件
性能调优
针对备份池的优化设置
sudo zfs set recordsize=1M backup # 大文件优化 sudo zfs set primarycache=metadata backup # 节省内存 sudo zfs set secondarycache=none backup # 禁用L2ARC sudo zfs set compression=zstd backup # 使用zstd压缩
网络传输优化
# SSH连接复用配置 (~/.ssh/config) Host backup-server HostName your-backup-server.com ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p ControlPersist 10m Compression yes
进度显示增强
# 显示传输速度和剩余时间 sudo zfs send zroot/home@2025-09-25 | pv -p -t -e -r -b | sudo zfs recv -F backup/home
参数说明:
-p
显示百分比-t
显示计时器-e
显示预计时间-r
显示传输速度-b
显示字节数
监控和验证
监控传输过程
# 另开终端监控 watch -n 5 'sudo zfs list backup/home' watch -n 5 'sudo zpool iostat backup 1 1'
验证备份完整性
# 比较快照属性 sudo zfs get -r checksum,creation,used zroot/home@2025-09-25 sudo zfs get -r checksum,creation,used backup/home@2025-09-25 # 检查数据集大小是否匹配 sudo zfs list zroot/home backup/home
测试恢复
# 创建测试恢复到临时位置 sudo zfs send backup/home@2025-09-25 | sudo zfs recv backup/test-restore # 验证后清理 sudo zfs destroy -r backup/test-restore
注意事项
- -f 会覆盖设备上原有数据,谨慎使用
- 快照命名建议带时间戳,便于管理:=@2025-09-25= 或
@hourly-2025-09-25-14
- 始终使用 zstd 压缩,提供最佳的压缩率和性能平衡
- 远程备份建议设置 SSH 免密登录,方便操作
- 定期执行
scrub
检查数据完整性 - 使用
pv
命令显示传输进度,便于监控大文件传输 - 重要数据建议保持 3-2-1 备份策略(3个副本,2种介质,1个异地)
- 传输前用
-n
参数预估数据大小,合理安排时间
感谢您的耐心阅读!来选个表情,或者留个评论吧!