簡介
LVM,或稱為 Logical Volume Management,是一種存儲設備管理技術,使用戶可以將組件存儲設備的物理佈局進行池化和抽象,以便進行靈活的管理。利用 裝置映射器 Linux 內核框架,目前的版本 LVM2 可以將現有的存儲設備收集到組中,並根據需要從組合空間分配邏輯單元。
LVM 的主要優勢包括增加的抽象性、靈活性和控制性。邏輯卷可以具有有意義的名稱,如“數據庫”或“根備份”。卷還可以根據空間需求動態調整大小,在運行系統中在池中的物理設備之間遷移或導出。LVM 還提供了快照、分區和鏡像等高級功能。
在本指南中,您將學習 LVM 的工作原理,並練習在裸機上快速啟動和運行的基本命令。
LVM 架構和術語
在深入研究 LVM 管理命令之前,了解 LVM 如何組織存儲設備以及它使用的一些術語是很重要的。
LVM 存儲管理結構
LVM 通過在物理存儲設備之上進行抽象層層疊加來實現功能。LVM 使用的基本層次,從最原始開始,分別是:
-
物理卷: 物理卷的 LVM 工具前綴為
pv...
。這些物理卷是磁盤塊設備或其他類似磁盤的設備(例如,由設備映射器創建的其他設備,如 RAID 數組),並被 LVM 用作更高層次抽象的原始構建材料。物理卷是常規存儲設備。LVM 會向設備寫入標頭以分配它進行管理。 -
卷組: 卷組的 LVM 工具前綴為
vg...
。
LVM 將物理卷組合成稱為卷組的存儲池。卷組抽象化了底層設備的特性,並作為一個統一的邏輯設備,具有組成物理卷的合併存儲容量。 -
邏輯卷:邏輯卷的 LVM 實用程式前綴是
lv...
,通用 LVM 實用程式可能以lvm...
開頭。卷組可以被切割成任意數量的邏輯卷。邏輯卷在功能上等同於物理磁盤上的分割,但更具靈活性。邏輯卷是用戶和應用程序將與之交互的主要組件。
LVM 可用於將物理卷組合併成卷組,以統一系統中可用的存儲空間。然後,管理員可以將卷組分割為任意的邏輯卷,這些邏輯卷充當靈活的分割。
理解 Extents
每個卷組中的每個卷都被分成稱為extent的小固定大小塊。extent的大小由卷組決定。組內的所有卷都符合相同的extent大小。
物理卷上的extents稱為物理extents,而邏輯卷的extents則稱為邏輯extents。邏輯卷是LVM在邏輯和物理extents之間維護的映射。由於這種關係,extent大小代表LVM可以分配的最小空間。
Extents是LVM靈活性和功能的基礎。LVM將呈現為統一設備的邏輯extents不必映射到連續的物理extents。LVM可以在不中斷用戶的情況下複製和重新組織組成邏輯卷的物理extents。邏輯卷也可以通過添加或刪除extents來擴展或縮小。
常見用例
現在您已經熟悉LVM使用的一些術語和結構,可以探索一些常見的LVM使用方式。您將從使用兩個物理磁盤形成四個邏輯卷的流程開始。
將物理設備標記為物理卷
從掃描系統中 LVM 可訪問和管理的塊設備開始。您可以使用以下命令執行此操作:
- sudo lvmdiskscan
該命令的輸出將顯示 LVM 可與之交互的所有可用塊設備:
Output /dev/ram0 [ 64.00 MiB]
/dev/sda [ 200.00 GiB]
/dev/ram1 [ 64.00 MiB]
. . .
/dev/ram15 [ 64.00 MiB]
/dev/sdb [ 100.00 GiB]
2 disks
17 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
在此示例中,請注意當前有兩個磁盤和 17 個分區。這些分區主要是系統中用作性能增強的 RAM 磁盤 的 /dev/ram*
分區。此示例中的磁盤是 /dev/sda
(具有 200G 空間)和 /dev/sdb
(具有 100G)
警告:請務必仔細檢查您打算在 LVM 中使用的設備是否已經有任何重要數據寫入。在 LVM 中使用這些設備將覆蓋當前內容。如果您的伺服器上有重要數據,請在繼續之前進行備份。
現在您知道要使用的物理設備,請使用 pvcreate
命令將它們標記為 LVM 中的物理卷:
- sudo pvcreate /dev/sda /dev/sdb
Output Physical volume "/dev/sda" successfully created
Physical volume "/dev/sdb" successfully created
這將向設備寫入 LVM 標頭,指示它們已準備好添加到卷組中。
運行 pvs
命令來驗證 LVM 是否已註冊這些物理卷:
- sudo pvs
Output PV VG Fmt Attr PSize PFree
/dev/sda lvm2 --- 200.00g 200.00g
/dev/sdb lvm2 --- 100.00g 100.00g
請注意,這兩個裝置都在 PV
欄位下,該欄位代表物理卷。
將物理卷添加到卷組
現在您已經從您的裝置創建了物理卷,您可以創建一個卷組。大多數情況下,您在系統中只有一個卷組,以便在分配時最大程度地提高靈活性。以下卷組示例名為 LVMVolGroup
。您可以根據需要命名您的卷組。
要創建卷組並將您的兩個物理卷添加到其中,請運行:
- sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
Output Volume group "LVMVolGroup" successfully created
再次檢查 pvs
輸出,將指示您的物理卷現在與新的卷組相關聯:
- sudo pvs
Output PV VG Fmt Attr PSize PFree
/dev/sda LVMVolGroup lvm2 a-- 200.00g 200.00g
/dev/sdb LVMVolGroup lvm2 a-- 100.00g 100.00g
使用 vgs
列出卷組的簡短摘要:
- sudo vgs
Output VG #PV #LV #SN Attr VSize VFree
LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
您的卷組目前具有兩個物理卷,零個邏輯卷,並具有底層裝置的組合容量。
從卷組池中創建邏輯卷
现在您有一个可用的卷组,可以将其用作从中分配逻辑卷的池。与传统分区不同,使用逻辑卷时,您无需了解卷的布局,因为LVM会为您映射和处理这一切。您只需要提供卷的大小和名称。
在以下示例中,您将从卷组创建四个单独的逻辑卷:
- 10G“projects”卷
- 5G“www”卷用于Web内容
- 20G“db”卷用于数据库
- “workspace”卷,将填充剩余空间
要创建逻辑卷,请使用lvcreate
命令。您必须传入要提取的卷组,并可以使用-n
选项命名逻辑卷。要直接指定大小,可以使用-L
选项。如果相反,您希望按范围数量指定大小,则可以使用-l
选项。
使用-L
选项创建前三个逻辑卷:
- sudo lvcreate -L 10G -n projects LVMVolGroup
- sudo lvcreate -L 5G -n www LVMVolGroup
- sudo lvcreate -L 20G -n db LVMVolGroup
Output Logical volume "projects" created.
Logical volume "www" created.
Logical volume "db" created.
您可以通过从vgs
命令中选择自定义输出来查看逻辑卷及其与卷组的关系:
- sudo vgs -o +lv_size,lv_name
Output VG #PV #LV #SN Attr VSize VFree LSize LV
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 10.00g projects
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 5.00g www
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 20.00g db
在此示例中,您添加了输出的最后两列。它指示分配给逻辑卷的空间量。
現在,您可以使用 `-l` 標誌將餘下的空間分配給 "workspace"
卷,該標誌在 extents 中運作。您還可以提供百分比和單位以更好地傳達您的意圖。在此示例中,分配剩餘的空閒空間,因此您可以傳入 100%FREE
:
- sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Output Logical volume "workspace" created.
使用自定義 vgs
命令檢查卷組信息,請注意您已使用完所有可用的空間:
- sudo vgs -o +lv_size,lv_name
Output VG #PV #LV #SN Attr VSize VFree LSize LV
LVMVolGroup 2 4 0 wz--n- 299.99g 0 10.00g projects
LVMVolGroup 2 4 0 wz--n- 299.99g 0 5.00g www
LVMVolGroup 2 4 0 wz--n- 299.99g 0 20.00g db
LVMVolGroup 2 4 0 wz--n- 299.99g 0 264.99g workspace
已創建 workspace
卷,並且 LVMVolGroup
卷組已完全分配。
格式化和掛載邏輯卷
現在您有了邏輯卷,可以像正常的塊設備一樣使用它們。
這些邏輯設備在 /dev
目錄中可用,就像其他存儲設備一樣。您可以在兩個地方訪問它們:
/dev/volume_group_name/logical_volume_name
/dev/mapper/volume_group_name-logical_volume_name
要使用 Ext4 文件系統格式化您的四個邏輯卷,運行以下命令:
- sudo mkfs.ext4 /dev/LVMVolGroup/projects
- sudo mkfs.ext4 /dev/LVMVolGroup/www
- sudo mkfs.ext4 /dev/LVMVolGroup/db
- sudo mkfs.ext4 /dev/LVMVolGroup/workspace
或者,您可以運行以下命令:
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-projects
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-www
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-db
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-workspace
格式化後,創建掛載點:
- sudo mkdir -p /mnt/{projects,www,db,workspace}
然後將邏輯卷掛載到適當的位置:
- sudo mount /dev/LVMVolGroup/projects /mnt/projects
- sudo mount /dev/LVMVolGroup/www /mnt/www
- sudo mount /dev/LVMVolGroup/db /mnt/db
- sudo mount /dev/LVMVolGroup/workspace /mnt/workspace
為了使掛載持久化,請使用您喜歡的文本編輯器將它們添加到/etc/fstab
文件中。 以下示例使用nano
:
- sudo nano /etc/fstab
. . .
/dev/LVMVolGroup/projects /mnt/projects ext4 defaults,nofail 0 0
/dev/LVMVolGroup/www /mnt/www ext4 defaults,nofail 0 0
/dev/LVMVolGroup/db /mnt/db ext4 defaults,nofail 0 0
/dev/LVMVolGroup/workspace /mnt/workspace ext4 defaults,nofail 0 0
編輯完您的文件後,保存並退出。 如果您使用nano
,請按CTRL+c
,然後按y
,然後按ENTER
。
操作系統現在應該會在啟動時自動掛載LVM邏輯卷。
結論
您現在已經了解LVM管理的各個組件,以創建一個靈活的存儲系統,以及如何在LVM設置中啟動和運行存儲設備。
要了解更多關於使用LVM的信息,請查看我們的使用LVM與Ubuntu 18.04指南。