3,199 瀏覽數

RHEL5 – LVM(Logical Volume Manager)

什麼是 LVM

LVM(Logical Volume Manager)是一種可以動態變更 volume (由 LVM 所切割出來的空間被稱為 volume)大小的方式,可以讓你能更容易利用管理你的硬碟.傳統的硬碟空間在切割完時就決定了大小,如果要重新規劃必須將資料先備份下來,硬碟磁區重新切割才可能有改變原來的硬碟磁區環境.不過 LVM(Logical Volume Manager) 就不同了,如果磁區空間不夠了,你可以隨意將空間放大或是磁區的使用率太低也可以將空間縮小.當我們在放大縮小時這都不影響原先在硬碟上的資料,聽起來很神奇吧!!而且在 RHEL5 提供一隻工具讓 LVM 更方便使用 #system-config-lvm
lvm01
LVM:重要名詞
下面這一段是直接取用LVM官方說明,這裡只做簡單的中文翻譯.

  • Physical Volume (PV)
    A physical volume is typically a hard disk, though it may well just be a device that 'looks' like a hard disk (eg. a software raid device).
    這就是硬碟切割出來的實體partition(/dev/sdb1,/dev/sdc1)
  • volume group (VG)
    The Volume Group is the highest level abstraction used within the LVM. It gathers together a collection of Logical Volumes and Physical Volumes into one administrative unit.
    接下來再由多個 PV(/dev/sdb1,/dev/sdc1)建立出的磁區再組合成一個虛擬的磁碟(/dev/volum00,將來使用時這就像是/dev/sda一個真實的磁碟機一樣,但不同於一般磁碟機的是他的大小是可以縮放)
  • Logical Volume (LV)
    The equivalent of a disk partition in a non-LVM system. The LV is visible as a standard block device; as such the LV can contain a file system (eg. /home).
    由VG這個虛擬磁碟所切割出來的 partition(/dev/volum00/LVOL1,將來使用時就像/dev/sda1一個真實的磁區一樣,但不同於一般磁區他是可以縮放的)
  • Physical Extent (PE)
    Each physical volume is divided chunks of data, known as physical extents, these extents have the same size as the logical extents for the volume group.
    PE就如同是磁碟機在格式化時,每個block的大小.而 PE系統預設大小為4M而一個VG最多可以擁有65534個PE,所以當系統預設時,ㄧ個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 個網友的想法 “RHEL5 – LVM(Logical Volume Manager)

  1. 自動參照通知: 放大縮小 Linux 磁區 – Benjr.tw

  2. 自動參照通知: Linux – File | Benjr.tw

發表迴響