我在一台小型的 HP ProLiant MicroServer 上构建了一个 FreeNAS 设备。
存储方面,我使用 RAIDZ1 创建了一个 3 磁盘 ZFS 池。一开始我使用的是 3 个小磁盘,后来我逐渐熟悉了 FreeNAS,但最终决定用它来替换我的家用 NAS。
因此我购买了新的 2 TB 磁盘,并一次将每个磁盘替换为更大的磁盘,让池在每次替换后重新镀银。
通过 GUI 创建的原始池使用 GPTID 引用。zpool status
将显示类似以下内容:
pool: vol2
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
vol2 ONLINE 0 0 0
gptid/96857d85-6c2f-11e3-9387-78acc0f794bd ONLINE 0 0 0
当我用 替换池中的磁盘时zpool replace
,我最终使用了 GEOM 名称(安达) 来代替。说实话,我发现这种方式更加简单和直观。
但使用 GEOM 名称引用磁盘似乎存在驱动器在重新启动时被重新标记的风险,令人困惑的 ZFS并可能在此过程中损坏您的 ZFS 池。
我认为我可以“离线”每个磁盘并zpool replace
使用它们的 GPTID 将其替换为,我认为这将需要重新镀银,从而在进行此操作时将我的数据置于风险之中。
但是,我似乎找不到我的“ada”磁盘的任何 GPTID。ls /dev/gptid
仅列出我的第四个且当前未使用的磁盘。glabel list
返回相同的磁盘/GPTID 和各种 FreeNAS 分区。
- 用 GPTID 替换引用的 GEOM 名称是否真的有意义?
glabel list
为什么我看不到新磁盘的 GPTID?在分配 GPTID 并返回其名称之前,我需要做些什么吗?- 有没有更安全的方法,不需要重新镀银?
谢谢!
答案1
•用 GPTID 替换引用的 GEOM 名称是否真的有意义?
GEOM 名称由控制器插槽生成,因此如果您交换磁盘连接器,其 GEOM 名称也会交换。GPTID 名称基于磁盘序列号,并且到处都相同。
•为什么我看不到新磁盘的 GPTID?在分配 GPTID 并且 glabel 列表返回其名称之前,我需要做些什么吗?
当磁盘被一个 id(在您的情况下是 zpool 中的 GEOM)使用时,其他 id(包括 GPTID)将被阻止。因此,当您从 zpool 中分离磁盘或将其脱机时 - /dev/gptid 中将显示缺失的 gptid
•有没有更安全的方法,不需要重新镀银?
唯一的方法是分离磁盘,然后使用另一个名称将其重新连接到池中。重新同步并不像您想象的那么危险,因为它只是一个镜像验证和同步的过程。它只复制不同步的数据,因此您只会冒着在磁盘分离和重新连接之间所做的更改的风险。
答案2
ZFS 的设计目标是确保数据有效性:它不会传输损坏的数据,但如果无法生成正确的数据(可配置的默认行为),则不会传输任何数据。只要能找到池磁盘,移动池磁盘就不会使 ZFS 感到困惑。 此链接,(部分为德语)非常有用。这只是一个不完整的提示 - 可以这样考虑。