zpool导出到底有什么作用?

zpool导出到底有什么作用?

读完有关zpool exportin 的部分后man zpool,我有点担心:

从系统导出给定的池。所有设备都标记为导出,但仍被其他子系统视为正在使用。只要存在足够数量的设备,设备就可以在系统(甚至是不同字节序的系统)之间移动和导入。

“但仍被其他子系统认为正在使用”是什么意思? “只要有足够数量的设备”是什么意思?

背景:

我有一个相当复杂的备份脚本,它基于 ZFS 快照将生产服务器上的虚拟机存储复制到备用服务器(准确地说,它是主机和虚拟机中的各种脚本的系统,它们协同工作以冻结文件VM 中的系统,获取 ZFS 快照,解冻 VM 中的文件系统,并将快照复制到备用服务器)。这部分工作起来就像一个魅力。

但实际上,除了复制之外,我还需要一种备份。也就是说,我想将虚拟机存储备份到磁盘上,然后我可以将其从所连接的盒子中取出,并将其安全地存储在另一个位置。

我仔细思考了最好的方法,并得出以下想法:

  • 在备用服务器中,安装一个 SATA / SAS 硬盘驱动器托盘,以便我可以在那里插拔硬盘驱动器(或使用连接到其背板的现有托盘之一)。
  • 在备用服务器上,插入一个新的 HDD 并创建一个新的 ZPOOL,其中仅包含一个仅由该 HDD 组成的 VDEV。
  • 让生产服务器将其 VM 存储复制到新的 ZPOOL此外到它已经复制到的 ZPOOL。
  • 复制完成后,导出新的 ZPOOL,拔下新的 HDD,并将其存放在安全的地方。 **
  • 在备用服务器上,插入第二个新 HDD(也代表 ZPOOL),然后重复前两个步骤。 ****
  • 依此类推...(例如,每天将备用服务器当前连接的 HDD 更换为另一块 HDD,或者使用 7 个 HDD 并每周轮换,等等)。

** 这是我不喜欢的步骤(在阅读了上面引用的部分之后)。一方面,在导出 ZPOOL(它是唯一的设备)后移除 HDD 应该没有问题,因为文件系统在导出之前已被卸载(并因此被刷新)。另一方面,手册上说,即使在导出池之后,该 HDD 仍将“被其他子系统视为正在使用”,这使我相信在这种情况下简单地删除它是一个坏主意。

因此,我想知道这个说法到底意味着什么,以及如何使硬盘被考虑不是其他子系统不再使用。

**** 我知道我必须为此付出一些努力。该计划是创建一个脚本以及适当的udev规则,以使备用服务器识别何时插入 HDD 并导入现有的 ZPOOL(HDD 将通过 SATA-3 或 SAS 12G 直接连接,而不是通过 USB)。但这不是这个问题的一部分。

总结一下:

确切地说zpool export,在导出 ZPOOL 后,我需要执行哪些步骤才能安全地物理删除 ZPOOL 中唯一的设备 HDD?

答案1

我做的事情与您所描述的类似,我认为您在使用 zpool export 时可能有点混淆。

zpool export 会从系统中删除整个池...快照等等。这不是你想要的。

要执行您所要求的操作,第一步是了解我们正在处理的 zpool 类型。特别是,您可能需要一个简单的镜像池。至少 3 个驱动器。

就我而言,我有一个带有 3 个镜像的 zpool。当我想将数据移出现场以进行安全保存时,我会“离线”要移出的驱动器,然后将其从阵列中删除。这看起来像:

      pool: pool_09
 state: ONLINE
  scan: resilvered 1000G in 2h15m with 0 errors on Sun Nov 22 19:49:53 2020

config:

        NAME                         STATE     READ WRITE CKSUM
        pool_09                      ONLINE       0     0     0
          mirror-0                   ONLINE       0     0     0
            c0t5000C500B0BCFB13d0    ONLINE       0     0     0
            c0t5000C500B0889E5Bd0    ONLINE       0     0     0
            c0t5000C500B09F0C54d0    ONLINE       0     0     0
        logs
          mirror-1                   ONLINE       0     0     0
            c0t5F8DB4C095690612d0s3  ONLINE       0     0     0
            c0t5F8DB4C095691282d0s3  ONLINE       0     0     0


      # zpool offline  pool_09 c0t5000C500B0BCFB13d0

这将为池留下两个镜像驱动器,因此我仍然可以承受本地故障。对我来说,我不会将驱动器导入到另一个系统中,但我不明白为什么你不能这样做。我只是把我的带到另一栋楼。

当我准备好重新同步镜像时,我将删除的驱动器放回到阵列中并将其“联机”:

zpool online pool_09 c0t5000C500B0BCFB13d0

一旦您将其联机,ZFS 将自动重新同步驱动器,然后您可以重复此过程。

我认为您不想使用一堆旋转驱动器来执行此操作。我什至不确定这是否有效。我想如果你有 10 倍镜像集或其他东西的话就会这样。请记住,删除的驱动器离开阵列的时间越长,重新同步所需的时间就越长。

另一种选择是创建另一个池,zfs 将所有数据发送到其中,然后导出该池并将其带到异地。我还没有这样做,但它应该可以工作......但可能会慢很多。

相关内容