今天遇到一个问题,算是比较严重的把。就是要把当前系统转移到 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. ubuntu18桌面卡死解决方法

    1 直接 alt+f2 会弹出个输入框 里边输入 小写 r 回车 这样会重启你的gnome-shell 桌面环境 2 ctrl+f3 进入终端 黑白屏环境 top 一下 你会发现 gnome-shel ...

  2. OpenNebula 4.0 Beta 新特性介绍

    http://blog.chinaunix.net/uid-20940095-id-3561376.html 2013年3月26号,OpenNebula社区发布了OpenNebula 4.0 Beta ...

  3. porwedesigner 去掉引号

    PowerDesigner生成的ORACLE 建表脚本中去掉对象的双引号,设置大.小写 若要将 CDM 中将 Entity的标识符都设为指定的大小写,则可以这么设定: 打开cdm的情况下,进入Tool ...

  4. android开发环境完整搭建

    1.首先,要先下载安装包,共享一个网址,里面有非常全面的安装文件,不管是windows还是linux的,都有,网址如下:http://www.cnblogs.com/tc310/p/3938353.h ...

  5. 洛谷 P3112 [USACO14DEC]后卫马克Guard Mark

    题目描述 Farmer John and his herd are playing frisbee. Bessie throws the frisbee down the field, but it' ...

  6. jar包打包成exe示例(基于maven项目)

    jar包打包成exe示例(基于maven项目) 说明 针对基于maven的Java项目,通常会打包成jar, 如果要把jar文件包装成exe文件,仅需要在pom.xml配置文件中增加一个插件即可 这里 ...

  7. Log4j配置(转)

    原文:http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记录 ...

  8. C#中继承和构造函数

    一个类继承自另外一个类,他们的构造函数改怎么办? 首先必须先声明:构造函数是不能继承的 我们先看一段代码:第一段代码没有构造函数,第二段有一个,第三段有两个.从他们的MSIL可以看出,有几个构造函数就 ...

  9. C#调用windows命令行(CMD)

    using System.Diagnostics; public static void StartCmd(String command){Process p = new Process();p.St ...

  10. EF6 CodeFisrt支持Oracle

    EF6 CodeFisrt支持Oracle EF说是支持多数据库,但真做起来太多坑了,编程这个词以后要换换,叫填坑好了.这次把我在做EF6 CodeFisrt支持Oracle数据库过程中遇到的坑写下来 ...