您的位置:首页 > 运维架构 > Shell

关于rhel5安装nfs服务器,及shell script编写问题总结

2010-04-10 09:29 477 查看
1、rhel5实现nfs,并在at91sam9260上进行mount试验

 

 step1:按照网上搜索的方法进行安装,然后检查确认是否已经启动了nfs服务(这点比较重要)

 step2:修改/etc/exports文件,这个比较重要,mount上去之后,能否实现读写就靠它啦。      

             举例:本地ip为192.168.1.198,想通过nfs共享的文件夹为/home/wjb/test,且只读。

             vim /etc/exports, 并输入如下内容:

              /home/wjb/test 192.168.1.* (ro)

 

              其中192.168.1.*表示所有192.168.1网段的ip都能mount这个盘,ro表示只读,这里还有很多属性选项,google一下就好

             

              若想可以在客户端对nfs目录进行可读可写,需填写(rw,anonuid=xxx,sync(或async)),这个我试验了几遍才得出的结果。rw表示可写,anonuid=xxx表示将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx),这点很重要,因为在本地创建/home/wjb/test时,带入了创建用户的uid、gid,所以若以root创建,则nfs后,在客户端进行写操作时,会出现权限不足的警告,所以我用一般用户(如wjb)创建test目录,并把远程访问的用户都指定本地用户wjb(即xxx=wjb的uid),这就有足够权限进行写操作了。sync以及async表示的是以同步还是异步的方式写入,sync表现出来的速度要慢些,async因为是异步的关系,会快些。一定要带上这个关键字,否则,在远方mount时,生成的文件,在本地是不能看到的,也不能保存。

 

 step3:在at91sam9260上验证

             输入 mount -t nfs -o nolock 192.168.1.198:/home/wjb/test /mnt/nfs

            mount到本地的/mnt/nfs文件夹。之所以要加-o nolock参数,是因为若不加,则不能mount成功,并出现不能取得文件锁的错误,错误代码-5,从网上得出的结论是,busybox内的mount命令会需要等待文件锁,通过-o选项去掉此操作,可以成功mount上。

 

 

2、shell srcipt 问题总结

      想在linux下,写一个自动加入module,并根据其设备号,自动进行mknod的脚本,具体如下:

 

 

  1 #!/bin/bash
  2 echo "bona_second.ko initialization  shell script is running..."
  3
  4 checkmodule=$(/sbin/lsmod | grep bona_second)
  5
  6 if [ "$checkmodule" != "" ];then
  7         echo "bona_second is insmod"
  8 else
  9         echo "bona_second is not yet insmod~~~"
 10         /sbin/insmod /home/wjb/test/bona_second_vmware.ko
 11         if [ "$?" -eq 0 ];then
 12                 echo "bona_second insmod successfully"
 13         else
 14                 echo "bona_second can't insmod, please check!!"
 15                 exit
 16         fi
 17 fi
 18
 19 if [ -c /dev/second ];then
 20         echo "/dev/second is made"
 21         exit
 22 else
 23         echo "/dev/second is not made~~"
 24         name=$(cat /proc/devices | grep second)
 25         num=${name% *d}
 26         mknod /dev/second c ${num} 0
 27         if [ "$?" -eq 0 ];then
 28                 echo "mknod /dev/second success"
 29         else
 30                 echo "mknod /dev/second fail, please check!!"
 31         fi
 32         exit
 33 fi
 34

 

注意以下几点:

1、 4 checkmodule=$(/sbin/lsmod | grep bona_second),这样才能执行命令,并把命令的输出赋给变量,注意()与其他的{}不  一样,()应该是表示这是一个整体,{}表示这是一个变量,{}内为变量名。

 

2、  6 if [ "$checkmodule" != "" ];then...   []内部头尾都要有空格,这点很重要,其次要用""把变量引起来,因为这是字符串,所以可以!=、=这种方式,若数值应该用-eq 等等

 

3、10         /sbin/insmod /home/wjb/test/bona_second_vmware.ko
     11         if [ "$?" -eq 0 ];then
     这段用来判断行10命令的执行结果。linux下,命令一般执行成功返回0,不成功返回非0,$?是自动变量,接收命令返回的结果

 

4、 19 if [ -c /dev/second ];then。。。判断/dev/second是不是一个字符设备文件

 

5、 25         num=${name% *d}。。。表示从name中删除“ *d”---意思为从左起 空格到d的第短匹配(还是最长匹配,忘了)

 

小结:为了写这个33行script,足足花了将近4个小时才搞掂,但对linux script的编写还是自我感觉有了很大的进步,哈哈,今后要继续努力~~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息