今天遇到一个问题,算是比较严重的把。就是要把当前系统转移到 LVM 卷里面去,下面有一些发生过程介绍。

不感兴趣可以直接跳过,看实战部分《如何迁移系统至LVM卷》

朋友今天突然找我,说是要把系统的根分区磁盘扩大。接到这个问题,我马上开始查看下系统情况。是一台 CentOS 6.6 的系统,有俩块磁盘分别 vda1 是 15G 根,vda2 的 1G swap ,总大小是 21G 的一块 vda !现在要求去增大 vda1 分区。

后面我给朋友三个方案:

  • 第一个就是将 vda5 随意作为 home、var 之类的挂载;
  • 第二个就是做快捷方式 ln链接到vda1 ,5G 加上 15G 也勉强扩大了;
  • 最后一种也就是最麻烦的,加大 vda、做一个LVM,将数据迁移到LVM、将vda1加入到LVM,最后实现系统的扩容。

朋友选择了最后一种,我用了很多种办法。网上说推荐是dd再是tar最后尝试cpio、backup、dump,然后我没办法用了最后一种发现效果远远高于dd

本次教程也是从头再试验一遍,并且记录好便己便人。

 警告:本文思路仅供参考!应该根据你的实际情况予以调整。如果在生产服务器上进行,请务必做好整个系统的全盘备份。操作不慎,有可能导致整个系统数据的丢失!本文作者及本站不对任何可能出现的风险承担任何责任。

 

一、预备知识:

1、了解,什么是dd以及什么是dump?

dd命令用于复制文件并对原文件的内容进行转换和格式化处理。
  --对于dd命令,仅仅只是介绍。dd命令比 Windows 的下 ghost 更好,Linux下也是极棒的。
 
dump命令用于备份ext2或者ext3文件系统。可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。 
   --对于dump命令,备份用到。dump可以帮助我们将分区进行打包成一个文件。

2、尝试,备份的需要如何恢复?

restore 命令是 dump 命令的逆过程,用于还原 dump 命令生成的备份文件。
   --这也是很重要的恢复命令。可以将我们的 dump 文件进行恢复。
 
/etc/fstab 文件描述系统中各种文件系统的信息,一般而言,应用程序仅读取这个文件,而不对它进行写操作。
  --这个文件需要系统管理员进行更新,确保系统读取时正确执行。 
 
/boot/grub/grub.conf 文件是 grub 配置文件, grub 才能找到 kernel,系统才能正常启动。
  --这个文件也是需要我们更改的,制定grub读取新分区
 

 
首先要求有一个可以正常启动的分区,然后要有剩余空间!(必须注意/dev/sdb1 的容量大于 /dev/sda1,且/dev/sdb1应为LVM卷

我用虚拟机模拟了服务器的真实情况:/dev/sda1 是正常系统启动分区、/dev/sdb1 是新的磁盘分区。

步骤一、用dump备份整个根分区,使用restore恢复

步骤二、更改备份好的系统fstab文件以及更改boot下引导文件

小窍门:Linux自带的光盘一般都会急救的功能,善于利用!

二、环境模拟:

虚拟机设置及分区情况:

这里有两种情况:一个是某分区,一个是新磁盘。两者类似,为了方便本文使用的是新磁盘的方式。

 

三、实战部分:

 
 
注意:我使用的是一个sdb1作为lvm磁盘,sdb2作为boot磁盘(为了方便后面的引导,因为grub不支持lvm磁盘引导boot)

I、创建LVM卷

1、首先要确保系统是安装lvm组件的,可以使用rpm -qa查询信息

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

pvcreate /dev/sdb1

vgcreate vgtest /dev/sdb1

lvcreate -L 25G -n lvtest vgtest

mkfs.ext4 /dev/mapper/vgtest-lvtest

 

II、备份MBR引导文件。

dd if=/dev/sda1 of=/mnt/grub/mbr.bin bs=512 count=1

 

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

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

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

2、为了安全引导我们也备份一下 /boot 目录:

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

IV、尝试恢复

1、还原 dump 的备份文件(/boot分区默认已包括在/分区)

date && restore -rf rootfs-20160824.bak && date

 

注意:这里boot文件需要更改成实际要启动的磁盘。

2、还原 MBR 的备份文件

dd if=/mnt/grub/mbr.bin of=/dev/sdb2

注意:这里使用dd命令恢复了之前备份的MBR文件。

VI、启动文件

注意:这里为了体现是chroot的,将主机名改成了NEW。一定要chroot进入目录查看是否能启动!并且确定防火墙SELinux的设置,最最最重要的OPENSSH要打开的!

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

2、然后同步修改 /etc/fstab 文件以及切换了跟分区之后将变成的 /etc/fstab 中的根分区指向:

3、重启生效

注意:这里我重启了一下,同时可以看出我的fstab是ok的并且都生效了。

 
VII、至此:
 
到这里为止,我们已经完成了数据的转移:在我们尝试chroot进入系统时就可以查看数据信息是否完整是否有丢失。
 
而下面更为重要的就是如何去恢复GRUB引导:让新磁盘可以脱离源磁盘的引导。
 
chroot进入新磁盘:

输入:root   (hd1,0)

输入:setup  (hd1)

再次输入:quit

备注:如果通过上面的操作还是无法正常进入系统,可以尝试进入DVD急救模式尝试其他。

tip:这里仅仅只是小建议,可以尝试使用CentOS自带的急救模式。也可以选择CLI完成操作!
 
tip:同上。仅仅为了向大家说明最后最后还需要更改启动项选项!
注意:Virtualbox使用F12选择新磁盘就好、VMware需要按F2进入BIOS并使用“+-”完成启动项的调试。
 
如果引导还有问题推荐看这篇文章 http://os.51cto.com/art/201003/185574.htm
 
VIII、总结:
 
所以说装系统的时候就使用LVM就很好,不然又是一顿折腾。
 
何必呢?但是技多不压身,会些更装逼嘛~
 

VVI、其他:
当时我写这篇文章时候犯了几个错误,比较重要的记下来。
第一个:是当时没有先百度,查看GRUB对LVM的问题(虽然现在的我知道怎么GRUB启动LVM,但是当时是不知道)
第二个:  居然不知道boot要单独分区
第三个:改了这个文件,忘了那个文件
第四个:为了图方便使用了/dev/sdx这样形式,应该用UUID
第五个:疲劳写作,第二天我就突然写完这篇文章了...
 
最最后,系统移动至LVM磁盘一定是可以得。改日我用服务器现场移动,到时候再给新文章!

Linux系统如何迁移至LVM磁盘的更多相关文章

  1. Linux系统添加硬盘设备(磁盘分区-格式化-挂载-使用)

    当全新安装了一块新的硬盘设备后,为了更充分.更安全的利用硬盘空间首先要进行磁盘的分区, 然后格式化,最后挂载使用. 实例:对新添加的硬盘设备进行分区.格式化并挂载到/newFS目录. 第一步:在vmw ...

  2. 查看Linux系统内存、CPU、磁盘使用率和详细信息

    一.查看内存占用 1.free # free -m 以MB为单位显示内存使用情况 [root@localhost ~]# free -m total used free shared buff/cac ...

  3. 存储系统管理(二)——Linux系统的swap分区、磁盘加密、磁盘阵列

    磁盘驱动器上的空间 , 用作当前未使用部分内存的溢出.这样 , 系统就能在主内存中留出空间用于储存当前正在处理的数据 , 并在系统面临主内存空间不足的风险时提供应急溢出. swap分区的建立: fdi ...

  4. linux系统CPU,内存,磁盘,网络流量监控脚本

    前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...

  5. linux查看系统未被挂载的磁盘空间的方法

    原文URL:https://www.cnblogs.com/lemon-flm/p/7597403.html 解决AWS 挂载.解决挂载完重启就消失等问题 linux上的盘和window的有区别,磁盘 ...

  6. Linux系统分区方案建议

    在安装Linux系统之初,就应该考虑怎样使linux系统得到最好的性能.linux本身也设计为可以良好扩展的形态. 笔者建议系统程序和业务程序分离安装比较合理,笔者所在的公司也是按照这种理念实施的.比 ...

  7. 系统管理员都要知道的 30 个 Linux 系统监控工具

    1. top - 进程活动监控命令 top 命令会显示 Linux 的进程.它提供了一个运行中系统的实时动态视图,即实际的进程活动.默认情况下,它显示在服务器上运行的 CPU 占用率最高的任务,并且每 ...

  8. Linux系统磁盘管理(lvm逻辑卷管理)

    linux系统用户常遇到的一个问题就是如何精准的评估分区的大小,已分配合适的磁盘空间:普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文 ...

  9. 初阶项目一-集成一套linux系统:红帽系统,LVM分区,Apache服务,MySQL服务,数据定时备份脚本

    目录 一.项目目标 二.实施工具 三.项目实施计划 四.安装rhel7.5操作系统 4.1 配置虚拟机 4.2 安装操作系统 4.3 系统配置 4.3.1 网络配置 4.3.2 修改主机名 4.3.3 ...

随机推荐

  1. Android开发实战之拥有Material Design风格的折叠布局

    关于折叠布局,也许你并不陌生,最新版的陌陌,或者一些其他的社交APP都有一个折叠布局.折叠布局,让我们的APP更加具有交互性,同时也更加美观,先来展示一下效果图: 这是我个人做的一个APP主界面,可以 ...

  2. 接口自动化 Windows + HttpRunner 初探(一)

    运行环境 HttpRunner 是一个基于 Python 开发的测试框架,可以运行在 macOS.Linux.Windows 系统平台上. HttpRunner 的开发环境为 macOS + Pyth ...

  3. Cannot subclass final class class com.sun.proxy.$Proxy16

    Cannot subclass final class class com.sun.proxy.$Proxy16 2016年05月04日 19:10:58 阅读数:15028 背景 这个错误是我在使用 ...

  4. OceanBase

    OceanBase 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! OceanBase是一个支持海量数据的高性能分布式数据库系统,实现了 数千亿条记录.数百TB数据上的 ...

  5. Luogu 4705 玩游戏

    看见这个题依稀想起了$5$月月赛时候的事情,到现在仍然它感觉非常神仙. 游戏$k$次价值的期望答案 $$ans_k = \frac{1}{nm}\sum_{i = 1}^{n}\sum_{j = 1} ...

  6. [Jenkins] 全局变量

    http://www.360doc.com/content/14/1110/10/7811581_423993429.shtml https://wiki.jenkins.io/display/JEN ...

  7. [SoapUI] 通过Groovy获取SoapUI当前Project所在的目录

    import com.eviware.soapui.support.GroovyUtils def groovyUtils = new GroovyUtils( context ) def proje ...

  8. poj 3304 Segments (题意理解出错,错误的只枚举了过线段的直线)

    //枚举过每一条线段的直线, //再判断其他线段的点在直线上或被直线穿过 //即求直线与线段相交(叉积) #include<stdio.h> #include<math.h> ...

  9. Ubuntu14.04下 安装xhprof

    1.下载xhprof包: wget http://pecl.php.net/get/xhprof-0.9.4.tgz 2.解压 进入扩展目录 .tgz cd /home/justphp/xhprof- ...

  10. Redis安装及HA(High Availability)配置(转)

    出处:http://www.cnblogs.com/morvenhuang/p/4184262.html Redis是一种内存数据库,以KEY-VALUE(即键值对)的形式存储数据.这篇文章主要介绍的 ...