RHEL5 – LVM(Logical Volume Manager)

什麼是 LVM

傳統的硬碟空間在切割完時就決定了大小,如果要重新規劃必須將資料先備份下來,硬碟磁區重新切割才可能有改變原來的硬碟磁區環境.透過 LVM (Logical Volume Manager) 就不同了,LVM 是一種可以動態變更 Volume 大小的方式 (由 LVM 所切割出來的空間稱為 Volume),它可以讓我們更容易管理硬碟空間.
如果磁區空間不夠了,我們可以把使用率低的磁區空間縮小再將空間不夠的磁區放大 (放大縮小時皆都不影響硬碟上的資料).

而且在 RHEL5 提供一隻工具讓 LVM 更方便使用 #system-config-lvm
lvm01

LVM 說明:

  • Physical Volume (PV)
    這就是硬碟切割出來的實體 Partition (/dev/sdb1,/dev/sdc1)
  • volume group (VG)
    接下來再由多個(可以單一) PV (/dev/sdb1,/dev/sdc1) 的磁區再組合成一個虛擬的磁碟 ( /dev/volum00 ) ,使用上如同一般磁碟 ( /dev/sda) ,但不同於一般磁碟他是可以做縮放的.
  • Logical Volume (LV)
    由 VG 這個虛擬磁碟所切割出來的 Partition ( /dev/volum00/LVOL1 ) 使用時就如同一般磁區 ( /dev/sda1 ),但不同於一般磁區他是可以做縮放的.
  • Physical Extent (PE)
    PE 就如同是磁碟機在格式化時,每個 Block 的大小.而 PE 系統預設大小為 4M 而一個 VG 最多可以擁有 65534 個 PE ( LVM2 已經沒有這個限制了 ) ,所以當系統預設時,ㄧ個 VG 最大尺寸為 65534*4M 大概為256G.對於現在大硬碟 的狀況下很快就無法再延伸了.所以建議在設定PE時指定大小.除了預設的 4M 外只要是 2的倍數在 8k-16GB 都是可以的範圍.

LVM 的整個架構如下:
lvm00
整個架構就是將許多的 partition(/dev/sdb1 /dev/sdc1) 組成一個虛擬的磁碟(/dev/vg).之後就可以將它動態切割成你需要大小的 partition(/dev/vg/lv1,/dev/vg/lv2).就可以像一般的 partition 來使用.

系統是否有支援 LVM2

先來檢查檢查你的系統是否有支援 LVM 的功能, RHEL5 預設就包含 LVM 的功能.目前 LVM 是第二版,不過這邊還是稍微談一下 LVM2 ,它是由 3 項東西組合而成.

  1. 有將 device-mapper 的功能編譯進核心或是模組,這些功能在中的 Multi-device support (RAID and LVM) 下.
    [root@benjr ~]# cat /boot/config-kernel-version | grep -i BLK_DEV_DM
    CONFIG_BLK_DEV_DM=m
    
  2. device-mapper 的 library (libdevmapper)
    [root@benjr ~]# rpm -aq |grep -i device-mapper
    device-mapper-version
    
  3. LVM2 工具組
    [root@benjr ~]# rpm -aq |grep -i lvm
    lvm2-version
    

Physical Volume (PV) 的建立

PV 的建立如同切割 partition 使用 #system-config-lvm 選擇要建立 PV 的硬碟 sdb 選擇要 "initialize Entity.這也是可以透過指令來完成 請參考指令版的使用方式 http://benjr.tw/7362
lvm02

Volume Group (VG) 的建立

有了 PV 就可以開始建立 VG ,在 Unallocated Volumes 找到剛剛建立的 PV,選擇 "Create new Volume Group" 開始建立 VG 主要的選項有5個.
lvm03

  • Volume Group Name:
    名稱會決定了將來 voulme 裝置名稱(/dev/Volume Group Name/Logical Volume Name).
  • Maximum Physical Volumes:
    通常空間不夠時我們會去串接其他硬碟(PV),這裡就決定了 PV 的最大數量,預設256也絕對夠用了.
  • Maximum Logical Volumes:
    這裡可以設定會來 LV 的多寡,預設是 256,因該都夠使用了不需要特別去修改.
  • Physical Extent Size:
    PE 會限制住 VG 的大小,所以這裡就可以考慮將 PE 設大一點.只要是2的倍數在8k-1GB都是可以的範圍,預設值為 4M.
  • Clustered:
    如果你的 volume 使用在 Cluster 叢集環境才需要勾選,一般我們都是把它當作本地端硬碟所以不需要勾選.

Logical Volume (LV) 的建立

剛建立好 VG 的 vg1 在 Volume Groups 就會看到,現在就可以來建立 LV,點選 "Create New Logical Voumes"
lvm04

  • LV name:
    名稱會決定了將來 voulme 裝置名稱 (/dev/Volume Group Name/Logical Volume Name)
  • LV Properties:
    LVM 提供了三種硬碟對應( mapping )方式,1.Linear 2.Mirrored 3.Striped 預設是 Linear 如果系統只有單獨一個 PV(Physical Volume) 時的唯一選擇.當你系統 VG(Volume Group) 是由多個 PV(Physical Volume) 時就可以使用另外兩種 2.Mirrored 3.Striped 他們跟 RAID 的概念一致,你可以把它想像成 Soft RAID 的 方式.Mirrored 就像是 RAID 1 ,Striped 就像是 RAID 0.

    1. Linear
      我的環境是利用兩個硬碟 sdb1,sdc1組合成一個 Linear LVM Disk,資料的讀寫時系統會依序下去,當 sdb1 空間用完時才會寫到 sdc1 的硬碟裡面.
      lvm_linear
    2. Mirrored
      我的環境是利用兩個硬碟 sdb1,sdc1組合成一個 Mirrored LVM Disk,當資料的讀寫時系統會同時在 sdb1 sdc1 都寫入相同的資料.這就像是 RAID 1.適用於當資料不能遺失的重要資料.
      lvm_mirrored
    3. Striped
      我的環境是利用兩個硬碟 sdb1,sdc1組合成一個 Striped LVM Disk,當資料的讀寫時系統會依序sdb1 ,sdc1 交錯寫入.這就像是 RAID 0.因為資料是交錯的寫入所以在讀寫時可以快速從不同硬碟讀到所需的資料.也因此適用於當負載比較重的資料儲存庫.
      lvm_striped
  • Size:
    就要這一個 LV(Logic Volume) 需要多大的空間,因為 LVM 的空間是可以依據實據需求做大小的改變,所以這邊你可以隨時做修改.單位有:1.Extents 2.Gigabytes 3.Megabytes 4.Kilobytes.除了 Extents 外其他都是依據我們常在規劃的資料單位(G/M/K Bytes,1G=10,1M=1061K=103) 還記得剛剛在切割 Physical Extent Size 時有設定一個大小,Extents 就是用這為單位.剛剛預設單位為 4MBytes.
  • User remaining:
    就是將VG(volume group)所有剩下的空間都規劃成 LV(Logical Volume)
    Filesystem:
    在切割完成 LV 需要格式化這邊就是可以選擇格式化的檔案格式,預設是不做格式化 None,其他的可以使用的有 Ext3 / Ext2 / GFS(local) / GFS(Clusterd) ,Global File System 不做本範疇的討論中,用最一般的 Ext3 即可.
  • Mount point:
    這邊還可以選擇在格式劃完成後要將這 LV(Logical Volume) 掛載(mount)到哪個目錄下面."mount when rebooted" 直是在下一次開機後還是會自動幫我們這一個 LV(Logical Vloume) 掛載到指定的目錄下,主要他也是將他寫入到 /etc/fstab 檔案中.當目錄不存在時系統會詢問是否要產生 say "yes" 就會幫我們所有的動作都做完.

動態縮放 LV (Logical Volume)磁碟系統大小

前面一直強調 LVM(Logical Volume Manager) 和傳統的硬碟他最大的優點就是可以依據實際需求再縮放硬碟空間大小,下面就可以看到他一樣可以透過 #system-config-lvm 這一隻工作完成縮放空間.原本我剛剛建立的 LV1 空間大小可以看到是 20 GByte 現在可能資料量多了不符合使用所以我要將它放大一倍.變成 40 Gbyte.
lvm05
轉換的時間會依據 LV(Logical Volume) 空間大小而有所不同,你可以看到空間的確變大了,我們甚至於是在線上就將硬碟的空間增大,不需要重新格式化或是重新掛載它.

[root@benjr ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  6.4G   12G  36% /
tmpfs                1005M     0 1005M   0% /dev/shm
/dev/mapper/vg1-lv1    20G  173M   19G   1% /share

放大 LV(Logical Volume) 之後

[root@benjr ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  6.4G   12G  36% /
tmpfs                1005M     0 1005M   0% /dev/shm
/dev/mapper/vg1-lv1    40G  177M   38G   1% /share

同樣的縮小也是一樣的方式,不過在縮小時需先將它離線 (#umount) ,縮小後再重新掛載上線,但是切記縮小的空間總和不能小於原先硬碟實際使用空間.系統是透過指令 "resize2fs" 來放大縮小硬碟空間,他會去檢查我們的動作是否符合真實硬碟使用空間,如果你硬要將空間縮小到比原先硬碟實際使用的空間還是小,它是不會允許這樣的做法. 系統會給我們警告 "/sbin/resize2fs:No space left on device while trying to resize /dev/vg1/lv1" 並將動作中斷.
lvm06

動態縮放 VG(Volume Group)磁碟系統大小

LV(Logical Volume) 雖然可以放大但是當 VG(Volume Group) 的空間也用完時 LV(Logical Volume) 放大的功能就無用武之地,此時可以將 VG(Volume Group) 放大,方式很簡單只要在你的系統多增加一塊實體的硬碟並將它加入原先建立好的 VG(Volume Group.目前我的系統除了 /dev/sdb 外還有一顆 /dev/sdc ,這一個硬碟還未經過 PV 的建立,我可以在 "Uninitialized Entities" 找到.第一步將它初始化選擇要 "initialize Entity.切割 sdc 的 partition 並建立 PV(Physical Volume) .
lvm07

建立好 PV(Physical Volume) 現在將這一個硬碟加到原先建立好的 VG(Volume Group).剛切割好 PV 會存放在 "Unallocated Volumes".選擇 "Add to existing volume Group" 並將它加入到原先建立好的 vg1.
lvm08

回到 Volume Groups 就可以看到 Physical View 的變成 sdb1 + sdc1 所組合而成.你也可以在 "Properties for Volume Group" 的 "Volume Group Size" 的確變大了,所以 LV(Logical Volume) 又可以再放大了.
lvm09

沒有解決問題,試試搜尋本站其他內容

2 thoughts on “RHEL5 – LVM(Logical Volume Manager)

  1. 自動引用通知: Linux – File | Benjr.tw

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料