本章blog主要講解了[Lvm] Linux(centos)lvm磁盤建立,LVM分區,擴容、快照管理及LVM配置指令詳解
本章Blog相關知識點:
- LVM基本組成:
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬碟和 分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。LVM将若幹個磁盤分區連接配接為一個整塊的卷組 (volumegroup),形成一個存儲池。管理者可以在卷組上随意建立邏輯卷組(logical volumes),并進一步在邏輯卷組上建立檔案系 統。LVM利用Linux核心的device-mapper來實作存儲系統的虛拟化(系統分區獨立于底層硬體)。 通過LVM,你可以實作存儲空間的抽象化并在上面建立虛拟分區(virtual partitions),可以更簡便地擴大和縮小分區,可以增删分區時無需擔心某個硬碟上沒有足夠的連續空間。
- LVM的基本組成塊(building blocks):
實體卷Physical volume (PV):可以在上面建立卷組的媒介,可以是硬碟分區,也可以是硬碟本身或者回環檔案(loopback file)。實體卷包括一個特殊的header,其餘部分被切割為一塊塊實體區域(physical extents)。 實體卷就是指硬碟分區或從邏輯上與磁盤分區具有同樣功能的裝置(如RAID),是LVM的基本存儲邏輯塊。
卷組Volume group (VG):将一組實體卷收集為一個管理單元。LVM卷組類似于非LVM系統中的實體硬碟,其由實體卷PV組成。可以在卷組上建立一個或多個"LV分區"(邏輯卷),VG卷組由一個或多個實體卷PV組成。
邏輯卷Logical volume (LV):虛拟分區,由實體區域(physical extents)組成。LVM的邏輯卷類似于非LVM系統中的硬碟分區,在邏輯卷之上可以建立檔案系統(比如/home或者/usr等)。
實體區域Physical extent (PE):硬碟可供指派給邏輯卷的最小機關(通常為4MB)。每一個實體卷被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編号的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,預設為4MB。
- LVM優點
比起正常的硬碟分區管理,LVM更富于彈性:
使用卷組(VG),使衆多硬碟空間看起來像一個大硬碟。
使用邏輯卷(LV),可以建立跨越衆多硬碟空間的分區。
可以建立小的邏輯卷(LV),在空間不足時再動态調整它的大小。
在調整邏輯卷(LV)大小時可以不用考慮邏輯卷在硬碟上的位置,不用擔心沒有可用的連續空間。
可以線上(online)對邏輯卷(LV)和卷組(VG)進行建立、删除、調整大小等操作。
LVM上的檔案系統也需要重新調整大小,某些檔案系統也支援這樣的線上操作。
無需重新啟動服務,就可以将服務中用到的邏輯卷(LV)線上(online)/動态(live)遷移至别的硬碟上。
允許建立快照,可以儲存檔案系統的備份,同時使服務的下線時間(downtime)降低到最小。
這些優點使得LVM對伺服器的管理非常有用,對于桌面系統管理的幫助則沒有那麼顯著,你需要根據實際情況進行取舍。
- LVM缺點
在系統設定時需要更複雜的額外步驟。
與傳統的磁盤與分區相比,LVM為計算機提供了更高層次的磁盤存儲。它使系統管理者可以更友善的為應用與使用者配置設定存儲空間。在LVM管理下的存儲卷可以按需要随時改變大小與移除(可能需對檔案系統工具進行更新)。 LVM是在磁盤分區和檔案系統之間添加的一個邏輯層,來為檔案系統屏蔽下層磁盤分區布局,提供一個抽象的盤卷,在盤卷上建立檔案系統。
如下圖所示PV、VG、LV三者關系:
- Lvm相關管理指令
裝置檔案名:
/dev/卷組名/邏輯卷名 或 /dev/mapper/卷組名-邏輯卷名
實體卷管理:pv
pvcreate(建立pv), pvremove(移除pv), pvmove(移除卷内資料), pvscan(顯示所有的pv卷), pvs(檢視pv卷簡要資訊), pvdisplay (看pv卷詳細資訊)
卷組管理:vg
vgcreate(建立vg), vgremove(移除vg), vgs(檢視vg卷簡要資訊), vgdisplay (檢視vg卷詳細資訊), vgextend(擴充vg卷組), vgreduce(縮減vg卷組), vgrename (改名)
# vgcreate -s PE_size 指定PE的大小 ,預設是4M
邏輯卷管理:lv
lvcreate, lvremove, lvs, lvdisplay , lvextend(擴充lv卷組) , lvreduce(縮減lv卷組)
# lvcreate 建立lv邏輯卷
-n 指定lv名稱
-L 邏輯卷大小
-s 建立快照
-p 指定模式
# lvextend 擴充lv大小
-L [+] 5G 擴充[了]到5G
擷取以上指令幫助方法: # command -h ,例: #lvcreate -h
配置管理LVM實驗(邏輯卷管理)
系統環境:
系統:Centos 7.4 最小化安裝
LVM管理工具:lvm2-2.02.171-8.el7.x86_64
磁盤分區:挂載/dev/sdb 、/dev/sdc 、/dev/sdd、/dev/sde 、/dev/sdf、 /dev/sdg 共6塊磁盤
實驗目的:
1、通過LVM管理工具,分别建立pv、vg 和lvm。
2、模拟擴充和縮減LV,模拟擴充或縮減VG
3、建立lv快照
4、解除安裝LVM,删除LVM
實驗步驟:
一、設定磁盤(虛拟機中增加6塊10G磁盤),安裝LVM 管理工具。
1、在Vmware 虛拟機中,增加6塊磁盤 。
2、檢視系統版本,驗證lvm*管理工具是否安裝 并檢視磁盤資訊
[root@study ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@study ~]# rpm -qa |grep lvm* 确認是否安裝lvm管理工具
lvm2-libs-2.02.171-8.el7.x86_64
lvm2-2.02.171-8.el7.x86_64
[root@study ~]# fdisk -l | grep "^Disk./dev"
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectors
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sde: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdf: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdg: 10.7 GB, 10737418240 bytes, 20971520 sectors
二、對增加的磁盤進行分區并修改分區類型為8e(Linux LVM),并驗證分區結果
[root@study ~]# echo 'n
> p
> 1
>
>
> t
> 8e
> w '|fdisk /dev/sdb 為/dev/sdb磁盤建立分區1 ,配置設定分區大小為磁盤總空間。并調整類型為8e(LVM)
[root@study ~]# fdisk -l | grep "LVM$" 驗證磁盤分區結果
/dev/sda3 12584960 251658239 119536640 8e Linux LVM
/dev/sdb1 2048 20971519 10484736 8e Linux LVM
/dev/sdc1 2048 20971519 10484736 8e Linux LVM
/dev/sdd1 2048 20971519 10484736 8e Linux LVM
/dev/sde1 2048 20971519 10484736 8e Linux LVM
/dev/sdf1 2048 20971519 10484736 8e Linux LVM
/dev/sdg1 2048 20971519 10484736 8e Linux LVM
[root@study ~]# reboot 核心重讀磁盤分區
[root@study ~]# cat /proc/partitions | grep "1$" 驗證核心是否加載了磁盤分區
8 1 2097152 sda1
8 17 10484736 sdb1
8 33 10484736 sdc1
8 49 10484736 sdd1
8 65 10484736 sde1
8 81 10484736 sdf1
8 97 10484736 sdg1
三、建立PV 實體卷
[root@study ~]# pvcreate /dev/sd{b..e}1 建立pv實體卷
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc1" successfully created.
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sde1" successfully created.
[root@study ~]# pvs 檢視pv狀态資訊
PV VG Fmt Attr PSize PFree
/dev/sda3 VG lvm2 a-- <114.00g <69.00g
/dev/sdb1 lvm2 --- <10.00g <10.00g
/dev/sdc1 lvm2 --- <10.00g <10.00g
/dev/sdd1 lvm2 --- <10.00g <10.00g
/dev/sde1 lvm2 --- <10.00g <10.00g
[root@study ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda3
VG Name VG
PV Size <114.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 29183
Free PE 17663
Allocated PE 11520
PV UUID 2Ksdp4-23Ia-jnvA-BeO4-31O2-chlO-I2CQTc
"/dev/sdd1" is a new physical volume of "<10.00 GiB"
--- NEW Physical volume ---
...
四、建立myvg 卷組 ,指定PE大小為16M
[root@study ~]# vgcreate /dev/myvg -s 16M /dev/sd{b..e}1 建立myvg1卷組,并指定PE大小為16M
Volume group "myvg" successfully created
[root@study dev]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 4 0 0 wz--n- <39.94g <39.94g
[root@study dev]# pvs 檢視pv狀态資訊
PV VG Fmt Attr PSize PFree
/dev/sdb1 myvg lvm2 a-- 9.98g 9.98g
/dev/sdc1 myvg lvm2 a-- 9.98g 9.98g
/dev/sdd1 myvg lvm2 a-- 9.98g 9.98g
/dev/sde1 myvg lvm2 a-- 9.98g 9.98g
五、建立mylv 邏輯卷并檢視pv,vg及lv狀态, 格式化lv邏輯卷并實作開機挂載
[root@study dev]# lvcreate -n mylv -L 20G myvg 從myvg 卷組中配置設定20G并建立mylv邏輯卷;-n 指定LVM名字 ,-L 配置設定容量大小
[root@study dev]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 20.00g
[root@study dev]# lvdisplay 檢視lv狀态資訊
...
--- Logical volume ---
LV Path /dev/myvg/mylv
LV Name mylv
...
[root@study dev]# ls /dev/myvg/
mylv
[root@study dev]# mke2fs -t ext4 -m 2 -L mylvdata /dev/mapper/myvg-mylv 建立檔案系統
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=mylvdata
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
104857 blocks (2.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 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, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@study dev]# mount /dev/mapper/myvg-mylv /mylv/ 挂載
[root@study dev]# df -h | grep "^/dev"
/dev/mapper/VG-root 15G 1.2G 13G 9% /
/dev/sda1 2.0G 116M 1.7G 7% /boot
/dev/mapper/VG-home 20G 45M 19G 1% /home
/dev/mapper/VG-var 9.8G 200M 9.1G 3% /var
/dev/mapper/myvg-mylv 20G 45M 20G 1% /mylv
[root@study dev]# vi /etc/fstab ## 配置開機自動挂載
#
...
/dev/myvg/mylv /mylv ext4 defaults 0 2
六、擴充或縮減mylv 邏輯卷
LVM最大的優勢是可以對磁盤進行動态管理,而且不會丢失現有的資料。
1、擴充LVM的思路:
先确定擴充的大小,并確定所屬的卷組有足夠的剩餘空間;
解除安裝邏輯卷umount ;通過指令e2fsck檢查資料 ;
擴充實體邊界 ,reseize2fs 擴充邏輯邊界
[root@study ~]# cp -af /boot/ /mylv/
[root@study ~]# ls /mylv/
boot lost+found
[root@study ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
...
mylv myvg -wi-a----- 20.00g
[root@study ~]# df -lh
..
/dev/mapper/myvg-mylv 20G 154M 19G 1% /mylv
...
[root@study ~]# vgs 確定剩餘空間 ,擴充的大小必須小于卷組剩餘空間大小,myvg剩餘vg大小為19.94G
VG #PV #LV #SN Attr VSize VFree
myvg 4 1 0 wz--n- <39.94g <19.94g
[root@study ~]# umount /mylv/ 解除安裝磁盤分區/mylv/
[root@study ~]# e2fsck -fy /dev/mapper/myvg-mylv 檢查并修複磁盤
e2fsck 1.42.9 (28-Dec-2013)
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
mylvdata: 338/1310720 files (0.3% non-contiguous), 154377/5242880 blocks
[root@study ~]# lvextend -L +5G /dev/mapper/myvg-mylv 為LV邏輯卷擴充增加5G空間
Size of logical volume myvg/mylv changed from 20.00 GiB (1280 extents) to 25.00 GiB (1600 extents).
Logical volume myvg/mylv successfully resized.
[root@study ~]# lvs lv卷增加到25G空間
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
...
mylv myvg -wi-ao---- 25.00g
[root@study ~]# resize2fs /dev/mapper/myvg-mylv ##為/dev/mapper/myvg-mylv擴充邏輯邊界
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/myvg-mylv is mounted on /mylv; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 4
The filesystem on /dev/mapper/myvg-mylv is now 6553600 blocks long.
[root@study ~]# df -lh 檢視磁盤大小
Filesystem Size Used Avail Use% Mounted on
...
/dev/mapper/myvg-mylv 25G 154M 24G 1% /mylv
[root@study ~]# ls /mylv/ 磁盤資料依然存在
boot lost+found
2、縮減LVM思路:
解除安裝邏輯卷umount ;通過指令e2fsck檢查lv邏輯卷 ;
縮減LVM邏輯卷邏輯邊界(確定縮減後的空間大小依然能存儲原有的所有資料);
縮減實體邊界;重新挂載;
[root@study ~]# lvs 确認lv卷空間大小
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
...
mylv myvg -wi-ao---- 25.00g
[root@study ~]# df -lh ##檢視磁盤大小
Filesystem Size Used Avail Use% Mounted on
...
/dev/mapper/myvg-mylv 25G 154M 24G 1% /mylv
[root@study ~]# umount /dev/myvg/mylv
[root@study ~]# e2fsck -fy /dev/mapper/myvg-mylv 強制檢查檔案系統; -f 強制
e2fsck 1.42.9 (28-Dec-2013)
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
mylvdata: 338/1638400 files (0.3% non-contiguous), 174937/6553600 blocks
[root@study ~]# resize2fs /dev/mapper/myvg-mylv 15G 縮減邏輯邊界空間大小為15G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/myvg-mylv to 3932160 (4k) blocks.
The filesystem on /dev/mapper/myvg-mylv is now 3932160 blocks long.
[root@study ~]# lvreduce -L 15G /dev/mapper/myvg-mylv 縮減lv卷大小為15G
WARNING: Reducing active logical volume to 15.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 25.00 GiB (1600 extents) to 15.00 GiB (960 extents).
Logical volume myvg/mylv successfully resized.
[root@study ~]# mount /dev/mapper/myvg-mylv /mylv/
[root@study ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
...
/dev/mapper/myvg-mylv 15G 150M 15G 2% /mylv
[root@study ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
...
mylv myvg -wi-ao---- 15.00g
七、擴充或縮減myvg 卷組
1、擴充vg卷組思路
準備要添加的實體卷;
添加實體卷至卷組中;
# vgextend vg_name /path/to/pv_devcie
[root@study ~]# pvcreate /dev/sd{f,g}1
Physical volume "/dev/sdf1" successfully created.
Physical volume "/dev/sdg1" successfully created.
[root@study ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VG 1 3 0 wz--n- <114.00g <69.00g
myvg 4 1 0 wz--n- <39.94g <24.94g
[root@study ~]# vgextend myvg /dev/sd{g,f}1 擴充2個磁盤分區到myvg卷組
Volume group "myvg" successfully extended
[root@study ~]# vgs 卷組大小增加20G空間
VG #PV #LV #SN Attr VSize VFree
VG 1 3 0 wz--n- <114.00g <69.00g
myvg 6 1 0 wz--n- <59.91g <44.91g
2、縮減vg卷組思路
去頂要移除的實體卷的總空間大小,要小于vg目前的空閑空間大小;
将要移除的實體卷上的資料移動至其他PV;
# pvmove /path/to/pv_device
縮減vg;
# vgreduce vg_name /path/to/pv_device
[root@study ~]# vgs ##磁盤卷組空閑free空間為44.91G
VG #PV #LV #SN Attr VSize VFree
VG 1 3 0 wz--n- <114.00g <69.00g
myvg 6 1 0 wz--n- <59.91g <44.91g
[root@study ~]# pvs ## 确認分區/dev/sdb1 和分區/dev/sdc1分區被使用,存有資料
PV VG Fmt Attr PSize PFree
/dev/sda3 VG lvm2 a-- <114.00g <69.00g
/dev/sdb1 myvg lvm2 a-- 9.98g 0
/dev/sdc1 myvg lvm2 a-- 9.98g <4.97g
/dev/sdd1 myvg lvm2 a-- 9.98g 9.98g
/dev/sde1 myvg lvm2 a-- 9.98g 9.98g
/dev/sdf1 myvg lvm2 a-- 9.98g 9.98g
/dev/sdg1 myvg lvm2 a-- 9.98g 9.98g
[root@study ~]# pvmove /dev/sdf1 ##轉移資料
No data to move for myvg
[root@study ~]# pvmove /dev/sdg1
No data to move for myvg
[root@study ~]# vgreduce myvg /dev/sd{f,g}1 縮減vg卷組,删除分區/dev/sdf1 和分區/dev/sdg1
Removed "/dev/sdg1" from volume group "myvg"
Removed "/dev/sdf1" from volume group "myvg"
[root@study ~]# pvremove /dev/sd{g,f}1 删除pv卷
Labels on physical volume "/dev/sdg1" successfully wiped.
Labels on physical volume "/dev/sdf1" successfully wiped.
八、建立LVM快照卷,完成資料備份及還原
1、實作思路
建立快照;
# lvcreate -s -L size -n Name -p r /path/to/original_lv_device
挂載;
# mount /dev/mapper/myvg_name /media 例 # mount /dev/mapper/myvg-test--snap /media/
把挂載資料備份;
# tar -zcf /root/media.tar.gz /media/*
解除安裝快照卷 ,移除快照卷;
# lvremove /dev/myvg/test-snap
模拟删除lv資料,通過快照資料進行還原;
[root@study ~]# lvcreate -s -L 10G -n mylvspare -p r /dev/mapper/myvg-mylv
Using default stripesize 64.00 KiB.
Logical volume "mylvspare" created.
[root@study ~]# mount /dev/mapper/myvg-mylvspare /media/
mount: /dev/mapper/myvg-mylvspare is write-protected, mounting read-only
[root@study ~]# ls /media/
boot lost+found
[root@study ~]# tar -zcf /root/spare.tar.gz /media/*
tar: Removing leading `/' from member names
[root@study ~]# ls -lh
total 102M
-rw-------. 1 root root 1.8K Jan 28 12:33 anaconda-ks.cfg
drwxrwxr-x. 2 root root 36K Sep 5 21:38 Packages
-rw-r--r--. 1 root root 102M Feb 4 18:11 spare.tar.gz
[root@study ~]# umount /dev/mapper/myvg-mylvspare
[root@study ~]# lvremove /dev/mapper/myvg-mylvspare
Do you really want to remove active logical volume myvg/mylvspare? [y/n]: y
Logical volume "mylvspare" successfully removed
[root@study ~]# rm -rf /mylv/boot/ ##模拟删除LV卷中資料,通過備份的快照資料進行還原
[root@study mylv]# cd /root/
[root@study ~]# ls
anaconda-ks.cfg Packages spare.tar.gz
[root@study ~]# tar -zxf spare.tar.gz
[root@study ~]# ls
anaconda-ks.cfg media Packages spare.tar.gz
[root@study mylv]# cp -af /root/media/* /mylv/
[root@study mylv]# ls ## 通過快照資料進行資料還原
config-3.10.0-693.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-aa42d80ce1774acf8f5de007d85e5ef1.img
initramfs-3.10.0-693.el7.x86_64.img
initramfs-3.10.0-693.el7.x86_64kdump.img
initrd-plymouth.img
lost+found
mylv
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-0-rescue-aa42d80ce1774acf8f5de007d85e5ef1
vmlinuz-3.10.0-693.el7.x86_64
九、解除安裝删除lVM
[root@study media]# umount /dev/mapper/myvg-mylv
[root@study media]# lvremove /dev/mapper/myvg-mylv
Do you really want to remove active logical volume myvg/mylv? [y/n]: y
Logical volume "mylv" successfully removed
[root@study media]# vgremove myvg
Volume group "myvg" successfully removed
[root@study media]# pvremove /dev/sd{b..e}1
Labels on physical volume "/dev/sdb1" successfully wiped.
Labels on physical volume "/dev/sdc1" successfully wiped.
Labels on physical volume "/dev/sdd1" successfully wiped.
Labels on physical volume "/dev/sde1" successfully wiped.