大概原理:
linux启动过程,‘开机’-‘读取bios设置’-‘从bios指定的硬盘mbr分区找引导’-‘根据引导加载内核并启动’-‘初始化内核&挂载磁盘’-‘启动其他程序’,可以大概理解为读取引导+启动,因此可以想办法把系统所有文件tar打包后,还原到目标机器,再写入引导修改相关参数设置即可
具体 *** 作可以参考我的blog:linux系统整机备份
PS:限制条件,blog中只在centos5 6 7上测试通过,其他系统可能启动时加载的内容不同,需要修改对应的设置
给虚拟机增加一块硬盘,用于备份mbr的信息
fdisk -l 查看硬盘系统是否认识
fdisk /dev/sdb 进行分区
fdisk -l 查看分区是否出来
mkfs -t ext4 /dev/sbd1 进行格式化
mkdir /backup
mount /dev/sb1 /backup 挂载到backup下
破坏mbr之前先做做备份,后面恢复系统用:
dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1 将sda前面512个字节备份到backup的目录下
ls /backup 查看是否有备份的文件
模拟破坏mbr扇区
dd if=/dev/zero of=/dev/sda bs=512 count=1 通过zero文件把sda设备的前512字节毁掉。由于mdmdr存在这个磁盘的前512个字节上
reboot 启动系统 看会发现什么情况,不能进入系统。
进入修复模式,没有修复模式的可进入光盘系统。然后调出命令提示窗口。fdisk -l 查看有没有增加的磁盘。然后执行下列命令 恢复备份。重启 系统正常。
修复grub引导故障:
下面演示grub遭到破坏系统如何启动
vim /boot/grub/grub.conf 编辑这个文件
重启系统,在grub提示符下做 *** 作
root (hd0,0)指定从哪一块硬盘的哪一个分区去引导 *** 作系统
kernel /vmlinuz-(tab键) ro root=/dev/sda1(主文件系统) 执行从哪一个内核去引导系统 ro 后面挂载的文件系统以什么样的方式去挂载 root代表根分区所在的位置
initrd /initramfs-2.6.32
boot
用tar会有各种各样难避免的问题,建议直接用启动盘启动系统后利用DD命令来整盘复制。比如,举个最简单的例子,你只有两分区(以及各自挂载点) /dev/hda1(/) 和/dev/hda2(swap),而且你linux是在/dev/hda1(/)中,于是,你可以另接一硬盘(假设/dev/hdb1)用启动盘重启后,执行命令:
mount /dev/hdb1 /mnt/hdb1 -t ext2 #挂载到目录,没目录自已建,不用多解释了
dd if=/dev/hda1 of=/mnt/hdb1/sysimage.bak
dd if=/dev/hda of=/mnt/hdb1/mbr.bak bs=1 count=512 #备份MBR和分区表,若分区表不备份就把512改446
等吧。。分区越大时间越久,dd没有ghost这些软件聪明。哪怕你的linux只有1M但你的分区有1G,那备份时间就是复制1G的文件的时间
到另一台机子后,以同样的方法,恢复。假设光盘无坏道且是空的。
dd if=<mbr.bak的路径>of=/dev/hda count=512 bs=1 #跟之前的硬盘的分区一样
dd if=<sysimage.bak的路径>of=/dev/hda1 #恢复系统
差不多就是这样。自已用虚拟机多练习下吧。毕竟具体问题要具体分析和使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)