LVM是什么?
LVM即邏輯卷管理器,是Linux系統用戶對硬盤分區管理的一種機制,理論性較強,其創建的初衷是為了解決硬盤設備在創建完分區后不易修改分區大小的權限,LVM技術是在硬盤分區和文件系統之間添加了一個邏輯層,他提供了一個抽象的卷組,可以把多個硬盤進行罐組合並。這樣一來,用戶就不用擔心物理硬盤設備的底層架構布局,可以輕松實現對硬盤分區的動態調整。簡而言之,生產中我們某個分區不夠用的情況下,出來清理歷史數據外,就是調整當前數據的存儲位置,否則分區一旦滿了,就沒法工作了,而LVM技術就可以解決不用遷移原來的數據(原來的分區必須是LVM格式的),就可以隨意添加硬盤,然后向LVM分區動態添加空間,當然,也可以縮減空間。重點是原來的數據不會受到任何影響。
了解幾個概念
物理卷:PV【Physical Volume】
卷組:VG【Volume Group】
邏輯卷:LV【Logical Volume】
基本單元:PE【Physical Extent】
物理卷處於LVM中的最底層,可以將其理解為物理硬盤、硬盤分區或者RAID磁盤陣列。卷組建立在物理卷之上,一個卷組可以包含多個物理卷,而且在卷組創建之后也可以繼續向其中添加新的物理卷。邏輯卷是用卷組中空閑的資源建立的,而且物理卷在建立后可以動態的擴建或者縮小紅箭。這就是LVM的核心理念。
部署邏輯卷
首先我們看看物理卷、卷組和邏輯卷的常用命令。
功能/命令 | 物理卷管理 | 卷組管理 | 邏輯卷管理 |
掃描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
顯示 | pvdisplay | vgdisplay | lvdisplay |
刪除 | pvremove | vgremove | lvremove |
擴展 | vgextend | lvextend | |
縮小 | vgreduce | lvreduce |
操作步驟
首先我們准備兩塊5GB的硬盤,在虛擬機里添加即可,分別是/dev/sdb和/dev/sdc兩塊硬盤。
1、讓新建家的兩塊硬盤設備支持LVM技術。(注意,當前操作系統是Centos7.7 最小化安裝的沒有lvm相關命令,需要yum install -y lvm2進行安裝)
#pvcreate /dev/sdb /dev/sdc
2、把兩塊硬盤設備加入到storage卷組中,然后查看卷組的狀態。
#vgcreate storage /dev/sdb /dev/sdc
#vgdisplay
3、切割出一個6GB的邏輯卷設備。
這里需要注意切割單位的問題。在對邏輯卷進行切割時候有兩種計量單位。第一種是以容量為單位,所使用的參數是-L。例如,在使用-L 6G生成一個大小等於6G的邏輯卷。另外一種是以基本單位的個數為單位,所使用的參數為-l。每個單元的到校默認為4MB。例如使用-l 1000可以生成一個大小為4MBx1000=4000MB的邏輯卷。后者顯然有點繁瑣,我們就用-L計量單位為各位演示下面的操作。
# lvcreate -n vo -L 6G storage
查看邏輯卷
# lvdisplay
4、把生成好的邏輯卷進行格式化,然后掛載使用,這里我們用ext4格式為各位演示。Linux系統會把LVM中的邏輯卷設備存放在/dev設備目錄中(實際上是做了一個符號鏈接),同時會以卷組的名稱來建立一個目錄,其中保存了邏輯卷的設備映射文件(即/dev/卷組名稱、邏輯卷名稱)
# mkfs.ext4 /dev/storage/vo
創建掛載目錄,並掛載邏輯卷
# mkdir /lvmtest
# mount /dev/storage/vo /lvmtest/
5、查看掛載狀態,並寫入掛載配置文件,使其永久生效。
# vim /etc/fstab (追加至最后一條)
/dev/storage/vo /lvmtest ext4 defaults 0 0
驗證
擴容邏輯卷
前面我們掛載了兩塊5GB的硬盤,我們初始給LVM的使用空間是6GB,我們最大可以擴容到10GB,下面進行擴容。
1、首先需要卸載之前的lvm掛載盤。
# umount /lvmtest/
2、把前面LVM的6GB擴容至9GB。
# lvextend -L 9G /dev/storage/vo
3、檢查硬盤完整性,並重置硬盤容量。
# e2fsck -f /dev/storage/vo
重置硬盤容量,這一步很重要,如果不重置LVM容量將還是6GB。下面是ext4的重置方法,xfs格式需要用命令:# xfs_growfs /dev/storage/vo
# resize2fs /dev/storage/vo
最后,我們掛載一下,然后驗證LVM容量。
縮小邏輯卷
相較於擴容邏輯卷,在對邏輯卷進行縮減容量操作時,其丟失數據的風險更大。所以在生產環境中執行相應操作時,一定要提前備份好數據。另外Linux系統規定,在對LVM邏輯卷進行縮容操作之前,要先檢查文件系統的完整性(也是為了保證數據安全)。在執行縮容操作前記得先把文件系統卸載掉。
1、卸載。
# umount /lvmtest/
2、檢查文件系統的完整性。
# e2fsck -f /dev/storage/vo
3、把邏輯卷vo的容量縮減到5GB。
# resize2fs /dev/storage/vo 5G
4、重新掛載文件系統並查看系統狀態。
# mount -a
#df -h
刪除邏輯卷
生產環境中想要重新部署LVM或者不再繼續使用LVM時,則需要執行LVM的刪除操作。為此,需要提前備份好重要的數據信息,然后依次刪除邏輯卷、卷組、物理卷設備,這個順序不可顛覆。
1、取消邏輯卷與目錄的掛載關聯,刪除配置文件中的永久生效(/etc/fstab下的掛載記錄)的設備參數。
#umount /lvmtest
#vim /etc/fstab,進來刪除或者注釋LVM掛載記錄。
2、刪除邏輯卷設備,需要輸入y來確認操作。
# lvremove /dev/storage/vo
3、刪除卷組,此處只寫卷組名稱即可,不需要設備的絕對路徑。
# vgremove storage
4、刪除物理卷設備。
# pvremove /dev/sdb /dev/sdc
5、最后一步,在上述操作完成沒有報錯之后,再執行lvdisplay、vgdisplay、pvdisplay命令來查看LVM的信息時就不會再看到信息了。
問題一:
如果我們之前已經完成了/dev/sdb和/dev/sdc兩塊硬盤的操作,比如我們兩塊硬盤的總容量是10GB,我們已經用了9GB,我們又想新加一塊硬盤怎么操作呢?如下:
現狀:
開始:
這里我們用的是虛擬機,添加硬盤我們就不再贅述,我們直接開始。
1、查看硬盤信息。
2、讓新加的sdd硬盤設備支持LVM技術。
# pvcreate /dev/sdd
3、 把sdd這塊硬盤設備加入到storage卷組中,然后查看卷組狀態。
# vgextend storage /dev/sdd
# vgdisplay
如下圖所示,已經添加成功。
4、擴容、擴容、擴容,給它擴容到14GB,記住每次擴容縮容都必須先卸載文件系統。
# umount /lvmtest/
# lvextend -L 14G /dev/storage/vo
檢查硬盤完整性,並重置硬盤容量。
# e2fsck -f /dev/storage/vo
# resize2fs /dev/storage/vo
5、最后掛載文件系統,並驗證效果。
邏輯卷快照
LVM具備“快照卷”功能,功能類似於VMware workstation的快照功能,可以對某個邏輯卷設備做一次快照,如果日后發現數據改錯了,可以利用做好的虧按照進行覆蓋還原,不過它有兩個特點。
1、虧按照卷的容量必須等同於邏輯卷的容量。
2、快照卷僅此一次有效,一旦執行還原操作后則會被立即自動刪除。
3、那么問題來了,比如我卷組總共空間2TB,當前數據已經有1.5TB,我得做一個一樣大的卷組,顯然當前的這個卷組是不可能再有1.5TB的空間了,除非擴容,很浪費空間。據說快照和邏輯卷必須是在同一卷組上。
4、這個東西憑我個人的經驗,生產過程中基本用不到,阿里雲有快照那個更安全快捷。本地有本地備份和異地備份文件,有興趣可以自己了解一下。