创建一个新的初始化用 RAM 磁盘映像
假如你更换了底板,或者把碟盘转到另一个系统,它可能会由于初始化用的 RAM 磁盘映像(CentOS 6 用 initramfs,CentOS 5 用 initrd)内欠缺合适的驱动程序而不能引导。
1. 在修复模式下引导
- 以 CentOS 的安装碟开机(例如首张 CD 或 DVD)。
在 boot: 提示符输入 linux rescue。
- 以读写模式挂载所有文件系统。
2. 创建新的 initramfs 或 initrd
把根目录改为你硬盘上的正式根目('/')并创建新的 initramfs 或 initrd。
mount --bind /proc /mnt/sysimage/proc mount --bind /dev /mnt/sysimage/dev mount --bind /sys /mnt/sysimage/sys chroot /mnt/sysimage
在采用多路径主目录('/')的 CentOS7 下,请先执行以下指令,然后才 chroot 进入 '/mnt/sysimage':
mount --bind /run /mnt/sysimage/run systemctl start multipathd.service
在 CentOS 6 下:
为现有的 initramfs 创建备份:
cp -p /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
为现时采用的内核创建 initramfs:
dracut -f
假如你要针对特定的内核版本(请修改版本编号):
dracut -f /boot/initramfs-2.6.32-358.el6.x86_64.img 2.6.32-358.el6.x86_64
你可考虑加入 -H(--hostonly)辅助选项。采用它时,dracut 便只会安装引导你的系统时所需的东西。否则,dracut 缺省会在 initramfs 内加入大量驱动程序,令 initramfs 的体积不必要地增大。你还可添加其它选项。请参阅 man dracut 及上游的部署指南。
在 CentOS 5 下:
为现有的 initrd 创建备份:
cp -p /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.bak
为现时采用的内核创建 initrd:
mkinitrd -f -v /boot/initrd-$(uname -r).img $(uname -r)
假如你要针对特定的内核版本(请修改版本编号):
mkinitrd -f -v /boot/initrd-2.6.18-371.el5.img 2.6.18-371.el5
如果你要通过 Xen 监督器把一台实体机器迁转到虚拟机器,请将前一个指令改为:
mkinitrd --with-xenblk initrd-2.6.18-371.el5xen.img 2.6.18-371.el5xen
你还可添加其它选项,例如手动地增加未被装入的模块。详情请参阅 man mkinitrd。视乎安装的细节,你可能会须要修改 /boot/grub/grub.conf 及/或 /etc/fstab。这关乎你在文件内采用的是 LABEL 及/或 UUID 还是实体设备,而它的复杂情度已不宜在一篇提示与技巧文章内详细讨论。
重新开机
cd / sync telinit 6
这页的英文版由 PhilSchaffner 创建。欢迎其它 Wiki 贡献者作出更正、添加或修改。
本页的灵感来自这个 论坛议题。该议题内备有更多讨论。
Translation of revision 23