5 LVM 組態 #
本章介紹邏輯磁碟區管理員 (LVM) 的原理及其基本功能,以及令其在多種狀況下都能發揮效用的基本功能。YaST LVM 組態可透過 YaST 進階磁碟分割程式來完成。這個磁碟分割工具讓您編輯和刪除現有磁碟分割,以及建立應該與 LVM 一起使用的新磁碟分割。
使用 LVM 可能會增加風險,如遺失資料。這些危險也包括應用程式當機、電源中斷和錯誤指令。執行 LVM 或重新設定磁碟區前,請儲存您的資料。決不要在沒有備份的情形下工作。
5.1 瞭解邏輯磁碟區管理員 #
LVM 支援在多個實體磁碟區 (硬碟、分割區、LUN) 之間彈性地分配硬碟空間。在安裝過程中,僅當完成首次磁碟分割時需要變更硬碟空間的分割,由此開發了此工具。因為要修改正在執行之系統上的分割區很困難,LVM 提供了儲存空間的虛擬集區 (磁碟區群組,或稱之 VG)。需要時,可從虛擬集區建立邏輯磁碟區 (LV)。作業系統可以存取這些 LV,而不是存取實體分割區。磁碟區群組可以延伸至一個以上的磁碟,因此數個磁碟或是數個磁碟的某些部份可能會構成單一的 VG。借此,LVM 提供了一種從實體磁碟空間進行擷取的方法,允許使用比實體磁碟重新分割更為簡單和安全的方式來變更分割。
圖形 5.1 「實體分割與 LVM」比較實體分割 (左邊) 與 LVM 分割 (右邊)。在左邊,單一個磁碟已分割為三個實體分割區 (PART),每一個都會指定掛接點 (MP),讓作業系統存取它們。在右邊,已經個別將兩個磁碟分割成兩個及三個實體分割區。已經定義兩個 LVM 磁碟區群組 (VG1 與 VG2)。VG 1 包含磁碟 1 的兩個分割區和磁碟 2 的一個分割區。VG 2 包含磁碟 2 的其餘兩個分割區。
在 LVM 中,併入一個磁碟區群組中的實體磁碟分割區稱為實體磁碟區 (PV)。在圖形 5.1 「實體分割與 LVM」中的磁碟區群組中,已經定義 4 個邏輯磁碟區 (LV 1 至 LV 4),作業系統可以透過關聯的掛接點 (MP) 來使用這些邏輯磁碟區。在不同的邏輯磁碟區之間的邊緣,不需要對齊任何分割區的邊緣。請參閱此範例中 LV 1 與 LV 2 之間的邊緣。
LVM 功能:
數個硬碟或分割區可以在大的邏輯磁碟區結合成一個。
如果組態合適,當可用空間耗盡時,可以擴大 LV (例如
/usr
)。使用 LVM,就可以在執行的系統中新增硬碟或 LV。然而,這種作法需要能執行此動作的隨插即用式硬體。
可以啟動分割模式,將邏輯磁碟區的資料流分散至數個實體磁碟區。如果這些實體磁碟區位於不同的磁碟上,這可以改善讀寫效能,就像 RAID 0 一樣。
快照功能能夠讓執行系統中的備份 (特別是伺服器) 成為一致。
即使 LVM 也支援 RAID 層級 0、1、4、5 和 6,我們仍建議您使用 mdraid
(請參閱第 7 章 「軟體 RAID 組態」)。不過,LVM 在 RAID 0 和 1 下也可以正常運作,因為 RAID 0 類似於通用邏輯磁碟區管理 (各個邏輯區塊會對應至實體裝置上的區塊)。在 RAID 1 基礎上使用的 LVM 可以追蹤鏡像同步,並且完全能夠管理同步程序。使用更高的 RAID 層級時,需要透過一個管理精靈來監控附加磁碟的狀態,並在磁碟陣列出現問題時通知管理員。LVM 便包含這種精靈,但在裝置故障等例外情況下,該精靈無法正常運作。
如果您在 LVM 或軟體 RAID 陣列中為系統設定了根檔案系統,則必須將 /boot
置於單獨的非 LVM 或非 RAID 分割區上,否則系統將無法開機。此類分割區的建議大小為 500 MB,建議的檔案系統為 Ext4。
使用 LVM 的這些功能,對於使用頻繁的家用個人電腦或小型伺服器而言,在效能上可以看到改善。如果您在資料庫、音樂歸檔或使用者目錄中的資料會一直累積,LVM 就是非常適用的工具。可允許比實體硬碟還大的檔案系統。不過,請記住使用 LVM 與使用傳統分割區是不同的。
您可以使用 YaST 磁碟分割程式來管理新的或現有的 LVM 儲存物件。如需設定 LVM 的指示及詳細資訊,請參閱官方網站的 LVM HOWTO。
5.2 建立磁碟區群組 #
一個 LVM 磁碟區群組 (VG) 可將多個 Linux LVM 分割區組合到一個邏輯空間池中。您可以從群組的可用空間中切出邏輯磁碟區。群組中的 Linux LVM 分割區可以位於相同磁碟也可以位於不同的磁碟上。您可以新增分割區或整個磁碟來擴充群組的大小。
若要使用整個磁碟,磁碟不得包含任何分割區。使用分割區時,一定不能將它們掛接。在將分割區新增至 VG 時,YaST 會自動將它們的分割區類型變更為 0x8E Linux LVM
。
啟動 YaST 並開啟
。如果您需要重新設定現有分割設定,請依如下步驟操作。如需詳細資訊,請參閱第 10.1 節 「使用。如果您只是想利用現有的未使用磁碟或分割區,請跳過此步驟。 」
警告:未分割磁碟上的實體磁碟區可以使用某個未分割的磁碟做為實體磁碟區 (PV),前提是該磁碟不是安裝作業系統的磁碟,也不是作業系統從中開機的磁碟。
由於未分割的磁碟在系統層級顯示為未使用,因此很容易將其覆寫,或以錯誤的方式對其進行存取。
若要使用已包含分割區的整個硬碟,請刪除該磁碟上的所有分割區。
若要使用目前已掛接的分割區,請將其卸載。
在左側面板中,選取
。右側面板中即會開啟一份現有磁碟區群組清單。
在「磁碟區管理」頁面左下方,按一下
。按如下所示定義磁碟區群組:
指定
。如果您要在安裝時建立磁碟區群組,建議為將包含 SUSE Linux Enterprise Server 系統檔案的磁碟區群組指定
system
名稱。指定
。在 LVM1 中,4 MB 實體範圍允許的最大 LV 大小是 256 GB,因為該 LVM 最多支援每個 LV 有 65534 個範圍。在 SUSE Linux Enterprise Server 上使用的 LVM2 不會限制實體範圍數量。範圍數量較大不會影響邏輯磁碟區的 I/O 效能,但會降低 LVM 工具的速度。
重要:實體範圍大小在單個 VG 中不應混合使用不同的實體範圍大小。在進行初始設定後,就不應當再修改範圍。
在
清單中,選取要用來組成此磁碟區群組的 Linux LVM 分割區,然後按一下 以將它們移至 清單。按一下
(完成)。新群組便會出現在
清單中。
在「磁碟區管理」頁面中按
,確認新的磁碟區群組有列出,然後按一下 。若要檢查哪些實體裝置屬於磁碟區群組,請於任一時間在執行中系統內開啟 YaST 磁碟分割程式,然後按一下
› › 。按一下 離開此螢幕。圖 5.2︰ 名為 DATA 的磁碟區群組中的實體磁碟區 #
5.3 建立邏輯磁碟區 #
邏輯磁碟區會提供一個與硬碟提供的空間池相似的空間池。若要讓此空間可用,需要定義邏輯磁碟區。邏輯磁碟區類似於一般分割區,您可以將其格式化和掛接。
使用 YaST 磁碟分割程式可從現有磁碟區群組建立邏輯磁碟區。至少指定一個邏輯磁碟區給每個磁碟區群組。可以視需要建立新的邏輯磁碟區,直到磁碟區群組中的所有可用空間都用完為止。可以選擇性地簡易佈建一個 LVM 邏輯磁碟區,以便建立大小超出可用空間的邏輯磁碟區 (如需詳細資訊,請參閱第 5.3.1 節 「簡易佈建的邏輯磁碟區」)。
一般磁碟區:: (預設) 系統會立即配置磁碟區的空間。
簡易池:: 邏輯磁碟區是保留給簡易磁碟區使用的空間池。簡易磁碟區可以視需要從簡易池中配置它們所需的空間。
簡易磁碟區:: 建立為疏鬆磁碟區的磁碟區。該磁碟區會視需要從簡易池配置所需的空間。
鏡像磁碟區:: 建立的磁碟區中包含定義數量的鏡像。
啟動 YaST 並開啟
。在左側面板中,選取
。右側面板中即會開啟一份現有磁碟區群組清單。選取要在其中建立磁碟區的磁碟區群組,然後選擇
› 。提供磁碟區的第 5.3.1 節 「簡易佈建的邏輯磁碟區」)。按 以繼續。
,然後選擇 (如需設定簡易佈建磁碟區的資訊,請參閱指定磁碟區的大小以及是否使用多個等量磁區。
如果使用分割的磁碟區,資料將在多個實體磁碟區之間分配。如果這些實體磁碟區是在不同的硬碟上,通常可以改善讀寫效能 (像 RAID 0 一樣)。可用等量磁碟區的最大數量就是實體磁碟區的數量。預設值
1
表示不使用多個等量磁碟區。選擇磁碟區的
。您在此處所做的選擇只會影響即將開啟之對話方塊的預設值。它們可以在下一步中變更。如果不確定,請選擇 。在
下,選取 ,然後選取 。 功能表的內容視檔案系統而定。一般不需要變更預設值。在
下,選取 ,然後選取掛接點。按一下 可為磁碟區新增特殊掛接選項。按一下
(完成)。按
,確認變更有列出,然後按一下 。
5.3.1 簡易佈建的邏輯磁碟區 #
您可以選擇性地對 LVM 邏輯磁碟區進行簡易佈建。簡易佈建可讓您建立預訂大小超過可用空間的邏輯磁碟區。您可以建立一個簡易池,來包含保留的供任意數量簡易磁碟區使用的未使用空間。簡易磁碟區將建立為疏鬆磁碟區,並且會視需要從簡易池配置空間。簡易池可以在需要時動態擴充,以具成本效益的方式來配置儲存空間。簡易佈建磁碟區還支援快照 (可以使用 Snapper 進行管理),如需詳細資訊,請參閱第 10 章 「使用 Snapper 進行系統復原和快照管理」。
若要設定簡易佈建的邏輯磁碟區,請依程序 5.1 「設定邏輯磁碟區」所述操作。在選擇磁碟區類型時,請不要選擇 ,而應選擇 或 。
邏輯磁碟區是保留給簡易磁碟區使用的空間池。簡易磁碟區可以視需要從簡易池中配置它們所需的空間。
建立為疏鬆磁碟區的磁碟區。該磁碟區會視需要從簡易池配置所需的空間。
若要在叢集中使用簡易佈建磁碟區,使用它的簡易池和簡易磁碟區必須在單個叢集資源中管理。如此,簡易磁碟區和簡易池便可永遠獨佔地掛接在同一個節點上。
5.3.2 建立鏡像磁碟區 #
可以建立包含多個鏡像的邏輯磁碟區。LVM 可確保將寫入基礎實體磁碟區的資料鏡像到不同的實體磁碟區。因此,即使某個實體磁碟區當機,您仍可以存取邏輯磁碟區上的資料。LVM 還保留一個記錄檔案用於管理同步程序。記錄中包含哪些磁碟區區域目前正在與鏡像同步的相關資訊。依預設,記錄會儲存在磁碟上,並且與鏡像位於不同的磁碟 (如果可能的話)。不過,您可以為記錄指定一個不同的位置,例如暫時性記憶體。
目前可以使用兩種類型的鏡像實作:「正常」的 (非 raid) mirror
邏輯磁碟區和 raid1
邏輯磁碟區。
建立鏡像邏輯磁碟區後,可以對這些磁碟區執行標準操作,例如啟用、擴充和移除。
5.3.2.1 設定鏡像非 RAID 邏輯磁碟區 #
若要建立鏡像磁碟區,請使用 lvcreate
指令。以下範例會建立一個 500 GB 的邏輯磁碟區,其中包含兩個名為 lv1 的鏡像,並使用磁碟區群組 vg1。
>
sudo
lvcreate -L 500G -m 2 -n lv1 vg1
此類邏輯磁碟區是一種線性磁碟區 (無分割),可提供檔案系統的三個副本。m
選項指定鏡像的計數。L
選項指定邏輯磁碟區的大小。
邏輯磁碟區會分割成預設大小為 512 KB 的區域。如果需要不同大小的區域,請使用 -R
選項並後接所需的區域大小 (以 MB 計)。或者,可以在 lvm.conf
檔案中編輯 mirror_region_size
選項,以設定偏好的區域大小。
5.3.2.2 設定 raid1
邏輯磁碟區 #
由於 LVM 支援 RAID,您可以使用 RAID1 來實作鏡像。相比非 raid 鏡像,這種實作可提供以下優勢:
LVM 為每個鏡像影像維護一個完全備援的點陣圖區,從而提高其錯誤處理能力。
可以暫時性地從陣列中分割出鏡像影像,然後重新合併回去。
陣列可以處理暫時性故障。
LVM RAID 1 實作支援快照。
但另一方面,這種類型的鏡像實作不允許在叢集磁碟區群組中建立邏輯磁碟區。
若要使用 RAID 建立鏡像磁碟區,請執行以下指令
>
sudo
lvcreate --type raid1 -m 1 -L 1G -n lv1 vg1
其中,各選項/參數的意義如下:
--type
:需要指定raid1
,否則該指令將使用隱含區段類型mirror
,並建立非 raid 鏡像。-m
:指定鏡像的計數。-L
:指定邏輯磁碟區的大小。-n
:此選項用於指定邏輯磁碟區的名稱。vg1
:邏輯磁碟區使用之磁碟區群組的名稱。
LVM 將為陣列中的每個資料磁碟區建立具有一個範圍大小的邏輯磁碟區。如果您有兩個鏡像磁碟區,LVM 將另外建立兩個磁碟區用於儲存中繼資料。
建立 RAID 邏輯磁碟區之後,您可以像使用普通邏輯磁碟區一樣使用該磁碟區。可以將它啟用、擴充,等等
5.4 自動啟用非根 LVM 磁碟區群組 #
透過 /etc/lvm/lvm.conf
檔案中的 auto_activation_volume_list 參數來控制非根 LVM 磁碟區群組的啟用行為。該參數預設為空白,即所有磁碟區都會啟用。若只想啟用某些磁碟區群組,請新增名稱並用引號括住,同時以逗號分隔,例如:
auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
如果在auto_activation_volume_list參數中定義了清單,將會發生以下情況:
首先會依據此清單檢查每個邏輯磁碟區。
如果兩者不符,則不啟用該邏輯磁碟區。
依預設,在 dracut 重新啟動系統時,非根 LVM 磁碟區群組會自動啟用。此參數可讓您在系統重新啟動時啟動所有磁碟區群組,或者僅啟動指定的非根 LVM 磁碟區群組。
5.5 調整現有磁碟區群組的大小 #
您隨時都可在執行中系統內新增實體磁碟區,來擴充磁碟區群組提供的空間,而無需中斷服務。這一特性允許您將邏輯磁碟區新增至群組或擴充現有磁碟區的大小,如第 5.6 節 「調整邏輯磁碟區的大小」所述。
您還可以透過移除實體磁碟區來縮小磁碟區群組的大小。YaST 只允許移除目前未使用的實體磁碟區。若要瞭解哪些實體磁碟區目前在使用中,請執行以下指令。PE Ranges
欄中列出的分割區 (實體磁碟區) 是使用中的分割區 (實體磁碟區):
>
sudo
pvs -o vg_name,lv_name,pv_name,seg_pe_ranges root's password: VG LV PV PE Ranges /dev/sda1 DATA DEVEL /dev/sda5 /dev/sda5:0-3839 DATA /dev/sda5 DATA LOCAL /dev/sda6 /dev/sda6:0-2559 DATA /dev/sda7 DATA /dev/sdb1 DATA /dev/sdc1
5.6 調整邏輯磁碟區的大小 #
如果磁碟區群組中有未使用的可用空間可供使用,您可以增大邏輯磁碟區以提供更多可用空間。您還可以縮小某個磁碟區的大小,以便釋放磁碟區群組中可供其他邏輯磁碟區使用的空間。
YaST 在縮小磁碟區的大小時,還會自動調整其檔案系統的大小。目前掛接的磁碟區是否可以「線上」 (即處於掛接狀態時) 調整大小,取決於其檔案系統。Btrfs、XFS、Ext3 和 Ext4 支援線上增大檔案系統。
只有 Btrfs 支援線上縮小檔案系統。若要縮小 Ext2/3/4 檔案系統,需將其卸載。採用 XFS 格式的磁碟區無法縮小,因為 XFS 不支援檔案系統縮減。
5.7 刪除磁碟區群組或邏輯磁碟區 #
刪除磁碟區群組會損毀其每個成員分割區中的所有資料。刪除邏輯磁碟區會損毀儲存在磁碟區中的所有資料。
啟動 YaST 並開啟
。在左側面板中,選取
。右側面板中即會開啟一份現有磁碟區群組清單。選取要移除的磁碟區群組或邏輯磁碟區,然後按一下
。根據您的選擇,系統會顯示警告對話方塊。請按一下
進行確認。按一下
,驗證是否列出了已刪除磁碟區群組 (刪除項以紅色字體表示),然後按一下 。
5.8 開機時停用 LVM #
如果 LVM 儲存存在錯誤,對 LVM 磁碟區進行掃描可能會阻止進入緊急/救援外圍程序。這會導致無法進行進一步問題診斷。若要在發生 LVM 儲存故障的情況下停用此掃描,您可以在核心指令列上傳遞 nolvm
選項。
5.9 使用 LVM 指令 #
如需使用 LVM 指令的資訊,請參閱下表中所述指令的 man
頁面。執行所有指令都需要有 root
權限。請使用 sudo
COMMAND (建議採用此方式),或者直接以 root
身分執行這些指令。
pvcreate DEVICE
啟始化裝置 (例如
/dev/sdb1
),供 LVM 用做實體磁碟區。如果指定的裝置上存在任何檔案系統,將會出現警告。請記住,僅當已安裝pvcreate
時 (預設已安裝),blkid
才會檢查現有檔案系統。如果blkid
不可用,pvcreate
不會產生任何警告,因此您可能會在未收到任何警告的情況下遺失檔案系統。pvdisplay DEVICE
顯示 LVM 實體磁碟區的相關資訊,例如邏輯磁碟區中目前是否正在使用該磁碟區。
vgcreate -c y VG_NAME DEV1 [DEV2...]
使用一或多個指定的裝置建立叢集磁碟區群組。
vgcreate --activationmode ACTIVATION_MODE VG_NAME
設定磁碟區群組啟用模式。您可以指定以下其中一個值:
complete
:只能啟用不受缺少的實體磁碟區影響的邏輯磁碟區,即使特定的邏輯磁碟區能夠容許這種故障。degraded
:預設的啟用模式。如果提供了足夠的備援層級來啟用某個邏輯磁碟區,則即使缺少某些實體磁碟區,也能啟用該邏輯磁碟區。partial
:即使缺少某些實體磁碟區,LVM 也會嘗試啟用磁碟區群組。如果某個非備援邏輯磁碟區缺少重要的實體磁碟區,則通常無法啟用該邏輯磁碟區,而是將它做為錯誤目標進行處理。
vgchange -a [ey|n] VG_NAME
啟用 (
-a ey
) 或停用 (-a n
) 磁碟區群組及其邏輯磁碟區,以用於輸入/輸出。啟用叢集中的某個磁碟區時,請務必使用
ey
選項。此選項預設用於載入程序檔中。vgremove VG_NAME
移除磁碟區群組。使用此指令之前,移除邏輯磁碟區,然後取消啟動磁碟區群組。
vgdisplay VG_NAME
顯示指定磁碟區群組的相關資訊。
若要查看磁碟區群組的總體實體範圍,請輸入
>
vgdisplay VG_NAME | grep "Total PE"lvcreate -L SIZE -n LV_NAME VG_NAME
建立具有指定大小的邏輯磁碟區。
lvcreate -L SIZE --thinpool POOL_NAME VG_NAME
從磁碟區群組 VG_NAME 建立具有指定大小的簡易池
myPool
。以下範例會從磁碟區群組
LOCAL
建立大小為 5 GB 的簡易池:>
sudo
lvcreate -L 5G --thinpool myPool LOCALlvcreate -T VG_NAME/POOL_NAME -V SIZE -n LV_NAME
在池 POOL_NAME 中建立簡易邏輯磁碟區。以下範例會從磁碟區群組
LOCAL
上的myPool
池建立 1 GB 的簡易磁碟區myThin1
:>
sudo
lvcreate -T LOCAL/myPool -V 1G -n myThin1lvcreate -T VG_NAME/POOL_NAME -V SIZE -L SIZE -n LV_NAME
您也可以在一條指令中同時建立簡易池和簡易邏輯磁碟區:
>
sudo
lvcreate -T LOCAL/myPool -V 1G -L 5G -n myThin1lvcreate --activationmode ACTIVATION_MODE LV_NAME
設定邏輯磁碟區啟用模式。您可以指定以下其中一個值:
complete
:僅當邏輯磁碟區的所有實體磁碟區均處於使用中狀態時,才能啟用該邏輯磁碟區。degraded
:預設的啟用模式。如果提供了足夠的備援層級來啟用某個邏輯磁碟區,則即使缺少某些實體磁碟區,也能啟用該邏輯磁碟區。partial
:即使缺少某些實體磁碟區,LVM 也會嘗試啟用磁碟區。如果邏輯磁碟區有一部分不可用,可能會導致資料遺失。此選項通常不使用,但在還原資料時,它可能會有用。
您也可以透過在
/etc/lvm/lvm.conf
中指定activation_mode
組態選項的上述值之一,來指定啟用模式。lvcreate -s [-L SIZE] -n SNAP_VOLUME SOURCE_VOLUME_PATH VG_NAME
建立指定邏輯磁碟區的快照磁碟區。如果未包含大小選項 (
-L
或--size
),系統會將快照建立為簡易快照。lvremove /dev/VG_NAME/LV_NAME
移除邏輯磁碟區。
使用此指令之前,請執行
umount
指令卸載邏輯磁碟區以將其關閉。lvremove SNAP_VOLUME_PATH
移除快照磁碟區。
lvconvert --merge SNAP_VOLUME_PATH
將邏輯磁碟區回復為快照的版本。
vgextend VG_NAME DEVICE
將指定的裝置 (實體磁碟區) 新增至現有磁碟區群組。
vgreduce VG_NAME DEVICE
從現有磁碟區群組中移除指定的實體磁碟區。
確保實體磁碟區目前未由任何邏輯磁碟區使用。如果在使用中,您必須使用
pvmove
指令將資料移至另一個實體磁碟區。lvextend -L SIZE /dev/VG_NAME/LV_NAME
擴充指定邏輯磁碟區的大小。此後,您還必須擴充檔案系統以利用新增加的可用空間。如需詳細資料,請參閱第 2 章 「調整檔案系統的大小」。
lvreduce -L SIZE /dev/VG_NAME/LV_NAME
縮小指定邏輯磁碟區的大小。
在縮小磁碟區之前,請務必先縮小檔案系統的大小,否則會有遺失資料的風險。如需詳細資料,請參閱第 2 章 「調整檔案系統的大小」。
lvrename /dev/VG_NAME/LV_NAME /dev/VG_NAME/NEW_LV_NAME
重新命名現有 LVM 邏輯磁碟區,這不會變更磁碟區群組名稱。
如果您要使用 LVM 而不是 udev 規則來管理 LV 裝置節點和符號連結,可以使用下列其中一種方法來禁止 udev 發出通知:
在
/etc/lvm/lvm.conf
中設定activation/udev_rules = 0
和activation/udev_sync = 0
。請注意,在
lvcreate
指令中指定--nodevsync
的效果與設定activation/udev_sync = 0
相同;仍需設定activation/udev_rules = 0
。設定環境變數
DM_DISABLE_UDEV
:export DM_DISABLE_UDEV=1
這也會禁止 udev 發出通知。此外,還會忽略
/etc/lvm/lvm.conf
中的所有 udev 相關設定。
5.9.1 使用指令調整邏輯磁碟區的大小 #
lvresize
、lvextend
和 lvreduce
指令用於調整邏輯磁碟區大小。如需這些指令的語法及選項資訊,請參閱相應指令的手冊頁。若要擴充 LV,VG 上必須有足夠多的未配置空間。
建議您使用 YaST 磁碟分割程式來增大或縮小邏輯磁碟區。使用 YaST 時,磁碟區中檔案系統的大小也會自動調整。
您雖然可以在 LV 處於使用中狀態時手動對其進行擴充或縮小,但若其上包含檔案系統,則無法如此操作。擴充或縮減 LV 不會自動修改磁碟區中檔案系統的大小。在那之後必須使用另一個指令來增大檔案系統。如需調整檔案系統大小的相關資訊,請參閱第 2 章 「調整檔案系統的大小」。
手動調整 LV 大小時,請務必確保使用正確的順序:
若要擴充 LV,則必須先擴充 LV 然後再嘗試增大檔案系統。
若要縮減 LV,則必須先縮減檔案系統然後再嘗試縮減 LV。
若要擴充邏輯磁碟區的大小:
開啟終端機。
如果邏輯磁碟區包含 Ext2 或 Ext4 檔案系統,則不支援線上增大,請將其卸下。如果它包含為虛擬機器 (例如 Xen VM) 代管的檔案系統,請先關閉該 VM。
在終端機提示符處,輸入以下指令以增加邏輯磁碟區的大小:
>
sudo
lvextend -L +SIZE /dev/VG_NAME/LV_NAME對於 SIZE,請指定您要新增到邏輯磁碟區的空間容量,例如 10 GB。以邏輯磁碟區的 Linux 路徑取代
/dev/VG_NAME/LV_NAME
,例如/dev/LOCAL/DATA
。例如:>
sudo
lvextend -L +10GB /dev/vg1/v1調整檔案系統的大小。如需詳細資料,請參閱第 2 章 「調整檔案系統的大小」。
如果您已卸下了檔案系統,請重新掛接。
例如,將包含 (已裝載並啟用) Btrfs 的 LV 擴充 10 GB:
>
sudo
lvextend −L +10G /dev/LOCAL/DATA>
sudo
btrfs filesystem resize +10G /dev/LOCAL/DATA
若要縮小邏輯磁碟區的大小:
開啟終端機。
如果邏輯磁碟區不包含 Btrfs 檔案系統,請將其卸下。如果它包含為虛擬機器 (例如 Xen VM) 代管的檔案系統,請先關閉該 VM。請注意,包含 XFS 檔案系統之磁碟區的大小無法縮小。
調整檔案系統的大小。如需詳細資料,請參閱第 2 章 「調整檔案系統的大小」。
在終端機提示符處,輸入以下指令將邏輯磁碟區的大小縮小為檔案系統的大小:
>
sudo
lvreduce /dev/VG_NAME/LV_NAME如果您已卸載檔案系統,請重新掛接。
例如,若要將包含 Btrfs 的 LV 縮減 5 GB:
>
sudo
btrfs filesystem resize -size 5G /dev/LOCAL/DATA sudo lvreduce /dev/LOCAL/DATA
從 SUSE Linux Enterprise Server 12 SP1 開始,lvextend
、lvresize
和 lvreduce
即支援 --resizefs
選項,該選項不僅可以變更磁碟區的大小,而且能調整檔案系統的大小。因此,上面所示的 lvextend
和 lvreduce
範例也可以改寫為:
>
sudo
lvextend --resizefs −L +10G /dev/LOCAL/DATA>
sudo
lvreduce --resizefs -L -5G /dev/LOCAL/DATA
請注意,以下檔案系統支援 --resizefs
:ext2/3/4、Btrfs 和 XFS。目前只能在 SUSE Linux Enterprise Server 上使用此選項調整 Btrfs 的大小,因為之前的版本不支援此選項。
5.9.2 使用 LVM 快取磁碟區 #
LVM 支援使用高速區塊裝置 (例如 SSD 裝置) 做為大型慢速區塊裝置的寫回或直寫快取。快取邏輯磁碟區類型使用小型高速 LV 來提高大型慢速 LV 的效能。
若要設定 LVM 快取,需要在快取裝置上建立兩個邏輯磁碟區。較大的磁碟區用於快取自身,較小的磁碟區用於儲存快取中繼資料。這兩個磁碟區必須與原始磁碟區同屬一個磁碟區群組。建立這些磁碟區之後,需要將其轉換為快取池,並將該池附加到原始磁碟區:
在慢速裝置上建立原始磁碟區 (如果尚不存在)。
將實體磁碟區 (從快速裝置) 新增至原始磁碟區所屬的同一個磁碟區群組,然後在實體磁碟區上建立快取資料磁碟區。
建立快取中繼資料磁碟區。該磁碟區的大小應為快取資料磁碟區大小的 1/1000,最小 8 MB。
將快取資料磁碟區和中繼資料磁碟區合併成一個快取池磁碟區:
>
sudo
lvconvert --type cache-pool --poolmetadata VOLUME_GROUP/METADATA_VOLUME VOLUME_GROUP/CACHING_VOLUME將快取池附加到原始磁碟區:
>
sudo
lvconvert --type cache --cachepool VOLUME_GROUP/CACHING_VOLUME VOLUME_GROUP/ORIGINAL_VOLUME
如需 LVM 快取的詳細資訊,請參閱 lvmcache(7) 手冊頁。
5.10 標記 LVM2 儲存物件 #
標記是指定給儲存物件中繼資料的無序關鍵字或詞彙。透過使用標記,您可以為 LVM 儲存物件的中繼資料附加無序的標記清單,用實用的方式對物件集合進行分類。
5.10.1 使用 LVM2 標記 #
標記 LVM2 儲存物件之後,便可以在指令中使用標記來完成下列任務:
選取要根據是否存在特定標記來處理的 LVM 物件。
在組態檔案中使用標記,可控制在伺服器上啟動哪些磁碟區群組和邏輯磁碟區。
透過在指令中指定標記,覆寫全域組態檔案中的設定。
可以使用標記來代替接受下列各項的任何指令列 LVM 物件參考:
物件清單
單一物件,只要標記展開為單一物件
在所有位置都尚不支援用標記取代物件名稱。引數展開之後,對於清單中重複的引數,系統會移除重複的引數並保留每個引數的第一個例項。
每當遇到可能不明確的引數類型時,都必須在標記前面加上商業性 (@) 字元,例如 @mytag
。其他情況下,是否使用 「@」 隨您選擇。
5.10.2 建立 LVM2 標記的要求 #
將標記與 LVM 配合使用時,請考慮下列要求:
- 受支援的字元
LVM 標記單字可以包含 ASCII 大寫字元 A 到 Z、小寫字元 a 到 z、數字 0 到 9、底線 (_)、加號 (+)、連字號 (-) 及句點 (.)。單字不能以連字號開頭。最大長度為 128 個字元。
- 受支援的儲存物件
您可以標記 LVM2 實體磁碟區、磁碟區群組、邏輯磁碟區和邏輯磁碟區區段。PV 標記儲存在其磁碟區群組的中繼資料中。刪除磁碟區群組也會刪除未同步實體磁碟區中的標記。您雖然不能標記快照,但可以標記它們的來源。
無法對 LVM1 物件加標記,因為磁碟格式不支援。
5.10.3 指令列標記語法 #
--addtag
TAG_INFO將標記新增至 LVM2 儲存物件 (或對其加標記)。範例:
>
sudo
vgchange --addtag @db1 vg1--deltag
TAG_INFO移除 LVM2 儲存物件的標記 (或對其取消標記)。範例:
>
sudo
vgchange --deltag @db1 vg1--tag
TAG_INFO指定標記,用來縮小要啟動或取消啟動之磁碟區群組或邏輯磁碟區的清單。
如果磁碟區具有與提供的標記相符的標記,輸入以下指令可將其啟動 (範例):
>
sudo
lvchange -ay --tag @db1 vg1/vol2
5.10.4 組態檔案語法 #
下面幾節顯示特定使用案例的範例組態。
5.10.4.1 在 lvm.conf
檔案中啟用主機名稱標記 #
將下面的代碼新增至 /etc/lvm/lvm.conf
檔案中,可啟用主機上 /etc/lvm/lvm_<HOSTNAME>.conf
檔案中單獨定義的主機標記。
tags { # Enable hostname tags hosttags = 1 }
您需將啟用代碼放在主機上的 /etc/lvm/lvm_<HOSTNAME>.conf
檔案中。請參閱第 5.10.4.3 節 「定義啟用」。
5.10.4.2 在 lvm.conf 檔案中為主機名稱定義標記 #
tags { tag1 { } # Tag does not require a match to be set. tag2 { # If no exact match, tag is not set. host_list = [ "hostname1", "hostname2" ] } }
5.10.4.3 定義啟用 #
您可以修改 /etc/lvm/lvm.conf
檔案,以根據標記啟用 LVM 邏輯磁碟區。
在文字編輯器中,將以下代碼新增至該檔案:
activation { volume_list = [ "vg1/lvol0", "@database" ] }
以您的標記取代 @database
。使用 "@*"
會使該標記與主機上設定的任何標記相符。
啟用指令會比對磁碟區群組與邏輯磁碟區中繼資料中設定的 VGNAME、VGNAME/LVNAME 或 @TAG。當中繼資料標記相符時,磁碟區群組或邏輯磁碟區才會啟動。如果沒有相符標記,預設不會啟用任何項目。
如果沒有 volume_list
並且主機上定義了標記,則僅當主機標記與中繼資料標記相符時,磁碟區群組或邏輯磁碟區才會啟用。
如果 volume_list
已定義但為空白,並且主機上未定義任何標記,則不會啟用。
如果未定義 volume_list,不會對 LV 的啟用實施任何限制 (允許所有)。
5.10.4.4 在多個主機名稱組態檔案中定義啟用 #
如果 lvm.conf
檔案中啟用了主機標記,便可在主機組態檔案 (/etc/lvm/lvm_<HOST_TAG>.conf
) 中使用啟用代碼。例如,/etc/lvm/
目錄中包含某個伺服器的兩個組態檔案:
lvm.conf |
lvm_<HOST_TAG>.conf |
啟動時,會載入 /etc/lvm/lvm.conf
檔案,並處理該檔案中的任何標記設定。如果定義了任何主機標記,它會載入相關的 /etc/lvm/lvm_<HOST_TAG>.conf
檔案。當它搜尋特定組態檔案項目時,將會先搜尋主機標記檔案,然後再搜尋 lvm.conf
檔案,並在找到第一個相符項時停止搜尋。在 lvm_<HOST_TAG>.conf
檔案中,使用與標記設定順序相反的順序。如此會先搜尋最後設定之標記的檔案。在主機標記檔案中設定的新標記將觸發其他組態檔案的載入。
5.10.5 將標記用於叢集中的簡單啟用控制 #
在 /etc/lvm/lvm.conf
檔案中啟用 hostname_tags
選項,可以設定簡單的主機名稱啟用控制。在叢集中的每台機器上使用相同的檔案,使之成為全域設定。
在文字編輯器中,將以下代碼新增至
/etc/lvm/lvm.conf
檔案:tags { hostname_tags = 1 }
將該檔案複製到叢集中的所有主機上。
在叢集的任何機器中,將
db1
新增至啟用vg1/lvol2
的機器清單︰>
sudo
lvchange --addtag @db1 vg1/lvol2在
db1
伺服器上,輸入以下指令以將其啟動:>
sudo
lvchange -ay vg1/vol2
5.10.6 使用標記啟用叢集中的偏好主機 #
本節中的範例示範如何透過兩種方法實現下列目的:
僅啟用資料庫主機
db1
和db2
上的磁碟區群組vg1
僅啟用檔案伺服器主機
fs1
上的磁碟區群組vg2
。起初,在檔案伺服器備份主機
fsb1
上不啟動任何項目,但是讓它準備好接管檔案伺服器主機fs1
的工作。
5.10.6.1 選項 1:在主機之間複製的集中式管理和靜態組態 #
下面的解決方案會在多個主機之間複製單一組態檔案。
將
@database
標記新增至磁碟區群組vg1
的中繼資料。在終端機中輸入>
sudo
vgchange --addtag @database vg1將
@fileserver
標記新增至磁碟區群組vg2
的中繼資料。在終端機中輸入>
sudo
vgchange --addtag @fileserver vg2在文字編輯器中,新增以下代碼至
/etc/lvm/lvm.conf
檔案,以定義@database
、@fileserver
、@fileserverbackup
標記。tags { database { host_list = [ "db1", "db2" ] } fileserver { host_list = [ "fs1" ] } fileserverbackup { host_list = [ "fsb1" ] } } activation { # Activate only if host has a tag that matches a metadata tag volume_list = [ "@*" ] }
將修改後的
/etc/lvm/lvm.conf
檔案複製到四部主機:db1
、db2
、fs1
和fsb1
。如果檔案伺服器主機停機,在任何節點的終端機上輸入以下指令即可在
fsb1
上啟動vg2
:>
sudo
vgchange --addtag @fileserverbackup vg2>
sudo
vgchange -ay vg2
5.10.6.2 選項 2:本地化的管理和組態 #
在下面的解決方案中,每部主機都在本地保留要啟動哪些磁碟區類別的相關資訊。
將
@database
標記新增至磁碟區群組vg1
的中繼資料。在終端機中輸入>
sudo
vgchange --addtag @database vg1將
@fileserver
標記新增至磁碟區群組vg2
的中繼資料。在終端機中輸入>
sudo
vgchange --addtag @fileserver vg2在
/etc/lvm/lvm.conf
檔案中啟用主機標記:在文字編輯器中,新增以下代碼至
/etc/lvm/lvm.conf
檔案,以啟用主機標記組態檔案。tags { hosttags = 1 }
將修改後的
/etc/lvm/lvm.conf
檔案複製到四部主機:db1
、db2
、fs1
和fsb1
。
在主機
db1
上,建立資料庫主機db1
的啟動組態檔案。在文字編輯器中,建立/etc/lvm/lvm_db1.conf
檔案並新增以下代碼:activation { volume_list = [ "@database" ] }
在主機
db2
上,建立資料庫主機db2
的啟動組態檔案。在文字編輯器中,建立/etc/lvm/lvm_db2.conf
檔案並新增以下代碼:activation { volume_list = [ "@database" ] }
在主機 fs1 上,建立檔案伺服器主機
fs1
的啟動組態檔案。在文字編輯器中,建立/etc/lvm/lvm_fs1.conf
檔案並新增以下代碼:activation { volume_list = [ "@fileserver" ] }
如果檔案伺服器主機
fs1
停機,要將備用檔案伺服器主機 fsb1 做為檔案伺服器啟動:在主機
fsb1
上,建立主機fsb1
的啟用組態檔案。在文字編輯器中,建立/etc/lvm/lvm_fsb1.conf
檔案並新增以下代碼:activation { volume_list = [ "@fileserver" ] }
在終端機上,輸入以下指令之一:
>
sudo
vgchange -ay vg2>
sudo
vgchange -ay @fileserver