摘要: Linux用戶安裝Linux操做系統時遇到的一個最多見的難以決定的問題就是如何正確地給評估各分區大小,以分配合適的硬盤空間。而遇到出現某個分區空間耗盡時,解決的方法一般是使用符號連接,或者使用調整分區大小的工具(好比Patition Magic等),但這都只是暫時解決辦法,沒有根本解決問題。隨着Linux的邏輯盤卷管理功能的出現,這些問題都迎刃而解,本文就深刻討論LVM技術,使得用戶在無需停機的狀況下方便地調整各個分區大小。web
每一個Linux使用者在安裝Linux時都會遇到這樣的困境:在爲系統分區時,如何精確評估和分配各個硬盤分區的容量,由於系統管理員不但要考慮到當前某個分區須要的容量,還要預見該分區之後可能須要的容量的最大值。由於若是估計不許確,當遇到某個分區不夠用時管理員可能甚至要備份整個系統、清除硬盤、從新對硬盤分區,而後恢復數據到新分區。服務器
雖然如今有不少動態調整磁盤的工具可使用,例如Partation Magic等等,可是它並不能徹底解決問題,由於某個分區可能會再次被耗盡;另一個方面這須要從新引導系統才能實現,對於不少關鍵的服務器,停機是不可接受的,並且對於添加新硬盤,但願一個能跨越多個硬盤驅動器的文件系統時,分區調整程序就不能解決問題。網絡
所以完美的解決方法應該是在零停機前提下能夠自如對文件系統的大小進行調整,能夠方便實現文件系統跨越不一樣磁盤和分區。幸運的是Linux提供的邏輯盤卷管理(LVM,Logical Volume Manager)機制就是一個完美的解決方案。工具
LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是創建在硬盤和分區之上的一個邏輯層,來提升磁盤分區管理的靈活性。經過LVM系統管理員能夠輕鬆管理磁盤分區,如:將若干個磁盤分區鏈接爲一個整塊的卷組(volume group),造成一個存儲池。管理員能夠在卷組上隨意建立邏輯卷組(logical volumes),並進一步在邏輯卷組上建立文件系統。管理員經過LVM能夠方便的調整存儲卷組的大小,而且能夠對磁盤存儲按照組的方式進行命名、管理和分配,例如按照使用用途進行定義:「development」和「sales」,而不是使用物理磁盤名「sda」和「sdb」。並且當系統添加了新的磁盤,經過LVM管理員就沒必要將磁盤的文件移動到新的磁盤上以充分利用新的存儲空間,而是直接擴展文件系統跨越磁盤便可。佈局
前面談到,LVM是在磁盤分區和文件系統之間添加的一個邏輯層,來爲文件系統屏蔽下層磁盤分區佈局,提供一個抽象的盤卷,在盤捲上創建文件系統。首先咱們討論如下幾個LVM術語:spa
首先能夠看到,物理卷(PV)被由大小等同的基本單元PE組成。操作系統
一個卷組由一個或多個物理卷組成,.net
從上圖能夠看到,PE和LE有着一一對應的關係。邏輯卷創建在卷組上。邏輯卷就至關於非LVM系統的磁盤分區,能夠在其上建立文件系統。ip
下圖是磁盤分區、卷組、邏輯卷和文件系統之間的邏輯關係的示意圖:內存
和非LVM系統將包含分區信息的元數據保存在位於分區的起始位置的分區表中同樣,邏輯卷以及卷組相關的元數據也是保存在位於物理捲起始處的VGDA(卷組描述符區域)中。VGDA包括如下內容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。
系統啓動LVM時激活VG,並將VGDA加載至內存,來識別LV的實際物理存儲位置。當系統進行I/O操做時,就會根據VGDA創建的映射機制來訪問實際的物理位置。
首先肯定系統中是否安裝了lvm工具:
[root@www root]# rpm –qa|grep lvm
lvm-1.0.3-4
若是命令結果輸入相似於上例,那麼說明系統已經安裝了LVM管理工具;若是命令沒有輸出則說明沒有安裝LVM管理工具,則須要從網絡下載或者從光盤裝LVM rpm工具包。
安裝了LVM的RPM軟件包之後,要使用LVM還須要配置內核支持LVM。RedHat默認內核是支持LVM的,若是須要從新編譯內核,則須要在配置內核時,進入Multi-device Support (RAID and LVM)子菜單,選中如下兩個選項:
而後從新編譯內核,便可將LVM的支持添加到新內核中。
爲了使用LVM,要確保在系統啓動時激活LVM,幸運的是在RedHat7.0之後的版本,系統啓動腳本已經具備對激活LVM的支持,在/etc/rc.d/rc.sysinit中有如下內容:
# LVM initialization
if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
action $"Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
fi
其中關鍵是兩個命令,vgscan命令實現掃描全部磁盤獲得卷組信息,並建立文件卷組數據文件/etc/lvmtab和/etc/lvmtab.d/*;vgchange -a y命令激活系統全部卷組。
要建立一個LVM系統,通常須要通過如下步驟:
使用分區工具(如:fdisk等)建立LVM分區,方法和建立其餘通常分區的方式是同樣的,區別僅僅是LVM的分區類型爲8e。
建立物理卷的命令爲pvcreate,利用該命令將但願添加到卷組的全部分區或者磁盤建立爲物理卷。將整個磁盤建立爲物理卷的命令爲:
# pvcreate /dev/hdb
將單個分區建立爲物理卷的命令爲:
# pvcreate /dev/hda5
建立卷組的命令爲vgcreate,將使用pvcreate創建的物理卷建立爲一個完整的卷組:
# vgcreate web_document /dev/hda5 /dev/hdb
vgcreate命令第一個參數是指定該卷組的邏輯名:web_document。後面參數是指定但願添加到該卷組的全部分區和磁盤。vgcreate在建立卷組 web_document 之外,還設置使用大小爲4 MB的PE(默認爲4MB),這表示卷組上建立的全部邏輯卷都以 4 MB 爲增量單位來進行擴充或縮減。因爲內核緣由,PE大小決定了邏輯卷的最大大小,4 MB 的PE決定了單個邏輯卷最大容量爲 256 GB,若但願使用大於256G的邏輯卷則建立卷組時指定更大的PE。PE大小範圍爲8 KB 到 512 MB,而且必須老是 2 的倍數(使用-s指定,具體請參考man vgcreate)。
爲了當即使用卷組而不是從新啓動系統,可使用vgchange來激活卷組:
# vgchange -a y web_document
當系統安裝了新的磁盤並建立了新的物理卷,而要將其添加到已有卷組時,就須要使用vgextend命令:
# vgextend web_document /dev/hdc1
這裏/dev/hdc1是新的物理卷。
要從一個卷組中刪除一個物理卷,首先要確認要刪除的物理卷沒有被任何邏輯卷正在使用,就要使用pvdisplay命令察看一個該物理卷信息:
若是某個物理卷正在被邏輯卷所使用,就須要將該物理卷的數據備份到其餘地方,而後再刪除。刪除物理卷的命令爲vgreduce:
# vgreduce web_document /dev/hda1
建立邏輯卷的命令爲lvcreate:
# lvcreate -L1500 –nwww1 web_document
該命令就在卷組web_document上建立名字爲www1,大小爲1500M的邏輯卷,而且設備入口爲/dev/web_document/www1(web_document爲卷組名,www1爲邏輯卷名)。若是但願建立一個使用所有卷組的邏輯卷,則須要首先察看該卷組的PE數,而後在建立邏輯卷時指定:
# vgdisplay web_document| grep "Total PE"
Total PE 45230
# lvcreate -l 45230 web_document -n www1
筆者推薦使用reiserfs文件系統,來替代ext2和ext3:
建立了文件系統之後,就能夠加載並使用它:
# mkdir /data/wwwroot
# mount /dev/web_document/www1 /data/wwwroot
若是但願系統啓動時自動加載文件系統,則還須要在/etc/fstab中添加內容:
/dev/web_document/www1 /data/wwwroot reiserfs defaults 1 2
刪除邏輯卷之前首先須要將其卸載,而後刪除:
# umount /dev/web_document/www1
# lvremove /dev/web_document/www1
lvremove -- do you really want to remove "/dev/web_document/www1"? [y/n]: y
lvremove -- doing automatic backup of volume group "web_document"
lvremove -- logical volume "/dev/web_document/www1" successfully removed
LVM提供了方便調整邏輯卷大小的能力,擴展邏輯卷大小的命令是lvcreate:
# lvextend -L12G /dev/web_document/www1
lvextend -- extending logical volume "/dev/web_document/www1" to 12 GB
lvextend -- doing automatic backup of volume group "web_document "
lvextend -- logical volume "/dev/web_document/www1" successfully extended
上面的命令就實現將邏輯卷www1的大小擴招爲12G。
# lvextend -L+1G /dev/web_document/www1
lvextend -- extending logical volume "/dev/web_document/www1" to 13 GB
lvextend -- doing automatic backup of volume group "web_document "
lvextend -- logical volume "/dev/web_document/www1" successfully extended
上面的命令就實現將邏輯卷www1的大小增長1G。
增長了邏輯卷的容量之後,就須要修改文件系統大小以實現利用擴充的空間。筆者推薦使用reiserfs文件系統來替代ext2或者ext3。所以這裏僅僅討論reiserfs的狀況。Reiserfs文件工具提供了文件系統大小調整工具:resize_reiserfs。對於但願調整被加載的文件系統大小:
# resize_reiserfs -f /dev/web_document/www1
通常建議最好將文件系統卸載,調整大小,而後再加載:
# umount /dev/web_document/www1
# resize_reiserfs /dev/web_document/www1
# mount -treiserfs /dev/web_document/www1 /data/wwwroot
對於使用ext2或ext3文件系統的用戶能夠考慮使用工具
ext2resize。http://sourceforge.net/projects/ext2resize
十一、 減小邏輯卷大小
使用lvreduce便可實現對邏輯卷的容量,一樣須要首先將文件系統卸載:
# umount /data/wwwroot
# resize_reiserfs -s-2G /dev/web_document/www1
# lvreduce -L-2G /dev/web_document/www1
# mount -treiserfs /dev/web_document/www1 /data/wwwroot
根據上面的討論能夠看到,LVM具備很好的可伸縮性,使用起來很是方便。能夠方便地對卷組、邏輯卷的大小進行調整,更進一步調整文件系統的大小。若是但願瞭解更多信息,請參考LVM-HOWTO。