Thursday, July 3, 2008

Linux initrd folder的用处

qd几天前让我过去帮忙看看他的redhat workstation 3,说是不可以再进入系统了,启动到一半就死掉了,没有反应。今天下班就过去了。发现系统死掉是在加载文件系统后,free了kernel的memory后。也不能说系统死掉了,因为它对ctrl+alt+del还是有反应的。 :)

用ubuntu的live cd进入,想用chroot来重新安装一下kernel,再运行一下grub,可是在chroot的时候报错: segmentation fault。但是装有redhat的那个分区可以加载,很是奇怪。在网上找答案,搜索很久还是没有解决办法。也试了redhat的rescue mode,也是不可以chroot,还有knoppix live cd,同样的错误。

由于本人也是个半吊子Linux“专家”,最后没有办法下,重新安装了系统,只是安装的过程中没有选择格式化root分区,这样他的一些软件还有home目录都不会被洗掉。

在安装完后,重新启动的时候发现和之前不同是,在free了kernel的memory后开始了init程序,也就是说之前出错是因为init没有启动。进入系统发现了和之前的不同,在根目录下面有一个folder叫做initrd。然后在网上找到了解释:

我们现在用的发行版一般在根目录下面有一个/initrd这样的文件夹,你进去看看会发现这是一个空的文件夹。我们大多数人会毫不犹豫的将其删除,空的嘛,没什么用的!!。呵呵下次开机居然有panic的错误。
不能mount root什么的。原因是什么呢??查资料找到 在系统启动的时候,bootloader会将kernel 以及initrd文件一起加载到内存。而initrd文件会解压挂载到这个点上的。


这就解释了为什么之前系统不可以启动了。就这么一个folder就折腾了我整个晚上。。。。

No comments: