我有3个运行Linux 2.6.37的嵌入式CPU系统,它们通过以太网连接。每个CPU都有自己的NAND闪存。其中一个是“主”CPU 0 号,另外 2 个是他的同伴。我希望这三个文件都从驻留在 CPU0 上的同一根文件系统运行,以避免 RootFS 文件中可能的更新/更改增加两倍。
为此,我想通过 CPU0 上的 NFS 导出“/”(根文件系统),而 CPU1 和 CPU2 将通过 NFS (nfsroot) 从 CPU0 启动。
但这似乎不起作用 - 任何导出“/”的尝试都会失败,并显示消息:exportfs:/不支持 NFS 导出
导出“/”有什么原则限制吗?如果是,有什么想法可以做些什么来实现目标吗?非常感谢。
添加/更新:
每个CPU都知道它的编号,引导加载程序(u-boot)会将正确的参数放入Linux命令行中,以从NAND(CPU0)或NFS(CPU1-2)引导。同样的道理,CPU0 会启动 NFS 服务器,而 CPU1-2 则不会。
不需要“私有”文件,因为无论如何,根文件系统现在也以只读方式安装。只是每个 CPUx 都有自己的私有 NAND,而我想消除它。
这与“无盘”情况不同,因为在无盘情况下,某些子目录被导出为根文件系统,而在我的情况下,必须导出所有根文件系统。
我应该注意到,从 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 等目录也会被导出。