吳佳驊
摘 要 本文介紹了彈性存儲和LVM,提出了一種運用LVM實現基于分區的彈性存儲的方案,并給出了實現過程。
關鍵詞 彈性存儲 LVM
中圖分類號:TP316 文獻標識碼:A
1彈性存儲
彈性存儲,是指根據存放數據的多少或者使用者的要求來動態調整分配給其的存儲空間,調整過程中無須停機和卸載硬盤。因為有著極佳的存儲空間即時延展性,所以非常適合運用在需要存儲變動較頻繁的服務器上,如網盤服務、郵件服務、虛擬主機服務等等。
彈性存儲,從其實現途徑上來看,可以分為兩種,基于目錄的彈性存儲和基于分區的彈性存儲。
基于目錄的彈性存儲,是在對應的目錄下動態的控制不同用戶或者不同服務對于目錄存儲空間的使用上限,通常用設置磁盤配額的方式來實現。這種方式最大的短板是其受制于目錄所在磁盤分區的空間上限,僅能在有限的空間內做存儲空間的按需分配,對存儲空間的預留有所要求,并且對到達上限之后的空間增長實現難度較大,也不便利。一般只是用于數據量不大的服務,如郵件服務之類。
基于分區的彈性存儲,則是利用直接讓分區實現即時延伸的手段來達到存儲空間的動態分配,相較于基于目錄的彈性存儲,其上限是硬盤的空間上限,而這種上限又可以通過多個硬盤疊加的形式來獲得理論上的無限擴充,空間增長相對容易。與對存儲空間需求較大的網盤服務、虛擬主機服務等等有相當好的適合相性。
2 LVM介紹
LVM,英文全名為Logical Volume Manager,中文翻譯名稱是邏輯卷管理。目前主流的Linux發行版中都集成了LVM。LVM極佳的延展性使得其非常適合用于實現基于分區的彈性存儲。
LVM被設計為3層結構,最底層是物理卷PV(Physical Volume),中間層是卷組VG(Volume Group),最上層是邏輯卷LV(Logical Volume)。LVM結構如圖1所示。
圖1:LVM結構圖
物理卷PV,由基本硬盤分區構建而成,用于提供組成卷組VG的材料。
卷組VG,由一個或多個物理卷PV組成,卷組VG的存儲空間大小即組成它的所有物理卷PV的空間大小之和。卷組VG可以添加新的物理卷PV來擴展其存儲空間。
邏輯卷LV,在卷組VG上組建得到,是實際實現存儲的分區,可以隨意即時延展。
3實現方式
本文所使用的系統環境為CentOS6.5。
3.1使用LVM構建存儲層
3.1.1在磁盤上構建物理卷PV
(1)對基礎硬盤分區。
[root@localhost mnt]# fdisk /dev/sdb
Command (m for help): n
Command action p
Partition number(1-4): 1
(2)修改分區的文件系統ID為8e。
Command (m for help): t
Selected Partition 1
Hex code (type L to list codes): 8e
(3)將分區建立為物理卷PV。
[root@localhost mnt]# pvcreate /dev/sdb1
3.1.2將構建的物理卷PV組建成卷組VG
(1)查看目前存在的物理卷PV。
[root@localhost mnt]# pvdisplay
(2)選擇需要使用的物理卷PV組建成卷組VG。
[root@localhost mnt]# vgcreate vg1 /dev/sdb1
(3)查看組建的卷組VG的信息。
[root@localhost mnt]# vgdisplay
3.2當出現新用戶user1請求空間時建立一塊邏輯卷LV分配給user1
(1)在卷組VG上建立邏輯卷LV。
[root@localhost mnt]# lvcreate –L 1G –n user1 vg1
(2)格式化新建立的邏輯卷LV。
[root@localhost mnt]# mkfs.ext4 /dev/vg1/user1
(3)把新建立的邏輯卷LV掛載到user1的存儲目錄。
[root@localhost mnt]# mount /dev/vg1/user1 /home/user1/storage
(4)設置user1的存儲目錄權限。
[root@localhost mnt]# chmod 700 /home/user1/storage
3.3當現有用戶user1空間耗盡,請求新空間時,延展其邏輯卷LV
(1)擴展邏輯卷LV的空間。
[root@localhost mnt]# lvextend –L +1G /dev/vg1/user1
(2)格式化擴展的空間部分。
[root@localhost mnt]# resize2fs /dev/vg1/user1
3.4當現有卷組VG空間耗盡時,延展其空間
(1)加入新的硬盤建立新的物理卷PV。
[root@localhost mnt]# pvcreate /dev/sdc1
(2)將物理卷PV補充到卷組VG中,存儲空間得到延伸。
[root@localhost mnt]# vgextend vg1 /dev/sdc1