1.安装grub
基本的命令移植完成了接下来就是安装grub,使用grub-install安装即可。
--root-directory:安装的时候会在此目录下创建boot/grub/目录,并生产安装文件。内核位置是单独的分区且挂载在/mnt/boot/下,所以--root-directory=/mnt/时安装过程就会生产/mnt/boot/grub目录。
/dev/sdb:指定在/dev/sdb的MBR区域安装。
刚开始的时候/mnt/boot/下没有文件,/dev/sdb的MBR也没有数据,安装后再次查看,两个区域都生产了相应的安装数据。grub的数据只安装在了/dev/sdb的MBR中,而/dev/sdb1h和/dev/sdb2的bootsector中没有安装。
2.提供内核vmlinuz和虚拟文件系统initramfs.img
[root@Pure-01 ~]# cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot/vmlinuz [root@Pure-01 ~]# cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot/initramfs.img
3.initrd的作用(摘自鸟哥的私房菜-基础篇)
initrd目的在于提供启动过程中所需要的最重要核心模块,以让系统启动过程可以顺利完成。 会需要 initrd 的原因,是因为核心模块放置于 /lib/modules/$(uname -r)/kernel/ 当中, 这些模块必须要根目录 (/) 被挂载时才能够被读取。但是如果核心本身不具备磁碟的驱动程序时, 当然无法挂载根目录,也就没有办法取得驱动程序,因此造成两难的地步。
initrd 可以将 /lib/modules/.... 内的『启动过程当中一定需要的模块』包成一个文件 (档名就是 initrd), 然后在启动时透过主机的 INT 13 硬件功能将该文件读出来解压缩,并且 initrd 在内存内会模拟成为根目录, 由于此虚拟文件系统 (Initial RAM Disk) 主要包含磁碟与文件系统的模块,因此我们的核心最后就能够认识实际的磁碟, 那就能够进行实际根目录的挂载啦!所以说:『initrd 内所包含的模块大多是与启动过程有关,而主要以文件系统及硬盘模块 (如 usb, SCSI 等) 为主』的啦!
一般来说,需要 initrd 的时刻为:
根目录所在磁碟为 SATA、U盘 或 SCSI 等连接介面;
根目录所在文件系统为 LVM, RAID 等特殊格式;
根目录所在文件系统为非传统 Linux 认识的文件系统时;
其他必须要在核心加载时提供的模块。
注意:上面的initrd完启动相关的功能之后,我们需要将根目录重新挂载到真正的根上才能正常使用系统。
4.提供配置文件grub.conf文件
[root@Pure-01 ~]# vi /mnt/boot/grub/grub.conf default=0 timeout=5 title LFT TEST kernel (hd0,0)/vmlinuz ro root=/dev/sda2 selinux=0 init=/sbin/init #kernel (hd0,0)/vmlinuz 以grub的寻址找到内核位置,第一个分区(对应/mnt/boot) #root=/dev/sda2 磁盘的第二个分区(对应/mnt/sysroot) #init=/sbin/init 系统启动后直接执行/sbin/init initrd (hd0,0)/initramfs.img
5.提供init脚本并赋予执行权限
[root@Pure-01 ~]# vi /mnt/sysroot/sbin/init #!/bin/bash echo -e "\033[34m Hello World!\033[0m" mount -n -t proc proc /proc mount -n -t sysfs sysfs /sys mount -n -o remount,rw /dev/sda2 / /bin/bash [root@Pure-01 ~]# chmod u+x /mnt/sysroot/sbin/init
6.同步数据并卸载/dev/sdb
[root@Pure-01 ~]# sync [root@Pure-01 ~]# sync [root@Pure-01 ~]# sync [root@Pure-01 ~]# sync #可以多同步几次防止出问题 [root@Pure-01 ~]# umount /dev/sdb1 [root@Pure-01 ~]# umount /dev/sd
参考博客:
http://tanxw.blog.51cto.com/4309543/1368801