IT猫扑网:您身边最放心的安全下载站! 最新更新| 软件分类| 专题汇总| 手机版

您当前所在位置:IT猫扑网 > 操作系统 > LINUX > 根文件系统的启动及配置

根文件系统的启动及配置

时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)

  按启动顺序依次介绍相关的文件:

  一、内核启动完之后,首先运行/linuxrc。

  /linuxrc内容:

  --------------------------------------------------------------------------------

  #!/bin/sh

  echo &mount /etc as ramfs&

  /bin/mount -n -t ramfs ramfs /etc

  /bin/cp -a /mnt/yaffs/etc/* /etc //关机的时候我们会保存/etc的内容到/mnt/yaffs/etc.

  echo &re-create the /etc/mtab entries&

  # re-create the /etc/mtab entries

  /bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/2 /

  /bin/mount -f -t ramfs ramfs /etc

  exec /sbin/init

  --------------------------------------------------------------------------------

  首先你要看懂这个linuxrc,

  1. /bin/mount -n -t ramfs ramfs /etc

  这句话的作用加载一个ramfs作为/etc目录。这样/etc就是一个可写目录。

  看这个脚本,得出你的根文件系统是一个cramfs,是一个只读文件系统中,而/etc作为系统运行配置文件的存放地点,可能会写一些运行状态在这里, linuxrc第一件事情就是将一个ramfs mount 到/etc只读目录中,使得/etc/目录可写,指定参数 -n的目的是告诉mount不要写/etc/mtab, 这个文件存放当前系统mount了的所有文件系统中。因为现在/etc/目录还是只读,所以这次mount不要写这个文件,否则会失败。

  而你问到的 ramfs在哪里,这个在你的 /etc/fstab文件中应该有ramfs一项, mount 会去找这项,如果没有,mount会失败。后面就执行不下去。

  2. /bin/cp -a /mnt/yaffs/etc/* /etc

  /etc成为可写目录后,将所有/mnt/yaffs/etc中的配置文件拷贝到/etc/中,这说明你的ramfs可能是一个空的ramfs,没有配置文件,或者配置文件比较老。 同时也说明你这个系统是一个只读系统,每次系统运行中写入的配置不会保留。

  将以前mount的那些信息重新写到/etc/mtab中,命令就是下面这些。

  3. /bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/2 /

  /bin/mount -f -t ramfs ramfs /etc

  这些命令只是将这些mount信息写到/etc/mtab中,不会实际去mount这些block device,说明你的根文件系统依然是以前的那个/dev/bon/2

  4. exec /sbin/init

  执行根文件系统中的init执行程序,使其成为1号进程。shell正式运行。

  ###################################################################################

  /etc/mtab介绍:

  mtab同/etc/fstab的格式一样,它用于记录已经挂载的分区信息。

  注意:

  如果没有/linuxrc这个文件,系统默认首先运行/sbin/init。

  ###################################################################################

  二、从/linuxrc文件中我们看到它最后运行了/sbin/init,而init又会根据/etc/inittab来运行。

  inittab 文件条目格式:

  id:runlevels:action:process

  id:

  inittab 文件中条目的唯一标识, 限于 1-4 个字符 (如果是用版本号小于 5.2.18 或 a.out 的库编译生成的 sysvinit 程序, 则仅限于 2 个字符).

  注意: 对于 getty 或其它的注册进程, id 必须是响应的终端线路的 tty 后缀, 如 1 响应 tty1, 否则, 注册过程不能正常的工作.

  runlevels:

  #   0 - halt (Do NOT set initdefault to this)

  #   1 - Single user mode

  #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

  #   3 - Full multiuser mode

  #   4 - unused

  #   5 - X11

  #   6 - reboot (Do NOT set initdefault to this)

  action

  描述要发生的动作.

  process

  要执行的进程. 如果 process 域以一个 `+' 开头, init 不会在 utmp 和 wtmp 文件中为此进程记帐. 这是由于 getty 自己主持 utmp/wtmp 记帐的需要, 同时这也是一个历史遗留的漏洞.

  runlevels 域可以包含表示不同运行级的多个字符, 例如 123 表示本进程在运行级为 1, 2 和 3 时都要启动. 用于 ondemand 条目的 runlevels 域可以包含 A, B, 或 C. 用于 sysinit, boot, 和 bootwait 条目的 runlevels 域被忽略.

  当改变运行级时, 在新运行级中没有给出的那些正在运行的进程被杀死, 先使用 SIGTERM 信号, 然后是 SIGKILL.

  action 域可以使用的动作有:

  respawn:

  该进程只要终止就立重新启动 (如 getty).

  wait

  只要进入指定的运行级就启动本进程, 并且 init 等待该进程的结束.

  once

  只要进入指定的运行级就启动一次本进程.

  boot

  在系统引导期间执行本进程. runlevels 域被忽略.

  bootwait

  在系统引导期间执行本进程. 并且 init 等待该进程的结束 (如 /etc/rc). runlevels 域被忽略.

  off

  什么也不做.

  ondemand

  在进入 ondemand 运行级时才会执行标记为 ondemand 的那些进程. 无论怎样, 实际上没有改变运行级 (ondemand 运行级就是 `a', `b', 和 `c').

#p#副标题#e#

  initdefault

  initdefault 条目给出系统引导完成后进入的运行级, 如果不存在这样的条目, init 就会在控制台询问要进入的运行级. process 域被忽略.

  sysinit

  系统引导期间执行此进程. 本进程会在 boot 或 bootwait 条目之前得到执行. runlevels 域被忽略.

  powerwait

  本进程在电源不足时执行. 通常在有进程把 UPS 和计算机相连时通知 init 进程, Init 在继续其它工作之前要等待此进程结束.

  powerfail

  类似 powerwait, 但是init 不等待此进程完成.

  powerokwait

  在 init 收到电源已经恢复的通知后立即执行此进程.

  powerfailnow

  本进程在 init 被告知 UPS 电源快耗尽同时外部电源失败 (无效) 时被执行. (假设 UPS 和监视进程能够发现这样的情况).

  ctrlaltdel

  在 init 收到 SIGINT 信号时执行此进程. 这意味着有人在控制台按下了 CTRL-ALT-DEL 组合键, 典型地, 可能是想执行类似 shutdown 然后进入单用户模式或重新引导机器.

  kbrequest

  本进程在 init 收到一个从控制台键盘产生的特殊组合按键信号时执行.

  inittab实例:

  --------------------------------------------------------------------------------

  #/etc/inittab

  ::sysinit:/etc/init.d/rcS

  tty0::respawn:/sbin/getty 38400 tty0

  tty2::askfirst:/bin/sh

  ::ctrlaltdel:/sbin/reboot

  ::shutdown:/bin/cp /etc /mnt/yaffs/etc -ra //因为我们的根文件系统只读,需要保存/etc的内容

  ::shutdown:/bin/umount ar

  ::shutdown:/bin/mount / o remount,ro //mount -o remount就是重新加载的意思

  --------------------------------------------------------------------------------

  三、从inittab中我们可以看到现在系统启动/etc/init.d/rcS!

  下面我们介绍一下rcS文件

  //rcS的内容

  --------------------------------------------------------------------------------

  #! /bin/sh

  /bin/mount -a

  /sbin/ifconfig 192.168.0.1

  /bin/echo &I am xiaoshou! &

  --------------------------------------------------------------------------------

  首先我们看到 mount -a 这个命令。这个命令依据/etc/fstab来进行挂载的操作。

  接着我们来看看/etc/fstab这个文件。

  --------------------------------------------------------------------------------

  #/etc/fstab

  none  /proc  proc defaults 0 0

  none  /dev/pts devpts mode=0622 0 0

  tmpfs  /dev/shm tmpfs defaults 0 0

  --------------------------------------------------------------------------------

  现在介绍一下此文件的格式:

  # fstab文件的作用

  文件/etc/fstab存放的是系统中的文件系统信息。当正确的设置了该文件,则可以通过&mount /directoryname&命令来加载一个文件系统,每种文件系统都对应一个独立的行,每行中的字段都有空格或tab键分开。同时fsck、 mount、umount的等命令都利用该程序。

  # fstab文件格式

  下面是/etc/fatab文件的一个示例行:

  fs_spec | fs_file| fs_type| fs_options| fs_dump| fs_pass

  /dev/hda1| /     | ext2   | defaults  | 1      | 1

  fs_spec - 该字段定义希望加载的文件系统所在的设备或远程文件系统,对于一般的本地块设备情况来说:IDE设备

关键词标签:LINUX根文件系统

相关阅读 安装红帽子RedHat Linux9.0操作系统教程 Tomcat9.0如何安装_Tomcat9.0环境变量配置方法 多种操作系统NTP客户端配置 Linux操作系统修改IP Linux实现SCSI硬盘热插拔及在线识别 Linux下用CDMA modem拨号上网

文章评论
发表评论

热门文章 安装红帽子RedHat Linux9.0操作系统教程 安装红帽子RedHat Linux9.0操作系统教程 Linux服务器:设计高性能网站架构-LLMP Linux服务器:设计高性能网站架构-LLMP 使用Clonezilla迁移到虚拟Linux环境 使用Clonezilla迁移到虚拟Linux环境 Linux上的MRTG流量监控中心 Linux上的MRTG流量监控中心 Linux 双网卡绑定一个IP原理及实现 Linux 双网卡绑定一个IP原理及实现 linux和windows等系统远程控制ubuntu桌面 linux和windows等系统远程控制ubuntu桌面

相关下载

人气排行 Linux下获取CPUID、硬盘序列号与MAC地址 dmidecode命令查看内存型号 linux tc实现ip流量限制 安装红帽子RedHat Linux9.0操作系统教程 linux下解压rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 关机、重启、注销 命令 查看linux服务器硬盘IO读写负载 linux命令行浏览器的使用方法 Linux NFS服务固定端口及防火墙配置 U盘安装Ubuntu 10.04 Linux清除用户登录记录和命令历史方法