FAIL: 在线将 zpool 转换为 GELI 加密卷
今天尝试了一下将 zpool 在线转换为 geli 加密卷,失败。这里记一笔。
想法是:将 zpool (RAIDZ)中的一块盘 offline,建立 GELI 卷,然后用新建的 GELI 卷来替换拿下来的盘。
失败原因主要是两点:首先,GELI 设备比其下的盘小 4kB (8个扇区)。这部分空间用来保存 GELI 的元数据。这样,替换后的设备要比原先的略小(之前曾经遇到过 SATA 硬盘不同批次尺寸不一样的情况)。另外,这个 zpool 在创建的时候使用的是 512 字节的扇区,而 GELI 的块尺寸是 4kB,因此会有问题。
如此看来,为了支持未来的扩展,需要做两件事:
第一个是毫不犹豫地"浪费"少量空间:预留适当的保留空间(如 1MB,甚至若干 GB 的交换区)可以避免在未来需要换盘时因为供货的问题导致出现困难。当然,如果是针对企业市场的硬盘,通常是可以避免这种情况发生的。不过需要注意的是,如果交换分区放在不同的硬盘上而不做任何冗余的话,也有可能会出现掉盘导致系统不稳定的问题。
第二个是应该尽量将卷做成按 4kB 对齐的,即使磁盘本身并不是 4kB 的。我个人的测试显示这样并不会导致性能下降,相反在许多情况下可以改善吞吐量。