一.grub修复
1.模拟grub.conf损坏
#mv grub.conf grub.conf.bak
重启,直接进入命令行模式
grub>
2.手动配置grub
grub>root (hd0,0) (使用find和tab键自动补全功能,找到grub所在分区)
grub>kernel /vmlinuz.... ro root=/dev/root(系统自己找不到的话,只能自己凭记忆)quiet
grub>initrd /initramfs....img
grub>boot
重写grub.conf即可
3.模拟grub损坏
#dd if=/dev/zero of=/dev/sda bs=100 count=1
4.使用光盘进入救援模式,进入到命令行
第一种安装方式#chroot /mnt/sysimage/
#grub
grub>root (hd#,#)
grub>setup (hd#)
grub>quit
第二种方式
#chroot /mnt/sysimage
#grub-install --root-directory=/(指定boot所在的目录) /dev/sda
#sync(将内存数据加载到硬盘上)
缺少配置文件时,需要自己写grub.conf
二.系统裁剪
1.给目标磁盘分区
两个分区:
宿主机上:/dev/sdb1, /dev/sdb2
/dev/sdb1 挂载至 /mnt/boot
/dev/sdb2 挂载至 /mnt/sysroot
2.安装grub至目标磁盘
#grub-install --root-directory=/mnt /dev/sdb
3.复制内核和initrd文件
cp /boot/vmlinuz-Version /mnt/boot/vmlinuz(便于简化,没有加版本号)
cp /boot/initramfs-Version.img /mnt/boot/initramfs.img
4.创建目标主机的根系统文件
mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib/modules,lib64,bin,sbin,boot,src,mnt,media,home,root}
接着去移植bash等命令至目标主机的根文件系统
cp /lib/modules/2.6.32-642.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules(便于简化,没有创建更深的目录)
5.为grub提供配置文件
vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title My First MiniLinux
root(hd0,0)
kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/sbin/init(不指定也可以,系统默认会找这个可执行程序)
initrd /initramfs
6.写一个init脚本用于初始化(模拟/sbin/init)
#!/bin/bash
#
echo -e "\t\033[34mWelcome My Linux\033[0m"
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
insmod /lib/modules/e1000.ko
ifconfig lo 127.0.0.1/8
ifconfig eth0 192.168.0.110/16
mount -n -o remount,rw /dev/sda2 /(重新挂载根文件系统)
/bin/bash
由于脚本中用到ifconfig,insmod,mount等命令,需要将相关命令移植到我们所创建的根文件系统中(/mnt/sysroot),移植的命令时可以将其写成脚本方便移植
通过以上步骤即可完成一个简单的Linux,有网络功能