备份一个linux系统硬盘 i...
时间:2010-08-06 来源:cpuwolf
此方法在Fedora系统验证多次通过。
假设你有一个Linux系统已经可以正常工作,现在想复制一个系统出来到另外一个硬盘上以备系统崩溃时开可以立即启用这个备份硬盘,以至于不影响系统的运行,同时这块备份硬盘可能与原系统的硬盘大小不一致。
对于上面的苛刻要求,都没关系!下面的方法就解决这个问题。
脚本假设前提条件:
1. 备份硬盘在/dev/sdb
2. 在运用此脚本前,你必须手动对备份硬盘分区. 1 2 3 <5 6>
/dev/sdb1 mount /boot
/dev/sdb2 swap
/dev/sdb3 mount /
/dev/sdb5 mount /var
/dev/sdb6 mount /home
这样1、2、3为主分区,5、6在扩展分区内。至于每个分区的大小要视你的原系统每个目录的大小为准,自行决定
3. 此脚本要求root权限运行
#! /bin/sh # backup total system to a Mirror Hard Disk # written by Visual.Wei rootdirlist=`ls /` skiplist="mnt proc sys" bskip="0" mirrordsk=/dev/sdb mntpoint=/mnt/mybakroot makedir() { if [ ! -d $1 ] ; then echo $"create directory $1" mkdir -p $1 else echo $"dir $1 already existing" fi } umnt() { if [ -e /proc/mounts ] ; then if grep $1 /proc/mounts > /dev/null ; then umount $1 echo $"unmount device $1" fi fi } checkdisk() { if [ ! -e $1 ] ; then echo "Mirror Device $1 can not be found" return 1 else return 0 fi } if ! checkdisk "$mirrordsk" ; then exit 1 fi umnt "$mirrordsk"1 umnt "$mirrordsk"5 umnt "$mirrordsk"6 umnt "$mirrordsk"3 echo $"Format ext3 partitions..." if checkdisk "$mirrordsk"3 ; then mkfs.ext3 -L / "$mirrordsk"3 > /dev/null else exit 1 fi if checkdisk "$mirrordsk"1 ; then mkfs.ext3 -L /boot "$mirrordsk"1 > /dev/null else exit 1 fi if checkdisk "$mirrordsk"5 ; then mkfs.ext3 -L /var "$mirrordsk"5 > /dev/null else exit 1 fi if checkdisk "$mirrordsk"6 ; then mkfs.ext3 -L /home "$mirrordsk"6 > /dev/null else exit 1 fi echo $"Format swap partition" if checkdisk "$mirrordsk"2 ; then mkswap -v1 -L newswap "$mirrordsk"2 > /dev/null else exit 1 fi makedir $mntpoint echo $"mount root directory" mount "$mirrordsk"3 $mntpoint makedir $mntpoint/boot makedir $mntpoint/var makedir $mntpoint/home echo $"mount other directories..." mount "$mirrordsk"1 $mntpoint/boot mount "$mirrordsk"5 $mntpoint/var mount "$mirrordsk"6 $mntpoint/home echo $"start copy system directories...It may takes very long time" for i in $rootdirlist ; do bskip="0" for j in $skiplist ; do if [ "$i" == "$j" ] ; then echo $"skip $i" bskip="1" break fi done if [ "$bskip" == "0" ] ; then echo $"copy directory $i" cp -a /$i $mntpoint fi done echo $"create empty directories..." for j in $skiplist ; do makedir $mntpoint/$j done echo $"please use < chroot $mntpoint > ,then edit </etc/fstab> and </boot/grub/menu.lst>"
脚本会找到/dev/sdb,并且umount每个分区,然后对每个分区格式化,最后复制目录结构。
运行完毕时,硬盘的数据就和原系统一摸一样了。
但是有个问题,当原系统的硬盘崩溃时,你必须卸下原系统的硬盘,然后装上备份硬盘引导系统,因此备份硬盘还缺少独立引导能力。所以还有几件事
1. chroot /mnt/mybakroot
2. vim etc/fstab
备份硬盘可能需要拥有于原硬盘不一样的fstab,因为他们可能存储空间大小不同,分区结构也不同
3. vim boot/grub/menu.lst
备份硬盘可能需要拥有于原硬盘不一样的内核启动菜单,因为他们可能存储空间大小不同,分区结构也不同
4. grub-install /dev/sdb
向备份硬盘写入bootloader---grub