什么是LV逻辑卷?
逻辑卷是将一个或多个物理分区或块设备整合在一起形成一种逻辑层。可以使独立的硬盘,也可以是独立的分区。
逻辑卷结构视图
上图画的或许不是那么标准,但是也能大体看出逻辑卷的结构。下面从下而上简单说明下:
1."
~]#
" 表示命令提示符
2."#/ /#
" 表示添加的注释内容
1.最下层是有一些硬盘或硬盘分区等组成;
2.下数第二层是物理卷(PV);pvcreate
命令是生成物理卷的命令,后面跟那些物理分区或块设备;
~]# pvcreate /dev/sd{b1,c,d2,e} #/ pvcreat 命令后面跟要做成物理卷的物理分区或块设备 /#
~]# pvdisplay #/ "pvdisplay" 命令是详细列出系统上面每个物理卷的信息 /#
3.下数第三层是卷组(VG);vgcreate
命令是把物理卷做成卷组的命令,后面跟卷组名称(按实际情况自定义)和物理卷名称;
~]# vgcreate vg0 -s 16M /dev/sd{b1,c,d2,e} #/ "vg0"是给卷组起的名称;"-s 16M" 是PE值大小 /#
~]# vgdisplay #/ 列出卷组的详细信息 /#
4.最上面一层,就是我们的逻辑卷(LV);lvcreate
是从卷组生成逻辑卷的命令,后面写逻辑卷的名称、逻辑卷的大小和卷组名称;
~]# lvcreate -n lv0 -l 666 /dev/vg0 #/ "-n"后面跟逻辑卷的名称;"-l"后面跟PE的个数;最后是卷组名称; /#
~]# lvcreate -n lv0 -L 20G /dev/vg0 #/ "-L"大写的后面是逻辑卷容量大小(M,G)/#
~]# lvdisplay #/ 列出逻辑卷的详细信息 /#
上面差不多已经讲完了如何生成逻辑卷LV了!剩下的步骤不外乎就是:对LV做文件系统-->创建挂载点-->把LV挂载上去-->正常使用即可
~]# mkfs.ext4 /dev/vg0/lv0 #/ 特别注意:这里的逻辑卷名称是LV的全名!为什么?请看lvdisplay结果 /#
~]# mkdir /mnt/lv0 #/ 创建挂载逻辑卷的挂载点目录 /#
~]# mount /dev/vg0/lv0 /mnt/lv0 #/ 挂载逻辑卷 /#
为什么要用逻辑卷管理?
LVM的重点在于可以弹性调整文件系统的容量!或者说它有在线可扩展性!
大白话说的话,一个逻辑卷空间不够了你可以从卷组中调出来一部分容量分给它;反过来也可以缩减它的空间大小等等可在线扩展操作。
以下是从百度百科搬过来的关于LVM优点的说法,说的很对我就借花献佛了~
LVM与直接使用物理存储相比,有以下优点:
1. 灵活的容量
当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷.
2.可伸缩的存储池
你可以使用简单的命令来扩大或缩小逻辑卷大小,不用重新格式化或分区磁盘设备.
3.在线的数据再分配
你可以在线移动数据,数据可以在磁盘在线的情况下重新分配.比如,你可以在线更换可热插拔的磁盘.
4. 方便的设备命名
逻辑卷可以按你觉得方便的方式来起任何名称.
5.磁盘条块化.
你可以生成一个逻辑盘,它的数据可以被条块化存储在2个或更多的磁盘上.这样可以明显提升数据吞吐量
6.镜像卷
逻辑卷提供方便的方法来镜像你的数据.
7.卷快照
使用逻辑卷,你可以获得设备快照用来一致性备份或者测试数据更新效果而不影响真实数据.
实验:扩展LV容量
下面我做做一个在线扩展LV的实验体会体会LVM逻辑卷管理的特性还有相关命令的运用
1."
~]#
" 表示命令提示符
2."#/ /#
" 表示添加的注释内容
第一步:用lsblk
命令查看有没有空闲的硬盘可以让我们拿来用于增加LV容量
~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
#/---------此处省略----------/#
sdb 8:16 0 20G 0 disk
└─vgtest-lvtest 253:0 0 30G 0 lvm
sdc 8:32 0 50G 0 disk #/ 发现sdc盘是50G的空间满足实验需求 /#
├─sdc1 8:33 0 10G 0 part
│ └─vgtest-lvtest 253:0 0 30G 0 lvm
└─sdc2 8:34 0 5G 0 part
sdd 8:48 0 100G 0 disk
sr0 11:0 1 7.7G 0 rom /run/media/root/CentOS 7 x86_64
查看硬盘信息发现/dev/sdc
硬盘满足我们的实验需求!
第二步:用fdisk
命令增加一分区
在增加分区的时候需要注意标记新增分区用途的类别
先分区~
~]#fdisk /dev/sdc
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): p #/ 这是打印硬盘分区信息 /#
#/---------此处省略----------/#
Device Boot Start End Blocks Id System
/dev/sdc1 2048 20973567 10485760 8e Linux LVM
/dev/sdc2 20973568 31459327 5242880 83 Linux
Command (m for help): u #/ "u"是切换扇区和柱面 /#
Changing display/entry units to cylinders (DEPRECATED!).
Command (m for help): n #/ "n"是开始分区 /#
Partition type:
p primary (2 primary, 0 extended, 2 free) #/ 这里的"p"主分区 /#
e extended #/ 这里的"e"扩展分区 /#
Select (default p): p #/ 这里我分一个主分区 /#
Partition number (3,4, default 3): 3 #/ 选择主分区编号为3 /#
First cylinder (1959-6527, default 1959):
Using default value 1959
Last cylinder, +cylinders or +size{K,M,G} (1959-6527, default 6527): +10G #/ 分10G大小 /#
Partition 3 of type Linux and of size 10 GiB is set
Command (m for help): t #/ 这是标记分区类别 /#
Partition number (1-3, default 3): 3 #/ 输入第几个分区 /#
Hex code (type L to list all codes): L #/ 大写"L"可以查看各种分区类别编号 /#
#/---------此处省略----------/#
Hex code (type L to list all codes): 8e #/ "8e"是用于逻辑卷的分区类别标记 /#
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
#/---------此处省略----------/#
Device Boot Start End Blocks Id System
/dev/sdc1 1 1306 10485760 8e Linux LVM
/dev/sdc2 1306 1959 5242880 83 Linux
/dev/sdc3 1959 3265 10488832 8e Linux LVM
Command (m for help): w #/ "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.
同步分区信息:用partprobe
命令同步并用**`lsblk`**查看分区信息
~]#partprobe #/ 把分区信息同步在内存里 /#
Warning: Unable to open /dev/sr0 read-write (Read-only file system).
/dev/sr0 has been opened read-only.
~]#lsblk #/ 查看硬盘信息,是否分区成功 /#
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
#/---------此处省略----------/#
sdc 8:32 0 50G 0 disk
├─sdc1 8:33 0 10G 0 part
│ └─vgtest-lvtest 253:0 0 30G 0 lvm
├─sdc2 8:34 0 5G 0 part
└─sdc3 8:35 0 10G 0 part
第三步:用pvcreate
命令把/dev/sd3
生成物理卷并用pvdisplay
查看物理卷详细信息
先生成物理卷~
~]#pvcreate /dev/sdc3
Physical volume "/dev/sdc3" successfully created.
查看物理卷详细信息~
~]#pvdisplay
--- Physical volume ---
#/---------此处省略----------/#
"/dev/sdc3" is a new physical volume of "10.00 GiB" #/ 这里就是我们新生成的物理卷信息 /#
--- NEW Physical volume ---
PV Name /dev/sdc3 #/ 物理卷名称 /#
VG Name #/ 注意,这里的卷组信息还是空的,因为还没划分给卷组 /#
PV Size 10.00 GiB #/ 新增物理卷大小 /#
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 81cHlt-osRn-I2Lc-faE6-36GN-ShzX-eHTfGJ
第四步:用vgextend
命令把新的物理卷添加至卷组并用vgdisplay
命令查看卷组详细信息
开始之前先看看卷组信息,可以可以做对比,这样会更直接些。关键点我都有注释的哦~
~]#vgdisplay
--- Volume group ---
#/---------此处省略----------/#
VG Size 29.97 GiB #/ 卷组大小为30G /#
PE Size 16.00 MiB
Total PE 1918
Alloc PE / Size 1918 / 29.97 GiB
Free PE / Size 0 / 0 #/ 没有可用PE /#
VG UUID kbBjKq-iFnA-fQSH-IK5w-EDFl-FFSL-uLSil9
现在我们开始用vdextend
命令增加卷组容量~
vgextend
命令用于动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量。
~]#vgextend vgtest /dev/sdc3 #/ 把物理卷"/dev/sdc3"添加至卷组"vgtest"中 /#
Volume group "vgtest" successfully extended
~]#vgdisplay #/ 查看卷组详细信息 /#
--- Volume group ---
VG Name vgtest
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 39.97 GiB #/ 可以看出眷组空间大小从之前只有30G变成目前的40G /#
PE Size 16.00 MiB
Total PE 2558
Alloc PE / Size 1918 / 29.97 GiB
Free PE / Size 640 / 10.00 GiB #/ 这里多出来10G的可用PE /#
VG UUID kbBjKq-iFnA-fQSH-IK5w-EDFl-FFSL-uLSil9
第五步:用lvextend
命令增加逻辑卷的容量,并用lvdisplay
查看逻辑卷详细信息
同样在开始之前我们先看看逻辑卷信息,看看它大小是多少~
~]#lvdisplay
--- Logical volume ---
LV Path /dev/vgtest/lvtest #/ 这才是逻辑卷的名称 /#
LV Name lvtest
VG Name vgtest
LV UUID 5IMYwN-9JZS-4KB1-ofFq-WpVn-OVv6-XOCfhL
LV Write Access read/write
LV Creation host, time CentOS7.Wxg, 2017-06-24 20:17:47 +0800
LV Status available
# open 0
LV Size 29.97 GiB #/ 逻辑卷大小是30G /#
Current LE 1918
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
现在我们开始用lvextend
命令给逻辑卷增加容量就给他增加个5G容量吧
lvextend命令用于在线扩展逻辑卷的空间大小,而不中断应用程序对逻辑卷的访问
~]#lvextend -r -L +5G /dev/vgtest/lvtest #/ 给LV新增加5G的容量,注意增加容量时要有"+"号 /#
#/---------此处省略----------/#
~]#lvdisplay
--- Logical volume ---
LV Path /dev/vgtest/lvtest
LV Name lvtest
VG Name vgtest
LV UUID 5IMYwN-9JZS-4KB1-ofFq-WpVn-OVv6-XOCfhL
LV Write Access read/write
LV Creation host, time CentOS7.Wxg, 2017-06-24 20:17:47 +0800
LV Status available
# open 0
LV Size 34.97 GiB #/ 注意到没有,从之前的30G变成现在的35G了 /#
Current LE 2238
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
如果还看不出差别的话,我回过头去看看卷组的信息,看看自由PE值是否从10G减少到5G了~
~]#vgdisplay
--- Volume group ---
VG Name vgtest
#/---------此处省略----------/#
Alloc PE / Size 2238 / 34.97 GiB
Free PE / Size 320 / 5.00 GiB #/ 注意到没有,从之前的10G变成现在的5G了 /#
VG UUID kbBjKq-iFnA-fQSH-IK5w-EDFl-FFSL-uLSil9
结语:
通过这个扩展LV的实验我们很直观的体会到在线管理逻辑卷的优势,可以有效避免一些不必要的麻烦。
当然逻辑卷管理除了扩展LV还有很多其他功能,例如可以缩减LV避免不必要的空间浪费、可以移除PV及时更换老旧的硬盘、可以跨主机迁移LV不丢数据的前提下脱离老旧主机迁到新的主机上等等强大的功能都可以实现。在这我就不分别做实验来证明啦~