今天遇到一个问题,算是比较严重的把。就是要把当前系统转移到 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. Perl 子程序(函数)

    1.Perl 子程序(函数)Perl 子程序也就是用户定义的函数.Perl 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读. Perl 子程序可以出现在程序的任何地方,语法 ...

  2. SQLSERVER 建立全文检索

    --  创建测试表 --  DROP TABLE FullTextIndexing CREATE TABLE FullTextIndexing ( ID INT IDENTITY(1,1) NOT N ...

  3. 关于使用PL/SQL连接本地oracle时报错:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决

    转自:https://blog.csdn.net/a657281084/article/details/49490069 问题:Oracle主服务和监听器服务已经启动,使用SQL Plus能够正常连接 ...

  4. hibernate 反向生实体类 and 为什么老是多一个id

    hibernate 反向生实体类 and 为什么老是多一个id 2017年04月01日 20:32:51 阅读数:548

  5. jquery简单ajax示例_读取json文件数据

    来自于<jquery权威指南> -------------------------------------- 点击button后,获取到json文件数据,显示如下: Json文件: [ { ...

  6. code1319 玩具装箱

    一个划分dp,不过由于划分个数任意,仅用一维数组就可以 设dp[i]表示前i个装箱(任意个箱子)的费用最小值 dp[i]=min(dp[u]+cost(u+1,i)) 但是n<=50000,n方 ...

  7. linux的“自动化”-乾颐堂CCIE

    linux系统的web网站在运营状态时,我们常需要对网站进行维护,例如查看资源剩余并做出响应.日志分割.数据整理,在特定状态执行特定任务等等,这些都会需要linux能实现自动执行某些任任务.本篇博文介 ...

  8. tp5 select回显

    <select name="role_id" id="" class="form-control" required> {vol ...

  9. 工作流系统webservice服务

    http://blog.csdn.net/zhengzhb/article/details/7477616

  10. 1083 Moving Tables

    题目链接:http://poj.org/problem?id=1083 题意: 走廊两边分别有200个房间,一边连续编号为1-399的奇数,另一边是2-400的偶数, 如果从房间 i 移动桌子到房间 ...