使用LVM快照功能 备份&还原你的操作系统

上一篇文章我们说到了如何使用LVM2,说的内容有很多但是在结语我提到了如果备份还原你的操作系统(不是数据就是操作系统)。由于一些不确定因素比如新上线的程序造成系统崩溃无法启动、或者被人为破坏导致系统无法启动。这回使用LVM快照功能的优势就来了,那么如何备份以及还原操作系统呢?下面我用实例来解释!

1、前期准备

所有内容我都放在虚拟机中做…不过运用到现实情况下也是非常方便的。首先需要一台虚拟机和三块虚拟硬盘,三块虚拟硬盘对应:老的操作系统(备份完毕会进行破坏)、备份的硬盘(将操作系统进行备份的存储空间,这个在企业中使用nas备份即可!)、和新的操作系统硬盘(用于对应挂载老操作系统硬盘和备份硬盘);注意:在线上环境中可别这么干!!!在线上环境中将备份的数据存储在NAS上面如果需要还原直接让serverU盘启动一个Linux OS作为操作系统将NAS中的备份数据复制到带有RAID1的磁盘中。

2、为OS创建快照进行备份

首先需要主机创建快照需要VG空间,否则如果将卷组空间不够是无法创建快照的(快照创建其实就是创建一个lv不过只是迷你版,只是将更改的数据进行存储)所以分区的时候首先需要分/boot和swap分区随后再创建lvm记得留一些空间给快照使用,我的示例(记得顺序先是/boot->swap->/ 虽然创建完毕后图片顺序会改但是lvm会在sda3):

LVM的VG名字叫testlv而lv逻辑卷名字叫做root。这样就行了如果需要空间给快照还有17GB左右自己动手创建pv给vg即可!随后安装完操作系统之后开始进行备份:

#为了以示区别我在/root/目录中创建一点目录和一个文件:
[root@localhost ~] mkdir -p /root/test/{1,2,3,4,5,6,7,8,9,0}
[root@localhost ~] vi hello
hello world
#然后我再安装httpd写一个index.html文件:
[root@localhost ~] yum install httpd -y
[root@localhost ~] vi /var/www/html/index.html
hello world
[root@localhost ~] fdisk /dev/sda #创建一个新分区给pv使用
Command (m for help): p

Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00071685

 Device Boot Start End Blocks Id System
/dev/sda1 * 2048 587775 292864 83 Linux
/dev/sda2 587776 4493311 1952768 82 Linux swap / Solaris
/dev/sda3 4493312 67416063 31461376 8e Linux LVM

Command (m for help): n
Partition type:
 p primary (3 primary, 0 extended, 1 free)
 e extended
Select (default e): p
Selected partition 4
First sector (67416064-104857599, default 67416064):
Using default value 67416064
Last sector, +sectors or +size{K,M,G} (67416064-104857599, default 104857599):
Using default value 104857599
Partition 4 of type Linux and of size 17.9 GiB is set

Command (m for help): t
Partition number (1-4, default 4): 4
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
#接下来重启一下设置PV和VG
[root@localhost ~] mke2fs -t xfs -b 4096 /dev/sda4 #给予xfs文件系统
[root@localhost ~] pvcreate /dev/sda4 #创建pv
 Physical volume "/dev/sda4" successfully created
[root@localhost ~] vgextend testlv /dev/sda4
 Volume group "testlv" successfully extended
#接下来我们开始创建快照&备份:
[root@localhost ~] lvcreate -L 5G -s /dev/testlv/root -n backup
 Logical volume "backup" created.
[root@localhost ~] mkdir /back #创建被挂在的文件夹
[root@localhost ~] mount /dev/sdb1 /back/ #挂载到/back
[root@localhost ~] dd if=/dev/testlv/backup of=/back/backup.img
62914560+0 records in
62914560+0 records out
32212254720 bytes (32 GB) copied, 386.557 s, 83.3 MB/s
#这个拷贝等了好久才好...
[root@localhost ~] lvremove /dev/testlv/backup #再将快照删除
Do you really want to remove active logical volume backup? [y/n]: y
 Logical volume "backup" successfully removed

现在已经将根目录下除了/boot下的所有文件都做了备份,现在模拟系统崩溃来恢复操作系统!

3、毁坏操作系统并做恢复:

\首先你在准备一个新操作系统,如果真实环境中推荐U盘安装Linux进行。我这边并没有再添加新的硬盘做操作系统,而是直接使用其他虚拟机来作为新操作系统。所以不管怎么样这里需要一个新的操作系统让备份硬盘和系统盘进行恢复!

#我删除/etc/ /var/ /usr文件随后删除/root让系统毁坏(谨慎操作!)我这里就不演示了
#接下来启动一个新的系统来恢复老的操作系统(感觉很绕口请仔细看!)
[root@localhost ~]# fdisk -l

Disk /dev/sdc: 53.7 GB, 53687091200 bytes, 104857600 sectors #这个是备份硬盘
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xdd53ecb6

 Device Boot Start End Blocks Id System
/dev/sdc1 2048 104857599 52427776 83 Linux

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors #这个是新的操作系统
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a39bf

 Device Boot Start End Blocks Id System
/dev/sda1 * 2048 587775 292864 83 Linux
/dev/sda2 587776 53016575 26214400 83 Linux
/dev/sda3 53016576 57110527 2046976 82 Linux swap / Solaris
/dev/sda4 57110528 62914559 2902016 5 Extended
/dev/sda5 57112576 62914559 2900992 83 Linux

Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors #这个是被破坏的操作系统
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00071685

 Device Boot Start End Blocks Id System
/dev/sdb1 * 2048 587775 292864 83 Linux
/dev/sdb2 587776 4493311 1952768 82 Linux swap / Solaris
/dev/sdb3 4493312 67416063 31461376 8e Linux LVM
/dev/sdb4 67416064 104857599 18720768 8e Linux LVM

Disk /dev/mapper/testlv-root: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

由于进入新的操作系统原先Lvm的磁盘肯定无法读取,不信你可以看看/dev下面有没有vg组的文件!这时候我得使用命令进行刷新寻找:

[root@localhost ~] pvscan #搜寻pv
[root@localhost ~] vgscan #搜寻vg
 Reading volume groups from cache.
 Found volume group "testlv" using metadata type lvm2
[root@localhost ~] lvscan #搜寻lv
 ACTIVE '/dev/testlv/root' [30.00 GiB] inherit

全部搜寻完毕,然后将备份硬盘挂载到/backup上(先要新建)然后恢复老的操作系统:

[root@localhost ~] mkdir /backup
[root@localhost ~] mount /dev/sdc1 /backup/
[root@localhost ~]# dd if=/backup/backup.img of=/dev/testlv/root
62914560+0 records in
62914560+0 records out
32212254720 bytes (32 GB) copied, 1409.38 s, 22.9 MB/s

拷贝完毕之后接下来我们查看结果:

[root@localhost ~] systemctl start httpd #启动一个之前安装过的服务
[root@localhost ~] ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
[root@localhost ~] curl 172.16.1.10
hello world

好了lvm利用快照恢复操作系统就说到这里了!但是肯定有人想可以直接使用dd命令拷贝/dev/sda到/dev/sdb这样多么方便?或者拷贝成为一个文件?对的不过这个我后面再说。

结语:

lvm的确非常好用,不过使用lvm的快照功能会有40%的性能损耗(我也是在其他人的博客里面看到的)。但是lvm的灵活性在很多单位又是必须使用的;比如没有存储设备,使用server作为存储的怎么能没有lvm?所以lvm有好处,但是也有坏处。所以如何取舍就得看环境而言了!

 

Comments

Leave a Reply

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