PVE测试ZFS扩容场景
操作环境说明,本操作基于proxmox-ve: 8.1.0实操
# root@pve:~# pveversion -v
proxmox-ve: 8.1.0 (running kernel: 6.5.11-7-pve)
pve-manager: 8.1.3 (running version: 8.1.3/b46aac3b42da5d15)
root@pve:/# zfs --versionzfs-2.2.0-pve3
zfs-kmod-2.2.0-pve3
场景说明
- 起初有一个小硬盘做外置存储,比如
500G
, 创建一个zpool
- 某阶段增加一个新盘片,比如
1T
,扩容zpool
- 截止目前有两个硬盘,一个
500G
一个1T
,创建一个single zpool
这里要增加三个硬盘
,都为1T
, 创建一个raidz1 zpool
, 并完成数据迁移- 假设某一个盘片损坏,更换新盘 , 并完成数据恢复
- 在增加1个新盘,总共4个盘,都为
1T
, 创建一个raidz1 zpool
, 并完成同步
500G
1T
仅代表磁盘的容量增加幅度, 不代表实际大小
操作步骤
第一阶段一个外接硬盘
# 创建single zpool
zpool create zfs -m /zfs /dev/sdb
# 查看状态
root@pve:/# zpool status
pool: zfs
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
zfs ONLINE 0 0 0
sdb ONLINE 0 0 0
errors: No known data errors
root@pve:/# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zfs 132K 500G 24K /zfs
# 上传一些文件
# 开启压缩功能
zfs set compression=on zfs
# 查看属性
zfs get all zfs
zfs get compression,compressratio,dedup zfs
root@pve:/zfs# zfs get compression,compressratio zfs
NAME PROPERTY VALUE SOURCE
zfs compression on local
zfs compressratio 1.13x -
# 开启去重功能,测试仅开启后才过滤
zfs set dedup=on zfs
第二阶段,添加新的硬盘
# 移除硬盘
zpool export zfs
# 移除硬盘
echo 1 > /sys/block/sdb/device/delete
# 重新导入
# 列出系统中可导入的存储池
zpool import
# 导入的存储池
zpool import zfs
zpool add zfs /dev/sdc
第三阶段,创建raidz1 zpool,并把数据同步过来
# 原来使用中的磁盘 /dev/sdb /dev/sdc
# 新增的大容量磁盘 /dev/sdd /dev/sde /dev/sdf
# 创建新的存储池
zpool create newZFS raidz1 /dev/sdd /dev/sde /dev/sdf
# 创建快照
zfs snapshot -r zfs@migrate
# 列出快照
zfs list -t snapshot
# 删除快照
# zfs destroy zfs@migrate
# 数据迁移
zfs send -R zfs@migrate | zfs receive -F newZFS
# 删除旧存储池
zpool destroy zfs
# 查看镜像列表
zfs list -t snapshot
# 下面的操作可以忽略, 有强迫症的要 zpool保持原来一直的需要再做一次
# 迁移到临时目录
zpool create -f oldzfs /dev/sdb /dev/sdc
zfs send -R newZFS@migrate | zfs receive -F oldzfs
zpool destroy newZFS
zpool create -f zfs raidz1 /dev/sdd /dev/sde /dev/sdf
zfs send -R oldzfs@migrate | zfs receive -F zfs
zpool destroy oldzfs
# 查看镜像列表
zfs list -t snapshot
zfs destroy zfs@migrate
两台远程机器迁移数据
ssh
remote_host
“zpool create zfs raidz1 /dev/sdd /dev/sde /dev/sdf”
zfs send -R zfs@migrate | sshremote_host
zfs receive -F zfs
第四阶段,更换一个坏盘片
root@pve:~# zpool status
pool: zfs
state: DEGRADED
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-9P
scan: resilvered 0B in 00:00:00 with 0 errors on Mon Jul 22 17:20:38 2024
config:
NAME STATE READ WRITE CKSUM
zfs DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
sdb ONLINE 0 0 1
sda ONLINE 0 0 0
sdd REMOVED 0 0 0
errors: No known data errors
# sdd REMOVED 0 0 0
zpool offline zfs /dev/sdd
zpool replace zfs /dev/sdd /dev/sdc
zpool status zfs