查看命令:lvs lsblk
lvm 邏輯卷管理
磁盤空間的動態划分和管理
lvm能夠實現分區的動態的拉伸和回縮
lvm的創建過程其實是一個先整合,再划分的過程。
LVM創建
一、LVM的創建過程
1)添加硬盤或者創建分區,通知內核
2)創建物理卷 PV (pvcreate)
3)創建卷組 VG (vgcreate)
4)創建邏輯卷 LV (lvcreate)
5)創建文件系統 (mkfs.xfs)
6)掛載使用 (mount /etc/fstab /etc/rc.d/rc.local)
1)創建分區
# parted /dev/sdd mklabel gpt
# parted /dev/sdd mkpart primary 1 1G
# parted /dev/sdd mkpart primary 1G 2G
# parted /dev/sdd mkpart primary 2G 3G
# parted /dev/sdd mkpart primary 3G 4G
# ll /dev/sdd
sdd sdd1 sdd2 sdd3 sdd4
2)創建物理卷
# pvcreate /dev/sdd{1..4}
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created.
Physical volume "/dev/sdd3" successfully created.
Physical volume "/dev/sdd4" successfully created.
2.1)查看物理卷
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- 19.00g 0
/dev/sdd1 lvm2 --- 953.00m 953.00m
/dev/sdd2 lvm2 --- 953.00m 953.00m
/dev/sdd3 lvm2 --- 954.00m 954.00m
/dev/sdd4 lvm2 --- 954.00m 954.00m
# pvscan
PV /dev/sda2 VG cl lvm2 [19.00 GiB / 0 free]
PV /dev/sdd3 lvm2 [954.00 MiB]
PV /dev/sdd2 lvm2 [953.00 MiB]
PV /dev/sdd4 lvm2 [954.00 MiB]
PV /dev/sdd1 lvm2 [953.00 MiB]
Total: 5 [22.72 GiB] / in use: 1 [19.00 GiB] / in no VG: 4 [3.72 GiB]
# pvdisplay
"/dev/sdd3" is a new physical volume of "954.00 MiB"
--- NEW Physical volume ---
PV Name /dev/sdd3
VG Name
PV Size 954.00 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID kRYrRB-0BZm-Z2h1-tQxu-kDUC-FvQF-4YSZ5L
...
3)創建卷組
語法:vgcreate [-s 大小] 卷組的名字 物理卷的設備路徑
# vgcreate [-s 8M] vg0 /dev/sdd{1..4}
Volume group "vg0" successfully created
-s 指定PE大小
PE(物理擴展單元) 大小(默認是4M)
3.1)
# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 2 0 wz--n- 19.00g 0
vg0 4 0 0 wz--n- 3.72g 3.72g
# vgscan
Reading volume groups from cache.
Found volume group "vg0" using metadata type lvm2
Found volume group "cl" using metadata type lvm2
# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 4
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 4
Act PV 4
VG Size 3.72 GiB
PE Size 8.00 MiB
Total PE 476
Alloc PE / Size 0 / 0
Free PE / Size 476 / 3.72 GiB
VG UUID PWOx9H-9eP0-vkdz-v31T-cHxO-C80x-4BAMfE
4)創建邏輯卷
# lvcreate -n lv0 -L 1500M vg0
Rounding up size to full physical extent 1.47 GiB
Logical volume "lv0" created.
-n 指定lv的名字
-L 指定lv的大小
vg0 取vg0卷組的空間做lv
# lvcreate -n lv0 -l 188 vg0
-l 指定使用了多少個PE
LE 邏輯擴展單元
4.1)
#lvs
#lvscan
#lvdisplay
5)創建文件系統
# mkfs.xfs /dev/vg0/lv0
6)掛載
# mkdir /lv0
# mount /dev/vg0/lv0 /lv0/
# vim /etc/fstab
/dev/vg0/lv0 /lv0 xfs defaults 0 0
7)測試
# cd /lv0
# cat > lvm-test.txt << EOF
> ---------------
> Hello JIM
> hi jim
> hello world
> ---------------
> EOF
LVM動態擴容
xfs和ext4文件系統
擴容的區別
擴容文件系統的命令不一樣
xfs 使用的命令是xfs_growfs
ext4 使用的命令是resize2fs
XFS在線擴容
第1種情況:卷組內有空閑空間,直接從卷組取空間
1)對邏輯卷擴容
# lvextend -L +500M /dev/vg0/lv0 +表示在原來的空間
大小上加上多少空間大小
Rounding size to boundary between physical extents: 504.00 MiB.
Size of logical volume vg0/lv0 changed from 1.47 GiB (188 extents) to 1.96 GiB (251 extents).
Logical volume vg0/lv0 successfully resized.
2)對文件系統擴容
# xfs_growfs /dev/vg0/lv0
第2種情況:卷組內沒有空間
1)創建新分區
# parted /dev/sdd mkpart primary 4G 5G
# ll /dev/sdd
sdd sdd1 sdd2 sdd3 sdd4 sdd5
2)創建物理卷
# pvcreate /dev/sdd5
Physical volume "/dev/sdd5" successfully created.
3)加入卷組 vg擴容
# vgextend vg0 /dev/sdd5
Volume group "vg0" successfully extended
4)對邏輯卷擴容
# lvextend -L 4500M /dev/vg0/lv0
Rounding size to boundary between physical extents: 4.40 GiB.
Size of logical volume vg0/lv0 changed from 1.96 GiB (251 extents) to 4.40 GiB (563 extents).
Logical volume vg0/lv0 successfully resized.
5)對文件系統擴容
# xfs_growfs /dev/vg0/lv0
ext4擴容
創建lv0邏輯卷
# lvcreate -n lv0 -L 2G vg0
制作文件系統ext4
# mkfs.ext4 /dev/vg0/lv0
掛載
# mount /dev/vg0/lv0 /lv0
在邏輯卷中添加數據
# cd /lv0
# echo "ext4" >test.txt
# cat test.txt
ext4
擴容lv0
# lvextend -L +1G /dev/vg0/lv0
Size of logical volume vg0/lv0 changed from 2.00 GiB (256 extents) to 3.00 GiB (384 extents).
Logical volume vg0/lv0 successfully resized.
文件系統擴容
# resize2fs /dev/vg0/lv0
縮容
XFS不支持縮容
ext4支持縮容
ext4縮容
注意:
1.風險大有可能造成數據的損壞
2.確保縮減后的空間大小依然能存儲原來的所有數據
3.不要在線縮容
4.在縮減之前強制檢查文件系統
現在要在創建一個邏輯卷lv1,lv1的大小要求為1G,卷組內沒有空間,但邏輯卷lv0的空間過大,縮減lv0,給lv1
給lv0縮減
1)先卸載
# umount /lv0
2)強制檢查文件系統
# e2fsck -f /dev/vg0/lv0
3)縮減文件系統
# resize2fs /dev/vg0/lv0 1800M
4)縮減邏輯卷
# lvreduce -L 1800M /dev/vg0/lv0
5)測試縮減邏輯卷后邏輯卷能否正常使用
# mount /dev/vg0/lv0 /lv0
# cd /lv0
# cat
lost+found/ test.txt
# cat test.txt
ext4
# df -h
文件系統 容量 已用 可用 已用% 掛載點
/dev/mapper/cl-root 17G 4.3G 13G 26% /
devtmpfs 473M 0 473M 0% /dev
tmpfs 489M 84K 489M 1% /dev/shm
tmpfs 489M 7.1M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 155M 860M 16% /boot
tmpfs 98M 16K 98M 1% /run/user/42
tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/vg0-lv0 1.7G 6.1M 1.6G 1% /lv0
創建快照
快照的工作原理:
保存數據某一刻的狀態。快照剛建立的時候,大小是空的,快照是訪問源數據的另一條路徑。快照是在數據改變之前將數據原封不動的保存在快照空間里面。注意變化數據的源數據不能超過快照空間的大小,否則,快照將崩潰。
寫時復制:快照做完以后,源文件要修改前,會復制一份到快照,以便恢復到最原始的時候
實驗:
1.掛載lv0邏輯卷,在邏輯卷內寫入數據
# mount /dev/vg0/lv0 /lv0
# cd /lv0
# ls
# cp /etc/passwd /etc/shadow .
# echo "hello" > lvmsnap-test.txt
# cat lvmsnap-test.txt
hello
# ll
總用量 12
-rw-r--r--. 1 root root 6 7月 7 22:34 lvmsnap-test.txt
-rw-r--r--. 1 root root 2229 7月 7 22:34 passwd
----------. 1 root root 1248 7月 7 22:34 shadow
2.給/dev/vg0/lv0邏輯卷做快照
# lvcreate -s /dev/vg0/lv0 -L 800M -n lv0.snap
Using default stripesize 64.00 KiB.
Logical volume "lv0.snap" created.
3.改變lv0邏輯卷的數據
# cp /etc/group .
# rm passwd
rm:是否刪除普通文件 "passwd"?y
# ls
group lvmsnap-test.txt shadow
# echo "world" >> lvmsnap-test.txt
# cat lvmsnap-test.txt
hello
world
4.恢復數據 會刪除快照卷 恢復之前要卸載
# umount /dev/vg0/lv0
# lvconvert --merge /dev/vg0/lv0.snap
Merging of volume vg0/lv0.snap started.
lv0: Merged: 100.00%
5.掛載lv0邏輯卷查看數據是否恢復到拍快照的那一刻的狀態
# mount /dev/vg0/lv0 /lv0
# cd /lv0
# ls
lvmsnap-test.txt passwd shadow
# cat lvmsnap-test.txt
hello