我有个 linux 根分区和 lvm 想备份,使用什么工具? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ioiioi
V2EX    问与答

我有个 linux 根分区和 lvm 想备份,使用什么工具?

  •  
  •   ioiioi 2015-02-12 23:08:58 +08:00 5291 次点击
    这是一个创建于 3984 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在物理服务器安装了centos,采用的是gpt分区方式,而且用了lvm,硬盘大小为40G(使用了hp P420i做了阵列,划分了一个40G的逻辑盘,在操作系统中视为一个独立的物理盘)。
    分区表如下:

    ```
    GNU Parted 2.3
    Using /dev/sda
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) print
    Model: HP LOGICAL VOLUME (scsi)
    Disk /dev/sda: 42.9GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt

    Number Start End Size File system Name Flags
    1 262kB 2097kB 1835kB primary bios_grub
    2 2097kB 537MB 535MB ext4 primary boot
    3 537MB 42.9GB 42.4GB primary lvm

    ```
    其中分区3通过lvm划分了两个lv:root和swap,root为20G,仅用了3.2G,swap为8G。

    我初步以下备份方式:
    使用system rescue cd,备份分区表和lvm,然后对partition1和partition2做dd备份,接着使用tar对/root分区的内容做备份,最后scp到backup server。
    问题:
    1、如何备份分区表和lvm
    2、恢复的步骤是怎样的?

    说明:
    我尝试过使用sgdisk,虽然可以备份分区表,但是恢复的时候并不正确,无法正常启动,似乎无法备份lvm信息。
    8 条回复    2015-02-15 16:58:24 +08:00
    ToughGuy
        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快照功能,更省事儿。
    ToughGuy
        2
    ToughGuy  
       2015-02-13 00:22:49 +08:00
    恢复分区后vgchange -ay 就能识别到lvm分区了
    ioiioi
        3
    ioiioi  
    OP
       2015-02-13 08:38:00 +08:00
    @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我倒是没有试过,我试试。
    ioiioi
        4
    ioiioi  
    OP
       2015-02-13 08:40:27 +08:00
    @ToughGuy
    对了,还有恢复的步骤
    1、恢复分区表;
    2、vgchange -ay 识别所有lvm;
    3、恢复引导记录
    4、挂载根分区
    5、将根分区的内容解压到挂在点;
    6、umount && reboot
    是这样的吗?
    ToughGuy
        5
    ToughGuy  
       2015-02-13 09:26:24 +08:00
    @ioiioi

    sorry 昨晚急着去洗澡,文章内容真没注意看, gpt分区的确无法使用sfdisk来备份或者还原。
    主引导记录不论是DOS分区还是GPT分区都会有, 不过这个在GPT区下是否对引导有影响还不得而知。
    ToughGuy
        6
    ToughGuy  
       2015-02-13 09:31:33 +08:00   1
    @ioiioi
    恢复步骤没错, 恢复后记得使用命令检查blkid 对比下/etc/fstab和/boot/grub/menu.lst(grub.cfg)的是否对的上号。
    ioiioi
        7
    ioiioi  
    OP
       2015-02-13 09:45:49 +08:00
    @ToughGuy
    谢谢,menu.lst的话,我准备直接用/dev/sda1这种方式了,uuid太费事。
    ioiioi
        8
    ioiioi  
    OP
       2015-02-15 16:58:24 +08:00
    我发现,针对一个生产服务器的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吧,恢复的过程还可以偷懒,没必要为了节省那么丁点硬盘空间,瞎折腾。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2562 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 01:34 PVG 09:34 LAX 17:34 JFK 20:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86