转载于http://wolfplanet.iteye.com
很多人都说Linux下没有一个和Win下Ghost功能类似的软件,要实现类似win系统的整系统备份几乎没有办法,经过多次试验使用tar完成这个功能,只是过程有点复杂。
日后有空使用dd试试,或许效果能更好。
注:要备份系统,最好使用光盘或者其它系统盘启动(和win下的进入dos再作备份类似),把系统的文件系统按照/etc/fstab里面的文件结构挂载到现有文件系统中。
本文以FC4为例,直接在系统中对正在运行的系统进行备份:
首先查看系统文件结构:
[root@FC4 /root]# mount
/dev/sda6 on / type ext3 (rw)
none on /proc type proc (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/sda1 on /boot type ext3 (rw)
/dev/sda7 on /home type ext3 (rw)
none on /dev/shm type tmpfs (rw)
/dev/sda3 on /usr type ext3 (rw)
/dev/sda2 on /var type ext3 (rw)
[root@FC4 /root]#
[root@FC4 /root]# fdisk /dev/sda
The number of cylinders for this disk is set to 4425.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p
Disk /dev/sda: 36.4 GB, 36401479680 bytes
255 heads, 63 sectors/track, 4425 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 3200 25599577+ 83 Linux
/dev/sda3 3201 3722 4192965 83 Linux
/dev/sda4 3723 4425 5646847+ f Win95 Ext'd (LBA)
/dev/sda5 3723 3853 1052226 82 Linux swap
/dev/sda6 3854 3984 1052226 83 Linux
/dev/sda7 3985 4425 3542301 83 Linux
Command (m for help): q
[root@FC4 /root]# more /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
LABEL=/home /home ext3 defaults 1 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
/dev/sda5 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
[root@FC4 /root]
从上面的结果可以看出,系统实际的挂节点只有 / /boot /home /usr /var,在备份的使用应该把proc sys shm等内核、系统、内存文件系统排除。
在/下建立exclude文件,内容:
[root@FC4 /root]# cat /exclude
./proc/*
./sys/*
./dev/pts/*
./dev/shm/*
./proc/sys/fs/binfmt_misc/*
./var/log/BACKUP*
./tmp/*
__ELM__
[root@FC4 /root]#
为了恢复方便,使用相对路径,所以在exclude文件中使用相对路径,都以‘./’开头,由于我的系统中/var分区比较多的剩余空间,所以打算把备份文件放到这个文件系统中,且以BACKUP开头,所以要把备份后的文件排除:./var/log/BACKUP*
一切准备就绪,下面开始备份:
[root@FC4 /root]# cd /
[root@FC4 /]# tar -X ./exclude -czvf ./var/log/BACKUP_FC4_20060119.tar.gz ./
OK,命令结束后,备份就完事了。你可以把BACKUP_FC4_20060119.tar.gz文件复制到其它备份主机上,用于恢复。
系统恢复:
使用系统的Rescue盘启动系统,对新硬盘进行分区,然后创建文件系统。
分区使用fdisk(如果新盘和原盘大小一致,最使分区大小也一致,具体可以根据备份前fdisk的输出结果来操作),具体步骤略。
然后创建文件系统:
Bash-3.0# mkfs.ext3 -L / /dev/sda6
Bash-3.0# mkfs.ext3 -L /boot /dev/sda1
Bash-3.0# mkfs.ext3 -L /home /dev/sda7
Bash-3.0# mkfs.ext3 -L /usr /dev/sda3
Bash-3.0# mkfs.ext3 -L /var /dev/sda2
然后挂载文件系统:
Bash-3.0# cd /mnt
Bash-3.0# mount /dev/sda6 source
Bash-3.0# cd source
Bash-3.0# mkdir boot
Bash-3.0# mount /dev/sda1 boot
Bash-3.0# mkdir home
Bash-3.0# mount /dev/sda7 home
Bash-3.0# mkdir usr
Bash-3.0# mount /dev/sda3 usr
Bash-3.0# mkdir var
Bash-3.0# mount /dev/sda2 var
然后想办法把你备份的文件弄到这个主机上来,方法不限。
我把备份文件放在/mnt/source/var/下,因为我的这个分区比较大。
然后恢复数据。
Bash-3.0# cd /mnt/source
Bash-3.0# tar -zxf var/BACKUP_FC4_20060119.tar.gz
完毕后安装grub:
Bash-3.0# chroot /mnt/source
Bash-3.0# grub
如果提示无法识别TERM,请使用:
Bash-3.0# grub --no-curses
Grub> root (hd0,0)
Grub> setup (hd0)
当然root (hd0,0)要根据你的环境而改变,具体查看grub手册。
Bash-3.0# sync
Bash-3.0# exit
Bash-3.0# exit
OK,恢复完毕。(由于我是在线的时候备份的,所以启动的时候会fsck所有硬盘,如果你进入rescue模式备份,就不会有这个提示了)。
注意: 如果你备份的系统是EL3,在恢复的时候,最好不要使用FC4的rescue盘,否则会提示使用更新版本的fsck对硬盘进行检查,所以最好使用相同版本的rescue盘进行恢复。
简单的备份方法(但是很占用空间):
用rescue盘启动后:
Bash-3.0# dd if=/dev/sda bs=10M | gzip -9 > /other/disks/path/backup_FC4_20060119.dd.gz
/other/disks/path就是其它盘上的某个目录下。
相同的盘ghost直接使用:
Bash-3.0# dd if=/dev/sda of=/dev/sdb bs=10M
恢复方法:
Bash-3.0# gzip -dc backup_FC4_20060119.dd.gz | dd of=/dev/sda bs=10M
然后重新启动就OK了。
相关文章还可以参考:Ubuntu的Wiki