1
ToughGuy 2015-02-13 00:22:08 +08:00
备份分区表:
sfdisk -d /dev/sda > sda-partition.backup 恢复分区表 cat sda-partition.backup | sfdisk -f /dev/sda 同里克隆sda分区表到sdb(需要两块盘一样) sfdisk -d /dev/sda | sfdisk -f /dev/sda 至于root分区备份 tar -czvpf /path/to/root.tar.gz --exclude=/path/to/root.tar.gz --exclude=proc --exclude=mnt --exclude=sys --exclude=dev --exclude=tmp/* --exclude=media --exclude=WhatYouWant / 恢复 tar -xzvpf /path/to/root.tar.gz -C / 备份主引导记录 dd if=/dev/sda of=/path/to/mbr.backup bs=512 count=1 恢复祝引导记录 dd if=/path/to/mbr.backup of=/dev/sda 如果分区信息有改变记得修改过/etc/fstab和/boot/grub/menu.lst里面的UUID LVM分区也可以直接使用lvm快照功能,更省事儿。 |
2
ToughGuy 2015-02-13 00:22:49 +08:00
恢复分区后vgchange -ay 就能识别到lvm分区了
|
3
ioiioi OP @ToughGuy
有两个问题 1、gpt分区方式,sfdisk应该是无法识别的,应该用sgdisk 2、备份主引导记录 dd if=/dev/sda of=/path/to/mbr.backup bs=512 count=1 同样,gpt,也能用bs=512 count=1这个参数来进行备份吗? 嗯,恢复分区后,使用vgchange -ay我倒是没有试过,我试试。 |
4
ioiioi OP @ToughGuy
对了,还有恢复的步骤 1、恢复分区表; 2、vgchange -ay 识别所有lvm; 3、恢复引导记录 4、挂载根分区 5、将根分区的内容解压到挂在点; 6、umount && reboot 是这样的吗? |
5
ToughGuy 2015-02-13 09:26:24 +08:00
@ioiioi
sorry 昨晚急着去洗澡,文章内容真没注意看, gpt分区的确无法使用sfdisk来备份或者还原。 主引导记录不论是DOS分区还是GPT分区都会有, 不过这个在GPT分区下是否对引导有影响还不得而知。 |
6
ToughGuy 2015-02-13 09:31:33 +08:00 1
@ioiioi
恢复步骤没错, 恢复后记得使用命令检查blkid 对比下/etc/fstab和/boot/grub/menu.lst(grub.cfg)的是否对的上号。 |
8
ioiioi OP 我发现,针对一个生产服务器的linux进行备份和恢复,不是一件容易的事,这两天经过实践,把过程写下来,节省大家的时间。
### 备份 思路:备份分区表,引导分区、/boot和根分区的内容 1、启动sysresccd的图形界面。 2、设置网络和备份目录 ``` mkdir -p /mnt/custom/backup/pmx5-os-backup && cd /mnt/custom/backup/pmx5-os-backup ``` 3、备份分区表 ``` sgdisk --backup=/mnt/backup/sda-gpt.bak /dev/sda sgdisk --backup=/mnt/backup/sdb-gpt.bak /dev/sdb ``` 4、备份lvm 的pv、vg和lv的metadata 备份物理卷元数据(pv metadata) ``` mkdir /mnt/custom/root mount /dev/pve/root /mnt/custom/root ``` 在pmx5的/etc/lvm/archive目录里面有所有lvm vg的信息,可以考虑仅备份最后一个。 ``` cd /mnt/custom/root/ && ll ./etc/lvm/archive ... loc_00011-927590291.vg ... pve_00003-1143708246.vg ... cp loc_00011-927590291.vg pve_00003-1143708246.vg /mnt/backup/pmx5-os-backup ``` 备份vg和lv metadata ``` vgcfgbackup -f /mnt/backup/pmx5-os-backup/lvm-vg-loc.bak /dev/loc vgcfgbackup -f /mnt/backup/pmx5-os-backup/lvm-vg-pve.bak /dev/pve ``` 5、备份引导分区 ``` dd if=/dev/sda1 of=/mnt/backup/pmx5-os-backup/sda1-boot-sector.img bs=512 ``` 6、备份/boot分区 ``` mkdir /mnt/custom/boot && mount /dev/sda2 /mnt/custom/boot cd /mnt/custom/boot tar -czvpf /mnt/backup/pmx5-os-backup/sda2-boot-fs.tar.gz ./ ``` 7、备份根分区及uuid ``` mkdir /mnt/custom/root && mount /dev/pve/root /mnt/custom/root cd /mnt/custom/root tar -czvpf /mnt/backup/pmx5-os-backup/sda3-lvm-pve-root-fs.tar.gz ./ blkid > /mnt/backup/pmx5-os-backup/uuid.bak ``` 8、备份其它分区 ``` mkdir /mnt/custom/data && mount /dev/loc/data /mnt/custom/data cd /mnt/custom/data tar -czvpf /mnt/backup/pmx5-os-backup/sda3-lvm-loc-data-fs.tar.gz ./ blkid > /mnt/backup/pmx5-os-backup/uuid.bak ``` 9、打包并发送到备份服务器 ``` cd /mnt/custom/backup/pmx5-os-backup tar -cvf pmx5-os-backup.tar --exclude=./pmx5-os-backup.tar ./* scp pmx5-os-backup.tar root@<backup-server-ip>:/mnt/backup ``` ### 恢复或克隆 不是一般的麻烦,能用dd,就用dd吧。 uuid仅在本地有效,两个物理服务器的相同块设备,其uuid可以一样,这是克隆的基础。 1、先用HP的iLO创建阵列和两块逻辑盘,类型和大小跟原服务器一致。 2、将将备份文件拷贝到sysresccd的临时硬盘中。 ``` mkdir /mnt/backup/pmx5-os-backup && cd /mnt/backup/pmx5-os-backup scp root@<backup-server-ip>:/mnt/backup/pmx5-os-backup/* . ``` 3、恢复分区表 ``` sgdisk --load-backup=sda-gpt.bak /dev/sda sgdisk --load-backup=sdb-gpt.bak /dev/sdb ``` 4、恢复boot-sector ``` dd if=./boot-sector.img of=/dev/sda1 bs=1M tune2fs -U 8e3cb37f-cb8c-4cc6-949f-102eb451b552 /dev/sda2 ``` 说明:因为sgdisk不会恢复原有块设备的uuid,所以需要把块设备的uuid改成旧的uuid,否则启动的时候会出现no such device的错误提示。通过tune2fs可以更改分区的uuid,当然也可以使用update-grub2来实现,不过要麻烦一点。 5、恢复/boot ``` mkdir /mnt/custom/boot mount /dev/sda2 /mnt/custom/boot tar -zxvf ./boot-fs.tar.gz -C /mnt/custom/boot umount /mnt/custom/boot ``` 6、恢复pv 从uuid.bak中找到/dev/sdb1中的loc pv的uuid ``` pvcreate --uuid "<dev-sda3-pv-uuid>" --restorefile=./pve_00003-927590291.vg pvcreate --uuid "<dev-sdb1-pv-uuid>" --restorefile=./loc_00011-927590291.vg ``` 这一步的作用是创建与原uuid一致的pv,如果直接使用vgcfgrestore的话,会出现“xxx”的错误提示。 7、恢复vg和lv ``` vgcfgrestore -f ./lvm-vg-loc.bak /dev/sdb1 vgcfgrestore -f ./lvm-vg-pve.bak /dev/sda3 ``` 8、恢复文件系统 ``` vgchange -ay mkfs.ext4 /dev/pve/root mkdir /mnt/custom/root && mount /dev/pve/root /mnt/custom/root tar -zxvf ./root-fs.tar.gz -C /mnt/custom/root umount /mnt/custom/root mkfs.ext4 /dev/sdb1 mkdir /mnt/custom/data && mount /dev/loc/data /mnt/custom/data tar -zxvf ./vz-fs.tar.gz -C /mnt/custom/data umount /mnt/custom/data ``` 9、恢复swap分区 ``` mkswap /dev/pve/swap ``` 使用lsblk和blkid检查分区表和uuid,确认无误后即可重启服务器。 =========== 1、tar打包root分区的时候,不能exclude /dev /proc /sys,否则启动会报错。 2、uuid要前后一致 3、用dd吧,恢复的过程还可以偷懒,没必要为了节省那么丁点硬盘空间,瞎折腾。 |