我知道 ZFS 可在 Solaris、Illumos、Linux、BSD 等各种操作系统上使用。
假设我有一堆磁盘,它们是在 Linux 上创建的 ZFS raid 文件系统的一部分,是否可以将这些驱动器从 Linux 计算机中取出并放入运行 BSD 或 Illumos 的计算机中并正常工作?是否有任何特定于操作系统的内容被写入 ZFS 文件系统,从而导致在 ZFS 的不同实现之间移动磁盘成为问题?
如果 ZFS 格式化磁盘跨 CPU 架构(例如从运行 SPARC 的计算机迁移到 x86)会怎样。 ZFS 元数据会受到 CPU 架构字节顺序的影响吗?
答案1
在处理 ZFS 池和数据集可移植性时,真正重要的是它们的版本。您始终可以使用低于或等于操作系统支持的版本导入池,并且相同的规则适用于数据集(即文件系统、zvol 和快照)。
因此,如果您计划将 ZFS 池从某些操作系统移动到不同的操作系统,请确保为要共享的池、文件系统和 zvol 选择最大的通用版本。例如:
zpool create -o version=28 -O version=5 ...
还要注意的是,ZFS 的开源分支引入了“功能标志”,启用后,会使池与 Solaris 不兼容。他们将池版本设置为 5000。另一方面,功能标志的设计是为了在将池移动到不支持某些功能的操作系统时提供一定的灵活性。
关于架构,ZFS 对象是使用平台的本机位顺序编写的。这不是问题,因为所有 ZFS 实现都能够读取大端和小端对象。字节顺序与所有数据结构一起存储。这样,将池从 x86 导入到 SPARC 以及相互导入就不会出现问题。
最后,在处理构建在非整个磁盘上的池时,您可能会遇到问题。目标操作系统必须能够理解源磁盘分区。最坏的情况是,如果您基于纯文件创建池(在测试之外不建议这样做),并且所使用的文件系统无法安装在目标平台上。
答案2
这篇文章的标题是:ZFS 可移植性似乎表明 ZFS 在不同的实现中具有很强的可移植性。来自 Linux、FUSE、BSD 等。
摘录#1
我发现了一些例子,人们在操作系统之间迁移 ZFS 池,但只是作为一次性的体验。这是我在将 FreeNAS 中创建的两个 zpool 迁移到其他几个操作系统时发现的。
我的 zpool 由一对名为 cft 的镜像 500GB 驱动器和一个名为 single 的 2TB 驱动器组成。我学到的第一件事是,您应该仔细跟踪池名称,因为 ZFS 实用程序并不总是自动识别和导入它们。
摘录#2
令人惊讶的是,ZFS FUSE 能够识别这些池并在启动时自动安装它们。挂载点从 FreeNAS 下的 /mnt/cft/ 和 /mnt/single/ 更改为 /cft 和 /single,但仍然有效。
同样令人惊讶的是,这可以使用 Xubuntu live CD 来实现。打开终端,键入 apt-get 命令,出现提示时按 Enter 键,然后像平常一样开始使用 zfs(8) 和 zpool(8)。
摘录 #3
您在安装 FreeBSD 9.0 时可能已经注意到,安装程序现在提供 shell 和 live CD 的选择。我发现 Live CD 和 PC-BSD 命令行 ZFS 工具的行为相同。考虑到它们本质上都是 FreeBSD 9.0,这应该不足为奇。然而,令人意外的是 FreeBSD 9.0 并没有自动识别 zpool 进行导入。即使在重新格式化单个驱动器之后也是如此,以防 Ubuntu ZFS FUSE 工具对其进行更改。 ZFS 版本之间的不匹配可能与此有关,但在 Ubuntu(ZFS 版本 16)下这不是问题。从 FreeNAS 下的版本 15 到 FreeBSD 9.0 中的版本 28 的飞跃可能是原因,但向后兼容性可能会略有下降更优雅。
摘录 #4
我鼓励您在更多系统之间尝试 ZFS 旅程,并且很乐意发布您的发现。通用 ZFS 池可移植性的潜力可能会一劳永逸地消除 RAID 管理和损坏的镜像数据询问的痛苦。