邏輯卷是Linux系統中比較重要的一種磁盤管理機制,它的功能用一句話就可以概括:動态調整磁盤分區的大小。
大家都知道,在對磁盤進行分區大小規劃時,有時很難确定這個分區要使用的總空間大小。當磁盤分完區以後,每個分區的大小已經固定了,如果分區設定的過大,就白白浪費了磁盤空間,分區設定的過小,又會導緻空間不夠用。而一旦分好區之後再要改變分區大小就非常困難,雖然可以重新劃分磁盤分區或是利用Partition Magic之類的磁盤管理工具來調整分區大小,但無論采用哪種方式,操作起來都比較麻煩,而且在操作的過程中必須要将伺服器停機或重新開機,這對一些擔任重要角色的伺服器是絕不允許的。
邏輯卷管理(LVM,Logical Volume Manager)的設計目的就是為了實作對磁盤的動态管理。LVM是建立在磁盤分區和檔案系統(檔案系統可以了解為挂載點目錄)之間的一個邏輯層,管理者利用LVM可以在磁盤不用重新分區的情況下動态調整檔案系統的大小,并且利用LVM管理的檔案系統可以跨越磁盤,當伺服器添加了新的磁盤後,管理者不必将原有的檔案移動到新的磁盤上,而是通過LVM可以直接擴充檔案系統跨越磁盤。
下面就讓我們一起來學習一下這種高效靈活的磁盤管理方式。
<b>一、 LVM</b><b>簡介</b>
LVM是建立在實體磁盤和分區之上的一個邏輯層,通過它可以将若幹個磁盤分區連接配接為一個整塊的卷組,形成一個存儲池。在卷組中可以任意建立邏輯卷,并進一步在邏輯卷上建立檔案系統,最終在系統中挂載使用的就是邏輯卷,邏輯卷的使用方法與普通的磁盤分區完全一樣。
在LVM中主要涉及以下幾個概念。
實體卷PV(Physical Volume)
實體卷是建構LVM的基礎,通常就是指磁盤分區,但和基本的磁盤分區不同的是,實體卷中包含有與LVM相關的管理參數。
卷組VG(Volume Group)
LVM卷組類似于非LVM系統中的實體磁盤,可以在卷組上建立一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個實體卷組成。
邏輯卷LV(Logical Volume)
LVM的邏輯卷類似于非LVM系統中的磁盤分區,在邏輯卷之上可以建立檔案系統。
實體塊PE(Physical Extent)
每一個實體卷被劃分為稱為PE的基本單元,具有唯一編号的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,預設為4MB。在一個卷組中最多能包括65534個PE,是以它的大小會影響到整個卷組的最大容量。
LVM各組成部分之間的對應關系如下圖所示。
<a href="http://blog.51cto.com/attachment/201301/105909881.jpg" target="_blank"></a>
從圖中可以看出,實體卷PV由大小等同的基本單元實體塊PE組成,一個卷組VG由一個或多個實體卷組成,邏輯卷LV建立在卷組之上,邏輯卷相當于非LVM系統中的磁盤分區,可以在其上建立檔案系統。
LVM屏蔽了系統底層的磁盤布局,但需要注意的是,由于“/boot”分區用于存放系統引導檔案,是以不能應用LVM機制。
在RHEL6系統中,LVM得到了高度重視。比如在安裝系統的過程中,如果設定由系統自動進行分區,則系統除了建立一個“/boot”引導分區之外,會将剩餘的磁盤空間全部采用LVM進行管理,并在其中建立兩個邏輯卷,分别挂載到根分區和交換分區。
<a href="http://blog.51cto.com/attachment/201301/110033364.jpg" target="_blank"></a>
<b>二、 </b><b>利用圖形化工具實作LVM</b>
LVM涉及到的概念和名詞比較多,初次接觸的同學可能會有些暈,其實LVM操作起來還是很簡單的,而且隻要做過了一遍,也就基本可以掌握了。
在RHEL6系統中實作LVM的方法有兩種:一種是利用LVM管理指令在字元界面下實作,另一種是利用system-config-lvm工具在圖形界面下實作。
在講課時為了便于同學了解,我隻介紹了如何用圖形工具來實作LVM,這是因為在字元界面下涉及到的LVM管理指令比較多,而圖形工具相比指令行,操作起來要更加簡單直覺一些。RHEL6中的很多圖形工具要麼功能比較弱,要麼容易出問題,這個system-config-lvm相對算是一個比較不錯的圖形工具,這也是在這門課程中我推薦使用的為數不多的幾款圖形工具之一。
下面我們就先來看看如何用system-config-lvm圖形化工具實作LVM。
在此之前,建議大家重新克隆一台虛拟機,并在虛拟機中額外添加2塊硬碟(整個虛拟機共有3塊硬碟)。
<a href="http://blog.51cto.com/attachment/201301/110517620.jpg" target="_blank"></a>
虛拟機啟動之後,再為虛拟機建立快照。
<a href="http://blog.51cto.com/attachment/201301/110649544.jpg" target="_blank"></a>
虛拟機準備好之後,繼續下面的操作。
<b>1、</b><b>安裝system-config-lvm</b>
在RHEL6系統中預設并沒有安裝system-config-lvm管理工具,不過在系統CD光牒中提供了相應的安裝包,下面以yum安裝的方式安裝system-config-lvm(關于軟體安裝,将會在後面詳細介紹)。
挂載系統CD光牒:
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom
配置本地yum源:
[root@localhost ~]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=dvd
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
安裝system-config-lvm:
[root@localhost ~]# yum install system-config-lvm
安裝好system-config-lvm之後,在“系統/管理”中會看到LVM管理工具——“邏輯卷管理器”。
<b>2. </b><b>建立磁盤分區</b>
磁盤分區是實作LVM的前提和基礎,在使用LVM之前,首先需要劃分磁盤分區。
下面是分區操作結束後檢視到的分區資訊。
<a href="http://blog.51cto.com/attachment/201301/110857318.jpg" target="_blank"></a>
<b>3. </b><b>建立實體卷PV</b>
建立實體卷是實作LVM的第一步。
打開“邏輯卷管理器”,在“未初始化的執行個體”中可以看到已有的磁盤分區資訊,選中磁盤分區“/dev/sdb1”,點選下方的“初始化執行個體”按鈕,将之轉化為實體卷。
<a href="http://blog.51cto.com/attachment/201301/111001535.jpg" target="_blank"></a>
用同樣的方式将磁盤分區“/dev/sdb5”也轉化為實體卷。
<b>3. </b><b>建立卷組VG</b>
卷組是LVM的主體,類似于非LVM系統中的硬碟。
在“未配置設定的卷”中選中剛才初始化好的實體卷“/dev/sdb1”,點選下方的“建立新的卷組”按鈕。
<a href="http://blog.51cto.com/attachment/201301/111204564.jpg" target="_blank"></a>
然後在下圖所示的界面中輸入卷組的相關參數。
<a href="http://blog.51cto.com/attachment/201301/111243343.jpg" target="_blank"></a>
“卷組名稱”可根據情況自由設定,這裡設定為“wgroup”。
“最大實體卷數”指卷組中最多可以包含的實體卷的數目,預設值為256。
“最大邏輯卷數”指卷組中最多可以建立的邏輯卷的數目,預設值為256。
“實體擴充區”即實體塊PE,是LVM中的基本存儲單元,大小預設為4MB。
卷組建立完成後,在“未配置設定的卷”中選中“/dev/sdb5”,點選下方的“添加到已存在的卷組中”,将該實體卷也添加到“wgroup”卷組中。
<a href="http://blog.51cto.com/attachment/201301/111351131.jpg" target="_blank"></a>
這樣便建立好了一個總容量為20GB的卷組。
<b>5. </b><b>建立邏輯卷LV</b>
邏輯卷類似于非LVM系統中的磁盤分區,是我們最終使用的對象。在已建立好的“wgroup”卷組中選擇“邏輯視圖”,點選下方的“建立新的邏輯卷”按鈕。
<a href="http://blog.51cto.com/attachment/201301/111509645.jpg" target="_blank"></a>
在下圖的界面中輸入邏輯卷的相關參數。
<a href="http://blog.51cto.com/attachment/201301/111552752.jpg" target="_blank"></a>
“邏輯卷名”可根據情況自由設定,這裡設定為“ftp”。
“LV屬性”用于設定資料在邏輯卷中的寫入方式。假如邏輯卷中包括了兩個實體卷:“/dev/sdb1”、“/dev/sdb5”,“線性的”寫入方式就是當“/dev/sdb1”中的空間被用完之後才會使用“/dev/sdb5”,資料是被順序存儲的;“分塊的”就是将要寫入的資料分作兩部分,同時寫入到“/dev/sdb1”和“/dev/sdb5”中。“分塊的”寫入方式類似于RAID 0,理論上效率要更高,但是安全性較差,任何一個磁盤分區出現問題都會導緻資料丢失。由于在系統中實施LVM的主要目的是為了更加靈活地調整分區容量,是以這裡推薦采用“線性的”寫入方式,這也是系統的預設設定。
“大小”用于設定LV的容量,這裡将整個卷組的空間全部劃給邏輯卷。
“檔案系統”,LV也需要經過格式化建立檔案系統之後才能使用,這裡隻能格式化成Linux标準的ext類檔案系統。
勾選“挂載”可以将LV自動挂載到指定位置,這裡設定将其挂載到“/var/ftp”目錄,作為FTP伺服器的主目錄。
勾選“重新啟動時挂載”可以自動修改“/etc/fstab”配置檔案,實作系統開機或重新開機時自動挂載LV。
點選“确定”按鈕之後就建立好了裝置名為“/dev/wgroup/ftp”的邏輯卷,并自動挂載到了指定的挂載點。
這樣,我們就可以像使用正常的磁盤分區一樣地使用邏輯卷了。
<b>6. </b><b>調整卷組和邏輯卷的大小</b>
當邏輯卷的空間全部用盡時,隻要按照上面的步驟,先建立出一個磁盤分區,将其初始化成實體卷之後,再加入到卷組中,然後就可以任意地調整邏輯卷的容量。
由于邏輯卷是位于實體磁盤和分區之上的一個邏輯層,是以邏輯卷可以跨越實體磁盤,将任何一個磁盤上的分區加入到同一個邏輯卷中。下面就将第三塊磁盤“/dev/sdc”加入到邏輯卷。
首先也是需要用fdisk工具将硬碟“/dev/sdc”分區并将分區标記修改為8e,這裡我将整個硬碟隻劃分了一個分區“/dev/sdc1”。
然後按照上面的操作将“/dev/sdc1”初始化成實體卷,再将其添加到“wgroup”卷組中,最後打開邏輯卷“ftp”的屬性設定界面,就可以對邏輯卷的大小進行任意調整。
<a href="http://blog.51cto.com/attachment/201301/111841361.jpg" target="_blank"></a>
<b>三、利用字元指令實作LVM</b>
圖形工具隻是為了便于了解,在生産環境中管理LVM主要還是通過指令。LVM的管理指令比較多,下面用這些管理指令将上面的操作再實作一遍。
<a href="http://blog.51cto.com/attachment/201301/111944413.jpg" target="_blank"></a>
在這之前還是需要将虛拟機準備一下,利用前面建立的快照将虛拟機還原到初始狀态。
1、建立實體分區
首先第一步還是對第二塊硬碟進行分區,分成“/dev/sdb1”和“/dev/sdb5”,并修改分區标記為8e。
2、建立實體卷
然後建立實體卷pv,用到的指令是pvcreate。
例:将分區/dev/sdb1和/dev/sdb5轉化為實體卷。
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb5
Writing physical volume data to disk "/dev/sdb1"
Physical volume "/dev/sdb1" successfully created
Writing physical volume data to disk "/dev/sdb5"
Physical volume "/dev/sdb5" successfully created
3、建立卷組
接下來建立卷組vg,用到的指令是vgcreate。
例:使用實體卷/dev/sdb1和/dev/sdb5建立名為wgroup的卷組。
[root@localhost ~]# vgcreate wgroup /dev/sdb1 /dev/sdb5
Volume group "wgroup" successfully created
用vgdisplay指令可以檢視卷組的資訊。
<a href="http://blog.51cto.com/attachment/201301/112209664.jpg" target="_blank"></a>
4、建立邏輯卷
從卷組中建立邏輯卷,用到的指令是lvcreate,指令的基本格式:
lvcreate –L 容量大小 –n 邏輯卷名 卷組名
例:從wgroup卷組中建立名為ftp的容量為19G的邏輯卷。
[root@localhost ~]# lvcreate -L 19G -n ftp wgroup
Logical volume "ftp" created
用lvdisplay指令可以檢視邏輯卷的詳細資訊。
<a href="http://blog.51cto.com/attachment/201301/112337650.jpg" target="_blank"></a>
5、建立并挂載檔案系統
邏輯卷就相當于是一個磁盤分區,要使用它首先要将其格式化。
[root@localhost ~]# mkfs -t ext4 /dev/wgroup/ftp
然後建立挂載點目錄,将邏輯卷挂載。
[root@localhost ~]# mkdir /var/ftp
[root@localhost ~]# mount /dev/wgroup/ftp /var/ftp
修改/etc/fstab檔案,實作永久挂載。
[root@localhost ~]# vim /etc/fstab
/dev/wgroup/ftp /var/ftp ext4 defaults 0 0
檢視已挂載的分區資訊。
<a href="http://blog.51cto.com/attachment/201301/112528183.jpg" target="_blank"></a>
6、擴充邏輯卷空間
最後,仍是将第三塊硬碟/dev/sdc加入到邏輯卷中。
先将硬碟分成一個分區/dev/sdc1,并将分區标記修改為8e。
然後将分區轉換成實體卷。
[root@localhost ~]# pvcreate /dev/sdc1
Writing physical volume data to disk "/dev/sdc1"
Physical volume "/dev/sdc1" successfully created
将實體卷/dev/sdc1添加到卷組wgroup中。
[root@localhost ~]# vgextend wgroup /dev/sdc1
Volume group "wgroup" successfully extended
擴充邏輯卷的空間。
[root@localhost ~]# lvextend -L +10G /dev/wgroup/ftp
Extending logical volume ftp to 29.00 GiB
Logical volume ftp successfully resized
執行resize2fs指令重設檔案系統的大小。
[root@localhost ~]# resize2fs /dev/wgroup/ftp
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/wgroup/ftp is mounted on /var/ftp; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 2
Performing an on-line resize of /dev/wgroup/ftp to 7602176 (4k) blocks.
The filesystem on /dev/wgroup/ftp is now 7602176 blocks long.
再次檢視檔案系統/var/ftp的空間大小,可以看到已經變成了29G。
<a href="http://blog.51cto.com/attachment/201301/112653556.jpg" target="_blank"></a>
本文轉自 yttitan 51CTO部落格,原文連結:
http://blog.51cto.com/yttitan/1126737