我正在从旧的 Ubuntu 安装过渡到新的安装。在过渡时,我希望能够使用新旧操作系统中的同一个池。
新操作系统将位于不同的磁盘上。我在启动时选择操作系统。在任何特定时间只有一个操作系统会使用该池。
这有可能吗?我是否会面临数据损坏或丢失整个池的风险?
答案1
只要池在关闭期间导出,并且一次仅从一个系统使用,你们所讨论的应该是没有问题的。
ZFS 真的真的真的不喜欢同时从多个系统使用同一个池,即使在只读模式下(-o readonly=on
给定zpool import
),但这似乎不适用于您的情况。
为了保持两个版本之间的兼容性,您需要非常确定不是运行zpool upgrade
或者zfs upgrade
特别是从较新的安装运行。其中任何一个都可能导致在运行旧安装时丢失对池或文件系统的访问权限,但在运行支持升级到的 ZFS 磁盘版本的系统时,两者都不会导致池或文件系统丢失。
完成升级后,如果需要,您可以根据需要使用zpool upgrade
和/或将池升级到最新的磁盘格式和功能zfs upgrade
。
答案2
假设您正在谈论使用池作为数据存储,而不是在其中运行系统根目录,那就没问题了。
我当前安装了两个系统,一个位于 EXT4 分区上,另一个位于具有sudo zfs set mountpoint=/ tank/my/dataset
.
从 EXT4 系统访问此池很痛苦,因为zfs mount -a
无法挂载到根目录。所以这里有三种方法。
对于这两种方式,您都需要导入池而不自动挂载它。
sudo zpool import tank -N
A) 修改属性
sudo mkdir /mnt/mydataset
sudo zfs set mountpoint=/mnt/mydataset tank/my/dataset
sudo zfs mount tank/my/dataset
# [do stuff in /mnt/mydataset]
# ...
sudo zfs unmount tank/my/dataset
# restore mountpoint so that the other system is able to boot from it
sudo zfs set mountpoint=/ tank/my/dataset
B)避免zfs mount
如果您发现来回设置安装点很烦人,我发现以下方法也可以工作。不能保证这有多黑客。
sudo mkdir /mnt/mydataset
sudo mount -t zfs -o zfsutil tank/my/dataset /mnt/mydataset
# [do stuff in /mnt/mydataset]
# ...
sudo umount /mnt/mydataset
请注意,当我使用此选项 B) chroot/mnt/mydataset
然后使用其他系统的 zfs 命令时,我遇到了一些问题。我不知道这些问题是否相关。只要你不做类似的事情,就应该没问题。
C) 替代根
您可以指定altroot
池上的属性。
替代根
备用根目录。如果设置,此目录将添加到池中的任何安装点之前。当检查安装点不可信的未知池时,或者在典型路径无效的备用引导环境中时,可以使用此功能。
altroot
不是持久属性。仅当系统启动时有效。设置 altroot 默认为 usingcachefile = none
,但可以使用显式设置覆盖此设置。