本篇將從頭到尾演示一遍邏輯卷的管理.
主要步驟
1、創建lv邏輯卷步驟
前提:先創建3個磁盤分區,類型為8e;
1、PV創建
pvcrete /dev/sda#
2、VG創建
vgcreate VG_NAME /dev/sda# /dev/sda#+1 ...
3、LV創建
lvcreate -L # -n LV_NAME VG_NAME
4、格式化文件系統
mkfs.ext4 LV_NAME
5、掛載使用
mount /PATH/TO/VG_NAME/LV_NAME 掛載點
2、擴展lv步驟:
前提:先保證vg有足夠的空間pv
1、lvextend -L #[MGT] /dev/VG_NAME/LV_NAME
2、resize2fs /dev/VG_NAME/LV_NAME
3、縮減lv步驟:
前提:先保證vg有足夠的空間pv,再保證pv有足夠空間的lv
提示:xfs文件格式不支持縮減.請使用ext系列文件格式測試.
1、先卸載
umount /dev/VG_NAME/LV_NAME
2、強制檢查文件系統一致性
e2fsck -f /dev/VG_NAME/LV_NAME
3、縮減邏輯邊界(縮減后空間一定要能容納現有文件)
resize2fs /dev/VG_NAME/LV_NAME #[MMT](縮減到多少)
4、縮減物理邊界
lvreduce -L #(縮減到多少)[MGT] /dev/VG_NAME/LV_NAME
輸入:y,確認縮減;
5、重新掛載
mount /dev/VG_NAME/LV_NAME /PATH/TO/SOMEDIR
6、查看磁盤分區確認
$ df -lh
4、創建快照卷
同創建lv,前提確保有足夠的可用lv空間
1、lvcreate -s -L #G SNAP_NAME -p r /dev/VG_NAME/LV_NAME
2、掛載使用
3、恢復快照
取消掛載邏輯卷和對應的快照
umount /dev/VG_NAME/SNAP_NAME
umount /dev/VG_NAME/LV_NAME
合並快照內容
lvconvert --merge /dev/VG_NAME/SNAP_NAME
4、刪除快照
取消快照文件夾的掛載,再lvremove.
umount /PATH/TO/SOMEDIR
lvremove /dev/VG_NAME/SNAP_NAME
5、卸載刪除lv步驟:
前提:確保數據備份
1、卸載
umount 掛載點
2、移除lv
lvremove /dev/VG_NAME/LV_NAME
3、移除vg
vgremove VG_NAME
4、移除pv
pvremove /dev/sda#
演示開始
創建物理卷pv
pvcreate 設備名
$ pvcreate /dev/sd{b1,c1,d}
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc1" successfully created.
Physical volume "/dev/sdd" successfully created.
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 3.00g 3.00g
/dev/sdc1 lvm2 --- 3.00g 3.00g
/dev/sdd lvm2 --- 20.00g 20.00g
$ blkid
/dev/sda1: UUID="afb7fd40-2397-48d1-bca4-717be297f93c" TYPE="xfs"
/dev/sda2: UUID="85c6b174-252c-4055-b570-e9eeaa777965" TYPE="xfs"
/dev/sda3: UUID="07d4e313-2004-45fc-864c-e60bf597ca75" TYPE="swap"
/dev/sdb1: UUID="Fe2tDt-oit1-FSAl-KxzW-aF6H-ZilG-QCWDlo" TYPE="LVM2_member"
/dev/sdc1: UUID="dUedrJ-I41U-38uc-5lYZ-eBMZ-8fJF-Gm9gz7" TYPE="LVM2_member"
/dev/sdd: UUID="phMgr1-Bu0B-J5fs-aojc-2Yyp-Ue0j-RYoHjN" TYPE="LVM2_member"
$ pvdisplay
"/dev/sdb2" is a new physical volume of "3.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb2
VG Name
PV Size 3.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID KMMRGl-2R9b-0SZo-aWSX-ryQG-IOyL-rez5sH
此時還沒有VG Name和PE相關的數據,因為要有VG之后才會被創建.
創建卷組vg
vgcreate
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
-s 指明PE大小,單位可用kKmMgGtTpPeE;
$ vgcreate -s 4M vg0 /dev/sd{b1,c1,d}
Volume group "vg0" successfully created
$ vgs
VG #PV #LV #SN Attr VSize VFree
vg0 3 0 0 wz--n- <25.99g <25.99g
創建邏輯卷lv
lvcreate -n lv0 -L 16G vg0
Logical volume "lv0" created.
$ gdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 2 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 <25.99 GiB PE Size 4.00 MiB Total PE 6653 Alloc PE / Size 4096 / 16.00 GiB Free PE / Size 2557 / <9.99 GiB VG UUID eQ4KLZ-fAJh-1gX8-Qrp5-o0Qx-0LgM-G4kXRi $ vs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 vg0 -wi-a----- 16.00g $ lvdisplay --- Logical volume --- LV Path /dev/vg0/lv0 LV Name lv0 VG Name vg0 LV UUID PYsVIR-u4DI-Oq0X-dXcA-ilJ2-jLJL-1T9Zx7 LV Write Access read/write LV Creation host, time centos7.qt, 2017-12-10 00:10:58 +0800 LV Status available # open 0 LV Size 16.00 GiB Current LE 4096 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
創建lv,使用所有剩余空間
$ lvcreate -n lv1 -l +100%free vg0 Logical volume "lv1" created.
給每個lv創建文件系統
$ kfs.ext4 /dev/vg0/lv0 $ mkfs.xfs /dev/vg0/lv1
掛載
為了開機自動掛載,寫入fstab
$ vim /etc/fstab
UUID=03213fc3-305e-4f26-889c-ae0487322b61 /mnt/lv0 ext4 defaults 0 0
UUID=a34535a7-19ae-4943-af2f-091d4d571e6c /mnt/lv1 xfs defaults 0 0
$ mkdir /mnt/lv{0,1}
$ mount -a
擴展卷組lv
看一下可用分區(已刪除無關磁盤信息)
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 3G 0 part │ └─vg0-lv1 253:1 0 10G 0 lvm /mnt/lv1 └─sdb2 8:18 0 3G 0 part sdc 8:32 0 20G 0 disk ├─sdc1 8:33 0 3G 0 part │ └─vg0-lv1 253:1 0 10G 0 lvm /mnt/lv1 └─sdc2 8:34 0 3G 0 part sdd 8:48 0 20G 0 disk ├─vg0-lv0 253:0 0 16G 0 lvm /mnt/lv0 └─vg0-lv1 253:1 0 10G 0 lvm /mnt/lv1
使用/dev/sdb2創建一個pv
$ pvcreate /dev/sdb2 Physical volume "/dev/sdb2" successfully created.
可以看到新創建的PV,sdb2
$ pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vg0 lvm2 a-- <3.00g 0 /dev/sdb2 lvm2 --- 3.00g 3.00g /dev/sdc1 vg0 lvm2 a-- <3.00g 0 /dev/sdd vg0 lvm2 a-- <20.00g 0
擴展vg,把新PV加進去
$ vgextend vg0 /dev/sdb2 Volume group "vg0" successfully extended
可以看到Free PE 已經有了
$ vgdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 4 Act PV 4 VG Size 28.98 GiB PE Size 4.00 MiB Total PE 7420 Alloc PE / Size 6653 / <25.99 GiB Free PE / Size 767 / <3.00 GiB VG UUID eQ4KLZ-fAJh-1gX8-Qrp5-o0Qx-0LgM-G4kXRi
先查看一下lv目前容量,再擴展一下lv1
$ lvs;lvextend -r -l +100%free /dev/vg0/lv1 #-r 可以更新df命令中的結果. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 vg0 -wi-ao---- 16.00g lv1 vg0 -wi-ao---- <9.99g Size of logical volume vg0/lv1 changed from <9.99 GiB (2557 extents) to 12.98 GiB (3324 extents). Logical volume vg0/lv1 successfully resized.
之后再看lv容量,已經變大
$ lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 vg0 -wi-ao---- 16.00g lv1 vg0 -wi-ao---- 12.98g
再看vg剩余空間,已經用完
$ vgdisplay | grep 'Free PE' Free PE / Size 0 / 0
縮減邏輯卷
必須先取消掛載要縮減的邏輯卷
$ umount /mnt/lv0
要先執行磁盤檢測,否則會提示
Please run 'e2fsck -f /dev/vg0/lv0' first.
磁盤檢測
$ 2fsck -f /dev/vg0/lv0
再縮減文件系統
$ esize2fs /dev/vg0/lv0 8G $ esize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vg0/lv0 to 2097152 (4k) blocks. The filesystem on /dev/vg0/lv0 is now 2097152 blocks long.
縮減邏輯卷lv
$ vreduce -L 8G /dev/vg0/lv0 WARNING: Reducing active logical volume to 8.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vg0/lv0? [y/n]: y Size of logical volume vg0/lv0 changed from 16.00 GiB (4096 extents) to 8.00 GiB (2048 extents). Logical volume vg0/lv0 successfully resized.
重新掛載
$ mount –a
查看一下
$ df -h /dev/mapper/vg0-lv0 7.8G 37M 7.3G 1% /mnt/lv0 /dev/mapper/vg0-lv1 10G 33M 10G 1% /mnt/lv1
邏輯卷快照管理
快照就是將當時的系統信息記錄下來,就好像照相一般,若將來有任何數據改動了,則原始數據會被移動到快照區,沒有改動的區域則由快照區和文件系統共享
由於快照區與原本的LV共用很多PE的區塊,因此快照去與被快照的LV必須在同一個VG.系統恢復的時候的文件數量不能高於快照區的實際容量
創建快照
給lv0 創建快照
$ lvcreate -s -p r -L 3G -n lv0_snapshot /dev/vg0/lv0
選項說明:
-s|--snapshot original_lv_name:創建為快照卷,指明原卷;
-n|--name snapshot_lv_name:定義快照卷名稱;
-L|--size #[mMgGtT]:指定邏輯卷空間大小;
-p|--permission {r|rw}:指定邏輯卷權限,r為只讀,rw為讀寫(快照卷通常為只讀);
查看已創建的快照(已刪除無關磁盤信息)
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 3G 0 part │ └─vg0-lv1 253:1 0 13G 0 lvm /mnt/lv1 └─sdb2 8:18 0 3G 0 part └─vg0-lv1 253:1 0 13G 0 lvm /mnt/lv1 sdc 8:32 0 20G 0 disk ├─sdc1 8:33 0 3G 0 part │ └─vg0-lv1 253:1 0 13G 0 lvm /mnt/lv1 └─sdc2 8:34 0 3G 0 part sdd 8:48 0 20G 0 disk ├─vg0-lv1 253:1 0 13G 0 lvm /mnt/lv1 ├─vg0-lv0-real 253:2 0 8G 0 lvm │ ├─vg0-lv0 253:0 0 8G 0 lvm /mnt/lv0 │ └─vg0-lv0_snapshot 253:4 0 8G 1 lvm └─vg0-lv0_snapshot-cow 253:3 0 3G 1 lvm └─vg0-lv0_snapshot 253:4 0 8G 1 lvm
掛載快照
$ mount /dev/vg0/lv1_snapshot /mnt/snap $ mount: /dev/mapper/vg0-lv0_snapshot is write-protected, mounting read-only
恢復快照
$ mount /dev/vg0/lv0_snapshot $ umount /dev/vg0/lv0 $ lvconvert --merge /dev/vg0/lv0_snapshot
刪除快照
$ umount /mnt/snap $ lvremove /dev/vg0/lv0_snapshot
