NFS ROOT : Linux , 使用NFS 作为rootfs

NFS ROOT : Linux , 使用NFS 作为rootfs


发布日期: 1970-01-01 更新日期: 2015-01-30 编辑:giser 浏览次数: 6561

标签:

摘要: Thursday, 22. December 2005, 08:17 在kernel source的Document中就有一篇nfsroot.txt。照着里面作就可以。 因为nfsroot是要mount nfs上的path作为root,所以在此之前,他的roo...

Thursday, 22. December 2005, 08:17 在kernel source的Document中就有一篇nfsroot.txt。照着里面作就可以。 因为nfsroot是要mount nfs上的path作为root,所以在此之前,他的root filesystem是不存在的。 所以nfs file system support 要build in在kernel中,不可以用 Module (.0)的方式(因为,.o 要放在那?)。 当然,网路 driver 也要内建(例如,你用rtl8192too,就要选 '*',不可以选'M')。 kernel 有mount nfs的能力后,接着就要"通知"kenel是要用nfs 作为rootfs,并且要到那里去mount nfs。这要靠kernel command line来完成:

告诉kernel使用nfs作为rootfs,

server path = /nfsroot: root=/dev/nfs

设定nfs server address和path:nfsroot=10.3.5.166:/nfsroot

设定client的 ip=10.3.5.123 nfs server=10.3.5.166,gw=10.3.4.254 netmask=255.255.252.0 hostname=""

使用eth0 不使用autoconfig来取的ip

ip=10.3.5.123:10.3.5.166:10.3.4.254:255.255.252.0::eth0:off 

这样kernel 的动作就算ok了。

rebuild kernel, config bootloader,用这个kernel boot。

以这个embedd system来说,他的bootloader内建romfs filesystem,会在flash中找romfs signature,并且找到romfs中的linux.bin.gz来开机,所以就要把build好的kernel.bin压缩后,再用 genromfs 产生一个里面只有linux.bin.gz这个档案的romfs image,烧在flash中。让bootloader能用这个linux image来开机。接着就是server端,要准备好rootfs(可以使用genext2fs)。

修改nfs server的exports file 10.3.5.123/nfsroot(rw)

重新启动nfs server: #/etc/init.d/nfs-kernel-server resart

OK,现在可以叫client 开机。 就可以看到client以NFS 作为 rootfs 开机成功了。

设定好kernel参数,装备好需要的driver。 让kernel开机。 一切就OK了。

NFS export出去的folder也可以用symbolic link

ln -s /nfsroot /home/develop/release1

或是 # ln -s /nfsroot/home/develop/test

这样就可以轻易的让linux使用不同的rootfs。

但是要注意每次变更link后要重新启动nfs-kernel-server才行。 我以前总觉得疑惑,mount root的动作有点鸡生蛋,蛋生鸡的感觉。因为/dev 是在 root 下,但是root都还没起来,kernel又怎么去找 root 的 /dev 来mount 呢? 看 了init 的source code 才知道,init的do_mounts( )里面已经建好了 device name 对 device major/minor number的table,不需要由/dev去找。所以在/dev还没建立好以前,kernel已经可以知道device的major/minor number是甚么了。 知道major/minor number后,就可以到driver table中找到正确的device driver 了。 一个问题:

exports: /nfsroot 10.3.5.123(rw) /home/charles/sgm 10.3.5.123(rw)

但是nfsroot--> /home/charles/sgm/root

也就是说 nfsroot,实际是另一个export path的sub folder。

这样使用nfsroot开机的机器(10.3.5.123),要mount /home/charles/sgm时会出现

error : mount: nfs
warning: mount version newer than kernel NFS: mount program didn't pass remote
address! failed, reason given by server: Permission denied mount: nfsmount
failed: Bad file descriptor mount: Mounting 10.3.5.166:/home/charles/sigma on
/tmp/sigma failed: Invalid argument

关注公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org