是否可以在不需要完全重新安装的情况下分离并重新连接ZFS磁盘?


10

我有一个ZFS镜像池,共有四个驱动器。其中两个驱动器旨在用于轮流异地备份。我的期望是,在初始重新同步后,我可以detach再后来再attach对磁盘进行格式化,使其只进行增量重新同步-但是在测试中,无论所连接的磁盘是否已经包含几乎所有池,它似乎都可以执行完全重新同步内容。

使用offline/ online方法是否会给我仅更新磁盘而不是完全重建磁盘的预期结果?还是要按预期进行这项工作,我是否需要做一些完全不同的事情-例如将每个备份磁盘用作1磁盘池,并send在需要更新时将最新快照复制到该磁盘?


5
-1请勿分离/连接驱动器以进行备份,请按ZFS设计人员的预期使用发送/接收命令。
克里斯S

2
@ChrisS而不是-1,如何用一些引文写出答案。听起来您在说备份的唯一选择是在其他地方使用在线池-知道它是否正确将很高兴,但我怀疑情况并非如此。
STW

1
抱歉,我无意成为一个自负的人,但是Server Fault应该仅适用于Professional System Administrators(et al)。备份的损坏镜像方法非常难以管理,容易出错且不专业,因此不应将其视为可行的备份方法。我的建议是,使用所需的任何文件系统格式化两个备份驱动器,并使用zfs send命令获取保存到备份磁盘的完整或增量备份流,或用于zfs recv制作重复磁盘。我强烈建议您使用某种软件来管理此过程。
克里斯·S

我认为您的观点是正确的,我将其作为答案。我正在考虑改写我的问题,以较少关注我的特定情况(这是由用于非关键但很重要的内部服务器的小额预算引起的),而更多地是核心内容“我是否可以在不需要完整驱动器的情况下重新安装驱动器重新同步?”
STW

Answers:


14

不要沿着破坏ZFS阵列的方式去异地“旋转”磁盘。如您所见,重建时间很长,并且重新同步过程将读取/验证数据集的使用大小。

如果有能力,快照和将数据发送到远程系统是一种干净的,非侵入式的方法。我想您可以完成一个专用的单磁盘池,将其复制到zpool以及进行zpool导出/导入的过程……但这不是很优雅。


不幸的是,由于我没有足够的硬件或带宽在异地运行第二台ZFS服务器,因此我无法使用快照->发送方法。但是,似乎可以使用脱机/在线方式,但需要权衡一下状态报告为降级。下周左右,我会看看情况如何。
STW 2014年

1
明白了 但是,将正在运行的磁盘作为备份形式从系统中拉出并不是一个可靠的解决方案。这样做会极大地增加您的风险。
ewwhite 2014年

好点,我的计划是使它们脱机,暂停它们,松开它们的热交换托盘,然后在完全拉动它之前花一分钟以确保完全停止
STW 2014年

1
您可以在现场操作第二台服务器(或同一服务器上的第二台ZFS阵列)吗?将您的热交换托架放入其中,使其与主交换托架同步,然后将整个备份ZFS阵列作为一个单元旋转进出服务器。
丹在壁炉旁摆弄火光2014年

11

经过进一步的实验,我找到了一个公平的解决方案,但是它具有重大的取舍。可以将已offline删除但尚未分离的磁盘稍后重新进行在线备份,只需执行增量重新同步操作即可(“ 使设备联机时,已写入池中的所有数据将与新的可用设备重新同步。 ”)。在我的测试中,这使3磁盘镜像的重新同步时间从28小时减少到30分钟多一点,并具有约40GB的数据增量。

折衷方案是将任何具有脱机磁盘的池标记为降级。如果仍然至少有两个联机磁盘(在镜像池中),则这实际上是一个警告-完整性和冗余保持不变。

正如其他人提到的那样,这种整体方法远非理想之举-将快照发送到远程池将更合适,但在我看来,这是不可行的。

总而言之,如果您需要从池中删除磁盘,然后在不需要完全重新同步的情况下将其添加回去,那么我推荐的方法是:

  • 使池中的磁盘脱机: zpool offline pool disk
  • 旋转驱动器(如果要物理拉出): hdparm -Y /dev/thedisk
  • 在驱动器脱机的情况下使池处于降级状态
  • 将磁盘添加回池中: zpool online pool disk

并且,由于尚未进行测试,因此存在三角重新同步操作不准确的风险。“活动”池和/或脱机磁盘可能会遇到问题。如果发生这种情况,我将进行更新,但现在将尝试这种方法。


1
如果resilver将引入数据错误,这些错误将随着时间的推移或zpool清理而自动修复。
the-wabbit

我已经意识到磨砂膏的价值。我一直等到成功清理脱机并删除备份磁盘之后
STW 2014年

2
快速更新:在过去的一年中,这种方法已经足够有效。离线备份的每月还原测试已成功且一致。旋转阵列(而不是单个磁盘)最好在异地副本中提供一定程度的冗余,我建议尽可能这样做。总体而言,这仍然是一种骇人听闻的方法,确实会带来一些风险,但已为我们的数据提供了相当安全且便宜的异地备份。
STW 2015年

我反对旋转阵列中的所有驱动器,因为传输会慢慢损坏所有驱动器。即使驱动器仍留在现场,我也不会旋转。
Costin Gușă

2

2015年10月15日更新:今天我发现了该zpool split命令,该命令从现有池中拆分出一个新池(使用新名称)。 splitoffline和干净得多detach,因为两个池随后可以在同一系统上存在(并分别清理)。export[ed]从系统中拔出新池之前,也可以对其进行干净(正确)的安装。

(我的原始帖子如下)。

警告! 此页面上的各种注释均暗示zpool detach着驱动器可能(或可能),然后以某种方式重新连接驱动器并访问其包含的数据。

但是,根据该线程(和我自己的实验) zpool detach,从分离的驱动器中删除了“池信息”。换句话说,a detach就像驱动器快速重新格式化。在detach驱动器上仍有大量数据之后,但是实际上将无法重新安装驱动器并将数据视为可用的文件系统。

因此,在我看来,它detach比更具破坏性destroy,因为我相信它zpool import可以恢复被破坏的池!

一个detach不是一个umount也不是一个zpool export也没有一个zpool offline

在实验中,如果我先是zpool offline一台设备,然后再zpool detach是同一台设备,则池中的其余部分会忘记该设备曾经存在过。但是,由于设备本身早于offline[d]以前,因此detach[ed]永远不会将其通知给设备本身detach。因此,设备本身仍然具有其池信息,并且可以移动到另一个系统,然后再移动import[ed](处于降级状态)。

为了进一步保护detach您,甚至可以offline在发出detach命令之后但在发出命令之前物理上拔下设备的电源。

我希望先使用offline,然后detach再使用import来备份我的池。像原始海报一样,我计划使用四个驱动器,两个使用恒定的镜像,另外两个用于每月,轮换,异地(和脱机)备份。在将其备份到异地之前,我将通过在单独的系统上导入和清理每个备份来对其进行验证。与原始海报不同,我不介意每月重写整个备份驱动器。实际上,我更喜欢完全重写以便有新鲜感。


0

在同一台计算机上,您是否尝试过使用镜像中的2个驱动器创建新池?接下来,在您的工作池上创建快照,然后将该快照发送到新池,重复执行,然后下一个快照发送将是增量的。这与“将数据发送到远程系统”不同,因为这是同一系统/服务器/机器内的一个池。使用此设置,您仍然可以应用zpool split / offline / detach / attach,但只能在第二个(复制)池中执行,而不能在源池中进行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.