导出(通过 NFS)根 (/) FS

导出(通过 NFS)根 (/) FS

我有3个运行Linux 2.6.37的嵌入式CPU系统,它们通过以太网连接。每个CPU都有自己的NAND闪存。其中一个是“主”CPU 0 号,另外 2 个是他的同伴。我希望这三个文件都从驻留在 CPU0 上的同一根文件系统运行,以避免 RootFS 文件中可能的更新/更改增加两倍。

为此,我想通过 CPU0 上的 NFS 导出“/”(根文件系统),而 CPU1 和 CPU2 将通过 NFS (nfsroot) 从 CPU0 启动。

但这似乎不起作用 - 任何导出“/”的尝试都会失败,并显示消息:exportfs:/不支持 NFS 导出

导出“/”有什么原则限制吗?如果是,有什么想法可以做些什么来实现目标吗?非常感谢。

添加/更新:

  1. 每个CPU都知道它的编号,引导加载程序(u-boot)会将正确的参数放入Linux命令行中,以从NAND(CPU0)或NFS(CPU1-2)引导。同样的道理,CPU0 会启动 NFS 服务器,而 CPU1-2 则不会。

  2. 不需要“私有”文件,因为无论如何,根文件系统现在也以只读方式安装。只是每个 CPUx 都有自己的私有 NAND,而我想消除它。

  3. 这与“无盘”情况不同,因为在无盘情况下,某些子目录被导出为根文件系统,而在我的情况下,必须导出所有根文件系统。

  4. 我应该注意到,从 NAND 导出任何子目录都可以正常工作(我至少尝试了几个)。仅导出“/”会失败。

答案1

如果 CPU 共享整个根文件系统,则这将包括所有配置,例如包括 nfs 配置。他们怎么知道自己是主要的还是同伴?

一种方法是在闪存上为最大的目录创建分区(使用 查找du -sm /*|sort -n),并在可能的情况下从同伴中挂载这些分区(可以使用/home或执行/usr,但不能使用/etc)。

但是,当系统仍处于开发阶段时,您可能不知道每个分区需要多少空间,因此最好只拥有一个小/root分区和一个大的其他分区/shared,例如可以安装的分区。然后,您必须创建符号链接,例如ln -s /shared/home /home.但请确保您的系统不会变砖!如果尝试移动/bin到共享分区,/bin/mount将无法在启动时找到。

答案2

非递归地将根目录绑定到其他地方,例如/srv/nfs/root

mount --bind / /srv/nfs/root

然后导出/srv/nfs/root

不要进行递归绑定 ( --rbind),否则 /proc、/sys 和 /dev 等目录也会被导出。

相关内容