lfcs:管理 lvm 和建立 lvm 分區
在安裝 linux 系統的時候要做的最重要的決定之一便是給系統檔案、home 目錄等配置設定空間。在這個地方犯了錯,再要擴大空間不足的分區,那樣既麻煩又有風險。
邏輯卷管理 (lvm)相較于傳統的分區管理有許多優點,已經成為大多數(如果不能說全部的話) linux 發行版安裝時的預設選擇。lvm 最大的優點應該是能友善的按照你的意願調整(減小或增大)邏輯分區的大小。
lvm 的組成結構:
把一塊或多塊硬碟或者一個或多個分區配置成實體卷(pv)。
一個用一個或多個實體卷建立出的卷組(vg)。可以把一個卷組想象成一個單獨的存儲單元。
在一個卷組上可以建立多個邏輯卷。每個邏輯卷相當于一個傳統意義上的分區 —— 優點是它的大小可以根據需求重新調整大小,正如之前提到的那樣。
本文,我們将使用三塊 8 gb 的磁盤(/dev/sdb、/dev/sdc 和 /dev/sdd)分别建立三個實體卷。你既可以直接在整個裝置上建立 pv,也可以先分區在建立。
<a target="_blank"></a>
要在 /dev/sdb、/dev/sdc 和 /dev/sdd上建立實體卷,運作:
<code># pvcreate /dev/sdb /dev/sdc /dev/sdd</code>
你可以列出新建立的 pv ,通過:
<code># pvs</code>
并得到每個 pv 的詳細資訊,通過:
<code># pvdisplay /dev/sdx</code>
(x 即 b、c 或 d)
如果沒有輸入 <code>/dev/sdx</code> ,那麼你将得到所有 pv 的資訊。
使用 /dev/sdb<code>和</code>/dev/sdc<code>建立卷組 ,命名為</code>vg00<code>(在需要時是可以通過添加其他裝置來擴充空間的,我們等到說明這點的時候再用,是以暫時先保留</code>/dev/sdd`):
<code># vgcreate vg00 /dev/sdb /dev/sdc</code>
就像實體卷那樣,你也可以檢視卷組的資訊,通過:
<code># vgdisplay vg00</code>
由于 <code>vg00</code> 是由兩個 8 gb 的磁盤組成的,是以它将會顯示成一個 16 gb 的硬碟:

lvm 卷組清單
當談到建立邏輯卷,空間的配置設定必須考慮到當下和以後的需求。根據每個邏輯卷的用途來命名是一個好的做法。
舉個例子,讓我們建立兩個 lv,命名為 <code>vol_projects</code> (10 gb) 和 <code>vol_backups</code> (剩下的空間), 在日後分别用于部署項目檔案和系統備份。
參數 <code>-n</code> 用于為 lv 指定名稱,而 <code>-l</code> 用于設定固定的大小,還有 <code>-l</code> (小寫的 l)在 vg 的預留白間中用于指定百分比大小的空間。
<code># lvcreate -n vol_projects -l 10g vg00</code>
<code># lvcreate -n vol_backups -l 100%free vg00</code>
和之前一樣,你可以檢視 lv 的清單和基礎資訊,通過:
<code># lvs</code>
或是檢視詳細資訊,通過:
<code># lvdisplay</code>
若要檢視單個 lv 的資訊,使用 lvdisplay 加上 vg 和 lv 作為參數,如下:
<code># lvdisplay vg00/vol_projects</code>
邏輯卷清單
如上圖,我們看到 lv 已經被建立成儲存設備了(參考 lv path 那一行)。在使用每個邏輯卷之前,需要先在上面建立檔案系統。
這裡我們拿 ext4 來做舉例,因為對于每個 lv 的大小, ext4 既可以增大又可以減小(相對的 xfs 就隻允許增大):
<code># mkfs.ext4 /dev/vg00/vol_projects</code>
<code># mkfs.ext4 /dev/vg00/vol_backups</code>
我們将在下一節向大家說明,如何調整邏輯卷的大小并在需要的時候添加額外的外部存儲空間。
現在設想以下場景。<code>vol_backups</code> 中的空間即将用完,而 <code>vol_projects</code> 中還有富餘的空間。由于 lvm 的特性,我們可以輕易的減小後者的大小(比方說 2.5 gb),并将其配置設定給前者,與此同時調整每個檔案系統的大小。
幸運的是這很簡單,隻需:
<code># lvreduce -l -2.5g -r /dev/vg00/vol_projects</code>
<code># lvextend -l +100%free -r /dev/vg00/vol_backups</code>
減小邏輯卷和卷組
在調整邏輯卷的時候,其中包含的減号 <code>(-)</code> 或加号 <code>(+)</code> 是十分重要的。否則 lv 将會被設定成指定的大小,而非調整指定大小。
有些時候,你可能會遭遇那種無法僅靠調整邏輯卷的大小就可以解決的問題,那時你就需要購置額外的儲存設備了,你可能需要再加一塊硬碟。這裡我們将通過添加之前配置時預留的 pv (<code>/dev/sdd</code>),用以模拟這種情況。
想把 <code>/dev/sdd</code> 加到 <code>vg00</code>,執行:
<code># vgextend vg00 /dev/sdd</code>
如果你在運作上條指令的前後執行 vgdisplay <code>vg00</code> ,你就會看出 vg 的大小增加了。
檢視卷組磁盤大小
現在,你可以使用新加的空間,按照你的需求調整現有 lv 的大小,或者建立一個新的 lv。
當然,如果我們不打算實際的使用邏輯卷,那麼建立它們就變得毫無意義了。為了更好的識别邏輯卷,我們需要找出它的 <code>uuid</code> (用于識别一個格式化儲存設備的唯一且不變的屬性)。
要做到這點,可使用 blkid 加每個裝置的路徑來實作:
<code># blkid /dev/vg00/vol_projects</code>
<code># blkid /dev/vg00/vol_backups</code>
尋找邏輯卷的 uuid
為每個 lv 建立挂載點:
<code># mkdir /home/projects</code>
<code># mkdir /home/backups</code>
并在 <code>/etc/fstab</code> 插入相應的條目(確定使用之前獲得的uuid):
<code>uuid=b85df913-580f-461c-844f-546d8cde4646 /home/projects ext4 defaults 0 0</code>
<code>uuid=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults 0 0</code>
儲存并挂載 lv:
<code># mount -a</code>
<code># mount | grep home</code>
挂載邏輯卷
在這類的部署中,你通常會在 <code>raid</code> 上發現 <code>lvm</code>,這就是說,要先配置好 raid 然後它在上面配置 lvm。
原文釋出時間為:2016-07-21
本文來自雲栖社群合作夥伴“linux中國”