很多人都说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