如何将Linux文件系统映像

initrd切成Linux文件系统


initrd,典型的系统启动顺序


1。引导加载程序加载内核并初始化RAM磁盘。


2。内核将initrd为正常RAM磁盘和释放由initrd使用的内存


三.initrd挂载为根,给读写权限。


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


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


6。linuxrc采用pivot_root系统调用在根目录下将根文件系统。


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


8。initrd文件系统被删除。


注意到根目录的变化并不意味着卸下他。这是安装在initrd文件系统仍然可以访问。


如何更改根设备


整个过程包括以下步骤:


1。安装新的根文件系统


2。把他变成根文件系统


三.删除旧的文件系统访问(initrd)


4。卸载initrd文件系统,将RAM磁盘


安装新的根文件系统很容易:只需将其挂载到当前根目录:


# mkdir /新根


#安装-o ro / / / dev HDA1新根


根的转型是伴随着pivot_root系统call.pivot_root转移当前根的根目录下,新根在它原来的地方。离开之前打电话给pivot_root.for实例的根目录必须:


# CD /新根


# mkdir initrd


# pivot_root initrd。


现在,linuxrc程序仍然可以访问旧的根。这些资料可以通过以下命令发布:


#执行chroot以下开发 /控制台2 > 1。


然后执行新的根下的初始化程序,如 / sbin /初始化。


如果新的根文件系统使用devfs,和 / dev目录尚未公布,devfs必须安装。在使用chroot,只会有 / dev /控制台设备。


注:


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


pivot_root之前调用,调用进程的当前目录应使用新根目录;Ldquo;作为第一个参数,相对路径的根为二参数。CH


根程序必须在旧的和新的根上使用。


最后,将根更改为新根。


在执行命令中使用开发控制台的相对路径。


注意,initrd可以卸下,并通过RAM磁盘使用的内存被释放:


# umount / initrd


# blockdev -- flushbufs / dev / ram0 / dev /路/ 0如果使用devfs #


initrd也可以使用NFS挂载的供人pivot_root根(8)。


实例


以下是RedHat linuxrc文件,它是用来在纳什指挥系统。


# /斌/纳什!


回声加载scsi_mod。O模块


insmod / / scsi_mod O库。


回声加载sd_mod。O模块


insmod / / sd_mod O库。


回声加载百世逻辑。O模块


insmod / lib /百世逻辑啊


回声加载JBD。O模块


insmod / lib / JBD啊


回声加载ext3。O模块


insmod / lib / ext3。O


回声安装文件系统


挂载程序


回声创建块设备


mkdevices / dev


创建根设备


mkrootdev / dev /根


回声0x0100 > /程序/系统/内核/实根的开发


回声安装根文件系统


安装-默认——RO T ext3 / dev /根/ sysroot


pivot_root / / /初始化sysroot sysroot


umount / / proc initrd