摘要:Linux用戶安裝Linux操作系統時遇到的一個最常見的難以決定的問題就是如何正確地給評估各分區大小,以分配合適的硬盤空間。而遇到出現某個分區空間耗盡時,解決的方法通常是使用符號鏈接,或者使用調整分區大小的工具(比如PatitionMagic等),但這都只是暫時解決辦法,沒有根本解決問題。隨著Linux的邏輯盤卷管理功能的出現,這些問題都迎刃而解,本文就深入討論LVM技術,使得用戶在無需停機的情況下方便地調整各個分區大小。 一、前言 每個Linux使用者在安裝Linux時都會遇到這樣的困境:在為系統分區時,如何精確評估和分配各個硬盤分區的容量,因為系統管理員不但要考慮到當前某個分區需要的容量,還要預見該分區以後可能需要的容量的最大值。因為如果估計不准確,當遇到某個分區不夠用時管理員可能甚至要備份整個系統、清除硬盤、重新對硬盤分區,然後恢復數據到新分區。 雖然現在有很多動態調整磁盤的工具可以使用,例如PartationMagic等等,但是它並不能完全解決問題,因為某個分區可能會再次被耗盡;另外一個方面這需要重新引導系統才能實現,對於很多關鍵的服務器,停機是不可接受的,而且對於添加新硬盤,希望一個能跨越多個硬盤驅動器的文件系統時,分區調整程序就不能解決問題。 因此完美的解決方法應該是在零停機前提下可以自如對文件系統的大小進行調整,可以方便實現文件系統跨越不同磁盤和分區。幸運的是Linux提供的邏輯盤卷管理(LVM,LogicalVolumeManager)機制就是一個完美的解決方案。 LVM是邏輯盤卷管理(LogicalVolumeManager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。通過LVM系統管理員可以輕松管理磁盤分區,如:將若干個磁盤分區連接為一個整塊的卷組(volumegroup),形成一個存儲池。管理員可以在卷組上隨意創建邏輯卷組(logicalvolumes),並進一步在邏輯卷組上創建文件系統。管理員通過LVM可以方便的調整存儲卷組的大小,並且可以對磁盤存儲按照組的方式進行命名、管理和分配,例如按照使用用途進行定義:“development”和“sales”,而不是使用物理磁盤名“sda”和“sdb”。而且當系統添加了新的磁盤,通過LVM管理員就不必將磁盤的文件移動到新的磁盤上以充分利用新的存儲空間,而是直接擴展文件系統跨越磁盤即可。 二、LVM基本術語 前面談到,LVM是在磁盤分區和文件系統之間添加的一個邏輯層,來為文件系統屏蔽下層磁盤分區布局,提供一個抽象的盤卷,在盤卷上建立文件系統。首先我們討論以下幾個LVM術語: *物理存儲介質(Thephysicalmedia) 這裡指系統的存儲設備:硬盤,如:/dev/hda1、/dev/sda等等,是存儲系統最低層的存儲單元。 *物理卷(physicalvolume) 物理卷就是指硬盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。 *卷組(VolumeGroup) LVM卷組類似於非LVM系統中的物理硬盤,其由物理卷組成。可以在卷組上創建一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個物理卷組成。 *邏輯卷(logicalvolume) LVM的邏輯卷類似於非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統(比如/home或者/usr等)。 *PE(physicalextent) 每一個物理卷被劃分為稱為PE(PhysicalExtents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認為4MB。 *LE(logicalextent) 邏輯卷也被劃分為被稱為LE(LogicalExtents)的可被尋址的基本單位。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。 首先可以看到,物理卷(PV)被由大小等同的基本單元PE組成。 一個卷組由一個或多個物理卷組成。 從上圖可以看到,PE和LE有著一一對應的關系。邏輯卷建立在卷組上。邏輯卷就相當於非LVM系統的磁盤分區,可以在其上創建文件系統。 下圖是磁盤分區、卷組、邏輯卷和文件系統之間的邏輯關系的示意圖: 和非LVM系統將包含分區信息的元數據保存在位於分區的起始位置的分區表中一樣,邏輯卷以及卷組相關的元數據也是保存在位於物理卷起始處的VGDA(卷組描述符區域)中。VGDA包括以下內容:PV描述符、VG描述符、LV描述符、和一些PE描述符。 系統啟動LVM時激活VG,並將VGDA加載至內存,來識別LV的實際物理存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來訪問實際的物理位置。 三、安裝LVM 首先確定系統中是否安裝了lvm工具: [root@wwwroot]#rpm–qagreplvm lvm-1.0.3-4 如果命令結果輸入類似於上例,那麼說明系統已經安裝了LVM管理工具;如果命令沒有輸出則說明沒有安裝LVM管理工具,則需要從網絡下載或者從光盤裝LVMrpm工具包。 安裝了LVM的RPM軟件包以後,要使用LVM還需要配置內核支持LVM。RedHat默認內核是支持LVM的,如果需要重新編譯內核,則需要在配置內核時,進入Multi-deviceSupport(RAIDandLVM)子菜單,選中以下兩個選項: [*]Multipledevicesdriversupport(RAIDandLVM) <*>Logicalvolumemanager(LVM)Support 然後重新編譯內核,即可將LVM的支持添加到新內核中。 為了使用LVM,要確保在系統啟動時激活LVM,幸運的是在RedHat7.0以後的版本,系統啟動腳本已經具有對激活LVM的支持,在/etc/rc.d/rc.sysinit中有以下內容: #LVMinitialization if[-e/proc/lvm-a-x/sbin/vgchange-a-f/etc/lvmtab];then action$"SettingupLogicalVolumeManagement:"/sbin/vgscan&&/sbin/vgchange-ay fi 其中關鍵是兩個命令,vgscan命令實現掃描所有磁盤得到卷組信息,並創建文件卷組數據文件/etc/lvmtab和/etc/lvmtab.d/*;vgchange-ay命令激活系統所有卷組。 四、創建和管理LVM 要創建一個LVM系統,一般需要經過以下步驟: 1、創建分區 使用分區工具(如:fdisk等)創建LVM分區,方法和創建其他一般分區的方式是一樣的,區別僅僅是LVM的分區類型為8e。 2、創建物理卷 創建物理卷的命令為pvcreate,利用該命令將希望添加到卷組的所有分區或者磁盤創建為物理卷。將整個磁盤創建為物理卷的命令為: #pvcreate/dev/hdb 將單個分區創建為物理卷的命令為: #pvcreate/dev/hda5 3、創建卷組 創建卷組的命令為vgcreate,將使用pvcreate建立的物理卷創建為一個完整的卷組: #vgcreateweb_document/dev/hda5/dev/hdb vgcreate命令第一個參數是指定該卷組的邏輯名:web_document。後面參數是指定希望添加到該卷組的所有分區和磁盤。vgcreate在創建卷組web_document以外,還設置使用大小為4MB的PE(默認為4MB),這表示卷組上創建的所有邏輯卷都以4MB為增量單位來進行擴充或縮減。由於內核原因,PE大小決定了邏輯卷的最大大小,4MB的PE決定了單個邏輯卷最大容量為256GB,若希望使用大於256G的邏輯卷則創建卷組時指定更大的PE。PE大小范圍為8KB到512MB,並且必須總是2的倍數(使用-s指定,具體請參考manvgcreate)。 4、激活卷組 為了立即使用卷組而不是重新啟動系統,可以使用vgchange來激活卷組: #vgchange-ayweb_document 5、添加新的物理卷到卷組中 當系統安裝了新的磁盤並創建了新的物理卷,而要將其添加到已有卷組時,就需要使用vgextend命令: #vgextendweb_document/dev/hdc1 這裡/dev/hdc1是新的物理卷。 6、從卷組中刪除一個物理卷 要從一個卷組中刪除一個物理卷,首先要確認要刪除的物理卷沒有被任何邏輯卷正在使用,就要使用pvdisplay命令察看一個該物理卷信息: 如果某個物理卷正在被邏輯卷所使用,就需要將該物理卷的數據備份到其他地方,然後再刪除。刪除物理卷的命令為vgredUCe: #vgreduceweb_document/dev/hda1 7、創建邏輯卷 創建邏輯卷的命令為lvcreate: #lvcreate-L1500–nwww1web_document 該命令就在卷組web_document上創建名字為www1,大小為1500M的邏輯卷,並且設備入口為/dev/web_document/www1(web_document為卷組名,www1為邏輯卷名)。如果希望創建一個使用全部卷組的邏輯卷,則需要首先察看該卷組的PE數,然後在創建邏輯卷時指定: #vgdisplayweb_documentgrep"TotalPE" TotalPE45230 #lvcreate-l45230web_document-nwww1 8、創建文件系統 筆者推薦使用reiserfs文件系統,來替代ext2和ext3: 創建了文件系統以後,就可以加載並使用它: #mkdir/data/wwwroot #mount/dev/web_document/www1/data/wwwroot 如果希望系統啟動時自動加載文件系統,則還需要在/etc/fstab中添加內容: /dev/web_document/www1/data/wwwrootreiserfsdefaults12 9、刪除一個邏輯卷 刪除邏輯卷以前首先需要將其卸載,然後刪除: #umount/dev/web_document/www1 #lvremove/dev/web_document/www1 lvremove--doyoureallywanttoremove"/dev/web_document/www1"?[y/n]:y lvremove--doingautomaticbackupofvolumegroup"web_document" lvremove--logicalvolume"/dev/web_document/www1"successfullyremoved 10、擴展邏輯卷大小 LVM提供了方便調整邏輯卷大小的能力,擴展邏輯卷大小的命令是lvcreate: #lvextend-L12G/dev/web_document/www1 lvextend--extendinglogicalvolume"/dev/web_document/www1"to12GB lvextend--doingautomaticbackupofvolumegroup"web_document" lvextend--logicalvolume"/dev/web_document/www1"successfullyextended 上面的命令就實現將邏輯卷www1的大小擴招為12G。 #lvextend-L+1G/dev/web_document/www1 lvextend--extendinglogicalvolume"/dev/web_document/www1"to13GB lvextend--doingautomaticbackupofvolumegroup"web_document" lvextend--logicalvolume"/dev/web_document/www1"successfullyextended 上面的命令就實現將邏輯卷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 11、減少邏輯卷大小 使用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。