您的位置:首页 > 其它

第九章:逻辑卷LVM

2016-05-08 09:30 337 查看

第九章:逻辑卷LVM

现实生产环境中,经常会遇到磁盘空间不够用的情况,无论规划的多么好,最终还是会遇到这种情况。所以说,磁盘分区没有一个标准的格式,只能根据自己的服务器应用来适当进行划分。那么遇到这样的问题我们如何解决呢?本章我们就来介绍解决之法—逻辑卷管理(LVM)。
LVM(Logical VolumeManager),通过这种技术可以随意扩大或缩小磁盘或分区的容量。LVM的实现是把磁盘、分区或RAID设备通过软件组合成一块独立的VG,然后将这个VG再进行划分LV,这时候的LV就相当于一个分区了,需要先格式化,然后挂载到系统中使用。LV能自由伸缩,关键是底层的PE在起作用。

1.相关概念

Physical Extend:PE

PE就像我们前面所说的磁盘的BLOCK,而这个的大小同样会影响到VG的大小 Physical Volume:PV

在分区的时候,有个分区转换的LVM标识(8e),要做LVM,就必须把分区类型转换成8e,然后再用pvcreate将分区转换成PV,Pv是创建VG的前提
Volume Group:VG

所谓的VG,就是把多个PV组合成一个更大的磁盘,这就是VG
Logical Volume:LV

要使用VG,就必须把VG分成LV,LV就可以看做是分区了。当然分区后需要格式化才能挂载使用。



2.创建LVM

2.1.创建分区并格式化

[root@freeit ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
Partition number (3,4, default 3): 3
//创建一个主分区,分区号3
First sector (127502336-209715199, default 127502336):
Using default value 127502336
Last sector, +sectors or +size{K,M,G} (127502336-209715199, default 209715199): +300M
//分区给300M空间
Partition 3 of type Linux and of size 300 MiB is set

Command (m for help): t
Partition number (1-3, default 3): 3
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
//格式化为LVM格式才能创建LVM逻辑分区

Command (m for help): p

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b2b59

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 127502335 63545344 8e Linux LVM
/dev/sda3 127502336 128116735 307200 8e Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
查看分区
----------------------------------------------fdisk命令查看------------------------------------------------
[root@freeit ~]# fdisk -l /dev/sda

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b2b59

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 127502335 63545344 8e Linux LVM
/dev/sda3 127502336 128116735 307200 8e Linux LVM
-------------------------------------------------查看分区表-------------------------------------------------------
[root@freeit ~]# cat /proc/partitions
major minor #blocks name

2 0 4 fd0
11 0 4139008 sr0
8 0 104857600 sda
8 1 204800 sda1
8 2 63545344 sda2
//分区表中没有新创建的分区。原因前面【创建分区】中已经描述过
把分区信息写到内核
[root@freeit ~]# partprobe /dev/sda
[root@freeit ~]# cat /proc/partitions
major minor #blocks name

2 0 4 fd0
11 0 4139008 sr0
8 0 104857600 sda
8 1 204800 sda1
8 2 63545344 sda2
8 3 307200 sda3
RHEL5.x%6.x的系统,磁盘文件系统为ext3&ext4,但是在RHEL7中,磁盘文件系统已经改为xfs(安装系统时,在磁盘分区处可以看到,没有ext3&ext4),所以,这里我们把/dev/sda3格式化为xfs格式。
[root@freeit ~]# mkfs.xfs /dev/sda3
mkfs.xfs: /dev/sda3 appears to contain an existing filesystem (ext4).
mkfs.xfs: Use the -f option to force overwrite.
//现在分区为ext4格式,要格式化为xfs必须加-f参数强制更改
[root@freeit ~]# mkfs.xfs /dev/sda3 -f
meta-data=/dev/sda3 isize=256 agcount=4, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=76800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

2.2.创建PV

---------------------------------------------------查看当前PV设备----------------------------------------------
[root@freeit ~]# pvscan
PV /dev/sda2 VG rhel lvm2 [60.60 GiB / 4.00 MiB free]
Total: 1 [60.60 GiB] / in use: 1 [60.60 GiB] / in no VG: 0 [0 ]
//现在只有一个PV,设备为/dev/sda2----------------------------------------------------创建新PV----------------------------------------------------------
[root@freeit ~]# pvcreate /dev/sda3
WARNING: xfs signature detected on /dev/sda3 at offset 0. Wipe it? [y/n] y
Wiping xfs signature on /dev/sda3.
Physical volume "/dev/sda3" successfully created
//创建成功,用如下命令查看PV设备详细信息[root@freeit ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name rhel
PV Size 60.60 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 15513
Free PE 1
Allocated PE 15512
PV UUID IbOL5W-geH1-EVwe-N8iZ-UDR3-R19N-3X1IMD

"/dev/sda3" is a new physical volume of "300.00 MiB"
--- NEW Physical volume ---
PV Name /dev/sda3
VG Name
PV Size 300.00 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 7eB3tB-Svbb-arLo-lY5x-innE-uzVd-l01dy1

2.3.创建vg

[root@freeit ~]# vgcreate vg01 /dev/sda3
Volume group "vg01" successfully created
[root@freeit ~]# vgdisplay
--- Volume group ---
VG Name vg01
//新创建的VG System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 296.00 MiB
PE Size 4.00 MiB
//PE为4M Total PE 74
Alloc PE / Size 0 / 0
Free PE / Size 74 / 296.00 MiB
VG UUID tJn6ta-Wy9F-v9oi-jqCJ-21ME-j5K0-vTEOzP

--- Volume group ---
VG Name rhel
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 60.60 GiB
PE Size 4.00 MiB
Total PE 15513
Alloc PE / Size 15512 / 60.59 GiB
Free PE / Size 1 / 4.00 MiB
注:
从上例可以看出,PE大小为4M。如果要更改PE大小,在创建VG时,要加上-s参数
如下:把PE大小改为8M
[root@freeit ~]# vgcreate -s 8M vg01 /dev/sda3

2.4.创建LVM

例:创建一个大小为100M的LV逻辑卷
[root@freeit ~]# lvcreate -L 100M -n gyhlv vg01
WARNING: xfs signature detected on /dev/vg01/gyhlv at offset 0. Wipe it? [y/n] y
Wiping xfs signature on /dev/vg01/gyhlv.
Logical volume "gyhlv" created
[root@freeit ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vg01/gyhlv
//此为新创建的LVM逻辑卷 LV Name gyhlv
VG Name vg01
LV UUID a6YMV1-1uRl-oRWx-nH5W-502N-m3l7-wLPv7Z
LV Write Access read/write
LV Creation host, time freeit.example.com, 2015-05-06 17:43:31 +0800
LV Status available
# open 0
LV Size 100.00 MiB
//大小100M Current LE 25
//25个PE大小 Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
……
注:
如果创建LV是以PE数来创建,那么要把-L改为-l,后面直接跟数字,表明PE的多少。创建好的LV分区大小为[(PE数)*(-l后面的数字)]。

这样,LV就创建好了,接下来就可以与普通分区一样进行格式化并挂载使用了。

例:把/dev/vg01/gyhlv格式化为xfs格式并挂载到/opt下
[root@freeit ~]# mkfs.xfs /dev/vg01/gyhlv
meta-data=/dev/vg01/gyhlv isize=256 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@freeit ~]# mount /dev/vg01/gyhlv /opt/
[root@freeit ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/rhel-root 61410000 3223900 58186100 6% /
devtmpfs 496084 0 496084 0% /dev
tmpfs 505392 0 505392 0% /dev/shm
tmpfs 505392 7116 498276 2% /run
tmpfs 505392 0 505392 0% /sys/fs/cgroup
/dev/sda1 201388 106044 95344 53% /boot
/dev/mapper/vg01-gyhlv 98988 5280 93708 6% /opt
挂载之后,就可以与普通分区一样,进行各种操作:写数据、设置ACL权限等。

3.LV在线拉申

在学习RHEL5.x%6.x时,LV可以在线拉大,并且可以离线减小。但是,RHEL7中,目前只能在线拉大,不能离线减小。所以,本章我们只介绍如何把xfs格式的LV在线拉大。
现在,假设之前创建的100M LV空间已经不够用了,需要扩大,要怎么办呢?

3.1.直接使用剩余的VG空间

因为vg01中还剩余有200M空间,所以,我们直接从vg01中划分空间即可

例:把创建好的/dev/vg01/gyhlv由之前的100M拉大到200M
----------------------------------------------------查看现在分区大小-------------------------------------------
[root@freeit ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 59G 3.1G 56G 6% /
devtmpfs 485M 0 485M 0% /dev
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 494M 7.xM 487M 2% /run
tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/sda1 197M 104M 94M 53% /boot
/dev/mapper/vg01-gyhlv 97M 5.2M 92M 6% /opt
--------------------------------------------------在线拉大到200M--------------------------------------------------
[root@freeit ~]# lvextend -L 200M /dev/vg01/gyhlv
Extending logical volume gyhlv to 200.00 MiB
Logical volume gyhlv successfully resized
注:拉伸到200M,直接-L 200M,或者用-L +100M。“+”就是说在原来的基础上加多少。而不加“+”就表示这个LV的空间是多少
[root@freeit ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 59G 3.1G 56G 6% /
devtmpfs 485M 0 485M 0% /dev
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 494M 7.xM 487M 2% /run
tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/sda1 197M 104M 94M 53% /boot
/dev/mapper/vg01-gyhlv 97M 5.2M 92M 6% /opt
//如上,拉大之后,再次查看,并没有变化,还是之前的100M。
在RHEL5.x%6.x中,遇到这种情况,我们往往使用resize2fs命令来克服,但是在RHEL7中,由于是xfs格式的文件系统,此命令是不能使用的,要用到xfs相关的命令,如下:
---------------------------------------------使用resize2fs会报错--------------------------------------------
[root@freeit ~]# resize2fs /dev/vg01/gyhlv
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/vg01/gyhlv
Couldn't find valid filesystem superblock.
-----------------------------------------------使用xfs相关命令---------------------------------------------------
[root@freeit ~]# xfs_growfs /dev/vg01/gyhlv
meta-data=/dev/mapper/vg01-gyhlv isize=256 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 25600 to 51200
[root@freeit ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 59G 3.1G 56G 6% /
devtmpfs 485M 0 485M 0% /dev
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 494M 7.xM 487M 2% /run
tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/sda1 197M 104M 94M 53% /boot
/dev/mapper/vg01-gyhlv 197M 5.3M 192M 3% /opt
//如上,空间被拉伸了

3.1.扩容PV,拉伸LV

现在,假设空间又不够用了,还需要200M的空间,但此时原有的VG空间已经不够用了,还剩余100M
[root@freeit ~]# vgdisplay
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 296.00 MiB
PE Size 4.00 MiB
Total PE 74
Alloc PE / Size 50 / 200.00 MiB
Free PE / Size 24 / 96.00 MiB
//剩余大概100M空间
VG UUID tJn6ta-Wy9F-v9oi-jqCJ-21ME-j5K0-vTEOzP
100M的空间是不能满足拉大LV的需求。此时,需要添加分区,扩大vg空间
---------------------------------------------------创建新分区------------------------------------------------
[root@freeit ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p
Selected partition 4
First sector (128116736-209715199, default 128116736):
Using default value 128116736
Last sector, +sectors or +size{K,M,G} (128116736-209715199, default 209715199):
//直接回车,就是默认使用剩下的所有空间
Using default value 209715199
Partition 4 of type Linux and of size 38.9 GiB is set

Command (m for help): t
Partition number (1-4, default 4): 4
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b2b59

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 127502335 63545344 8e Linux LVM
/dev/sda3 127502336 128116735 307200 8e Linux LVM
/dev/sda4 128116736 209715199 40799232 8e Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@freeit ~]# partprobe /dev/sda
//把分区信息写进内核
[root@freeit ~]# cat /proc/partitions
major minor #blocks name

2 0 4 fd0
11 0 4139008 sr0
8 0 104857600 sda
8 1 204800 sda1
8 2 63545344 sda2
8 3 307200 sda3
8 4 40799232 sda4
---------------------------------------------------扩容PV空间----------------------------------------------
[root@freeit ~]# pvcreate /dev/sda4
Physical volume "/dev/sda4" successfully created
[root@freeit ~]# pvdisplay
……
"/dev/sda4" is a new physical volume of "38.91 GiB"
--- NEW Physical volume ---
PV Name /dev/sda4
VG Name
PV Size 38.91 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID tagIpw-eeBz-vFSS-qI1B-eK0b-cBiJ-2XBebq
---------------------------------------------------扩容VG空间----------------------------------------------

[root@freeit ~]# vgextend vg01 /dev/sda4
Volume group "vg01" successfully extended
[root@freeit ~]# vgdisplay
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 39.20 GiB
PE Size 4.00 MiB
Total PE 10034
Alloc PE / Size 50 / 200.00 MiB
Free PE / Size 9984 / 39.00 GiB
//vg01扩容成功
VG UUID tJn6ta-Wy9F-v9oi-jqCJ-21ME-j5K0-vTEOzP
……
接下来,可以直接在VG的基础上拉大lv了
---------------------------------------------------拉大LV,再添加200M空间------------------------------
[root@freeit ~]# lvextend -L +200M /dev/vg01/gyhlv
Extending logical volume gyhlv to 400.00 MiB
Logical volume gyhlv successfully resized

[root@freeit ~]# xfs_growfs /dev/vg01/gyhlv
meta-data=/dev/mapper/vg01-gyhlv isize=256 agcount=8, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=51200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 51200 to 102400
-----------------------------------------------验证结果---------------------------------------------------
[root@freeit ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 59G 3.1G 56G 6% /
devtmpfs 485M 0 485M 0% /dev
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 494M 7.xM 487M 2% /run
tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/sda1 197M 104M 94M 53% /boot
/dev/mapper/vg01-gyhlv 397M 5.6M 392M 2% /opt
//397M,即400M,拉伸成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Redhat LVM