我这里有两个基于常见设置的问题。简短的免责声明:我正在使用 freenas,尚未完全理解 ZFS 术语,而且 freenas 在其 UI 中破坏了 ZFS 术语。我会接受使用终端或 Freenas UI 的答案(两者都有加分 ;))。
我有一个单一卷(zpool?),其中有 1 个镜像 vdev,由两个 3TB 磁盘组成。
是什么恰当的以物理方式移除其中一个磁盘然后将其放回原位的过程?
可能不太明智,我移除了一个磁盘,但没有执行任何命令。我立即收到警报,说卷已降级(预期)。将驱动器放回后,此状态仍然存在(它似乎没有识别出该驱动器是已移除的驱动器 - 或者如果它识别出,我不知道如何重新连接它)。我重新启动了服务器,现在显示卷正常,但在卷管理器->卷统计下,其中一个驱动器的校验和列中有 182,而另一个驱动器没有(虽然我不知道之前是否有这个值)。
- 我该如何处理这种情况?
- 这会导致数据丢失吗?或者 ZFS 是否可以从这种情况中恢复?
- 如果它可能导致数据丢失/损坏/等等,我该如何检查并恢复?
最后,如果链接指向简明的 ZFS 入门书,并且这些书不是教科书,也不会深入探讨 ZF 中无用而晦涩的部分,则可以获得额外加分。:P
答案1
免责声明:我个人没有使用过 FreeNAS,因此某些答案可能不是规范的方法 - 请事先查阅手册。也就是说,它们是 Oracle 推荐的方法,因此应该有一定的道理。
- 这取决于你的目标:
- 如果你想更换故障驱动器使用替换,您可以在 FreeNAS Web UI 中执行此操作,也可以从控制台执行此操作
zpool replace poolname olddevice newdevice
。 - 如果你想从镜像 vdev 中永久删除磁盘(并将镜像减少到基本状态,在此过程中丢失所有冗余),您可以在 GUI 中或从控制台执行此操作
zpool detach poolname olddevice
(用于zpool attach poolname olddevice newdevice
重新连接)。 - 如果你想暂时将设备从活动池中取出,而无需移除或分离它,使用 GUI 或从控制台使用
zpool offline poolname olddevice
。这在对较大的数组进行故障排除时很有用,我在这里只是为了完整性而写它。
- 如果你想更换故障驱动器使用替换,您可以在 FreeNAS Web UI 中执行此操作,也可以从控制台执行此操作
- 重新启动会导出所有池,然后导入它们。导入时,ZFS 会检查所有磁盘是否存在。因此,除了重新启动之外,您还可以
zpool export poolname
按照以下步骤操作zpool import poolname
以实现相同的目的。在导入池之前,您可能需要在插入磁盘后配置磁盘(这是标准 illumos 系统的情况)。如果您不想关闭池,也可以移除故障设备,然后更换它。这样您就没有停机时间,而是重新同步。我个人总是会选择第一个解决方案,除了大型阵列,因为它更安全。 - 请参阅下一个问题。
- 如果校验和仅在一个驱动器上,则一切正常。使用
zpool clear poolname
删除错误消息。如果校验和错误在两个驱动器上,则取决于具体情况。通常 ZFS 会告诉您是否以及哪些文件受到影响。
- 重新启动会导出所有池,然后导入它们。导入时,ZFS 会检查所有磁盘是否存在。因此,除了重新启动之外,您还可以
加分答案:
- Oracle 帮助和文档页面,如上链接所示。
man zpool
以及zpool、文件系统和 ACL 配置。它们也可以从 Oracle 在线获取man zfs
,man /usr/bin/chmod
而且非常非常好。事实上,您几乎不需要其他任何东西,因为它们也有很多真实世界的例子(比 GNU 手册页好得多)。- Solaris 最佳实践指南
- FreeNAS 最糟糕的做法(需要避免的陷阱)
- Nex7 中没人告诉过您的有关 ZFS 的事情
- Constantin Gonzalez 的博客
- ZFS 备忘单,以紧凑形式提供最有用的命令