我有一个总共有四个驱动器的 ZFS 镜像池。其中两个驱动器旨在用于轮换异地备份。我的期望是,在最初的重新同步之后,我可以detach
和以后attach
的磁盘只进行增量重新同步 - 但是在测试中,无论附加的磁盘是否已经包含几乎所有池,它似乎都会执行完整的重新同步内容。
使用offline
/online
方法会给我只更新磁盘而不是完全重建磁盘的预期结果吗?或者要让这项工作按预期进行,我是否需要做一些完全不同的事情——例如将每个备份磁盘用作一个磁盘池,并send
在需要更新时将最新的快照添加到它?
不要走破坏 ZFS 阵列以在异地“旋转”磁盘的道路。如您所见,重建时间很长,重新同步过程将读取/验证数据集的使用大小。
如果你有能力,快照和向远程系统发送数据是一种干净的、非侵入性的方法。我想你可以经历一个专用的单磁盘池,复制到它,然后 zpool 导出/导入的过程......但这不是很优雅。
经过进一步的实验,我找到了一个公平的解决方案,但是它带来了重大的权衡。已经
offline
'd 但未分离的磁盘稍后可以通过增量重新同步操作重新联机(“当设备联机时,已写入池的任何数据都将与新可用的设备重新同步。 ”)。在我的测试中,这将 3 磁盘镜像的重新同步时间从 28 小时缩短到 30 多分钟,大约 40GB 的数据增量。权衡是任何具有脱机磁盘的池都将被标记为降级。如果仍然有至少两个在线磁盘(在镜像池中),这实际上是一个警告——完整性和冗余保持不变。
正如其他人提到的那样,这种整体方法远非理想——将快照发送到远程池会更合适,但在我的情况下是不可行的。
总而言之,如果您需要从池中删除磁盘,然后在不需要完全重新同步的情况下将其添加回来,那么我推荐的方法是:
zpool offline pool disk
hdparm -Y /dev/thedisk
zpool online pool disk
而且,由于这尚未经过测试,因此存在增量重新同步操作不准确的风险。“活动”池和/或脱机磁盘可能会遇到问题。如果这种情况发生在我身上,我会更新,但现在将尝试这种方法。
2015 年 10 月 15 日更新
zpool split
:今天我发现了该命令,它从现有池中拆分出一个新池(使用新名称)。split
比 and 干净得多offline
,detach
因为两个池可以在同一个系统上存在(并单独清理)。export[ed]
在从系统中拔出之前,新池也可以干净(且正确) 。(我的原始帖子如下。)
警告! 此页面上的各种评论暗示它是(或可能)
zpool detach
驱动器,然后以某种方式重新连接驱动器并访问它包含的数据。但是,根据这个线程(和我自己的实验)
zpool detach
从分离的驱动器中删除“池信息”。换句话说, adetach
就像驱动器的快速重新格式化。在detach
驱动器上可能仍有大量数据之后,但实际上不可能重新安装驱动器并将数据视为可用的文件系统。因此,在我看来,它
detach
比 更具破坏性destroy
,因为我相信zpool import
可以恢复被破坏的池!A
detach
不是a ,也不是 a ,也不是a 。umount
zpool export
zpool offline
在我的实验中,如果我先是
zpool offline
一个设备,然后zpool detach
是同一个设备,池的其余部分会忘记该设备曾经存在过。但是,由于设备本身offline[d]
之前是detach[ed]
,设备本身永远不会收到detach
. 因此,设备本身仍然有它的池信息,并且可以移动到另一个系统然后import[ed]
(处于降级状态)。为了增加对您的保护,您甚至可以在命令之后、但在发出命令之前从
detach
物理上拔下设备。offline
detach
我希望使用这个
offline
,然后detach
,然后import
处理来备份我的池。与最初的海报一样,我计划使用四个驱动器,两个用于固定镜像,两个用于每月、轮换、异地(和离线)备份。我将通过在单独的系统上导入和清理每个备份来验证每个备份,然后再将其传输到异地。与原始海报不同,我不介意每月重写整个备份驱动器。事实上,我更喜欢完全重写,以便获得新鲜的部分。在同一台机器上,您是否尝试过在镜像中创建一个包含 2 个驱动器的新池?接下来,在您的工作池上创建一个快照,然后将该快照发送到新池,重复,然后下一个快照发送将是增量的。这与“向远程系统发送数据”不同,因为这是同一系统/服务器/机器中的一个池。使用此设置,您仍然可以应用 zpool 拆分/离线/分离/附加,但您只能在第二个(复制)池中执行此操作,而不是在源池中执行此操作。