感谢支持
我们一直在努力

备份一个Linux系统硬盘[Fedora环境]

此方法在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

<备份一个Linux系统硬盘 I>解决了第一次系统克隆问题,可是随着原系统的运行和发展,这两个硬盘的内容的差距也会越来越大。我们可以每天在低峰访问时间,比如半夜2点,同步一个备份硬盘和原系统。

#! /bin/sh
# sync backup system
# written by Visual.Wei


rootdirlist=`ls /`
skiplist=”boot dev 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



makedir $mntpoint
echo $”mount directories”
mount “$mirrordsk”3 $mntpoint
mount “$mirrordsk”5 $mntpoint/var
mount “$mirrordsk”6 $mntpoint/home



echo $”Sync 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 sync: $i”
   bskip=”1″
   break
  fi
 done
 if [ “$bskip” == “0” ] ; then
  echo $”—> Sync directory: $i”
  time rsync -av /$i/ $mntpoint/$i/
 fi
done


umnt “$mirrordsk”1
umnt “$mirrordsk”5
umnt “$mirrordsk”6
umnt “$mirrordsk”3


sync


echo $”Power Down $mirrordsk”
/sbin/hdparm -y $mirrordsk > /dev/null

赞(0) 打赏
转载请注明出处:服务器评测 » 备份一个Linux系统硬盘[Fedora环境]
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏