一、什么是LVM逻辑卷
1、什么是逻辑卷
许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要。
LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。注意/boot分区不能基于LVM创建,必须独立出来。
2、关于逻辑卷的几个概念
- PE (Physical Extend)物理拓展
PE是用来保存数据的最小单元,数据实际上都是写入PE,PE的大小是可以配置的,默认是4MB。
- PV (Physical Volume)物理卷
PV是物理硬盘或物理分区。
- VG (Volume Group)卷组
VG是卷组,有多个物理卷组成,这些物理卷可以是同一个硬盘的不同分区也可以是不同硬盘上的不同分区,可以理解为一个逻辑分区。
- LV (Logical Volume)逻辑卷
卷组是一个逻辑硬盘,硬盘必须分区之后才能使用,这个分区我们称为逻辑卷。逻辑卷是可以格式化和读写的。
3、如何建立LVM
-
对物理硬盘进行分区(也可以是整块物理硬盘)
-
建立物理卷(PV)
-
把物理卷整合为卷组(VG)
-
把卷组划分为逻辑卷(LV)
4、相关命令
-
pvcreate
pvcreate用于建立物理卷,命令格式为:
pvcreate [设备文件名称]
-
pvscan
pvscan用于查看系统中是否有物理卷。
-
pvdisplay
pvdisplay用于查看物理卷详细状态。
-
pvremove
pvremove用于删除物理卷,命令格式为:
pvremove [物理卷名称]
-
vgcreate
vgcreate用于创建物理卷组,命令格式为:
vgcreate [选项] [卷组名] [物理卷名]
常用选项 说明 -s 用于指定PE大小 -
vgscan
vgscan用于查看系统中是否有卷组。
-
vgdisplay
vgdisplay用于查看卷组的详细状态
-
vgextend
vgextend用于扩展卷组容量,命令格式为:
vgextend [卷组名] [物理卷名]
-
vgreduce
vgreduce用于缩减卷组容量,命令格式为:
vgreduce [卷组名] [物理卷名]
-
vgremove
vgremove 用于删除卷组,命令格式为:
vgremove [卷组名]
-
lvcreate
lvcreate用于创建逻辑卷,命令格式为:
lvcreate [选项] [-n 逻辑卷名] [卷组名]
常用选项 说明 -n <逻辑卷名> 指定逻辑卷名 -l <个数> 按照PE个数指定逻辑卷大小,但是需要进行容量换算 -L <容量> 指定逻辑卷大小,单位MB、GB、TB等 -
lvscan
lvscan用于查看系统中是否有逻辑卷。
-
lvdisplay
lvdisplay用于查看逻辑卷的详细状态。
-
lvresize
lvresize用于调整逻辑卷大小,命令格式为:
lvresize [选项] [逻辑卷设备文件名] #选项与lvcreate类似,使用+代表增加空间,使用-代表减少空间,直接指定数值代表设定逻辑卷大小为指定的数值
-
resize2fs
resize2fs用于调整分区大小,命令格式为:
resize2fs [选项] [设备文件名] [新大小] #常用选项为-f,强制调整
-
lvremove
lvremove用于删除逻辑卷,执行删除操作前请现将逻辑卷卸载。
二、创建逻辑卷ulv
1、对物理硬盘进行分区
操作之前已经增加了一块20G的硬盘,并使用fdisk对硬盘分了四个分区,分别为sdb1,sdb2,sdb3,sdb4。
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ef1e2
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 281 2048000 83 Linux
Partition 2 does not end on cylinder boundary.
/dev/sda3 281 412 1048576 82 Linux swap / Solaris
Partition 3 does not end on cylinder boundary.
/dev/sda4 412 2611 17669120 5 Extended
/dev/sda5 412 2611 17668096 83 Linux
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5049f506
Device Boot Start End Blocks Id System
/dev/sdb1 1 600 4819468+ 83 Linux
/dev/sdb2 601 1200 4819500 83 Linux
/dev/sdb3 1201 1800 4819500 83 Linux
/dev/sdb4 1801 2610 6506325 83 Linux
2、建立物理卷
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sdb3" successfully created
Physical volume "/dev/sdb4" successfully created
[root@localhost ~]# pvscan #查看系统中的物理卷
PV /dev/sdb1 lvm2 [4.60 GiB]
PV /dev/sdb2 lvm2 [4.60 GiB]
PV /dev/sdb3 lvm2 [4.60 GiB]
PV /dev/sdb4 lvm2 [6.20 GiB]
Total: 4 [19.99 GiB] / in use: 0 [0 ] / in no VG: 4 [19.99 GiB]
[root@localhost ~]# pvdisplay #查看物理卷详细状态
"/dev/sdb1" is a new physical volume of "4.60 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 4.60 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID B4cReu-dIAR-miFw-n3Rl-FNFg-Zlfa-MAVaXO
"/dev/sdb2" is a new physical volume of "4.60 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb2
VG Name
PV Size 4.60 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 2N237g-z8B3-oN3T-9W11-5Y4E-Q3XB-KHXSso
"/dev/sdb3" is a new physical volume of "4.60 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb3
VG Name
PV Size 4.60 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID cyS3GB-FhsD-ca5z-pz9q-hFV7-KT8V-iMMB3I
"/dev/sdb4" is a new physical volume of "6.20 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb4
VG Name
PV Size 6.20 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID YBsq9M-HMP4-V170-7RHs-0yfH-YwE0-JFBg4k
#如需删除物理卷需要使用pvremove命令
#例如,删除/dev/sdb4
#pvremove /dev/sdb4
3、建立卷组
[root@localhost ~]# vgcreate -s 8MB uvg /dev/sdb1 /dev/sdb2 /dev/sdb3
Volume group "uvg" successfully created
[root@localhost ~]# vgscan #查看系统中的卷组
Reading all physical volumes. This may take a while...
Found volume group "uvg" using metadata type lvm2
[root@localhost ~]# vgdisplay #查看卷组详细状态
--- Volume group ---
VG Name uvg
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size 13.78 GiB
PE Size 8.00 MiB
Total PE 1764
Alloc PE / Size 0 / 0
Free PE / Size 1764 / 13.78 GiB
VG UUID 9WTfdw-7KIu-cABA-iQsq-QPc1-s1e0-sn91Iv
[root@localhost ~]# vgextend uvg /dev/sdb4 #扩展卷组容量
Volume group "uvg" successfully extended
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name uvg
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 4
Act PV 4
VG Size 19.98 GiB
PE Size 8.00 MiB
Total PE 2558
Alloc PE / Size 0 / 0
Free PE / Size 2558 / 19.98 GiB
VG UUID 9WTfdw-7KIu-cABA-iQsq-QPc1-s1e0-sn91Iv
#缩减卷组容量
#vgreduce uvg /dev/sdb4
#删除卷组
#vgremove uvg
4、建立逻辑卷
[root@localhost ~]# lvcreate -L 5G -n ulv uvg #再卷组uvg中新建逻辑卷ulv大小5G
Logical volume "ulv" created.
[root@localhost ~]# mkfs
mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.ext4dev mkfs.msdos mkfs.vfat
[root@localhost ~]# mkfs -t ext4 /dev/uvg/ulv #格式化逻辑卷ulv
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# mkdir /disk_lv #创建逻辑卷挂载点/disk_lv
[root@localhost ~]# mount /dev/uvg/ulv /disk_lv/ #挂在逻辑卷ulv到/disk_lv
[root@localhost ~]# mount
/dev/sda5 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/sda2 on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/uvg-ulv on /disk_lv type ext4 (rw) #挂在成功
[root@localhost ~]# lvscan #查看系统中的逻辑卷
ACTIVE '/dev/uvg/ulv' [5.00 GiB] inherit
[root@localhost ~]# lvdisplay #查看逻辑卷详细状态
--- Logical volume ---
LV Path /dev/uvg/ulv
LV Name ulv
VG Name uvg
LV UUID F18DlR-zdID-X2Oj-DWs0-KT4c-kfvO-OuTcoX
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-06-17 17:53:30 +0800
LV Status available
# open 1
LV Size 5.00 GiB
Current LE 640
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
#在/disk_lv中建立测试文件testfile在对逻辑卷ulv进行扩容验证文件是否会丢失
[root@localhost ~]# dd if=/dev/zero of=/disk_lv/testfile bs=1M count=10
记录了10+0 的读入
记录了10+0 的写出
10485760字节(10 MB)已复制,0.0181527 秒,578 MB/秒
[root@localhost ~]# ls /disk_lv/
lost+found testfile
[root@localhost ~]# ls /disk_lv/
lost+found testfile
[root@localhost ~]#
[root@localhost ~]# lvre
lvreduce lvremove lvrename lvresize
[root@localhost ~]# lvre
lvreduce lvremove lvrename lvresize
[root@localhost ~]# lvresize -L 10G /dev/uvg/ulv #改变逻辑卷大小为10G
Size of logical volume uvg/ulv changed from 5.00 GiB (640 extents) to 10.00 GiB (1280 extents).
Logical volume ulv successfully resized
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/uvg/ulv
LV Name ulv
VG Name uvg
LV UUID F18DlR-zdID-X2Oj-DWs0-KT4c-kfvO-OuTcoX
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-06-17 17:53:30 +0800
LV Status available
# open 1
LV Size 10.00 GiB
Current LE 1280
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
[root@localhost ~]# df -h /disk_lv/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/uvg-ulv 4.8G 20M 4.6G 1% /disk_lv
#虽然逻辑卷大小已经改变了,但是分区大小未改变,需要在调整下分区大小
[root@localhost ~]# resize2fs /dev/uvg/ulv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/uvg/ulv is mounted on /disk_lv; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/uvg/ulv to 2621440 (4k) blocks.
The filesystem on /dev/uvg/ulv is now 2621440 blocks long.
[root@localhost ~]# df -h /disk_lv/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/uvg-ulv 9.8G 22M 9.2G 1% /disk_lv
#验证下之前创建的文件
[root@localhost ~]# ls /disk_lv/
lost+found testfile
#删除逻辑卷
#umount /dev/uvg/ulv #删除前需要先卸载
#lvremo /dev/uvg/ulv #删除逻辑卷