如何从崩溃的系统导入 ZFS 池?

如何从崩溃的系统导入 ZFS 池?

我有一个 ZFS 池连接到一个崩溃的系统。我正在寻找将该池带到新系统的方法,但是看起来我需要zfs export先使用它,因为我不再有权访问原始系统,所以我无法执行zfs export等等。

最主要的问题是,我有 4 个外部驱动器连接到该系统,但其中只有两个是 ZFS 池的一部分。我实际上不记得我是如何设置它们的,也不记得这 4 个 USB 驱动器中哪个是 ZFS 池的一部分,但我记得这 4 个驱动器中只有两个是 ZFS 池的一部分。

如果我不再具备初始条件,如何在新系统上安装池?

我在用6.1.0-9-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.27-1 (2023-05-08) x86_64 GNU/Linux

谢谢

答案1

zpool import确实是导入 ZFS 池的唯一命令,包括zpool export之前已正确编辑的池和未正确编辑的池。

zpool list如果池尚未导入,则应首先检查。如果池尚未导入,zpool import则将列出所有可导入的池。如果池未先导出,则可能需要标志-f。您可以使用查看特定设备zpool import -d

综合起来,它可能看起来像这样:

# zpool import -d /home/daniel/zpool-test-1.img
   pool: test123
     id: 12638011090530745002
  state: DEGRADED
status: One or more devices are missing from the system.
 action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-2Q
 config:

        test123                           DEGRADED
          mirror-0                        DEGRADED
            /home/daniel/zpool-test-1.img  ONLINE
            /home/daniel/zpool-test-b.img  UNAVAIL  cannot open

(我通过重命名文件来强制解决这个问题。)

然后您只需导入池即可:

zpool import -d /home/daniel/zpool-test-1.img test123

我建议您不要使用zpool import -a,只是为了确保您只处理您想要的 ZFS 池。

然后您可以使用它zfs list来找出东西挂载在哪里。ZFS 会自动处理该问题(除非特别告知不要这么做)。


您可以使用以下命令检查池设备而无需导入它们zdb

# zdb -l zpool-test-1.img
------------------------------------
LABEL 0
------------------------------------
    version: 5000
    name: 'test123'
    state: 1
    txg: 19
    pool_guid: 12638011090530745002
    errata: 0
    hostname: 'server'
    top_guid: 6892256335198247059
    guid: 11629412553399697108
    vdev_children: 1
    vdev_tree:
        type: 'mirror'
        id: 0
        guid: 6892256335198247059
        metaslab_array: 64
        metaslab_shift: 29
        ashift: 9
        asize: 5363990528
        is_log: 0
        create_txg: 4
        children[0]:
            type: 'file'
            id: 0
            guid: 11629412553399697108
            path: '/home/daniel/zpool-test-a.img'
            create_txg: 4
        children[1]:
            type: 'file'
            id: 1
            guid: 1859957653576985949
            path: '/home/daniel/zpool-test-b.img'
            create_txg: 4
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data
        com.klarasystems:vdev_zaps_v2
    labels = 0 1 2 3

尝试所有分区,直到找到正确的分区。


除非您选择了“不正确”(非描述性)的分区类型 ID,否则您应该能够识别包含 ZFS 的设备/分区。fdisk -l对于“全盘”vdev,ZFS 现在创建了两个 GPT 分区,一个类型为“Solaris /usr & Apple ZFS”,另一个类型为“Solaris reserved 1”。

但理想情况下,只需连接所有驱动器并让 ZFS 弄清楚,它确实应该在常规块设备上自动找到池,无论是否是 USB。

相关内容