Linux邏輯盤卷管理(LogicalVolumeManager)
二、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卷
1.檢視系統中磁碟的可用空間並且將分割槽標識設為8e
#fdisk /dev/hda ;如果為SCSI或SATA的為/dev/sda
輸入p檢視分割槽
執行t命令,以便通知fdisk我要修改分割槽的系統識別符號資料
指定要修改分割槽編號
直接指定新的系統識別符號為8e
輸入w儲存
最後重啟(不用重啟也可以輸入partprobe)
2.建立物理卷
#pvcreate /dev/hda13 ;前面設定分割槽的編號為13
Physical volume "/dev/hda13" successfully created
3.建立卷組
#vgcreate mainVG /dev/hda13
Volume group "mainVG" successfully created
4.建立邏輯卷
以下是我建立一個100MB大小的邏輯卷空間的示範:
#lvcreate -L 100M -n 1stLV mainVG
Logical volume "1stLV" created
建立出邏輯卷後.就可以把邏輯卷當作一個分割槽了,例如在邏輯捲上建立檔案系統.掛載這個檔案系統.
值得注意的是.建立完千萬別忘了建立檔案系統
以我的LVM為例
#mkfs -t ext3 /dev/mainVG/1stLV
然後掛載就OK了
解除安裝卷的方法:
解除安裝物理卷:pvremove PVDEVICE
解除安裝卷組:vgremove VGNAME
解除安裝邏輯卷:lvremove LVDEVICE
解除安裝的順序:先邏輯然後卷組最後物理卷
解除安裝前別忘了備份
-----------------------------------------------------------------------------------------------------------------------------------
LV示意圖:
一個物理卷,包含了許多物理分割槽:
+-----[ Physical Volume ]------+
| PE | PE | PE | PE | PE | PE |
+------------------------------+
一個卷組,包含了2個物理卷(PV)有6個物理分割槽:
+------[ Volume Group ]-----------------+
| +--[PV]--------+ +--[PV]---------+ |
| | PE | PE | PE | | PE | PE | PE | |
| +--------------+ +---------------+ |
+---------------------------------------+
我們現在做更進一步擴充套件:
+------[ Volume Group ]-----------------+
| +--[PV]--------+ +--[PV]---------+ |
| | PE | PE | PE | | PE | PE | PE | |
| +--+---+---+---+ +-+----+----+---+ |
| | | | +-----/ | | |
| | | | | | | |
| +-+---+---+-+ +----+----+--+ |
| | Logical | | Logical | |
| | Volume | | Volume | |
| | | | | |
| | /home | | /var | |
| +-----------+ +------------+ |
+---------------------------------------+
-----------------------------------------------------------------------------------------------------------------------------------
好了,我們來建立一個lv。
比如說,在一個物理硬碟/dev/hda上,我們需要將/dev/hda5,/dev/hda6作為pv
1 fdisk劃分hda5,hda6,並且將這兩個分割槽的標誌(鍵入t改)改為(0x)8e
然後用partprobe通知OS磁碟分割槽的變化
2 pvcreate /dev/hda5 /dev/hda6(-s xxM可設定PE大小)
建立pv hda5,hda6
3 vgcreate rootvg /dev/hda5 /dev/hda6
將hda5,hda6加入邏輯卷組rootvg中
4 lvcreate -L 100M -n lv1 rootvg
從我們的rootvg中,建立一個100M的邏輯卷lv1
5 mkfs.ext3 /dev/rootvg/lv1
格式化我們的lv1,檔案系統用ext3
6 mkdir /mnt/lvm;mount /dev/rootvg/lv1 /mnt/lvm
將lv1掛載到/mnt/lvm下
好了,這樣一個建立lv的例子完成
4) 如何動態放大/縮小一個邏輯卷/邏輯卷組
我們如何放大lv?比如上面的lv1?流程:
1 lvextend -L+200M /dev/rootvg/lv1
將lv1增加200M
2 ext2online /dev/rootvg/lv1
讓lv1容量更改立即生效
減小lv,網上很多文章介紹的是ReiserFS,這裡我們是ext3檔案系統,如果我們需要減少50M:
1 umount /mnt/lvm
這裡,需要先解除安裝分割槽
2 mke2fs -n /dev/rootvg/lv1
計算lv1的block數
這裡一定要加-n引數,這是計算lv1的block數,而不是格式化分割槽,注意。
並且注意,從MB->KB這些的計算,都是乘1024,不是1000,這是個細節問題
3 計算減少50M後的block數。從mke2fs -n /dev/rootvg/lv1,我們可以得出2個需要的資訊:
Block size和blocks,這兩個數的乘積就是分割槽大小A(單位位元組),
我們把需要減小的容量50M換算成位元組B,然後A-B的結果除以Block size,就是剩餘的block數
4 resize2fs -f /dev/rootvg/lv1 剩餘的block數
調整檔案系統大小
5 lvreduce -L-50M /dev/rootvg/lv1
調整lv分割槽大小,減小50M
6 重新mount,df察看一下容量的減小
動態加大VG:
這裡我們新增一個PV並加入VG
1 fdisk增加一個(0x)8e標誌的分割槽/dev/hda7
2 vgextend rootvg /dev/hda7
好了,vg增大了
縮小邏輯卷組VG:
1 搬移PV中的資料(只限於同一VG中)
#pvmove [-n ] []
如
#pvmove /dev/hda5 /dev/hda6
將VG中pv hda5的內容搬移到hda6中
pvmove /dev/hda5(也可以這樣,lvm決定hda2的內容被複制到哪裡)
2 vgreduce rootvg /dev/hda5
把vg hda5移除
5) 如何刪除邏輯卷/邏輯卷組
刪除VG流程:
1 umount /掛接點
2 lvremove /dev/rootvg/lv1
移除邏輯卷,這裡是lv1
3 vgchange -a n rootvg(關閉rootvg)
4 vgremove rootvg
移除rootvg
6) lvm相關命令
這個表格,你可以在RHCE_Study_Guide.pdf上找到
Physical Volume Volume Group Logical Volume
scan pvscan vgscan lvscan
create pvcreate vgcreate lvcreate
display pvdispaly vgdisplay lvdisplay
remove pvremove vgremove lvremove'
----------------------------------------------------------------------------------------------------------------------------------------------------------------
要建立一個LVM系統,一般需要經過以下步驟:
1、建立分割槽
使用分割槽工具(如:fdisk等)建立LVM分割槽,方法和建立其他一般分割槽的方式是一樣的,區別僅僅是LVM的分割槽型別為8e。
2、建立物理卷
建立物理卷的命令為pvcreate,利用該命令將希望新增到卷組的所有分割槽或者磁碟建立為物理卷。將整個磁碟建立為物理卷的命令為:
#pvcreate /dev/hdb
將單個分割槽建立為物理卷的命令為:
#pvcreate /dev/hda5
3、建立卷組
建立卷組的命令為vgcreate,將使用pvcreate建立的物理卷建立為一個完整的卷組:
#vgcreate web_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 -ay web_document
5、新增新的物理捲到卷組中
當系統安裝了新的磁碟並建立了新的物理卷,而要將其新增到已有卷組時,就需要使用vgextend命令:
#vgextend web_document /dev/hdc1
這裡/dev/hdc1是新的物理卷。
6、從卷組中刪除一個物理卷
要從一個卷組中刪除一個物理卷,首先要確認要刪除的物理卷沒有被任何邏輯卷正在使用,就要使用pvdisplay命令察看一個該物理卷資訊:
如果某個物理卷正在被邏輯卷所使用,就需要將該物理卷的資料備份到其他地方,然後再刪除。刪除物理卷的命令為vgreduce:
#vgreduce web_document /dev/hda1
7、建立邏輯卷
建立邏輯卷的命令為lvcreate:
#lvcreate -L1500 -n www1 web_document
該命令就在卷組web_document上建立名字為www1,大小為1500M的邏輯卷,並且裝置入口為 /dev/web_document/www1(web_document為卷組名,www1為邏輯卷名)。如果希望建立一個使用全部卷組的邏輯卷,則需 要首先察看該卷組的PE數,然後在建立邏輯卷時指定:
#vgdisplay web_document | grep"TotalPE"
TotalPE45230
#lvcreate -l45230 web_document -n www1
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提供了方便調整邏輯卷大小的能力,擴充套件邏輯卷大小的命令是lvextend:
#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。
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