• 读者文摘
  • 美文摘抄
  • 短文摘抄
  • 日记大全
  • 散文精选
  • 感恩亲情
  • 人生感悟
  • 智慧人生
  • 感悟爱情
  • 心灵鸡汤
  • 实用文档
  • 名人名言
  • 伤感文章
  • 当前位置: 蜗牛文摘网 > 感悟爱情 > [initrd如何切入linux文件系统] linux 文件系统

    [initrd如何切入linux文件系统] linux 文件系统

    时间:2020-02-14 08:27:50 来源:千叶帆 本文已影响

      initrd切入linux文件系统

      initrd,典型的系统启动顺序

      1. boot loader加载内核并初始化ram disk

      2. 内核把initrd转化成正常的ram disk并释放initrd使用的内存

      3. initrd作为root被挂载,赋予读写权限。

      4. /linuxrc被执行(这可以是任何可执行文件,如脚本,运行在uid 0,可以做任何初始化)。

      5. linuxrc挂载真正的根文件系统

      6. linuxrc使用pivot_root系统调用把根文件系统放在根目录。

      7. 正常的启动序列(/sbin/init)在根文件系统上执行。

      8. initrd文件系统被移去。

      注意,改变根目录不牵扯卸载他。 挂载在initrd的文件系统仍然可以被访问。

      如何改变根设备

      整个过程包括如下几步:

      1. 挂载新的根文件系统

      2. 把他变成根文件系统

      3. 删除所有对旧(Initrd)文件系统的访问

      4. 卸载initrd文件系统,重定位ram disk

      挂载新的根文件系统很容易:只需把他挂载到当前根下。例如:

      # mkdir /new-root

      # mount -o ro /dev/hda1 /new-root

      根的转变伴随着pivot_root系统调用。pivot_root把当前的根转移到新根下的一个目录,并把新的根放到原来的地方。老根的目录必须在调用pivot_root前退出。例如:

      # cd /new-root

      # mkdir initrd

      # pivot_root . initrd

      现在,linuxrc进程可以仍然访问老的根。所有的这些引用可以通过如下命令释放:

      # exec chroot . what-follows dev/console 2>&1

      然后执行的就是新根下的init程序,例如/sbin/init。

      如果新的根文件系统使用devfs,而/dev目录还不可用,devfs必须被挂载进来, 在使用chroot之前,只有这样才有/dev/console设备。

      注意:

      privot_root执行的情况可能有所不同。为了保证兼容性,注意以下几点:

      调用pivot_root之前,调用进程的当前目录应指向新的根 文件目录使用”.“作为第一个参数,老根的相对路径作为第二个参数。ch

      root程序必须在就老的和新的根下都可以使用。

      最后改变根到新的根下。

      在执行命令中 使用dev/console的相对路径。

      注意,initrd可以被卸载,而ram disk使用的内存可以被释放:

      # umount /initrd

      # blockdev --flushbufs /dev/ram0 # /dev/rd/0 if using devfs

      initrd还可以使用NFS-mounted根,参考man pivot_root(8)。

      示例

      下面是redhat的linuxrc文件,其中用的是nash命令系统。

      #!/bin/nash

      echo "Loading scsi_mod.o module"

      insmod /lib/scsi_mod.o

      echo "Loading sd_mod.o module"

      insmod /lib/sd_mod.o

      echo "Loading BusLogic.o module"

      insmod /lib/BusLogic.o

      echo "Loading jbd.o module"

      insmod /lib/jbd.o

      echo "Loading ext3.o module"

      insmod /lib/ext3.o

      echo Mounting /proc filesystem

      mount -t proc /proc /proc

      echo Creating block devices

      mkdevices /dev

      echo Creating root device

      mkrootdev /dev/root

      echo 0x0100 > /proc/sys/kernel/real-root-dev

      echo Mounting root filesystem

      mount -o defaults --ro -t ext3 /dev/root /sysroot

      pivot_root /sysroot /sysroot/initrd

      umount /initrd/proc

    相关热词搜索:Linux教程initrd如何切入linux文件系统linux initrd xzlinux initrd 修改

    • 名人名言
    • 伤感文章
    • 短文摘抄
    • 散文
    • 亲情
    • 感悟
    • 心灵鸡汤