我的 Lan 服务器上有一个加密的硬盘。它是使用 luks/dm-crypt 加密的。服务器运行 NFS v4 以在 LAN 中共享文件。它可以工作,但加密的 USB 硬盘除外。如果客户端将共享安装到他的文件系统中,他会发现一个空文件夹,其中应该包含解密的文件。
这是设置:
如何服务器安装这卢克斯分区:
sudo cryptsetup luksOpen /dev/sdb1 data1
sudo mount /dev/mapper/data1 /exports/user1/data1
在服务器上解密和安装驱动器工作正常。如果我去/exports/user1/data1
我会得到解密的文件。
这NFS 导出:
/exports 192.168.178.20(rw,sync,fsid=0,no_subtree_check,root_squash) 192.168.178.21(rw,sync,fsid=0,no_subtree_check,root_squash)
/exports/user1 192.168.178.20(rw,sync,no_subtree_check,root_squash) 192.168.178.21(rw,sync,no_subtree_check,root_squash)
因此,解密后的 USB 驱动器将直接安装到 NFS 导出中,地址为/exports/user1/data1
这就是如何客户端安装这共享文件夹:
sudo mount.nfs4 192.168.178.10:/ /fs_data -o soft,intr,rsize=32768,wsize=32768
现在,如果客户端将服务器导出安装到其文件系统中,他会发现“data1”文件夹为空。
我有什么遗漏的吗?
更新:
感谢吉尔斯很好的答案我成功了。我试图避免crossmnt
并nohide
避免遇到最终的情况索引节点问题。这就是我现在使用的:
/etc/出口
/exports/user1 192.168.178.20(rw,sync,fsid=0,crossmnt,no_subtree_check)
/exports/user1/data1 192.168.178.20(rw,sync,no_subtree_check)
客户端命令挂载数据1:
sudo mount.nfs4 192.168.178.10:/data1 /fs_data -o soft,intr,rsize=32768,wsize=32768
答案1
对于 Linux 内核 NFS 服务器,如果导出目录树,则不包括安装在该树上的任何文件系统。请参阅nohide
选项中的说明exports(5)
手册页。
您需要显式导出已安装的文件系统,即您需要在exports
for中单独一行/exports/user1/data1
。此外,您需要在安装后(重新)启动 NFS 服务器/exports/user1/data1
。
在客户端,需要/fs_data/data1
单独挂载。正如手册页中所讨论的exports
,您可以通过包含nohide
on 选项/exports/users1/data1
或crossmnt
on 选项来避免这种情况/exports/users1
,但这可能会导致问题,因为客户端将在看似相同的文件系统上看到具有相同 inode 编号的文件。例如,这可能会导致文件复制或归档程序忽略文件,因为它认为它已经备份了它们(如果程序已经看到/fs_data/foo
inode 42,它会认为/fs_data/data1/bar
与 inode 42 无关的文件似乎是相同的文件系统 - 但实际上不是 - 是相同的文件)。
答案2
我无法评论缺乏要点,所以我会补充一点,在将附加文件系统添加到 /etc/exports 后,我不必重新启动 nfs 服务器,这将是一个痛苦,因为我使用内核 nfs,而不是我只需要执行另一个 exportfs -a 即可导出新指定的导出。