如何将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