Linux系统备份对一些关键的单点业务是非常重要的,下面将说说采用简单的工具进行备份,实用派。
一、rsync备份系统
rsync -PpavAHX 备份源目录 备份到位置
rsync -PpavAHX / /media/youxia/usb/backup_20141216 --exclude=/media/* --exclude=/sys/* --exclude=/proc/* --exclude=/mnt/* --exclude=/tmp/*
mkdir -p /drbd_data/linux_system_backup/
rsync -PpavAHX / /drbd_data/linux_system_backup/`date +%Y-%m-%d` --exclude=/media/* --exclude=/sys/* --exclude=/proc/* --exclude=/mnt/* --exclude=/tmp/*
这个脚本的基本形式来自于 rsync 的网站。其实只有一条命令:
rsync --force --ignore-errors --delete --delete-excluded --exclude-from=exclude_file --backup --backup-dir=`date +%Y-%m-%d` -av
关键的参数是:
--backup: 在覆盖前备份文件
--backup-dir=`date +%Y-%m-%d`: 为备份的文件建立一个备份目录,看上去就像: 2002-08-15
-av: 存档(archive)模式和详细输出(verbose)模式。
恢复系统
rsync -Ppa 备份数据 还原位置
rsync -PpavAHX /drbd_data/linux_system_backup/ /
注意:
如原目录没有/则会在根下目录创建linux_system_backup,文件都在linux_system_backup下
rsync -PpavAHX /drbd_data/linux_system_backup /
即可恢复系统。
[root@testserver3 home]# su - hd
su: warning: cannot change directory to /home/hd: Permission denied
-bash: /sbin/consoletype: Permission denied
-bash: ulimit: open files: cannot modify limit: Operation not permitted
-bash: /home/hd/.bash_profile: Permission denied
-bash-4.1$ exit
ll -a /
发现/home权限编程了700了
修改下权限就好了
chmod 755 /home
chmod 755 /srv /share1 /selinux /mnt /media /logs/
chmod 755 /opt /sbin
chmod 777 /tmp/
二、dump备份/恢复系统
测试备份数据量
Filesystem Size Used Avail Use% Mounted on
/dev/xvda2 288G 32G 242G 12% /
执行了3个小时10多分钟,时间不短
yum -y install dump
[root@localhost~]# dump [选项] 备份之后的文件名 原文件或目录
选项说明:
-level:备份级别。(一共十个备份级别,具体格式为“-0”~“-9”:“-”和具体的级别数字之间没有空格。其中0就是完全备份;1就是第一次增量备份;2就是第二次增量备份。。。最多支持9次增量备份。)
-f 文件名:手工指定备份之后的文件名。
-u:备份成功之后,把备份时间记录在/etc/dumpdates文件中。
-v:显示备份过程中更多的输出信息。
-j:调用bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式。
-W:显示允许被dump的分区的备份等级及备份时间。
执行一次完全备份
------10:40开始--------
#dump -0uj -f /drbd_data/backup_dev_xvda2.bak.bz2 /
DUMP: Date of this level 0 dump: Wed Dec 21 10:40:39 2016
DUMP: Dumping /dev/xvda2 (/) to /drbd_data/backup_dev_xvda2.bak.bz2
DUMP: Label: none
DUMP: Writing 10 Kilobyte records
DUMP: Compressing output at compression level 2 (bzlib)
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 32824326 blocks.
DUMP: Volume 1 started with block 1 at: Wed Dec 21 10:40:41 2016
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: 2.25% done at 2459 kB/s, finished in 3:37
DUMP: 4.29% done at 2348 kB/s, finished in 3:42
DUMP: 6.34% done at 2310 kB/s, finished in 3:41
DUMP: 9.09% done at 2486 kB/s, finished in 3:19
DUMP: 12.45% done at 2725 kB/s, finished in 2:55
DUMP: 15.70% done at 2863 kB/s, finished in 2:41
DUMP: 18.92% done at 2956 kB/s, finished in 2:30
。。。
DUMP: 97.96% done at 2896 kB/s, finished in 0:03
DUMP: 99.89% done at 2876 kB/s, finished in 0:00
DUMP: Closing /drbd_data/backup_dev_xvda2.bak.bz2
DUMP: Volume 1 completed at: Wed Dec 21 13:53:33 2016
DUMP: Volume 1 took 3:12:52
DUMP: Volume 1 transfer rate: 1095 kB/s
DUMP: Volume 1 33226150kB uncompressed, 12676645kB compressed, 2.622:1
DUMP: 33226150 blocks (32447.41MB) on 1 volume(s)
DUMP: finished in 11572 seconds, throughput 2871 kBytes/sec
DUMP: Date of this level 0 dump: Wed Dec 21 10:40:39 2016
DUMP: Date this dump completed: Wed Dec 21 13:53:33 2016
DUMP: Average transfer rate: 1095 kB/s
DUMP: Wrote 33226150kB uncompressed, 12676645kB compressed, 2.622:1
DUMP: DUMP IS DONE
--------13:53结束----------
增量备份
dump -1uj -f /drbd_data/backup_dev_xvda2.bak_add.bz2 /
注意:如果是备份目录,则只能使用0级别进行完全备份,而不再支持增量备份。也就是说,dump只有在备份分区的时候才可以执行增量备份,否则系统将会报错。
恢复命令:restore命令
[root@localhost~]# restore [模式选项] [选项]
模式选项说明:restore命令常用的模式有以下四种,且在使用的时候这四个模式只能择其一,不能混用。
-C:比较备份数据和实际数据的变化。
-i:进入交互模式,手工选择需要恢复的文件。
-t:查看模式,用于查看备份文件中拥有哪些数据。
-r:还原模式,用于数据还原。
选项说明:
-f:指定备份文件的文件名
比较变化
restore -C -f /drbd_data/backup_dev_xvda2.bak.bz2
查看模式
restore -t -f /drbd_data/backup_dev_xvda2.bak.bz2
还原模式
恢复完全备份
restore -r -f /drbd_data/backup_dev_xvda2.bak.bz2
恢复增量备份数据
restore -r -f /drbd_data/backup_dev_xvda2.bak_add.bz2
进入交互模式
restore -i -f /drbd_data/backup_dev_xvda2.bak.bz2
说明:
通过?来查看可以使用的命令,ls是列出备份文件的内容
通过add来选择要恢复的文件,选定后再ls的时候会标记为*
通过extract还原选定的文件。
提示“Specify next volume”时填如1,它表示是在单独一卷磁带(这里我用的是磁盘的空间)上进行的备份。下面一行提示选“n”,表示不是恢复整个文件系统,而是单个文件。
由于dump是记录整个文件系统的,因此测试还原时也应该要给予一个全新的文件系统才行。
#fdisk /dev/sda
....
#partprobe
#mkfs -t ext4 /dev/sda8
#mount /dev/sda8 /mnt
#cd /mnt
#restore -r -f /root/boot.dump
三、dd方式备份系统
dd可以读取磁碟装置的内容(几乎是直接读取磁区"sector"),然后将整个装置备份成一个文件呢!真的是相当的好用啊~ dd 的用途有很多啦~但是我们仅讲一些比较重要的选项,如下:
[root@www ~]# dd if="input_file" of="output_file" bs="block_size" count="number"
选项与参数:
if :就是 input file 也可以是装置
of :就是 output file 也可以是装置
bs :规划的一个 block 的大小,若未指定则默认是 512 bytes(一个 sector 的大小)
count:多少个 bs 的意思。
范例一:将 /etc/passwd 备份到 /tmp/passwd.back 当中
[root@www ~]# dd if=/etc/passwd of=/tmp/passwd.back
3+1 records in
3+1 records out
1945 bytes (1.9 kB) copied, 0.000332893 seconds, 5.8 MB/s
[root@www ~]# ll /etc/passwd /tmp/passwd.back
-rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd
-rw-r--r-- 1 root root 1945 Dec 17 18:09 /tmp/passwd.back
# 仔细看一下,我的 /etc/passwd 文件大小为 1945 bytes,因为我没有配置 bs ,
# 所以默认是 512 bytes 为一个单位,因此,上面那个 3+1 表示有 3 个完整的
# 512 bytes,以及未满 512 bytes 的另一个 block 的意思
# 感觉好像是 cp 这个命令
范例二:将自己的磁碟之第一个磁区备份下来
[root@www ~]# dd if=/dev/hdc of=/tmp/mbr.back bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.0104586 seconds, 49.0 kB/s
# 第一个磁区内含有 MBR 与 partition table ,透过这个动作,
# 我们可以一口气将这个磁碟的 MBR 与 partition table 进行备份!
范例三:找出你系统最小的那个分割槽,并且将他备份下来:
[root@www ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.9G 5.1G 44% /
/dev/hdc3 4.8G 651M 3.9G 15% /home
/dev/hdc1 99M 21M 73M 23% /boot <==就捉他
[root@www ~]# dd if=/dev/hdc1 of=/tmp/boot.whole.disk
208782+0 records in
208782+0 records out
106896384 bytes (107 MB) copied, 6.24721 seconds, 17.1 MB/s
[root@www ~]# ll -h /tmp/boot.whole.disk
-rw-r--r-- 1 root root 102M Dec 17 18:14 /tmp/boot.whole.disk
# 等于是将整个 /dev/hdc1 捉下来的意思~如果要还原呢?就反向回去!
# dd if=/tmp/boot.whole.disk of=/dev/hdc1 即可!非常简单!
# 简单的说,如果想要整个硬盘备份的话,就类似 Norton 的 ghost 软件一般,
# 由 disk 到 disk ,利用 dd 就可以!
例题:
你想要将你的 /dev/hdc1 进行完整的复制到另一个 partition 上,请使用你的系统上面未分割完毕的容量再创建一个与 /dev/hdc1 差不多大小的分割槽 (只能比 /dev/hdc1 大,不能比他小!),然后将之进行完整的复制 (包括需要复制 boot sector 的区块)。
答:
由于需要复制 boot sector 的区块,所以使用 cp 或者是 tar 这种命令是无法达成需求的!此时那个dd 就派的上用场了。你可以这样做:
# 1. 先进行分割的动作
[root@www ~]# fdisk -l /dev/hdc
Device Boot Start End Blocks Id System
/dev/hdc1 * 1 13 104391 83 Linux
[root@www ~]# fdisk /dev/hdc
Command (m for help): n
First cylinder (2354-5005, default 2354): 这里按 enter
Using default value 2354
Last cylinder or +size or +sizeM or +sizeK (2354-5005, default 5005): 2366
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/hdc9 2354 2366 104391 83 Linux
Command (m for help): w
# 为什么要使用 2366 呢?因为 /dev/hdc1 使用 13 个磁柱,因此新的 partition
# 我们也给它 13 个磁柱,因此 2354 + 13 -1 = 2366
[root@www ~]# partprobe
# 2. 不需要格式化,直接进行 sector 表面的复制!
[root@www ~]# dd if=/dev/hdc1 of=/dev/hdc9
208782+0 records in
208782+0 records out
106896384 bytes (107 MB) copied, 16.8797 seconds, 6.3 MB/s
[root@www ~]# mount /dev/hdc9 /mnt
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc1 101086 21408 74459 23% /boot
/dev/hdc9 101086 21408 74459 23% /mnt
# 一模一样
[root@www ~]# umount /mnt
范例四:在容量相同的硬盘间进行克隆系统
# dd if=/dev/sda of=/dev/sdb
其中,/dev/sda为系统盘,/dev/sdb是第二个硬盘。
直接将系统进行克隆,克隆后关机,取出第一块硬盘,将第二个硬盘插入到第一块盘的位置,可以正常启动服务器。
四、实际案例测试:
采用dd方式克隆系统
1、查看系统状态
[root@d155 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda4 620G 17G 573G 3% /
tmpfs 63G 0 63G 0% /dev/shm
/dev/sda1 291M 36M 241M 13% /boot
/dev/sda2 2.1T 1.7T 354G 83% /disk1
/dev/sdb1 2.8T 1.7T 948G 65% /disk2
/dev/sdc1 2.8T 1.7T 959G 64% /disk3
/dev/sdd1 2.8T 1.7T 992G 63% /disk4
[root@dn155 diskb]# fdisk -l
硬盘都是GPT格式的 3T硬盘
Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdc1 1 267350 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.
Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdd1 1 267350 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.
Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 1 267350 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.
Disk /dev/sda: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sda1 1 267350 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.
当前的分区情况:
sda sda1 sda2 sda3 sda4 sdb sdb1 sdc sdc1 sdd sdd1
2、克隆系统
dd操作,将/dev/sda这个是系统硬盘,dd到/dev/sdb上
[root@d155 /]# dd if=/dev/sda of=/dev/sdb
默认看不到进度,可以开启另一个链接
watch -n 5 killall -USR1 dd
查看原来的dd命令界面可以看到进度了,这里的killall不是杀死进程的意思,是发信号
这个操作使用了24个小时完成的
3、还原测试
服务器关机,取出原系统硬盘,将第二块硬盘插到第一个盘的位置,启动服务器。正常启动,数据都一样的。
这里提示下,如果使用第二块盘启动后,正常关机,将第二块放会到原来位置,第一块盘放回到原来位置,这是启动服务器后,实际还是启动了第二块盘系统,
需要将第二块盘取出,之后使用原系统启动一次,在将第二块盘插上,才不影响。
克隆完成后还会发现,第二块的分区和原系统分区数量一致的。
第一块sda sda1 sda2 sda3 sda4
第二块sdb sdb1 sdb2 sdb3 sdb4
现在的分区情况:
sda sda1 sda2 sda3 sda4 sdb sdb1 sdb2 sdb3 sdb4 sdc sdc1 sdd sdd1
mount sdb4的话可以看到/目录的文件,sdb1是boot文件
最后可以用rsync备份的文件进行恢复到最新的内容了。
五、总结:
系统备份/还原的话,建议先在测试环境尝试使用下,
基本上硬盘出现物理故障后需要恢复系统。
情况一:
比如服务器4块硬盘,第一块是系统盘,第一块盘物理故障,导致服务器挂了,假设你dd克隆的系统在第二块硬盘上,日常备份的文件在第三块硬盘上了。
恢复的流程:
1、将所有硬盘拿下来,第二块硬盘插到第一块盘的位置,正常重启,系统可以启动,但数据不是最新的数据
2、将rsync备份的数据还原到当前系统上,完成系统恢复了
情况二:
比如服务器4块硬盘,第一块是系统盘,第一块盘物理故障,导致服务器挂了,假设日常只使用rsync备份文件,在第二块硬盘上了
1、将4块盘取出,安装一块新硬盘,从新装系统,分区大小一致。(之前最好能保留一份分区的详情)
2、挂载第2、3、4硬盘,看看是否正常读取文件
3、将rsync备份的文件恢复到新系统硬盘上去,重启,服务器是否正常启动
对比说明:
1、dd+rsync的方式比较省事一些,但是dd的时候3T硬盘,我自己使用了24个小时才完成,dd不会考虑数据大小,而是整块盘大小克隆。
2、rsync的方式需要重新安装系统,在还原数据文件,会麻烦一些。
六、建议系统备份方式:
1、使用dd克隆硬盘(默认操作一次就好,24小时等等可以的)
2、之后使用rsync定期对数据进行备份(建议全量)
参考:
http://blog.csdn.net/sophiafxr/article/details/52176756
http://arhat.blog.51cto.com/101503/121994
http://blog.csdn.net/zyq522376829/article/details/47316581