在 Solaris-CBE 上进行 raid-z 实验期间,我得到了这个
我创建了一个 raid-z 池
zpool create pool1 raidz c4t3d0 c4t5d0 c4t4d0
然后我想添加一个磁盘
zpool add pool1 c5t0d0
返回错误(pool1是raid-z,vdev是磁盘,使用-f..)
我使用-f(强制)
zpool add -f pool1 c5t0d0
有用!
zpool status pool1
pool: pool1
ID: 8550511546950241199
state: ONLINE
NAME STATE READ WRITE CKSUM
pool1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
c4t3d0 ONLINE 0 0 0
c4t5d0 ONLINE 0 0 0
c4t4d0 ONLINE 0 0 0
c5t0d0 ONLINE 0 0 0
我的问题是:这是什么样的配置? c5t0d0 是 pool1 的子镜像还是其他什么?
答案1
我自己回答。是一个池 (pool1),其中包含 2 个子镜像(第一个是 raidz 1-0,第二个是单独的磁盘)。该池的语法是正确的,但冗余是错误的。孤独的磁盘(c5t0d0)是错误的,因为没有冗余如果我们需要更多空间,可以添加另一个raidz镜像或raid1。像这样的东西
zpool add pool1 raidz c5t0d0 c5t1d0 c5t2d0
即使使用单个磁盘,数据也会写入所有磁盘(但冗余是错误的),证据是 4 个磁盘映像(Solaris 11 cbe 是 Linux 主机上的虚拟机)不断增长
du -shc .local/share/libvirt/images/vol*
2,1G .local/share/libvirt/images/vol1.img
2,1G .local/share/libvirt/images/vol2.img
2,1G .local/share/libvirt/images/vol3.img
2,1G .local/share/libvirt/images/vol4.img
一段时间写入数据后...
du -shc .local/share/libvirt/images/vol*
2,7G .local/share/libvirt/images/vol1.img
2,7G .local/share/libvirt/images/vol2.img
2,7G .local/share/libvirt/images/vol3.img
2,7G .local/share/libvirt/images/vol4.img
11G total
10分钟后...
du -shc .local/share/libvirt/images/vol*
8,5G .local/share/libvirt/images/vol1.img
8,5G .local/share/libvirt/images/vol2.img
8,5G .local/share/libvirt/images/vol3.img
8,5G .local/share/libvirt/images/vol4.img
另一个证明,删除非冗余子镜像,阵列重建
NAME STATE READ WRITE CKSUM
pool1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
c4t3d0 ONLINE 0 0 0
c4t5d0 ONLINE 0 0 0
c4t4d0 ONLINE 0 0 0
c5t0d0 REMOVING 0 0 0
$VDEV-1151C5D8F59CFF79 REMOVING 0 0 0