Linux下LVM 硬盘空间扩充及命令介绍

今天上午接到通知说服务器挂了,经过检查发现原因是Linux的虚拟机根分区已经使用100%,以至于服务不能正常进行。

经过小小的研究,顺利解决问题,把服务器的空间由4G扩成12G。现将执行全过程总结如下,以供分享。

首先,介绍下大体的解决思路,要想扩充,硬件上要有准备,说白了也就是要有一块新的空间来供我们使用。对于实体机我们需要准备一块新的硬盘,而对于VMWare虚拟机,我们只需要使用vmware自带的软件扩充下磁盘大小。

扩充磁盘,只意味着硬件条件得到满足。接下来就需要对新的磁盘空格进行合理的操作,来扩充我们需要的分区。

值得注意的是,这里我们基于LVM来操作的。如果您的环境不是LVM的,可以考虑改成LVM的,否则后文无需再读。具体执行过程将细细道来。

第一步、查看剩余空间,及为分配的硬盘空间

我们重启机器后,发现硬盘是变成16GB,但进入 linux 系统后,用 "df -h"查看发现硬盘空间还是原先那么大。 虽然已经扩大了磁盘,但是由于还没有经过分区,指定文件系统,所以 linux 操作系统无法识别。其实就相当于你的硬盘虽然大了,但是你并没有对其进行分区是一个道理。

第二步、使用Linux下的fdisk工具进行分区

首先,需要以root身份登录系统。

fdisk 命令: fdisk -l : 打印当前的磁盘分区表,这时我们可以看到磁盘的总量的确增加到16GB 了,但是分区只有以前的那几个原有的分区。

键入命令: fdisk /dev/sda   “sda 就是经过扩容的硬盘,为 SCSI 硬盘, IDE 类型硬盘对应为 hda ,是对该硬盘进行操作 ” 
键入 :    m    “ 列出 fdisk 的帮助 ” 
我们在这里是要添加一个新分区,即将扩容出来的那部分做成一个新分区,这样才能被操作系统
挂载识别。 
键入:     n    ” 命令 n 用于添加新分区 " 
此时, fdisk 会让你选择添加为逻辑分区呢(编号从 5 开始)还是主分区(编号 1 到 4 )。

选择主分区吧,则键入 p ;选择逻辑分区键入 l 。 
我们选择主分区于是: 
键入:    p               " 选择创建主分区 "

此时, fdisk 会让你选择主分区的编号,如果已经有了主分区 sda1 , sda2 ,那么编号就选3 ,即要创建的该分区为 sda3. 
键入:     3 
此时, fdisk 又会让你选择该分区的开始值这个就是分区的 Start 值( start cylinder );
这里最好直接按回车, 如果您输入了一个非默认的数字,可能会造成空间浪费;

对于分区的 End 值(end cylinder),同样直接按回车。这时候会显示出你新建分区的柱面范围和空间大小。

此时键入: w    表示" 保存所有并退出,分区划分完毕 "

我们的新建分区/dev/sda3,却不是LVM的。所以,接下来使用fdisk将其改成LVM的。

[root@CNGI-SIP6-BUPT ~]# fdisk /dev/sda
Command (m for help): m 
Command (m for help): t //改变分区系统id      
Partition number (1-4): 3 //指定分区号
Hex code (type L to list codes): 8e //指定要改成的id号,8e代表LVM。
Command (m for help): w

我们现在还不能用这个分区 , 因为我们没格式化。这时要重启系统就能够在 dev 下面看到 sda3 ,如果不重启不能进行下面操作。

重启后,在此查看fdisk -l
Device Boot      Start         End      Blocks   Id System
/dev/sda1   *           1          13      104391   83 Linux
/dev/sda2              14        1044     8281507+ 8e Linux LVM
/dev/sda3            1045        2088     8385930   8e Linux LVM

可以看到/dev/sda3已支持LVM。


第三步、格式化该新添加的分区


键入: 
mkfs -t ext3 /dev/sda3 
或者 
mkfs.ext3 /dev/sda3

来格式化指定的分区,依次类推,现在的系统大部分都是 ext3 格式,如果你需要其它的,可以查看mkfs 的帮助。

到此为止,我们就新建了一个分区/dev/sda3,此时我们已经可以通过挂载,来使用这个新的空间。但是对于我,这并不能满足我的需求,因为服务器的服务程序是在根目录上的,目前根目录空间已经使用完毕,所以能把新建的分区使用在更目录上,分担根目录的空间,才能解决问题。

下面用到的理论是基于LVM的,如果不知道的话,建议稍微查些资料有助于理解。当然,一步步的跟我做,应该也没有问题。


第四步、扩充根分区

接着,使用vgextend 命令加到lvm组里面去,做如下操作:

[root@CNGI-SIP6-BUPT ~]# lvs
LV       VG         Attr   LSize Origin Snap% Move Log Copy% Convert
LogVol00 VolGroup00 -wi-ao 3.97G                                      
LogVol01 VolGroup00 -wi-ao 3.91G                                      
[root@CNGI-SIP6-BUPT ~]# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created
[root@CNGI-SIP6-BUPT ~]# vgextend VolGroup00 /dev/sda3 (其中是当前需要扩充的lvm组名,可以通过df -h查看,例如我的是: /dev/mapper/VolGroup00-LogVol00) 
Volume group "VolGroup00" successfully extended
You have new mail in /var/spool/mail/root
[root@CNGI-SIP6-BUPT ~]# vgdisplay
--- Volume group ---
VG Name               VolGroup00
System ID             
Format                lvm2
Metadata Areas        2
Metadata Sequence No 4
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                2
Open LV               2
Max PV                0
Cur PV                2
Act PV                2
VG Size               15.84 GB
PE Size               32.00 MB
Total PE              507
Alloc PE / Size       252 / 7.88 GB
Free PE / Size       255 / 7.97 GB
VG UUID               3vSeag-Q74D-Gn1b-OHEq-zyH1-YgSO-ThhBCp
   
[root@CNGI-SIP6-BUPT ~]#

主要查看Free PE / Size       255 / 7.97 GB,说明我们最多可以有7.97G的扩充空间。

最后,给根分区增加空间

[root@CNGI-SIP6-BUPT ~]# lvextend -L +7.96G /dev/VolGroup00/LogVol00 /dev/sda3
Rounding up size to full physical extent 7.97 GB
Extending logical volume LogVol00 to 11.94 GB
Logical volume LogVol00 successfully resized
[root@CNGI-SIP6-BUPT ~]#

[root@CNGI-SIP6-BUPT ~]# vim /etc/fstab

/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts gid=5,mode=620 0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0
~
逻辑卷现在使用的就是ext3的文件系统最后扩展一下文件系统,此处不需要卸载,就ok了

要先做fsck,检查文件系统:e2fsck -f /dev/VolGroup00/LogVol00

告诉系统,分割区大小有调整了,以下以实际情况为主
[root@CNGI-SIP6-BUPT ~]# resize2fs /dev/VolGroup00/LogVol00 
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
Performing an on-line resize of /dev/VolGroup00/LogVol00 to 3129344 (4k) blocks.
The filesystem on /dev/VolGroup00/LogVol00 is now 3129344 blocks long.


 LVM简介及命令介绍

一、物理卷(PV)的常用管理命令

1
2
3
4
5
6
7
8
pvcreate   #创建一个物理卷
pvchange   #修改物理卷的属性
pvresize   #调整一个PV的大小
pvremove   #删除一个PV
pvdisplay  #显示PV的属性信息
pvmove     #移动PE到指定物理卷
pvscan     #搜索所有磁盘上的物理卷
pvs        #显示PV的简要信息



    示例1:创建3个PV

1
2
3
4
5
[iyunv@qin ~]# parted /dev/sdb mklabel msdos
[iyunv@qin ~]# parted /dev/sdb mkpart primary ext2 0G 10G
[iyunv@qin ~]# parted /dev/sdb mkpart primary ext2 10G 20G
[iyunv@qin ~]# parted /dev/sdb mkpart primary ext2 20G 30G
[iyunv@qin ~]# pvcreate /dev/sdb{1..3}



    示例2:将PV1上的数据迁移到PV2,然后删除该PV。

1
2
[iyunv@qin ~]# pvmove /dev/sdb1 /dev/sdb2    #注意:两个PV必须在同一卷组内
[iyunv@qin ~]# pvremove /dev/sdb1     #删除PV前要确保该PV没有在任何卷组中



二、卷组(VG)的常用管理命令。

1
2
3
4
5
6
7
8
9
10
11
12
vgcreate    #创建卷组
    -l:设置可容纳的LV最大数,默认为255
    -p:设置包含PV的最大数,默认为255
    -s:设置PE大小,默认为4M
vgextend    #扩展VG大小
vgdisplay   #显示VG属性信息
vgchange    #修改VG属性信息
vgreduce    #缩减VG大小
vgremove    #删除VG
vgscan      #搜索所有磁盘上的卷组
vgs         #显示VG简要信息
vgck        #检查VG元数据



    示例1:创建一个卷组,要求PE大小为8M,名称为Myvg,最大支持LV不能超过10个,包含的PV不能超过2个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[iyunv@qin ~]# vgcreate -s 8M -l 10 -p 2 Myvg /dev/sdb{1,2}
[iyunv@qin ~]# vgdisplay Myvg     #查看VG属性信息验证结果
  --- Volume group ---
  VG Name               Myvg     #VG名称
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                10        #可以看到,支持最大LV数为10个
  Cur LV                0
  Open LV               0

  Max PV                2         #支持最大PV数为2个

 调整PV 支持数量command (vgchange -p 2 Myvg)

  Cur PV                2
  Act PV                2
  VG Size               18.61 GiB
  PE Size               8.00 MiB    #PE大小
  Total PE              2382
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2382 / 18.61 GiB
  VG UUID               LdOZtc-4ccd-5ryh-Ux7V-O29f-CEhc-VVuuSF



    示例2:扩展Myvg大小

1
2
3
4
5
[iyunv@qin ~]# vgextend Myvg /dev/sdb3    #由于此前定义了VG的最大PV数,无法扩展
  No space for '/dev/sdb3' - volume group 'Myvg' holds max 2 physical volume(s).
  Unable to add physical volume '/dev/sdb3' to volume group 'Myvg'.
[iyunv@qin ~]# vgchange -p 3 Myvg    #修改VG属性
[iyunv@qin ~]# vgextend Myvg /dev/sdb3    #扩展VG成功



    示例3:缩减Myvg大小;然后删除Myvg

1
2
3
[iyunv@qin ~]# vgreduce Myvg /dev/sdb2    #注意:把PV移出卷组时要保证该PV数据已迁移或未使用
[iyunv@qin ~]# vgchange -an Myvg        #标记Myvg为不可用状态
[iyunv@qin ~]# vgremove Myvg        #不论VG包含多少PV都可删除,前提是该VG上没有任何LV,如果有就需要先删除LV



三、逻辑卷(LV)的常用管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
lvcreate    #创建LV
    -l:设置LV大小,以PE为单位
    -L:设置LV大小,以字节为单位
    -n:设置LV名称
    -p:设置LV权限读写权限,默认为可读可写
    -s:设置一个快照卷,对一个已存在的LV做快照
lvextend    #扩展LV大小
lvreduce    #缩减LV大小
lvchange    #修改LV属性信息
    -ay:标记LV为可用状态
    -an:标记LV为不可用状态
lvremove    #删除LV
lvdisplay   #显示LV属性信息
lvscan      #搜索所有磁盘上的逻辑卷
lvs         #显示LV简要信息



    示例1:创建一个LV,要求大小为10G,名称为lv001,指定卷组为Myvg。

1
[iyunv@qin ~]# lvcreate -L 10G -n lv001 Myvg



    示例2:扩展lv001的大小,要求增加5G空间大小

1
2
3
4
#方法一:
[iyunv@qin ~]# lvextend -L +5G /dev/Myvg/lv001
#方法二:
[iyunv@qin ~]# lvextend -L 15G /dev/Myvg/lv001



    示例3:缩减lv001的大小,要求减少8G空间大小

1
[iyunv@qin ~]# lvreduce -L -8G /dev/Myvg/lv001    #注意,缩减前需确保LV为卸载状态



    示例4:删除lv001

1
2
[iyunv@qin ~]# lvchange -an /dev/Myvg/lv001     #标记lv001为不可用状态
[iyunv@qin ~]# lvremove /dev/Myvg/lv001



    示例5:对lv001创建一个快照卷

1
[iyunv@qin ~]# lvcreate -L 10G -n lv001_snap -p r -s /dev/Myvg/lv001    #必须跟目标逻辑卷在同一卷组中



四、实验:在线扩容和离线缩减逻辑卷的大小。
    1、查看当前系统挂载及逻辑卷的相关信息。
094045uhw48tam466u1zwl.jpg 
    2、缩减/data的空间大小,并验证查看。
094046c5utzquruwuzev5q.jpg 
注意:缩减逻辑卷大小前必须先缩减文件系统的大小,而且要强制检查文件系统
      缩减不能少于已经存储的所有数据空间的大小
094046gtbba7natvsictju.jpg 
094047i3w9806gw306w73w.jpg 
3、扩展逻辑卷大小
    先查看当前LV大小,卷组可用空间,文件系统大小
094047wafynonn0cmearq0.jpg 
    然后扩展逻辑卷大小
094048np7gu5030c22zh70.jpg 
    最后扩展文件系统大小
094048m63htzcrhj55qz7l.jpg 
总结:
    LVM的添加顺序:PV-->VG-->LV
    LVM的删除顺序:LV-->VG-->PV
    逻辑卷可在线扩展,但必须离线缩减
    缩减很危险,不到万不得已不要执行缩减操作!!!
    扩展逻辑卷后文件系统也要扩容
    缩减逻辑卷前要先缩减文件系统


你可能感兴趣的:(command,空间扩容)