在调试开发板的过程中用nfs文件系统作为根文件系统启动,可以随时更新文件系统内的文件,非常的方便。这段时间工作用到了nfs根文件系统,这里做一下总结。
安装 配置:
aptitude install nfs-kernel-server
vim /etc/exports
这里面就是nfs的默认目录和相关属性
• ro 只读访问
• rw 读写访问
• sync 所有数据在请求时写入共享
• async NFS在写入数据前可以相应请求
• secure NFS通过1024以下的安全TCP/IP端口发送
• insecure NFS通过1024以上的端口发送
• wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
• no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
• hide 在NFS共享目录中不共享其子目录
• no_hide 共享NFS目录的子目录
• subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
• no_subtree_check 和上面相对,不检查父目录权限
• all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
• no_all_squash 保留共享文件的UID和GID(默认)
• root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
• no_root_squash root用户具有根目录的完全管理访问权限
• anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
• anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
• no_root_squash:登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限,此参数很不安全,建议不要使用。我在使用nfs的时候发现即使rw权限仍然不能在nfs根目录下创建文件,这个就需要这个参数
•
•
root_squash:在登入NFS主機使用分享之目录的使用者如果是root时,那么这个使用者的权限將被压缩成为匿名使用者,通常他的UID与GID都会变成nobody那个身份;
all_squash:不管登陆NFS主机的用户是什么都会被重新设定为nobody。
anonuid:将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中。
anongid:同anonuid ,但是变成group ID就是了!
sync:资料同步写入存储器中。
async:资料会先暂时存放在内存中,不会直接写入硬盘。
insecure 允许从这台机器过来的非授权访问。
我添加了如下一句:
/home/work/nfsroot *(rw,sync,no_root_squash)
说明我的nfs文件系统可读可写,并且数据是同步写入的。
然后重新启动一下nfs服务器。
service nfs-kernel-server restart
接下来就是要在开发板上启动挂载nfs了,首先要配置一下内核。
make menuconfig
File Systerm ---> Network File Systerm 下选中NFS file systerm support 更重要的是要选中 Root file systerm support。
这样内核就支持nfs启动了。
接下来最重要的就是内核参数了。
关于nfs的内核启动参数如下
root=/dev/nfs nfsroot=PC-ip:nfspath ip=local-ip:PC-ip:gateway:netmask:alias:net-port:off
gateway写成和PC-ip一样就可以。
比如我的参数如下:
root=/dev/nfs rw nfsroot=172.17.101.18:/home/work/nfsroot ip=172.17.101.190:172.17.101.18:172.17.101.18:255.255.255.0:ubuntu:eth0:off
这样启动nfs就自动挂载为根文件系统了。
这里有一个参数是rw,我发现不写这个参数nfs文件系统挂载默认为只读的,只能加rw。