Ubuntu学习笔记之分区详解之LVM
0、 前言
逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统,都是非常的好用。
传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使
用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将
新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需要重启就可以让内核知道分区的存在。
disk A disk B
↓----------↓ ↓-------↓------↓
分区1 分区2 分区1 分区2 分区3
↓ ↓ ↓ ↓ ↓
pv1 pv2 pv1 pv2 pv3
↓ ↓ ↓ ↓ ↓
volume group1 volume group 2, volume group 2,
↓ ↓ ↓
logical volume1 logical volume2 logical volume3
↓ ↓
文件系统ext4 文件系统zfs
图中顶部,首先是实际的物理磁盘及其划分的分区和其上的物理卷(PV)。
一个或多个物理卷可以用来创建卷组(VG)。然后基于卷组可以创建逻辑卷(LV)。
只要在卷组中有可用空间,就可以随心所欲的创建逻辑卷。
文件系统就是在逻辑卷上创建的,然后可以在操作系统挂载和访问。
1、首先使用分区工具进行分区,parted、fdisk命令。
root@fs-share:/# fdisk -l /dev/sdb
Disk /dev/sdb: 8.9 TiB, 9796283531264 bytes, 19133366272 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
Disklabel type: gpt
Disk identifier: 2C9EDAFE-B39C-4DFA-8BD4-A6C74FC02CE6
Device Start End Sectors Size Type
/dev/sdb1 2048 195311615 195309568 93.1G Linux LVM
/dev/sdb2 195311616 4687499263 4492187648 2.1T Linux LVM
/dev/sdb3 4687499264 5859375103 1171875840 558.8G Linux filesystem
/dev/sdb4 5859375104 7812499455 1953124352 931.3G Linux filesystem
/dev/sdb5 7812499456 11718750207 3906250752 1.8T Linux filesystem
/dev/sdb6 11718750208 13671874559 1953124352 931.3G Linux filesystem
/dev/sdb7 13671874560 14648436735 976562176 465.7G Linux filesystem
/dev/sdb8 14648436736 17578125311 2929688576 1.4T Linux filesystem
/dev/sdb9 17578125312 18554687487 976562176 465.7G Linux filesystem
2、使用命令pvcreate创建物理卷(PV)
root@fs-share:/# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
# 使用下列命令检查物理卷的创建情况。
root@fs-share:/# pvdisplay
"/dev/sdb1" is a new physical volume of "93.13 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 93.13 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID fNiq1L-rCZC-y1DQ-YoNk-ufr8-Ddz3-RRwknx
# pvremove /dev/sdb1 使用下列命令可以删除物理卷。
root@fs-share:/# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped.
# 也可以同时新建多个pv的
root@fs-share:/# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
3、准备卷组
#下列命令用来创建名为'data1'的卷组
root@fs-share:/# vgcreate data1 /dev/sdb1 /dev/sdb3
Volume group "data1" successfully created
root@fs-share:/# vgcreate vg-data1 /dev/sdb1 /dev/sdb3
Volume group "vg-data1" successfully created
# 使用下列命令可以来验证卷组。
root@fs-share:/# vgdisplay
--- Volume group ---
VG Name vg-data1
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 651.92 GiB
PE Size 4.00 MiB
Total PE 166892
Alloc PE / Size 0 / 0
Free PE / Size 166892 / 651.92 GiB
VG UUID vLRQGk-Ml8H-mupG-ITKN-KWYm-jRyl-nI9aBY
#使用下列命令删除卷组。
vgremove vg-data1
# 如果再次新建之前的一个分区到vg中会提示报错的
root@fs-share:/# vgcreate vg-root /dev/sdb1
Physical volume '/dev/sdb1' is already in volume group 'vg-data1'
Unable to add physical volume '/dev/sdb1' to volume group 'vg-data1'
/dev/sdb1: physical volume not initialized.
# 再单独建个vg-root
root@fs-share:/# vgcreate vg-root /dev/sdb2
Volume group "vg-root" successfully created
root@fs-share:/# vgdisplay
--- Volume group ---
VG Name vg-data1
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 651.92 GiB
PE Size 4.00 MiB
Total PE 166892
Alloc PE / Size 0 / 0
Free PE / Size 166892 / 651.92 GiB
VG UUID vLRQGk-Ml8H-mupG-ITKN-KWYm-jRyl-nI9aBY
--- Volume group ---
VG Name vg-root
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 2.09 TiB
PE Size 4.00 MiB
Total PE 548362
Alloc PE / Size 0 / 0
Free PE / Size 548362 / 2.09 TiB
VG UUID EL9l4y-b1qo-9LWx-oxiQ-u5J4-2vS9-ejP6FL
root@fs-share:/#
4、准备逻辑卷
下列命令创建一个名为'1v1'、大小为100MB的逻辑卷。我们使用小分区减少执行时间
lvcreate -L 100M -n vg-data1_lv1 vg-data1
root@fs-share:/# lvcreate -L 100M -n vg-data1_lv1 vg-data1
Logical volume "vg-data1_lv1" created.
root@fs-share:/# lvdisplay
--- Logical volume ---
LV Path /dev/vg-data1/vg-data1_lv1
LV Name vg-data1_lv1
VG Name vg-data1
LV UUID JUIugv-IOpL-sJEU-kwb9-q8gt-T0ct-wDSoBL
LV Write Access read/write
LV Creation host, time fs-share, 2019-06-04 17:25:17 +0800
LV Status available
# open 0
LV Size 100.00 MiB
Current LE 25
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
现在逻辑卷已经准备好了,我们可以格式化和挂载逻辑卷,就像其它ext2/3/4分区一样!
root@fs-share:/# mkfs.ext4 /dev/vg-data1/vg-data1_lv1
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 102400 1k blocks and 25688 inodes
Filesystem UUID: 64ae11e6-5650-42b4-a8f9-150f055d372c
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
root@fs-share:/# mount /dev/vg-data1/vg-data1_lv1 /mnt/
root@fs-share:/# df -ah
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 256G 2.1G 241G 1% /
/dev/mapper/vg--data1-vg--data1_lv1 93M 1.6M 85M 2% /mnt
一旦逻辑卷挂载,我们就可以到挂载点 /lvm-mount/ 上读写了。要创建和挂载其它的逻辑卷,我们重复这个过程。
最后,使用lvremove我们可以删除逻辑卷。
umount /lvm-mount/
lvremove /dev/volume-group1/lv1
5、扩展一个LVM卷
调整逻辑卷大小的功能是LVM最有用的功能,调整逻辑卷大小之后也需要对文件系统调整大小进行匹配。
首先,我们卸载掉lv1卷
root@fs-share:~# umount /dev/vg-data1/vg-data1_lv1
然后,设置卷的大小为200M
root@fs-share:~# lvresize -L 200M /dev/vg-data1/vg-data1_lv1
Size of logical volume vg-data1/vg-data1_lv1 changed from 100.00 MiB (25 extents) to 200.00 MiB (50 extents).
Logical volume vg-data1/vg-data1_lv1 successfully resized.
检查磁盘错误
root@fs-share:~# e2fsck -f /dev/vg-data1/vg-data1_lv1
e2fsck 1.44.1 (24-Mar-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg-data1/vg-data1_lv1: 297/25688 files (3.0% non-contiguous), 100351/102400 blocks
扩展文件系统
root@fs-share:~# resize2fs /dev/vg-data1/vg-data1_lv1
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/vg-data1/vg-data1_lv1 to 204800 (1k) blocks.
The filesystem on /dev/vg-data1/vg-data1_lv1 is now 204800 (1k) blocks long.
检查LV的状态来验证
root@fs-share:~# lvdisplay
--- Logical volume ---
LV Path /dev/vg-data1/vg-data1_lv1
LV Name vg-data1_lv1
VG Name vg-data1
LV UUID JUIugv-IOpL-sJEU-kwb9-q8gt-T0ct-wDSoBL
LV Write Access read/write
LV Creation host, time fs-share, 2019-06-04 17:25:17 +0800
LV Status available
# open 0
LV Size 200.00 MiB
Current LE 50
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
root@fs-share:~# mount /dev/vg-data1/vg-data1_lv1 /mnt/
root@fs-share:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 16G 0 16G 0% /dev
tmpfs 3.2G 2.9M 3.2G 1% /run
/dev/sda1 256G 2.4G 240G 1% /
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 16G 0 16G 0% /sys/fs/cgroup
tmpfs 3.2G 0 3.2G 0% /run/user/1000
/dev/mapper/vg--data1-vg--data1_lv1 190M 91M 86M 52% /mnt
6、缩减一个LVM卷,扩展一个LVM卷
注意减少逻辑卷的大小值若小于储存的数据大小,存储在后面的数据会丢失。
卸载掉卷。
root@fs-share:~# umount /dev/vg-data1/vg-data1_lv1
检测磁盘错误
root@fs-share:~# e2fsck /dev/vg-data1/vg-data1_lv1
e2fsck 1.44.1 (24-Mar-2018)
/dev/vg-data1/vg-data1_lv1: clean, 13/49400 files, 177515/204800 blocks
缩小文件系统
root@fs-share:~# resize2fs /dev/vg-data1/vg-data1_lv1 100M
resize2fs 1.44.1 (24-Mar-2018)
resize2fs: New size smaller than minimum (204800)
减少逻辑卷大小
root@fs-share:~# lvresize -L 100M /dev/vg-data1/vg-data1_lv1
WARNING: Reducing active logical volume to 100.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg-data1/vg-data1_lv1? [y/n]: y
Size of logical volume vg-data1/vg-data1_lv1 changed from 200.00 MiB (50 extents) to 100.00 MiB (25 extents).
Logical volume vg-data1/vg-data1_lv1 successfully resized.
验证调整后的逻辑卷大小
root@fs-share:~# lvdisplay
--- Logical volume ---
LV Path /dev/vg-data1/vg-data1_lv1
LV Name vg-data1_lv1
VG Name vg-data1
LV UUID JUIugv-IOpL-sJEU-kwb9-q8gt-T0ct-wDSoBL
LV Write Access read/write
LV Creation host, time fs-share, 2019-06-04 17:25:17 +0800
LV Status available
# open 0
LV Size 100.00 MiB
Current LE 25
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
7、扩展一个卷组
root@fs-share:~#
root@fs-share:~# pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg-data
PV Size <8.91 TiB / not usable 2.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2335615
Free PE 2335615
Allocated PE 0
PV UUID hwqYDk-BANT-TRjl-E816-XflZ-5tox-NZzzlf
"/dev/sdc1" is a new physical volume of "<8.91 TiB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size <8.91 TiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID MTNKpf-fwWc-s090-frxQ-engb-eGwQ-ArQmX6
检测现在卷组状态
root@fs-share:~# vgdisplay
--- Volume group ---
VG Name vg-data
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 <8.91 TiB
PE Size 4.00 MiB
Total PE 2335615
Alloc PE / Size 0 / 0
Free PE / Size 2335615 / <8.91 TiB
VG UUID 8biipv-Yx0F-OVRW-1ADL-dvEu-pFpL-Z4g9pu
root@fs-share:~#
扩增一个卷组
root@fs-share:~# vgextend vg-data /dev/sdc1
Volume group "vg-data" successfully extended
root@fs-share:~#
# 扩展一个卷组之后大小已经变化了
root@fs-share:~# vgdisplay
--- Volume group ---
VG Name vg-data
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size <17.82 TiB
PE Size 4.00 MiB
Total PE 4671230
Alloc PE / Size 0 / 0
Free PE / Size 4671230 / <17.82 TiB
VG UUID 8biipv-Yx0F-OVRW-1ADL-dvEu-pFpL-Z4g9pu
root@fs-share:~#
从一个卷组中移除一个pv
vgreduce - Remove physical volume(s) from a volume group