![Solaris 服务器将来会容忍 ZFS 池吗?](https://linux22.com/image/761657/Solaris%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B0%86%E6%9D%A5%E4%BC%9A%E5%AE%B9%E5%BF%8D%20ZFS%20%E6%B1%A0%E5%90%97%EF%BC%9F.png)
我对 ZFS 的体验大致如下:它只是有效,所以我希望答案是,这不是问题——但我有一个数据池,如果它出了问题,我的一月份就会毁了,所以我想再检查一下。
这个问题实际上可能出现在涉及单独数据池的两种不同情况下。现在我正在处理第一种情况,但我也想知道第二种情况:
- 系统磁盘(即保存的磁盘
rpool
)的存储出现故障,但数据池的存储正常,因此您想从备份中恢复系统磁盘,但只需继续使用数据池的实时存储。 - 您在虚拟机中运行 Solaris,并希望回滚到虚拟机管理程序所拍摄的快照(不是的 ZFS 快照
rpool
),但数据池存储在“独立”模式的磁盘、RDM 等上,因此不会回滚。
在这两种情况下,当 Solaris 重新启动时,它将看到一个它知道的数据池,但该数据池处于它从未(就它所记得的)放入过的状态。
我主要关心的是系统在系统磁盘倒带之前完全关闭的情况,以及系统在倒带至映像之前完全关闭的情况。我预计在运行状态之间切换可能会有点棘手。
还请注意,在我的特定情况下,池的存储几何形状和存储路径没有改变。同样,如果他们改变了,我预计这会更加棘手。
我甚至不会在 Windows 和 NTFS 上问这个问题,因为这是一个相对简单的解耦系统,所以很难理解为什么不会工作。然而,Solaris 似乎保留了某种池元数据带外,事实证明您应该这样做,zpool export
并且zpool import
在系统之间移动池时(由于 VMware,我从未以这种方式做过这件事)。我对这些元数据及其用途的了解有限,因此我很难推断出这种情况的影响。(对此的解释会很棒!)
我实际上仍然可以访问回滚前系统。它位于由 HP SmartArray 支持的 VMFS 数据存储中,在一次不合时宜的预防性维护磁盘更换后(由于 SmartArray 比 ZFS 更笨,因此丢失了数据),该数据存储发出了 1716 POST 警告。所有重要的虚拟机似乎仍然正常,并且扫描其文件系统未发现任何错误,但我还是计划从最近的备份中恢复阵列,因为我有理由怀疑 ESXi默默地将坏扇区清零,而不是将错误传递给客户机,所以我不想冒险让某个地方的某个归零扇区以后给我带来麻烦。
对于 Solaris VM,我不必担心零扇区,因为 ZFS 会捕获该扇区,但大多数其他 VM 使用的是哑文件系统。不过,备份是整个 VMware 数据存储的映像,因此修复它们也会回滚 Solaris VM。实际上,我对此rpool
VM 进行了清理,没有发现任何错误,所以,如果我愿意,我可以将其 VMDK 存储在其他地方,然后在回滚后将其复制回来,然后整个问题就毫无意义了。我想如果没有人回答,我就会这么做,哈哈。但这是我一段时间以来一直想知道的事情,所以我还是会问。
所以,问题是,我可以继续回滚系统磁盘的存储并完成它吗? 或者我必须从回滚前系统中导出池,回滚,在连接存储之前删除池,然后连接存储并导入池?我不喜欢后者,部分原因是该池同时提供 CIFS 和 iSCSI,我不记得我是如何设置它们的,甚至不记得如何设置它们,所以如果它们坏了我会很生气。(你能看出我们没有专职系统管理员吗?哈哈)
该虚拟机正在运行旧版本 Solaris 11.0。
(顺便说一句,它之所以比较老,部分原因是因为同样的问题。我想在尝试升级之前对虚拟机进行快照,以防万一我搞砸了它,但后来我担心回滚的系统可能会对独立池做出反应,所以就不管它了。是的,我意识到我也可以对进行快照rpool
,但对于不每天使用 Solaris 的人来说,这并不能提供同样的舒适度。)
答案1
这是那些“zfs 刚刚起作用”类型的答案之一……
池元数据实际上存储在池中,而不是本地操作系统中。因此,例如,如果系统崩溃且未完全关闭,池中的元数据就会知道池未完全“导出”。如果您尝试将此池导入新系统,您会收到有关它未导出且属于另一个系统的投诉。此时,您只需执行 zpool import -f(强制),它就会完全导入。
因此,对于您的数据池而言,无论您何时/何地尝试再次导入池,池上的数据都是安全的。如果您要启动到“已恢复”的 rpool,则该 rpool 上的操作系统会知道它应该导入的池,并且只会导入数据池。它不会跟踪池是否已导出,除了一旦池被导出,操作系统就不再跟上它的事实。
现在,关于 rpool 问题。从 VM 快照、磁带备份等方式恢复它不会改变它处理数据池的方式,除非在创建或最初导入数据池之前进行了备份。如果是这种情况,您只需在操作系统恢复后导入池即可。无论 rpool 的状况如何,数据池上的数据都是安全的。
我希望这能有所帮助。
另外,您提到您不愿意升级 solaris,因为您不确定它会对数据池做出什么反应。不用担心。升级将保留已知池并根据需要导入它们。
还要注意,Solaris 操作系统升级是独立于各个“引导环境 (BE)”的。因此,当您进行操作系统升级时,它实际上会创建一个完全独立的操作系统安装,其中包含新版本……所有这些都在您的操作系统仍在运行的情况下完成。然后,当您重新启动时,它将出现在新操作系统上。如果新操作系统存在问题(即库更改等您没有预料到的问题),您只需再次重新启动并进入原始 11.0 版本,它将处于与升级前完全相同的状态。这是一种非常棒的操作系统升级方式!