挂载源 ZFS 文件系统

挂载源 ZFS 文件系统

我正在尝试将 FreeBSD 安装克隆到新硬盘上,需要安装它,然后找到安装点才能继续克隆过程。

我想要克隆到的内部驱动器当前安装有 Windows 10 和我想要克隆的不太优化的 FreeBSD 安装。

我很高兴为 FreeBSD 使用当前的 UFS 分区方案。

我将从实时 FreeBSD USB 记忆棒启动,以便运行适当的命令。我遇到的问题是,我想要克隆的磁盘是使用 ZFS 分区的,我无法理解如何安装它以及如何找到安装点。该磁盘使用 USB-SATA 适配器连接到我的计算机。

答案1

我假设您的“源”安装纯粹是在 ZFS 上,并且直接从 ZFS 池启动。

由于您要在两种不同的文件系统类型之间进行克隆,因此您可能需要使用类似的工具rsync来完成此操作。您将在一个挂载点挂载源层次结构(您的 ZFS 池),并在另一挂载点挂载目标层次结构(一个或多个 UFS 文件系统)。最后,您将使用rsync将源层次结构复制到目标。

首先阅读zpool手册页。 zpool有许多子命令,每个子命令都有自己的手册页。对于初学者,请注意以下zpool import命令:

 zpool-import(8)
         Make disks containing ZFS storage pools available for use on the
         system.

并参考man zpool-import

zpool import [-D] [-d dir|device]…
         Lists pools available to import.

请注意,参数是可选的。您可能不需要它们。明智的做法是从 U 盘启动来完成这项工作。从 U 盘启动后,zpool import将显示可用的池。首先验证您的源 ZFS 池,我将tank在本示例中引用它。

# zpool import
   pool: tank
     id: 11588110742206048524
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

        tank                    ONLINE
          gpt/zfs-57SCK7S0FVLC  ONLINE
          gpt/zfs-57SCK7S1FVLC  ONLINE

挂载“外部”ZFS 池时要小心——这些池与挂载它们的系统的操作没有直接关系。很容易无意中将外部 ZFS 池或文件系统挂载到正在运行的系统的文件系统之上,该操作在不重新启动的情况下可能无法逆转。

一旦确定源 ZFS 池可供您使用,您就可以挂载源 (ZFS) 和目标 (UFS) 文件系统并开始。

挂载源 ZFS 文件系统

再次来自man zpool-import

         -R root
                 Sets the cachefile property to none and the altroot
                 property to root.

zpool import -R /mnt tank允许您将池的整个 ZFS 层次结构挂载tank在不同的挂载点下,在本例中为/mnt.将源池也保持为只读可能是一个好主意。命令

# zpool import -o readonly=on -R /mnt tank
# zfs list -r tank
# zfs mount

将以只读模式挂载源池/mnt,然后列出存在的各个 ZFS 文件系统以及已挂载的文件系统。您可能会看到一条消息,大意是:

cannot import 'tank': pool was previously in use from another system.
Last accessed by <unknown> (hostid=0) at Tue Apr 19 03:29:13 2022
The pool can be imported, use 'zpool import -f' to import the pool.

如果发生这种情况,那么正如它所说的那样,只需将-f选项添加到您的zpool import命令中:

# zpool import -f -o readonly=on -R /mnt tank

这就是你的源树。

挂载目标文件系统

我将使用/mnt.new您的目标文件系统的挂载点,您所说的文件系统可能是 UFS。请注意,如果您将使用非 ZFS 文件系统作为结构/mnt.new,则需要在您将使用的每个磁盘分区( 、 等)上运行“newfs /dev/ada0p1/dev/ada0p2。一如既往,非常确定您知道哪个设备是哪个设备,并且您的设置是正确的。

使用 使文件系统保持原始状态后newfs,将作为文件系统的分区挂载到/其下/mnt.new,并创建作为 UFS 层次结构的下一级挂载点所需的任何目录。然后挂载下一级磁盘分区,每个分区挂载到正确的位置。例如,如果您的新 UFS 文件系统根目录为 /dev/ada0p1,其中包含/usr/dev/ada0p2 和/usr/home/dev/ada0p3,那么您需要:

mkdir /mnt.new
mount /dev/ada0p1 /mnt.new
mkdir /mnt.new/usr
mount /dev/ada0p2 /mnt.new/usr
mkdir /mnt.new/usr/home
mount /dev/ada0p3 /mnt.new/usr/home

请记住,克隆到/mnt.new安装点后,您同样需要编辑/mnt.new/etc/fstab并确保它正确安装包含文件系统的磁盘分区。

这是基本的 UFS 文件系统管理,因此我不会进一步详细介绍。

Rsync 您的源层次结构到目标

一旦您安装了源 ZFS 树/mnt并安装了目标 UFS 树,/mnt.new您只需将文件从一个树复制到另一个树即可。 rsync是一个很好的工具。

# rsync -HAXav /mnt/ /mnt.new/

结尾的斜杠/mnt/很重要,并且包含在/mnt.new/“团结”中。给出的命令将列出复制的每个文件名。如果您不想看到该详细信息,请v从命令中省略 。

复制文件后,您仍然需要进行一些手动更改。如前所述,您需要检查/mnt.new/etc/fstab并进行必要的更改,以确保新系统启动时正确安装 UFS 文件系统。您还应该查看/mnt.new/etc/rc.conf以注释掉类似的行zfs_enable='yes'以及 中的类似条目/mnt.new/boot/loader.conf

卸载源和目标层次结构并重新启动

当您认为新系统已准备好尝试时,请导出源 ZFS 池:

zpool export tank

并从以下位置卸载您的 UFS 设备/mnt.new

umount /mnt.new/usr/home
umount /mnt.new/usr
umount /mnt.new

现在您可以祈祷并重新启动到 UFS 驱动器。将 USB 记忆棒放在手边,以便您可以在 UFS 磁盘首次尝试无法启动时进行故障排除。

相关内容