在 FreeBSD 10.0 上,当创建 zfs 分区并配置它们的挂载位置(权限等)时,这些信息存储在哪里?/etc/fstab
基本上是空的。
IE:
$ zfs mount
zpool0/ROOT/default /
zpool0/home /home
zpool0/tmp /tmp
zpool0/usr /usr
zpool0/usr/local /usr/local
zpool0/usr/obj /usr/obj
zpool0/usr/ports /usr/ports
zpool0/usr/ports/distfiles /usr/ports/distfiles
zpool0/usr/ports/packages /usr/ports/packages
zpool0/usr/src /usr/src
zpool0/var /var
zpool0/var/crash /var/crash
zpool0/var/db /var/db
zpool0/var/db/pkg /var/db/pkg
zpool0/var/empty /var/empty
zpool0/var/log /var/log
zpool0/var/mail /var/mail
zpool0/var/run /var/run
zpool0/var/tmp /var/tmp
我已经对上面找到的字符串进行了 grep 搜索/etc
,/var
但没有得到任何结果。
答案1
ZFS 池信息不存储在纯文本文件中。池信息存储在磁盘本身上。ZFS 池信息也可以写入ZFS 缓存文件,但不包含挂载点信息。
如果您想获取 ZFS 池的挂载点值,可以使用以下命令:
zfs get mountpoint <pool name>
zfs get mountpoint <pool name>/<dataset>
如果您想更改挂载点值,您可以使用该zfs set
命令。有关管理挂载点的更多信息。
此外,您还可以使用以下一些其他有用的命令来获取有关 ZFS 池的信息:
zfs list
zpool list
zpool status
如果您想知道 ZFS 池缓存文件的位置,可以使用以下命令:
zpool get cachefile <pool name>
针对你的情况特别说明:
zpool get cachefile zpool0
如果您想从该文件读取信息,您可以使用该zdb
命令。 小心使用此命令. 使用时可能会有危险。更多信息。
可以在没有缓存文件的情况下创建 ZFS 池,因此如果zpool get cachefile
命令没有显示,不要惊慌。
编辑:我更新了我的答案,迈克尔是正确的ZFS 池缓存文件不包含有关挂载点的信息。不过,我还是会保留有关缓存文件的信息,以防有人发现它有用。
答案2
作为基因指出,ZFS 池中的文件系统(不是分区!)列表存储在池本身中。具体来说,它作为池的一部分存储元数据,其原始形式不易获取。
您可以使用(ZFS 调试器工具)访问元数据zdb
,但您需要小心谨慎,并且熟悉 ZFS 磁盘格式,以便正确解释某些可能的 zdb 调用的输出。(毕竟,它是一个调试器。)
zpool
您还可以使用其他 ZFS 命令(包括和命令的子命令)来使用它zfs
。
通常使用 ZFS 时文件系统您只需要使用zfs
命令,可能zfs create
,zfs destroy
(小心;这个命令确实会按照它的名字执行!),zfs get
和zfs set
。在您的特定情况下,您可能对属性最感兴趣mountpoint
,它指定了两件事:
- 如果设置为路径,则该 ZFS 文件系统在整个文件系统层次结构中的挂载点,和自动安装
- 如果设置为
legacy
,则表示文件系统是“手动”挂载的(使用不支持 ZFS 的工具),例如mount
在指定挂载点时使用普通方式(可能通过 /etc/fstab) - 如果设置为
none
,则无法挂载文件系统;这类似于设置canmount
为off
ZFS 缓存文件与此无关,因为缓存文件仅包含水池信息,你问的是文件系统信息。文件系统元数据始终存储在池本身中。