1、grub下手动启动系统
1.1、在grub菜单下键入c够进入grub命令行模式
1.2、
root(hd0,0)(boot分区所在位置)
kernel /vmlinuz ro root=/dev/sda2(根所在分区)
initrd /initramfs.img
boot
vmlinuz initramfs.img为内核文件和ramfs文件
根据以上可以看到:系统启动包括:启动grub、启动“/”、启动用户空间程序,启动根需要内核文件vmlinuz和ramfs文件,
启动用户空间程 序需要/sbin/init, 所以一个可以正常启动的系统需要:grub系统、/系统、用户空间系统
2、grub系统:
bootloader、/(grub根系统)
bootloader用来启动grub,/系统存放启动grub和操作系统的所必需的的文件
一个可以启动的grub根目录:
grub initramfs.img vmlinuz
grub的根系统一般是一个单独的基本分区比如:/dev/sda1 挂载至/boot目录,也有和系统的根在同一个分区上的。
启动grub的所需的文件目录:grub:
device.map fat_stage1_5 grub.conf jfs_stage1_5 reiserfs_stage1_5 stage2 vstafs_stage1_5
e2fs_stage1_5 ffs_stage1_5 iso9660_stage1_5 minix_stage1_5 stage1 ufs2_stage1_5 xfs_stage1_5
3、/ 系统
系统根的目录: bin boot home lib lib64 lost+found media mnt opt proc root sbin sys tmp usr var
4、用户空间程序
正常的系统通过/sbin/init启动用户空间的程序,现在我们只需要bash程序即可。
5、具体操作过程
5.1、添加硬盘比如:sdb,我们需要在它上面创建grub系统、/系统、用户空间系统,需要一个boot分区(gurb根分区),一个根分区,一个swap分区
5.2、分区:sdb1(200m,boot),sdb2(1g,swap),sdb3(2g,/)
[root@HFJ ~]# blkid |grep sdb
/dev/sdb1: UUID="39d0d94e-af55-4487-aecd-4810d05c3461" TYPE="ext4"
/dev/sdb2: UUID="a2595e8d-4446-4de7-8973-d51d3a41e98d" TYPE="swap"
/dev/sdb3: UUID="a5848241-e8be-4580-8b18-d7c9392215cd" TYPE="ext4"
[root@HFJ ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 5G 0 disk
├─sdb1 8:17 0 203.9M 0 part
├─sdb2 8:18 0 1G 0 part
└─sdb3 8:19 0 3.8G 0 part
5.3、在sdb上安装grub,grub根分区sdb1
[root@HFJ ~]# mkdir /mnt/boot
[root@HFJ ~]# mount /dev/sdb1 /mnt/boot
[root@HFJ ~]# grub-install --root-directory=/mnt /dev/sdb
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
(hd2) /dev/sdc
5.4、编辑grub.conf
[root@HFJ grub]# cat grub.conf
default=0
time=5
title redhat(express)
root=(hd0,0)
kernel /vmlinuz ro root=/dev/sda3 init=/bin/bash
initrd /initramfs.img
5.5、拷贝内核文件和ramfs文件到grub根目录
[root@HFJ grub]# cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz
[root@HFJ grub]# cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/boot/initramfs.img
5.6、创建系统根目录
[root@HFJ grub]# mkdir /mnt/sysroot
[root@HFJ grub]# mount /dev/sdb3 /mnt/sysroot
[root@HFJ grub]# cd /mnt/sysroot
[root@HFJ sysroot]# mkdir -pv bin boot home lib lib64 lost+found media mnt opt proc root sbin sys tmp usr var
[root@HFJ sysroot]# ls
bash bin boot home lib lib64 lost+found media mnt opt proc root sbin sys tmp usr var
5.7、拷贝bash程序、拷贝bash程序,需要拷贝所依赖的库文件
[root@HFJ sysroot]# cp /bin/bash /mnt/sysroot/bin/
[root@HFJ sysroot]# ldd /bin/bash
linux-vdso.so.1 => (0x00007fffe85ff000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f203f50d000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f203f309000)
libc.so.6 => /lib64/libc.so.6 (0x00007f203ef74000)
/lib64/ld-linux-x86-64.so.2 (0x00007f203f73b000)
拷贝以上库文件到/mnt/sysroot/lib64
6、挂sdb对应的虚拟硬盘到新建的虚拟机上测试