我在两个磁盘上有一个 ZFS 池(镜像 RAID),我已将它们从 FreeBSD 11.0 服务器转移到 Ubuntu 16.04.2 LTS 服务器。
导入池后,我看到:
NAME USED AVAIL REFER MOUNTPOINT
zroot 993G 790G 104K /mnt/zfs
zroot/ROOT 989G 790G 96K none
zroot/ROOT/default 989G 790G 989G none
zroot/tmp 140K 790G 140K none
zroot/usr 3.37G 790G 96K none
zroot/usr/home 2.15G 790G 2.15G none
zroot/usr/ports 640M 790G 640M none
zroot/usr/src 608M 790G 608M none
zroot/var 1.66M 790G 96K none
zroot/var/audit 96K 790G 96K none
zroot/var/crash 96K 790G 96K none
zroot/var/log 476K 790G 476K none
zroot/var/mail 840K 790G 840K none
zroot/var/tmp 96K 790G 96K none
我期望看到的是/mnt/zfs
Ubuntu 系统下的完全填充的目录树,包含 993GiB 的文件。但我看到的是部分填充的目录树,其中没有文件:
$ tree /mnt/zfs
/mnt/zfs
├── tmp
├── usr
│ ├── home
│ ├── ports
│ └── src
└── var
├── audit
├── crash
├── log
├── mail
└── tmp
我很确定我在这里遗漏了一些基本的东西。
尝试#1:按照 @Zoredache 的建议为 ROOT 设置挂载点,只会导致 ROOT 目录为空:
$ sudo zfs set mountpoint=/mnt/zfs/ROOT zroot/ROOT
$ tree /mnt/zfs
/mnt/zfs
└── ROOT
尝试#2:按照@user121391的建议,为ROOT/default设置一个挂载点,也会产生一个空目录:
$ sudo zfs set mountpoint=/mnt/zfs/ROOT zroot/ROOT/default
$ tree /mnt/zfs
/mnt/zfs
0 directories, 0 files
尝试#3:根据@user131391 的其他建议,挂载单个目录似乎可行:
$ sudo zfs set mountpoint=/mnt/zfs/usr/home zroot/usr/home
$ tree /mnt/zfs
/mnt/zfs
└── usr
└── home
└── duncan
├── tmp
│ ├── code
...
└── usb
17978 directories, 67539 files
这很好,但不幸的是这没有帮助。我所寻找的文件位于 下/usr/local/
,它没有出现在 的结果中zfs list
。但是,如果您查看大小,空间显然已被使用:
zroot/ROOT/default 989G 790G 989G none
zroot/usr 3.37G 790G 96K none
尝试#4:
有关 Michael Kjörling 的更多信息:
$ sudo zfs set mountpoint=/mnt/zfs/ROOT zroot/ROOT/default
$ sudo zfs get mountpoint,mounted zroot -t filesystem -r
NAME PROPERTY VALUE SOURCE
zroot mountpoint none local
zroot mounted no -
zroot/ROOT mountpoint none local
zroot/ROOT mounted no -
zroot/ROOT/default mountpoint /mnt/zfs/ROOT local
zroot/ROOT/default mounted no -
zroot/tmp mountpoint none local
zroot/tmp mounted no -
zroot/usr mountpoint none local
zroot/usr mounted no -
zroot/usr/home mountpoint none local
zroot/usr/home mounted no -
zroot/usr/ports mountpoint none local
zroot/usr/ports mounted no -
zroot/usr/src mountpoint none local
zroot/usr/src mounted no -
zroot/var mountpoint none local
zroot/var mounted no -
zroot/var/audit mountpoint none local
zroot/var/audit mounted no -
zroot/var/crash mountpoint none local
zroot/var/crash mounted no -
zroot/var/log mountpoint none local
zroot/var/log mounted no -
zroot/var/mail mountpoint none local
zroot/var/mail mounted no -
zroot/var/tmp mountpoint none local
zroot/var/tmp mounted no -
$ tree /mnt/zfs
/mnt/zfs
0 directories, 0 files
答案1
zroot 和 zroot/ROOT 不包含任何文件,它们只是其他数据的容器。
您的大部分数据位于 zroot/ROOT/default 中。
其他 zfs 文件系统应该从 zroot 继承其挂载点(不确定这些信息在从 FreeBSD 转换到 Ubuntu 时是如何丢失的):
zfs inherit mountpoint zroot/tmp
zfs inherit mountpoint zroot/usr
zfs inherit mountpoint zroot/usr/home
zfs inherit mountpoint zroot/usr/ports
...等等(可能可以对此执行-r,但我还没有检查过)。
唯一应该具有挂载点的 zfs 文件系统none
是 zroot/ROOT:
zfs set mountpoint=none zroot/ROOT
完成所有这些操作后,您需要导出并重新导入池,并按正确的顺序挂载文件系统:
zpool export zroot
将池导入到新的挂载点但实际上并不挂载任何内容:
zpool import -a -N -r /mnt/zfs
挂载根池:
zfs mount zroot/ROOT/default
安装其他所有东西:
zfs mount -a
答案2
检查该MOUNTPOINT
列。看起来没有任何挂载点。您可能需要尝试为数据集设置挂载点。
例如我相信这将会zroot/ROOT
达到/mnt/zfs/ROOT
。
zfs set mountpoint=/mnt/zfs/ROOT zroot/ROOT
我对 ZFS 了解不够,无法告诉您为什么这种情况不会自动发生,或者在导入 Linux 系统时是否应该发生。
答案3
您需要为 zpool 的根设置一个挂载点,然后zfs inherit -r mountpoint <zpool name>
递归设置挂载点。之后zfs mount -a
挂载所有数据集。