如何将 Linux 系统转移至 LVM 卷

Schvian 2017-06-21

摘要:一、预备知识了解什么是dd以及什么是dump?dd命令用于复制一个设备/分区,原样输出到另外一个文件/设备/分区。dump命令用于备份ext2或者ext3文件系统。可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。

一、预备知识

了解什么是dd以及什么是dump?

dd命令用于复制一个设备/分区,原样输出到另外一个文件/设备/分区。

dump命令用于备份ext2或者ext3文件系统。可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。

备份好了用什么恢复?

restore命令是dump命令的逆过程,用于还原dump命令生成的备份文件。

二、环境模拟

首先要求有一个可以正常启动的分区,然后要有剩余空间!(这里有两种情况:一个是某分区,一个是新磁盘。两者类似,为了方便本文使用的是新磁盘的方式。)

使用虚拟机模拟了服务器的真实情况:/dev/sda1是正常系统启动分区、/dev/sdb1是新的磁盘分区。(必须注意/dev/sdb1的容量大于/dev/sda1)

虚拟机设置及分区情况:

三、实战部分

1、首先备份MBR主引导记录

ddif=/dev/sda1of=/mnt/lvm/mbr.binbs=512count=1

2、创建LVM卷

首先卸载/dev/sdb1,然后在其上用pvcreate创建物理卷和vgcreate创建卷组vgtest:

umount/dev/sdb1

pvcreate/dev/sdb1

vgcreatevgtest/dev/sdb1

卷组创建好之后,可以用vgs命令查看卷组。

用lvs命令查看逻辑卷,这个时候我们还没有任何逻辑卷。开始创建逻辑卷和文件系统:

lvcreate-L25G-nlvtestvgtest

mkfs.ext4/dev/mapper/vgtest-lvtest

3、备份/目录和/boot目录

首先备份/目录。在dump命令前后输入的date命令是为了查看备份使用的时长。

date&&dump-0f/mnt/lvm/rootfs-20160824.bak/&&date

保险起见我们也备份一下/boot目录:

date&&dump-0f/mnt/lvm/boot-20160824.bak/boot&&date

4、尝试恢复

restore-rfrootfs-20160828.bakboot-20160824.bak

5、修改启动文件

注意:这里根分区(启动分区)需要更改成实际要启动的磁盘。否则不更改的话系统会出现应该使用/dev/sdb1LVM,却使用了原来的/dev/sda1的情况!

首先通过blkid查看分区的UUID:

blkid

然后修改/mnt/lvm/etc/fstab文件(切换了跟分区之后将变成/etc/fstab)中的根分区指向:

vim/mnt/lvm/etc/fstab

chroot到新的分区里面,然后检查相应的分区设置。

chroot/mnt/lvm

注意:要chroot进入目录查看是否正确!并且确定防火墙SELinux等的设置,最最最重要的是OpenSSH要打开的!

6、恢复MBR主引导记录

ddif=./mbr.binof=/dev/mapper/vgtest-lvtest

7、修正GRUB引导

这样可以让新磁盘可以脱离源磁盘的引导。

chroot进入新磁盘。并重建/boot目录:

chroot/mnt/lvm

ls/boot/

rm-rf/boot/*

yuminstallgrub-y

然后输入:

root(hd1,0)

setup(hd1)

quit

这样就将GRUB引导指向了新的磁盘。

重启可以看看是否有问题。

原文发布时间为:2016-08-26

本文来自云栖社区合作伙伴“Linux中国”

用云栖社区APP,舒服~

相关推荐