巧用dd命令备份磁盘

上一期我们遗留了一个话题,对于非lvm文件系统使用静态分区的朋友们如何备份自己的操作系统和硬盘分区?由于前两篇文章已经说明了dd命令的使用方式,不过我还没有进行对它的介绍,这一篇文章的目的就是详细介绍dd命令。

首先得知道dd命令的工作原理,dd命令是一个基于磁盘块复制的工具。不像cp、mv等命令是通过复制、剪切文件的的方式进行存储,dd命令除了能够选择分区进行拷贝还可以选择磁盘的字节数。所以使用dd命令配合脚本也能完成自动备份任务,但是对空间需求极大不过数据都会得以保留。

对磁盘进行备份并恢复:

前提:首先需要两台虚拟机,一台作为备份和恢复的虚拟机,还有一台作为中间介质帮助完成恢复。并且需要一块空的磁盘作为放置备份文件的磁盘,这个请自行准备。我这里直接展示备份方案(fdisk不会用德国情况可以参考这里有详细说明初始化硬盘)

首先备份/var所在的分区:

#首先确认/var分区在哪个位置
[root@localhost ~] df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 25G 806M 25G 4% /
devtmpfs 362M 0 362M 0% /dev
tmpfs 371M 0 371M 0% /dev/shm
tmpfs 371M 5.0M 366M 2% /run
tmpfs 371M 0 371M 0% /sys/fs/cgroup
/dev/sda5 2.8G 140M 2.7G 5% /var
/dev/sda1 283M 105M 178M 38% /boot
tmpfs 75M 0 75M 0% /run/user/0
#上述看到在sda5中的内容被挂载在/var/上
[root@localhost ~] mkdir /backup #创建备份磁盘挂载的文件夹
[root@localhost ~] mount /dev/sdb1 /backup/ #挂载到刚创建的文件夹下
[root@localhost ~] dd if=/dev/sda5 of=/backup/sda5.img #备份分区
5801984+0 records in
5801984+0 records out
2970615808 bytes (3.0 GB) copied, 30.9558 s, 96.0 MB/s

接下来我们删除/var下面的文件并且对其进行恢复:

[root@localhost ~] cd /var
[root@localhost var] rm -rf *
#删除完毕所有/var下的文件我们进行恢复
#由于删除了/var/以后操作系统不完整了所以我们开启另一台虚拟机进行恢复
#首先在另一台虚拟机中创建/backup文件用于挂载
[root@localhost ~] mount /dev/sdb1 /backup/
[root@localhost ~] ls /backup/
lost+found sda5.img #备份的文件在
[root@localhost ~] dd if=/backup/sda5.img of=/dev/sdc5
5801984+0 records in
5801984+0 records out
2970615808 bytes (3.0 GB) copied, 114.403 s, 26.0 MB/s

恢复完毕以后别忘了查看文件是否OK?不过使用dd命令恢复操作系统的一部分文件可能会导致系统BUG,最好是将整块磁盘进行复制。所以综上所属:个人感觉还是lvm的快照相对好点但是会有性能损失。这个请自己进行取舍

备份mbr分区信息:

dd命令工具除了能够复制整个分区|磁盘,还能够指定复制一部分空间,比如我们要备份MBR分区表。由于分区表只占有磁盘的前512字节所以我们要这么复制:

dd if=操作系统读取的硬盘比如:/devsda1 of=备份到哪里?bs=512 count=1

这样一旦操作系统无法正确读取分区表导致系统无法引导到正确分区表我们就能使用命令还原。

结语:

操作系统被搞崩溃通常不会发生,基本都是人为原因(误操作、新上线应用导致)所以有效的备份操作系统也是需要的,但是是使用lvm快照备份(降低性能)?还是直接暴力使用dd命令工具(拷贝整个系统磁盘,占去大量空间。如果只备份一个分区如/var /usr等可能造成系统bug)这个还是得看具体情况。

 

Comments

Leave a Reply

Your email address will not be published. Name and email are required