潘多 2010年03月15日 星期一 22:19 | 1894次浏览 | 2条评论
故事是这样开始的,用户管理里面有个题说创建一个不能使用shell的用户,我这样做的;chsh -s nologin。题目完成了。不过不理解这样的普通用户有什么用,大多系统用户才nologin。后来我在虚拟机里面把root的shell也改了,这次 是该的/etc/passwd文件。重启后root是登入不了的,无奈,普通用户又改不了/etc/passwd,只好进单用户,一切顺利。后来回想到前 几天看的emergency,就试了一下,输入root密码后提示了一句没有/bin/nologin后(这句话和那个用不了shell的普通用户登入时 的一样),然后什么也没有发生的进入了sh#提示符的文本模式。然后vi /etc/passwd.想修改回root的原shell,但是无法写入文件,这时想到此时 / 应该是ro模式挂载的,我用了这个:mount -o remount,rw / 效果不错可以写入文件,修改了root的shell。然后exit退出。不久弹出了一个警告,我又错误的按下了enter键,结果这个虚拟机在也起不来 了,单用户模式和emergency模式都卡在如下的画面(在附件图1里面)。由这个结果我怀疑问题是在 shell ,根分区或者内核。
为了看清前面的警告,我在另一台虚拟机里面重复了上面的操作,在出现警告的时候我选择了n,这次系统很正常。
想到linux启动的时候/会挂载两次,我在这个虚拟机里面又重新进入了emergency模式,执行mount -o remount,rw /后,我又把它挂载成只读,exit后没有出现附件图2的警告,直接启动到shell的登入界面。
由此,我推断第一个虚拟机当掉是因为执行了mount后把原本只读的/变成了读写,破坏了数据,使得内核挂载不了 / 。接着我在一台好的虚拟机里面修改了grub文件,把ro root=LEABLE=/ 改成rw,然后重新启动。结果他完好的出现了shell的登入界面。这样我就困惑了,它怎么正常的启动了呢?
尝试着修复第一个虚拟机,我进入了rescue模式,执行chroot的结果如图,提示输入输出错误,没有用rescue修复过系统,往下就更困惑了。
(上面都是在Vbox里面虚拟的rhel5.4系统,盘子分区如下,/dev/hda123 分别是 /boot swap / )
Zeuux © 2024
京ICP备05028076号
回复 李华堂 2010年03月16日 星期二 09:39