如何使用数据集将 zfs 池文件作为环回挂载?

如何使用数据集将 zfs 池文件作为环回挂载?

我已经安装了 Ubuntu 22.04.1(来自22.04.1-desktop-amd64.iso),在 VirtualBox 7 上运行,并安装了zfs-tools

我有一个名为 的 zfs 池的映像文件zfsfile01。我可以使用以下命令查看此文件:

fdisk -l zfsfile01

我通过 2 个数据集获得了值:dataset01并且dataset02- 文件似乎没有问题。

现在我必须挂载文件zfsfile01本身或将第二个文件dataset02挂载为回送设备。在阅读了一些有用的文本后,我意识到我必须首先使用 导入池文件zpool,然后使用 从池文件挂载文件系统(数据集?)zfs mount。使用 导入池

zpool import <pathto>/zfsfile01

失败,原因:

cannot import <pathto>/zfsfile01: no such pool available

我猜测是因为文件和没有正确的 zfs 池。

基本上,我可以在 Linux 中继续使用mount命令,并且可以挂载转储文件sudo mount -o loop,offset=xxx image.dd /tmp/destination和诸如此类的东西。但我不知道必须使用哪些选项来挂载带有数据集作为回送设备的 zfs 池文件。

以下是输出sudo fdisk -l zfsfile01(回复评论)

Festplatte ewf1: 1,82 TiB, 2000398934016 Bytes, 3907029168 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: 44E0E83D-A9CA-11EC-xxxx-xxxxx
Gerät       Anfang       Ende       Sektoren   Größe Typ
dataset1    128          4194431    4194304    2G FreeBSD Swap
dataset2    4194432      3907029127 3902834696 1,8T FreeBSD ZFS

以下是输出losetup(对 Artur 的回答的回应)

$ losetup -f
/dev/loop8
$ sudo losetup /dev/loop8 /media/sf_E_DRIVE/zfsfile01
losetup: /media/sf_E_DRIVE/zfsfile01: Loop-Gerät konnte nicht eingerichtet werden: Vorgang nicht zulässig

我可以dd使用以下方法循环播放图像:

sudo losetup /dev/loop8 /media/image.dd 

然后我可以使用以下命令取消设备循环:

sudo losetup -d /dev/loop8

但是我收到一个错误zfsfile01

Loop-Gerät konnte nicht eingerichtet werden: Vorgang nicht zulässig

意思是:

cannot setup loop-device: progress is not valid

答案1

我发现了一个指南在这里,希望适用于您的情况。

我会按照你的情况进行如下翻译:

  1. 将图像挂载为循环设备:

    # losetup /dev/loop100 /<pathto>/zfsfile01
    
  2. 创建分区(仅当映像包含分区时):

    # kpartx -av /dev/loop100
    add map loop100p1 (252:0): <something>
    add map loop100p9 (252:1): <something>
    
  3. 创建挂载点:

    # mkdir /mnt/<poolname>
    
  4. 尝试导入具有此池名称的 ZFS 池:

    # zpool import -R /mnt/<poolname> -d /dev/mapper
       pool: <poolname>
         id: <specific ID>
      state: ONLINE
     status: Some supported features are not enabled on the pool.
     action: The pool can be imported using its name or numeric identifier, though
             some features will not be available without an explicit 'zpool upgrade'.
     config:
    
            <poolname>       ONLINE
              loop100        ONLINE
    
  5. 使用以前结果中的 ID,您可以导入具有新选项和名称的池(如有必要 - 也许您可以跳过此步骤并只需<poolname>在下面使用):

    # zpool import -o readonly=on -f -d /dev/mapper <specific ID> <new_poolname> -R /mnt/<poolname>
    
  6. 完毕:

    # zpool status
      pool: <new_poolname>
     state: ONLINE
    status: Some supported features are not enabled on the pool. The pool can
            still be used, but some features are unavailable.
    action: Enable all features using 'zpool upgrade'. Once this is done,
            the pool may no longer be accessible by software that does not support
            the features. See zpool-features(5) for details.
      scan: none requested
    config:
    
            NAME             STATE     READ WRITE CKSUM
            <new_poolname>   ONLINE       0     0     0
              loop100        ONLINE       0     0     0
    
    errors: No known data errors
    
    # zfs list <new_poolname> -r
    NAME                       USED  AVAIL  REFER  MOUNTPOINT
    <new_poolname>             xxxM  xxxxG  xxK  /mnt/<poolname>
    <new_poolname>/dataset01   xxxM  xxxxG  xxK  /mnt/<poolname>/dataset01
    <new_poolname>/dataset02   xxxM  xxxxG  xxK  /mnt/<poolname>/dataset02
    

相关内容