如何将双设备条带镜像附加到ZFS单盘存储池?
哎呀,你这问题核心是用错命令啦!先给你纠正最关键的一点:你一直在用zfs attach,但管理ZFS存储池的镜像操作得用zpool attach——前者是给单个ZFS文件系统加缓存/日志设备的,完全不是一回事儿。
接下来给你拆解解决方案:
你的需求是给单盘2TB的tank池加冗余,但单块1TB的盘容量不够直接当sda的镜像(ZFS要求镜像成员容量≥原设备),所以得把两块1TB盘做成条带vdev(也就是RAID0,总容量刚好2TB),再把这个条带vdev和sda组成镜像,这样既满足冗余,容量也匹配。
具体操作步骤
- 先确认池的状态,确保一切正常:
zpool status tank
- 执行正确的镜像附加命令:
zpool attach tank sda sdb sdc
这里ZFS会自动把sdb和sdc识别为一个条带vdev,然后和sda组成镜像vdev,开始同步数据(resilver)。
- 同步过程可以用
zpool status tank查看进度,等进度完成就大功告成了。
为啥之前的尝试都失败?
给你挨个解释:
zfs attach tank sda sdb sdc:用错命令了,zfs管的是文件系统,不是存储池的硬件配置,参数自然不对。zfs attach tank sda sdb:就算命令换成zpool,sdb只有1TB,比sda的2TB小,ZFS不允许用小容量盘当大磁盘的镜像成员。zfs attach tank sda sdb+sdc:ZFS根本不认这种+拼接的设备名,它只认系统里真实存在的块设备路径。
额外注意事项
- 确保
sdb和sdc是完全空白的,没有分区或旧文件系统,如果有的话,先备份数据,然后用dd if=/dev/zero of=/dev/sdb bs=1M count=10清除头部(sdc同理)。 - 同步过程(resilver)别强行中断,不然可能搞坏数据。
- 完成后,你的池就变成镜像配置了:如果
sda坏了,数据还在sdb+sdc的条带里;如果sdb或sdc坏了,条带vdev失效,但数据还在sda里,算是现有硬件能实现的最优冗余方案了。
内容的提问来源于stack exchange,提问作者unfa
相关产品推荐
相关产品推荐

