LVM磁盤管理器的應用
1、LVM簡介
LVM(LogicalVolume Manager),中文翻譯過來叫邏輯卷管理員,臺灣的有些教材上翻譯成邏輯滾動條管理員。最初由IBM在AIX實現,後來由Mauelshagen在Linux上實現,現在已經是Linux的一部分。
LVM爲系統中大容量分區提供了一種更有彈性的解決方案。一般來說,我們在安裝系統的時候,會按照一定的比例,並結合自己的使用經驗,給各個分區劃分恰當的容量。但是,隨着系統在實際生產環境中不斷運行,我們發現某些分區的容量並不能滿足我們的需求。儘管我們可以通過某些方法解決這些問題(比如創建連接),但是這些方法還是不夠優雅。於是LVM就出現了。LVM是一種抽象化存儲技術,它在硬盤的分區之上,又創建一個邏輯層,以方便對硬盤分區系統進行管理。
2、LVM中經常會遇到的名詞
PV:物理卷,可以是獨立的磁盤分區系統或者是RAID也可以。物理卷可以不依賴於LVM系統而獨立存在。
VG:卷組,LVM 上層的設備把它當作物理設備來使用,實際是一個邏輯上的抽象層,負責協調上層的邏輯卷與下層的物理塊。
LV:邏輯卷,類似於非LVM系統中的分區的概念,在LVM系統中被當作獨立的分區來使用。
PE:物理塊,是每一個邏輯卷被劃分的基本單元,也是LVM系統最小的尋址單元。
3、如何實現LVM功能
第一步:創建pv,使用pvcreate命令。準備一塊硬盤,並將其任意分爲幾個獨立的分區,並將分區的類型調整爲8e。我已經在該物理磁盤上劃分了3塊大小爲1G的分區,效果如下(PS:至於如何劃分分區,我在這裏不再贅述):
[root@localhost ~]# fdisk -l /dev/hda Disk /dev/hda: 21.4 GB, 21474836480 bytes 15 heads, 63 sectors/track, 44384 cylinders Units = cylinders of 945 * 512 = 483840 bytes Device Boot Start End Blocks Id System /dev/hda1 1 2068 977098+ 8e Linux LVM /dev/hda2 2069 4136 977130 8e Linux LVM /dev/hda3 4137 6204 977130 8e Linux LVM
接下來就開始創建物理卷:
[root@localhost ~]# pvcreate /dev/hda{1,2,3} Writing physical volume data to disk "/dev/hda1" Physical volume "/dev/hda1" successfully created Writing physical volume data to disk "/dev/hda2" Physical volume "/dev/hda2" successfully created Writing physical volume data to disk "/dev/hda3" Physical volume "/dev/hda3" successfully created
使用pvs命令可以查看物理卷的詳細信息,我這裏顯示的可用空間沒有達到原始大小是因爲LVM需要保存一些元數據:
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/hda1 lvm2 a-- 954.20M 954.20M /dev/hda2 lvm2 a-- 954.23M 954.23M /dev/hda3 lvm2 a-- 954.23M 954.23M /dev/sda2 VolGroup00 lvm2 a-- 19.88G
另外,使用怕pvdisplay可以查看物理卷的更詳細的信息,使用pvscan可以查看一共創建了多少個pv。
第二步:創建vg,使用vgcreate命令。
l -s選項可以指定物理盤區的大小,默認爲4M
[root@localhost ~]# vgcreate myvg /dev/hda{1,2,3} Volume group "myvg" successfully created
使用vgremove命令可以移除vg:
[root@localhost ~]# vgremove myvg Volume group "myvg" successfully removed
擴展vg,首先準備好一個pv分區:
[root@localhost ~]# pvcreate /dev/hda5 Writing physical volume data to disk "/dev/hda5" Physical volume "/dev/hda5" successfully created [root@localhost ~]# vgextend myvg /dev/hda5 Volume group "myvg" successfully extended
移除一塊底層的磁盤的做法:首先要使用pvmove命令,作數據遷移的操作:
[root@localhost ~]# pvmove /dev/hda3 No data to move for myvg
然後使用vgreduce命令移除邏輯卷:
[root@localhost ~]# vgreduce myvg /dev/hda3 Removed "/dev/hda3" from volume group "myvg"
最後使用pvremove命令移除物理卷:
[root@localhost ~]# pvremove /dev/hda3 Labels on physical volume "/dev/hda3" successfully wiped
第三步:創建lv,使用lvcreate命令。
[root@localhost ~]# lvcreate -L 50M -n test0 myvg Rounding up size to full physical extent 56.00 MB Logical volume "test0" creat
查看效果可以使用lvs命令或者lvdisplay命令:
[root@localhost ~]# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert LogVol00 VolGroup00 -wi-ao 17.88G LogVol01 VolGroup00 -wi-ao 2.00G test0 myvg -wi-a- 56.00M
使用LVM的方法也很簡單,直接格式化,掛載即可:
[root@localhost ~]# mke2fs -j /dev/myvg/test0 [root@localhost ~]# mount /dev/myvg/test0 /mnt/LVM
4、擴展邏輯卷和縮減邏輯卷
l 擴展:
擴展邏輯卷使用lvextend命令
[root@localhost ~]# lvextend -L +50M /dev/myvg/test0 Rounding up size to full physical extent 56.00 MB Extending logical volume test0 to 112.00 MB Logical volume test0 successfully resized [root@localhost ~]# resize2fs /dev/myvg/test0
l 縮減邏輯卷
注意事項:
i) 不要在線縮減,必須先卸載原有的文件系統;
ii) 確保縮減以後的空間大小依然能夠容放下所有的數據;
iii) 在縮減之前應該先進行文件系統檢查,以確保文件系統處於一致性狀態。
現在示範如下:
[root@localhost ~]# e2fsck -f /dev/myvg/test0 [root@localhost ~]# lvreduce -L 50M /dev/myvg/test0 [root@localhost ~]# resize2fs /dev/myvg/test0
5、創建快照卷(snapshot)
首先把需要創建快照的分區掛載到系統相應的目錄:
[root@localhost mnt]# mount /dev/myvg/newlv /mnt/newlv/
然後運行創建快照卷的命令:
[root@localhost /]# lvcreate -L 50M -s -n newlv_snap /dev/myvg/newlv Rounding up size to full physical extent 56.00 MB Logical volume "newlv_snap" created
掛載快照:
[root@localhost /]# mount /dev/myvg/newlv /snap
查看效果:
[root@localhost newlv]# touch a b c [root@localhost newlv]# ls /snap a b c lost+found