一、簡介
LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。
LVM的工作原理是通過將底層的物理硬盤抽象的封裝起來,然后以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,我們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其通過對底層的硬盤進行封裝,當我們對底層的物理硬盤進行操作時,其不再是針對于分區進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁盤管理操作。
LVM最大的特點就是可以對磁盤進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的數據。如果我們新增加了硬盤,其也不會改變現有上層的邏輯卷。作為一個動態磁盤管理機制,邏輯卷技術大大提高了磁盤管理的靈活性。
基本的邏輯卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在邏輯卷管理中處于最底層,它可以是實際物理硬盤上的分區,也可以是整個物理硬盤,也可以是raid設備。
VG(Volumne Group)- 卷組
卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之后可動態添加物理卷到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。
LV(Logical Volume)- 邏輯卷
邏輯卷建立在卷組之上,卷組中的未分配空間可以用于建立新的邏輯卷,邏輯卷建立后可以動態地擴展和縮小空間。系統中的多個邏輯卷可以屬于同一個卷組,也可以屬于不同的多個卷組。
關系圖如下:
PE(Physical Extent)- 物理塊
LVM 默認使用4MB的PE區塊,而LVM的LV最多僅能含有65534個PE (lvm1 的格式),因此默認的LVM的LV最大容量為4M*65534/(1024M/G)=256G。PE是整個LVM 最小的儲存區塊,也就是說,其實我們的資料都是由寫入PE 來處理的。簡單的說,這個PE 就有點像文件系統里面的block 大小。所以調整PE 會影響到LVM 的最大容量!
二,系統環境及磁盤準備
系統平臺:CentOS release 7
LVM版本:lvm2-2.02.130-5.el7.x86_64
設備類型:分區、物理磁盤
磁盤準備:新增一塊磁盤做實驗
三,安裝LVM管理工具
1,檢查系統中是否安裝了LVM管理工具
# rpm -qa | grep lvm
2,如果未安裝,則使用yum方式安裝
# yum -y install lvm*
[root@localhost ~]# rpm -qa lvm2 lvm2-2.02.130-5.el7.x86_64
四,新建一個分區
1,使用/dev/sdb模擬分區
# fdisk /dev/sdb
文件系統類型為:8e (Linux LVM)
# fdisk -l /dev/sdb
五,創建PV
命令介紹:
# pvcreate 將物理分區新建成為PV
# pvscan 查詢目前系統里面任何具有PV的磁盤
# pvdisplay 顯示出目前系統上面的PV狀態
# pvremove 將PV屬性移除,讓該分區不具有PV屬性
1,查詢目前系統里面是否有PV的磁盤
2,將/dev/sdb5-/dev/sdb8新建成為PV格式
3,查詢目前系統里面任何具有PV的磁盤
六,創建VG
命令介紹:
# vgcreate 新建VG
vgcreate [-s N[mgt]] VG名稱 VG名稱
-s 接PE的大小
# vgscan 查詢目前系統里面是否有VG的磁盤
# vgdisplay 顯示出目前系統上面的VG狀態
# vgextend 在VG內增加額外的PV
# vgreduce 在VG內刪除PV
# vgchange 設置VG是否啟動(active)
# vgremove 刪除一個VG
PV的名稱是分區的設備文件名字,VG名稱可以自定義的,我將VG的名稱定義為myvg
1,將/dev/sdb5-/dev/sdb7新建為一個VG,且指定PE為15MB
2,查看系統上的VG狀態
3,顯示出目前系統上面的VG狀態
# vgdisplay
4,新增PV給myvg
5,顯示出目前系統上面的VG狀態
# vgdisplay
七,創建LV
命令介紹:
# lvcreate 新建LV
lvcreate [-L N[mgt]] [-n LV名稱] VG名稱
lvcreate [-l N] [-n LV名稱] VG名稱
注意: -L 后面接容量,最小單位為PE, 數量必須是PE的倍數,若不相符,系統會自行計算最相近的容量
-l 后面接PE的“個數”,而不是數量
-n 后面接LV的名稱
# lvscan 查詢系統LV
# lvdisplay 顯示系統LV狀態
# lvextend 在LV里增加容量
# lvreduce 在LV里減少容量
# lvremove 刪除一個LV
# lvresize 對LV進行容量大小的調整
1,將整個myvg全部分配給mglv
實驗中報錯,說是空閑空間不夠,可以接受545個,但只有544個,其原因是-L選項后面接的容量必須是PE的倍數,一個PE的容量為15M,總容量為7.97G,不能被15整除,故報錯,下面的是 解決方法,只要將總容量改為能被15整除的數就好,因為PE的大小已經確定,VG的容量是由若干個PE組成的,故VG的大小可以改變
2,查看LV情況
3,進行格式化與掛載
# mke2fs -t ext4 /dev/myvg/mglv
# mkdir /mnt/lvm
# mount /dev/myvg/mglv /mnt/lvm
4,復制文件
八,放大LV容量
步驟:
1,利用fdisk設置新的額具有8e /systemID的分區
2,利用pvcreate構建PV
3,利用vgextend將PV加進myvg
4,利用lvresize將新加入的PV內的PE加入mglv中
5,通過resize2fs將文件系統的容量增加
1,原先已經創建好/dev/sdb9分區
2,新建新的PV
3,增加VG容量
4,增加LV容量
5,查看
6,將LV的容量擴充到整個文件系統
# dumpe2fs /dev/myvg/mglv 查看文件系統內的superblock記錄情況
# resize2fs [-f] [device] [size] 將LV的容量擴充到整個文件系統
7,查看
九,縮小LV容量
1,先卸載
2,降低文件系統的容量
3,重新掛載并查看容量大小
4,降低LV容量,抽離/dev/sdb5,這個PV有136個PE
5,查看容量大小
6,將/dev/sdb5從mgvg中移除
總結:
1,LVM最主要的用處是在實現一個可以彈性調整容量的文件系統上,而不是在新建一個性能為主的磁盤上。LVM默認的讀寫模式是線性模式
2,實現的流程:
3,刪除系統內的LVM
1)先卸載系統上面的 LVM 文件系統(包括快照與所有LV)
2)使用 lvremove 刪除 LV
3)使用 vgchange -an VGname 讓 VGname 這個 VG 不具有 Active 的標志
4)使用 vgremove 刪除VG
5)使用 pvremove 刪除PV
6)使用 fdisk 將 ID 修改回來
4,PV, VG, LV 常用命令的總結
作業:
1:創建一個可用空間為1G的RAID1設備,文件系統為ext4,有一個空閑盤,開機可自動掛載至/backup目錄
[root@localhost ~]# fdisk /dev/sdb fdisk /dev/sdc fdisk /dev/sdd /dev/sdb1 20975616 23072767 1048576 fd Linux raid autodetect /dev/sdc1 23074816 25171967 1048576 fd Linux raid autodetect /dev/sdd1 25174016 27271167 1048576 fd Linux raid autodetect [root@localhost ~]# mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 Number Major Minor RaidDevice State 0 8 21 0 active sync /dev/sdb1 1 8 22 1 active sync /dev/sdc1 2 8 23 - spare /dev/sdd1 [root@localhost ~]# mke2fs -j /dev/md0 [root@localhost ~]# mke2fs -t ext4 /dev/md0 [root@localhost ~]# mount /dev/md0 /backup [root@localhost ~]# cat /etc/fstab UUID=1026f9f2-27e5-4e34-be98-6e75eb1e633d /backup ext4 defaults 0 0
2:創建由三塊硬盤組成的可用空間為2G的RAID5設備,要求其chunk大小為256k,文件系統為ext4,開機可自動掛載至/mydata目錄
[root@localhost ~]# fdisk /dev/sdb fdisk /dev/sdc fdisk /dev/sdd /dev/sdb5 20975616 25169919 2097152 fd Linux raid autodetect /dev/sdc6 25171968 29366271 2097152 fd Linux raid autodetect /dev/sdd7 29368320 33562623 2097152 fd Linux raid autodetect [root@localhost ~]# mdadm -C /dev/md1 -a yes -l 5 -n 3 -c 256 /dev/sdb5 /dev/sdc6 /dev/sdd7 [root@localhost ~]# mke2fs -j /dev/md1 [root@localhost ~]# mke2fs -t ext4 /dev/md1 [root@localhost ~]# mount /dev/md1 /mydata [root@localhost ~]# mdadm -D /dev/md1 [root@localhost ~]# cat /etc/fstab UUID=3ef9776c-97dc-4b28-991b-43086a06b3ed /mydata ext4 defaults 0 0
1、創建一個至少有兩個PV組成的大小為20G的名為testvg的VG;要求PE大小為16MB,而后在卷組中創建大小為5G的邏輯卷testlv;掛載至/users目錄
[root@localhost ~]# fdisk /dev/sdb [root@localhost ~]# pvcreate /dev/sdb1 [root@localhost ~]# pvcreate /dev/sdb2 [root@localhost ~]# vgcreate -s 16M testvg /dev/sdb{1,2} [root@localhost ~]# lvcreate -n textlv -L 5G /dev/testvg [root@localhost ~]# mkfs.ext4 /dev/testvg/testlv [root@localhost ~]# mkdir /users [root@localhost ~]# mount /dev/testvg/testlv /users/
2、新建用戶archlinux,要求其家目錄為/users/archlinux,后su切換至archlinux用戶,復制/etc/pam.d目錄至自己的家目錄中
[root@localhost ~]# useradd -d /users/archlinux archlinux [root@localhost ~]# su - archlinux [archlinux@localhost ~]$ pwd /users/archlinux [archlinux@localhost ~]$ cp -r /etc/pam.d . [archlinux@localhost ~]# ll pam.d/ | wc 46 419 2386
3、擴展testlv至7G,要求archlinux用戶的文件不能丟失
[root@localhost ~]# lvextend -L 7G /dev/testvg/textlv [root@localhost ~]# resize2fs /dev/testvg/textlv [root@localhost ~]# su - archlinux [archlinux@localhost ~]$ ll pam.d/ | wc 46 419 2836
4、收縮testlv至3G,要求archlinux用戶的文件不能丟失
[root@localhost ~]# umount /dev/testvg/testlv [root@localhost ~]# e2fsck -f /dev/testvg/testlv [root@localhost ~]# resize2fs /dev/testvg/testlv 3G [root@localhost ~]# lvreduce -L 3G /dev/testvg/testlv [root@localhost ~]# mount /dev/testvg/testlv /users/ [root@localhost ~]# ll /users/archlinux/pam.d/ | wc
46 419 2836
5、對testlv創建快照,并嘗試基于快照備份數據,驗正快照的功能
[root@localhost ~]# lvcreate -L 1G -p r -s -n testlv-snap /dev/testvg/testl [root@localhost ~]# mkdir /mnt/snap [root@localhost ~]# mount /dev/testvg/testlv-snap /mnt/snap/ [root@localhost ~]# rm -f /users/archlinux/pam.d/c* [root@localhost ~]# ls /users/archlinux/pam.d/c* ls: cannot access /users/archlinux/pam.d/c*: No such file or directory [root@localhost ~]# ls /mnt/snap/archlinux/pam.d/c* /mnt/snap/archlinux/pam.d/chfn /mnt/snap/archlinux/pam.d/crond /mnt/snap/archlinux/pam.d/chsh /mnt/snap/archlinux/pam.d/cups /mnt/snap/archlinux/pam.d/config-util
原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/43716