Solaris 服务器是否会容忍未来的 ZFS 池?

Kev*_*vin 5 solaris zfs backup-restoration snapshot solaris-11

我对 ZFS 的经验通常是它可以正常工作,所以我希望答案是,这不是问题——但我有一个数据池,如果它发生故障,它会毁掉我的一月,所以我想仔细检查一下。

这个问题实际上可能在涉及单独数据池的两种不同情况下出现。现在我正在处理第一个,但我也想知道第二个:

  • 系统盘的存储(即hold rpool)失败了,但是数据池的存储是好的,所以你想从备份中恢复系统盘,但继续使用数据池的实时存储。
  • 您在 VM 中运行 Solaris 并希望回滚到管理程序拍摄的快照(不是的 ZFS 快照rpool),但数据池存储在处于“独立”模式、RDM 等的磁盘上,因此将不会被回滚。

在这两种情况下,当 Solaris 重新启动时,它会看到一个它知道的数据池,但它处于它从未(据它记得)放入的状态。

我主要只关心在系统磁盘回滚之前系统被彻底关闭的情况,以及系统在它被回滚到的映像之前被彻底关闭的情况。我希望在运行状态之间切换可能会有点棘手。

还要注意,在我的特殊情况下,池的存储几何结构和存储路径没有改变。同样,如果他们有的话,我希望这会更棘手。

我甚至不会与Windows和NTFS会问这个,因为这是一个比较简单的解耦系统,所以很难看出为什么它不会工作。但是,似乎 Solaris 将某种池元数据保留在带外,正如您应该zpool export以及zpool import在系统之间移动池时所证明的那样(由于 VMware,我从未以这种方式这样做过)。我对此元数据及其用途的了解有限,因此我很难推断这种情况下的影响。(对此的解释会很棒!)

我实际上仍然可以访问预回滚系统。它位于由 HP SmartArray 支持的 VMFS 数据存储中,在一次不幸的预防性维护磁盘更改(由于 SmartArray 比 ZFS 更笨拙而导致数据丢失)后,该 SmartArray 发出了 1716 POST 警告。所有重要的虚拟机看起来仍然很好,并且对其文件系统的扫描没有发现任何错误,但我计划从最近的备份中恢复阵列,因为我有理由怀疑 ESXi 会默默地将坏扇区归零,而不是将错误传递给来宾,所以我不想冒险一些归零的部门潜伏在某处稍后咬我的屁股。

对于 Solaris VM,我不必担心归零扇区,因为 ZFS 会捕捉到这一点,但大多数其他 VM 使用哑文件系统。不过,备份是整个 VMware 数据存储的映像,因此修复它们也会回滚 Solaris VM。实际上,我rpool对这个 VM进行了清理并没有发现任何错误,所以如果我愿意,我可以将它的 VMDK 藏在其他地方并在回滚后将其复制回来,然后整个问题就是没有实际意义。如果没有人回答,我想这就是我会做的,哈哈。但这是我想知道一段时间的事情,所以我仍然会问。

那么,问题是,我可以继续回滚系统盘的存储并完成它吗? 或者我是否必须从预回滚系统导出池,回滚,在附加存储之前删除池,然后附加存储并导入池?我不喜欢后者的声音,部分原因是该池同时提供 CIFS 和 iSCSI 服务,我不记得我是如何设置它们的,甚至不记得如何设置,所以如果它们破坏了我'会生气的 (你能说我们没有全职系统管理员吗?哈哈)

VM 运行的是旧版本 Solaris 11.0。

(顺便说一句,它较旧,部分原因是由于相同的问题。我想在尝试升级之前对 VM 进行快照,以防万一我对它进行了操作,但后来我担心回滚系统可能会对独立池做出反应,所以只是rpool不用管它。是的,我意识到我也可以对.

mik*_*kem 4

这是“zfs 正常工作”类型的答案之一......

池元数据实际上存储在池中,而不是本地操作系统上。因此,例如,如果系统崩溃并且未完全关闭,则池中的元数据知道该池未完全“导出”。如果您尝试将此池导入到新系统中,您会收到关于它未导出且属于另一个系统的投诉。那时,您只需执行 zpool import -f (强制),它就会干净地输入。

因此,对于您的数据池,无论您何时/何地再次尝试导入该池,其中的数据都是安全的。如果您要启动到“已恢复”的 rpool,则该 rpool 上的操作系统会知道它应该导入的池,并且只会导入数据池。它不会跟踪池是否已导出,除了一旦导出池,操作系统就根本不再跟上它的事实。

现在,关于 rpool 问题。从虚拟机快照、磁带备份等恢复它不会改变它处理数据池的方式,除非备份是在最初创建或导入数据池之前进行的。如果是这种情况,您只需在操作系统恢复后导入该池即可。无论rpool的状况如何,数据池上的数据都是安全的。

我希望这有帮助。

顺便说一句,您提到您不愿意升级Solaris,因为您不确定它会对数据池有何反应。不用担心这个。升级将保留已知池并根据需要导入它们。

另请注意,Solaris OS 升级在各个“引导环境 (BE)”中是独立的。因此,当您进行操作系统升级时,它实际上会创建一个完全独立的操作系统安装,其中包含新版本......而您的操作系统仍在启动并运行。然后,当您重新启动时,它将出现在新操作系统上。如果新操作系统有问题——即。对库的更改等您没有预料到的 - 您只需再次重新启动并进入原始 11.0 版本,它将处于与升级之前完全相同的状态。这是进行操作系统升级的好方法!

  • 新年快乐,感谢您的确认!我的恢复过程最终[无聊的ESXi](https://serverfault.com/q/1048959/137215),无聊的Active Directory(经过一些研究后不得不重做恢复),但有一点它*没有*无聊的是ZFS。不出所料,这确实有效。 (2认同)
  • 基本上,是的...操作系统仅维护要导入的池列表。这些池的详细信息存储在池内。至于将设备移动到不同的路径......这取决于。在 Solaris 上,是的......您可以将池移动到任何您想要的位置,操作系统会找到它们。在 Linux 上,我不太确定。我实际上也有一个问题(https://unix.stackexchange.com/questions/626749/zfs-on-linux-device-names),但尚未收到答案。在 Linux 中,您似乎无法信任 sdXX dev 命名,并且必须使用 /dev/disk/by-id 路径来确保池的可移植性。 (2认同)