今天突然有朋友来找我,说要扩容他的Linux系统的根分区盘。接到这个问题后,我立马开始查看系统情况。是CentOS6.6系统,有两个磁盘:/dev/vda1是一个15G的rootvolume,/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高很多。本教程也是从头开始尝试,记录一下,方便大家。警告!本文思路仅供参考!应该根据自己的实际情况进行调整。如果在生产服务器上执行,请务必对整个系统进行完整备份。粗心的操作可能会导致整个系统的数据丢失!本文作者和本站不对任何可能的风险负责。1.预备知识知道什么是dd,什么是dump?dd命令用于复制一个设备/分区,原样输出到另一个文件/设备/分区。dump命令用于备份ext2或ext3文件系统。您可以将目录或整个文件系统备份到指定设备,也可以将其作为大文件进行备份。备份完成后要恢复什么?restore命令是dump命令的逆过程,用于恢复dump命令生成的备份文件。2.环境模拟首先需要一个可以正常启动的分区,然后还要有空闲空间!(这里有两种情况:一种是某个分区,一种是新磁盘,两者类似,为了本文方便,采用新磁盘的方式。)使用虚拟机模拟真实服务器情况:/dev/sda1是正常的系统引导分区,/dev/sdb1是新的磁盘分区。(必须注意/dev/sdb1的容量大于/dev/sda1的容量)虚拟机设置和分区:3.实战部分1.首先备份MBR主引导记录ddif=/dev/sda1of=/mnt/lvm/mbr.binbs=512count=12。创建LVM卷,先unmount/dev/sdb1,然后使用pvcreate创建物理卷,vgcreate在其上创建卷组vgtest:umount/dev/sdb1pvcreate/dev/sdb1vgcreatevgtest/dev/sdb1卷组后创建完成后,可以使用vgs命令查看卷组。使用lvs命令查看逻辑卷。我们目前没有任何逻辑卷。开始创建逻辑卷和文件系统:lvcreate-L25G-nlvtestvgtestmkfs.ext4/dev/mapper/vgtest-lvtest3,备份/目录和/boot目录先备份/目录。dump命令前后分别输入date命令,就是看备份用了多长时间。date&&dump-0f/mnt/lvm/rootfs-20160824.bak/&&date为了保险起见,我们也备份了/boot目录:date&&dump-0f/mnt/lvm/boot-20160824.bak/boot&&date4,尝试恢复restore-rfrootfs-20160828.bakboot-20160824.bak5。修改启动文件注意:这里的根分区(boot分区)需要改成实际启动??的磁盘。不然你不改,系统会用/dev/sdb1LVM,但用的是原来的/dev/sda1!先通过blkid查看分区的UUID:blkid然后修改/mnt/lvm/etc/fstab文件(切换到分区后会成为/etc/fstab中的根分区)指向:vim/mnt/lvm/etc/fstabchroot进入新分区,然后检查相应的分区设置。chroot/mnt/lvm注意:需要chroot进入目录查看是否正确!并确认防火墙SELinux等设置,最重要的是打开OpenSSH!6、恢复MBR主引导记录ddif=./mbr.binof=/dev/mapper/vgtest-lvtest7。修复GRUB引导,以便可以从源磁盘引导新磁盘。chroot到新磁盘。并重建/boot目录:chroot/mnt/lvmls/boot/rm-rf/boot/*yuminstallgrub-y然后输入:root(hd1,0)setup(hd1)quit这会将GRUB引导指向新磁盘。重启看看有没有问题。4.总结所以安装系统的时候最好用LVM,不然就折腾了。何必呢?
