朋友今天突然找我,说是要把他的 Linux 系统的根分区磁盘扩大。接到这个问题,我马上开始查看下系统情况。是一台 CentOS 6.6 的系统,有两块磁盘分别是:/dev/vda1
是 15G 的根卷,/dev/vda2
是 1G 的交换分区,而整个 /dev/vda
磁盘总大小是 21G( 有 5G 的 /dev/vda5
空闲空间)。现在要求增大 /dev/vda1
分区。
后面我给朋友三个方案:
- 第一个就是将
/dev/vda
上的空闲分区(/dev/vda5
)随意作为/home
、/var
之类的挂载; - 第二个就是做符号链接到
/dev/vda1
,5G 加上 15G 也勉强扩大了; - 最后一种也就是最麻烦的,做一个 LVM,将数据迁移到 LVM、将
/dev/vda1
加入到 LVM,最后实现系统的扩容。
朋友选择了最后一种,后面测试数据备份我用了很多种办法,网上推荐了 dd
以及 tar
,最后我还尝试了 cpio
、backup
、dump
,然后发现最后一种 dump
的性能远远高于 dd
。
本次教程也是从头再试验一遍,并且记录好便己便人。
警告!本文思路仅供参考!应该根据你的实际情况予以调整。如果在生产服务器上进行,请务必做好整个系统的全盘备份。操作不慎,有可能导致整个系统数据的丢失!本文作者及本站不对任何可能出现的风险承担任何责任。
一、预备知识
了解什么是 dd
以及什么是 dump
?
dd
命令用于复制一个设备/分区,原样输出到另外一个文件/设备/分区。
dump
命令用于备份 ext2 或者 ext3 文件系统。可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。
备份好了用什么恢复?
restore
命令是 dump
命令的逆过程,用于还原 dump
命令生成的备份文件。
二、环境模拟
首先要求有一个可以正常启动的分区,然后要有剩余空间!(这里有两种情况:一个是某分区,一个是新磁盘。两者类似,为了方便本文使用的是新磁盘的方式。)
使用虚拟机模拟了服务器的真实情况:/dev/sda1
是正常系统启动分区、/dev/sdb1
是新的磁盘分区。(必须注意 /dev/sdb1
的容量大于 /dev/sda1
)
虚拟机设置及分区情况:
三、实战部分
1、首先备份 MBR 主引导记录
dd if=/dev/sda1 of=/mnt/lvm/mbr.bin bs=512 count=1
2、创建 LVM 卷
首先卸载 /dev/sdb1
,然后在其上用 pvcreate
创建物理卷和 vgcreate
创建卷组 vgtest:
umount /dev/sdb1
pvcreate /dev/sdb1
vgcreate vgtest /dev/sdb1
卷组创建好之后,可以用 vgs
命令查看卷组。
用 lvs
命令查看逻辑卷,这个时候我们还没有任何逻辑卷。开始创建逻辑卷和文件系统:
lvcreate -L 25G -n lvtest vgtest
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 -rf rootfs-20160828.bak boot-20160824.bak
5、修改启动文件
注意:这里根分区(启动分区)需要更改成实际要启动的磁盘。否则不更改的话系统会出现应该使用 /dev/sdb1
LVM ,却使用了原来的 /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 主引导记录
dd if=./mbr.bin of=/dev/mapper/vgtest-lvtest
7、修正 GRUB 引导
这样可以让新磁盘可以脱离源磁盘的引导。
chroot 进入新磁盘。并重建 /boot 目录:
chroot /mnt/lvm
ls /boot/
rm -rf /boot/*
yum install grub -y
然后输入:
root (hd1,0)
setup (hd1)
quit
这样就将 GRUB 引导指向了新的磁盘。
重启可以看看是否有问题。
四、总结
所以说装系统的时候就使用 LVM 就很好,不然又是一顿折腾。 何必呢?
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/41896.html