heshufeng的个人空间 https://blog.eetop.cn/76632 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

linux NFS配置:NFS开机自动启用及其原理

已有 2148 次阅读| 2012-3-17 16:15 |个人分类:linux

这节我们讲NFS开机自动启动及其原理
    NFS服务器端已经配置好了,但机器重启以后我们还要重新开启NFS服务。为了不这么麻烦,我们要让NFS和portmap服务在开机时自动启动,这样就会避免出现mount clntudp_create: RPC: Program not registered这样的错误了。
  让脚本在开机时自动运行需要对linux系统的启动过程有所了解。我们知道系统加载内核以后运行的第一个程序就是init,所以它的PID永远是1,你自己用top命令查看一下就知道了;而init程序首先就要读取/etc/inittab文件,init程序就根据这个文件的内容按照顺序创建进程。
  我们打开这个文件,不去管以#开头的注释文字,共有7个部分:我们需要关注的是第一部分和第二部分。
    
    Init程序首先读取第一部分,确定shell的运行级别,这里的运行级别为3。Shell一共有7个运行级别,在/etc/inittab文件开头的注释部分对这7个运行级别做了详细解释,对shell运行不了解的话这可是要必看的。 
  然后init程序读取第二部分,运行脚本/etc/rc.d/rc.sysinit,这个脚本主要包含有系统的初始化命令。
  接着就要根据确定的shell运行级别来运行对应目录里的脚本,以启动相关服务。我的机器的运行级别是3,init就根据这个级别号运行/etc/rc.d/rc3.d目录里的脚本。
  其余几个部分都是关于组合键、UPS电源等方面的内容,感兴趣的话可以看一下。
  说到这里我们知道了,init程序根据运行级别号来启动/etc/rc.d目录中对应目录里的脚本,以启动相关服务。这里是运行/etc/rc.d/rc3.d目录里的脚本,如果运行级别为5,则运行/etc/rc.d/rc5.d目录里的脚本。
  我们来看一下/etc/rc.d目录里的文件。
    
   可以看到/etc/rc.d目录里一共有3个普通文件和8个目录文件。这8个目录中init.d目录是各种程序和脚本的存放目录,而rc0.d到rc6.d这7个目录里的文件都是init.d目录里程序文件的链接文件,只是被赋于了相应的运行级别。来看一下/etc/rc.d/rc3.d目录里的文件:   
   我们想要开机就启动的NFS服务和portmap服务分别在图片中第二列的第一行和最后一列的第三行,即K20nfs和S13portmap。
  我们看到目录里所有文件都是以K或S开头,然后跟一个数字,然后才是文件名。这是什么意思?S即start,开启服务,K即kill,关闭服务。系统确定运行级别以后,进入相应的rcN.d目录,执行以S开头的文件以启用相关服务进程,而且是按照S后面的那个数字的顺序依次执行;而更换运行级别时,会先执行以K开头的脚本,再执行以S开头的脚本,执行顺序都是按照他们后面的数字的顺序;退出系统时,就依次执行以K开头的文件关闭相关服务。
  那我们知道了,在级别为3的这个运行级别上,nfs服务没有默认没有随开机而启动,而portmap服务则随开机而启动,是被系统第13个启用的服务;我们手动启动nfs服务以后,在关机的时候nfs服务是第20个被关闭的服务。
  这里有了一个疑问:这些服务的启用和关闭顺序是哪里限定的?答案是程序自身。我们可以打开portmap和nfs服务的脚本看一下,脚本路径为/etc/rc.d/init.d/ portmap (nfs)。输入命令:less  /etc/rc.d/init.d/ portmap (nfs)
    
    
   如截图所示,portmap服务在345三个级别上运行,启用顺序为第13,关闭顺序为第87;nfs服务不在任何运行级别上启用,启用顺序为第60,关闭顺序为第20。(服务不在任何运行级别上启用时,运行级别那个字段用-代替。)
   很明显,想要让NFS服务自动启用,就需要把相应级别对应的rcN.d目录里的nfs服务由K状态更改为S状态。由于运行级别为2时,系统不运行NFS,我们只需要在3、4、5三个级别上让NFS服务随开机启动。(级别4根本就没有启用,让NFS服务在级别4上启用不知道有什么用;只不过大家都这么说,我也就随大流。)
  怎么更改?系统提供了一个用起来很方便的方法:使用chkconfig命令。Chkconfig主要用来查询和管理服务在不同运行级别上的启用情况,需要注意的是:chkconfig命令并没有更改程序脚本里的内容,只是更改了程序在rcN.d中的链接名称的开头字母,以此来确保其在相应运行级别上开启或关闭。
  输入chkconfig命令,直接敲回车,可以明确看到它主有4种作用:
    Chkconfig --list name  列出指定服务的运行级别情况
    Chkconfig--add name  增加一个服务
    Chkconfig --del name  删除一个服务
    Chkconfig   [--level <levels>]  <name>  <on|off|reset>  更改/重设指定服务的运行级别
  我们输入chkconfig --level 345 nfs on,即可使NFS服务在运行级别3、4、5上自动运行。 
   

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 1

    好友
  • 2

    获赞
  • 2

    评论
  • 1295

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 21:35 , Processed in 0.024627 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部