initrd in linux 2.6.32.27

本文深入探讨了Linux内核启动过程中的initrd选项作用,包括如何在未指定initrd时内核自动挂载分区,以及指定initrd时由initrd负责挂载根文件系统和执行init。同时,文章详细介绍了不同格式initrd的制作方法,以及在使用initrd时可能遇到的问题和解决方案。

2.6.32.27可以不指定initrd选项

如果指定initrd选项,则自动调用initrd内的linuxrc或init进行一切必要的初始化。Kernel启动参数全部会作为变量传递给这两个脚本。如root=,init=,等等。

 

未指定initrd选项

如果未指定root选项或指定为空,则kernel会自动将第一个分区挂载为/。

如果指定root选项,则挂载指定设备为/。

指定非法的root选项或init选项,都将导致kernel panic。

指定initrd选项

由initrd来负责挂载/和执行init。

Cpio.gz格式的initramfs,kernel将其临时挂载为/ (但不知是如何挂载的)。

Ext2.gz格式的initrd,会作为/dev/ram0设备,kernel将其临时挂载为/ (type为extN),但是不要在启动参数中使用root=/dev/ram0,否则会出现无法读写/dev/initctl的情况,/sbin/init无法正常启动。

Initrd=initramfs_data.cpio.gz (lfs-6.3 liveCD自带)

不指定root或指定root为空时,mount cd到.root并最终作为/加载,而如果cd不存在,则新建一个sh,并等待用户插入cd和退出,这是一个死循环。可利用这种途径实现不进入最终文件系统而是进入initramfs进行调试(实质上只要在启动过程中执行另一个sh实例即可)。

该initramfs不支持nfs

该initramfs默认指定init=/sbin/init

Initrd=initrd (自编的ext2.gz)

行为完全由自己指定

 

Initrd(extN.gz)的制作:

解压:

gzip解压后,mount为extN类型即可

压缩:

dd if=/dev/zero of=$IMAGE bs=1k count=8000

losetup /dev/loopM $IMAGE

mount -t extN /dev/loopM $MOUNT_POINT

#copy files to $MOUNT_IMAGE

(cd $MOUNT_IMAGE; tar cf - .) | (cd $MOUNT_POINT; tar xf -)

umount $MOUNT_POINT

losetup -d $LOOP_DEVICE

gzip -9 < $IMAGE > $INITRD

Initramfs(cpio.gz)的制作:

解压:

cpio –i < initramfs

压缩:

find . | cpio -o -H newc | gzip > /boot/initramfs_data.cpio.gz  #必须加上-H newc的选项

 

 

CHROOT (with my initrd)

Directly startup without pause

无initctl错误,能启用newfs,之后可改变runlevel,exit重启bash

#!/bin/sh

cd /new_root

 

echo "Running pivot_root..."

pivot_root /new_root /new_root/initrd

 

echo "Running init..."

exec chroot . /sbin/init 3 2>&1

.,有linuxrc [错误,无initctl错误,能启用newfs,之后可改变runlevel,exit重启bash

[sh], chroot: not found

exec,同.。

exec chroot /new_root /sbin/init 3

最开始有一个initctl错误,能启用newfs,之后可改变runlevel,exit重启bash

chroot /new_root /sbin/init 3

initctl错误,不能启用newfs, exit 到被中止的linuxrc继续,同directly

exec chroot /new_root /bin/sh

启用newfs, cd不进root目录,可执行文件找不到路径,/sbin/runlevel输出3 4,exit 到被中止的linuxrc继续,同directly

chroot /new_root /bin/sh

启用newfs, cd不进root目录,可执行文件找不到路径,/sbin/runlevel输出3 4,exit到bbsh和oldfs

 

转载于:https://www.cnblogs.com/realplay/p/9649133.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值