緯育 2026-0413
出自頂極製作所
本次講座聚焦於數據儲存的空間容量管理。講師先回顧過去面臨的儲存空間不足挑戰,說明安裝作業系統時進行磁碟分割的傳統作法及其限制(例如為 /boot 與 / 目錄配置固定容量)。接著轉入現代化解決方案,詳述邏輯磁碟區管理員(LVM)的概念、架構與優勢。
LVM 透過將多個實體硬碟或分割區整合為可動態調整的儲存池,突破傳統固定分割區難以擴充的瓶頸,允許在不停機、使用者無感的情況下進行擴充、縮減與管理。最後,講師介紹與 LVM 相關的核心名詞(PV、VG、LV)及基本指令,為後續實作打下基礎。
儲存空間規劃與挑戰
- 傳統空間管理的演變
- 過去:主要擔心容量不足,重點在限制使用量(如 Quota)。
- 現在:硬碟容量大幅提升,課題轉為如何有效規劃與管理龐大儲存空間。
- 作業系統安裝時的磁碟分割
- 傳統上安裝 Linux(如 CentOS)時,常將不同目錄(如 /boot, /home)分割至獨立分割區。
- 優點:未來如需擴充特定目錄的空間較為彈性。
- /boot 目錄容量規劃:
- 常見建議為 200MB。
- 實際需求取決於核心檔案大小。單一核心版本(含 vmlinuz 與 initramfs)約 67MB(範例為 16MB + 51MB)。
- 若需同時存放多個核心版本(如軟硬體測試),200MB 可能不足。
- /(根)目錄容量規劃:
- 建議值約 50GB~100GB。
- 實務上,基本 CentOS 約 2.6GB,Ubuntu 桌面版約 5.5GB~8GB;相較之下 100GB 顯得偏大。
- 相較 Windows 11(約 20GB),其大型更新會產生 Windows.old,暫時佔用近雙倍空間。
- /home 目錄容量規劃:
- 建議 200GB 以上,仍須視實際需求調整。若使用者不在伺服器存放個人資料,無須分配過大空間。
- 傳統硬碟擴充流程
- 空間不足時,多以更換更大容量硬碟因應。
- 流程耗時繁瑣,常需離峰(如半夜)進行。
- 步驟:停止服務 -> 關機 -> 安裝新碟 -> 開機 -> 複製資料至新碟 -> 關機 -> 拔除舊碟與調整排線 -> 開機 -> 設定掛載 -> 啟動服務。
- 全程至少數小時,過程若出錯將更耗時。
現代儲存空間管理方案
- 掛載遠端網路儲存(NAS)
- 將 Linux 伺服器的儲存空間掛載到遠端 NAS。
- 優點:擴充、縮減、備份等在 NAS 端完成;伺服器專注運算,即使主機故障,資料仍保存在 NAS。
- 注意伺服器與 NAS 連線的穩定性。
- 使用 Ceph 儲存系統
- Ceph 為軟體定義儲存方案,可視作更強大的 NAS。
- 建立分散式儲存池;安裝設定較複雜,甚至有專門付費課程。
- 邏輯磁碟區管理員(LVM)
- LVM(現行為 LVM2)為解決 Linux 空間不足而設計,源自 IBM 在 AIX 的技術。
- 允許不停機、使用者無感地動態調整(建立、擴充、縮減)儲存空間,常以一行指令即可完成。
LVM 的核心概念與架構
- 核心名詞解釋
- PV(Physical Volume,實體卷):
- 指實體硬碟、磁碟分割區或 RAID 陣列,為 LVM 最底層單元。
- 以將分割區型別標示為 8e(Linux LVM)作為建立 PV 的基礎。
- VG(Volume Group,卷群組):
- 由一個或多個 PV 組成的儲存池,即大的容量集合。
- LV(Logical Volume,邏輯卷):
- 自 VG 切割出的空間,等同傳統分割區(如 /dev/sda1)。
- 建立後需格式化才能掛載使用。
- PE(Physical Extent,實體範圍):
- VG 的最小儲存單位,預設 4MB,類似檔案系統的區塊大小。
- LE(Logical Extent,邏輯範圍):
- LV 的最小儲存單位,通常大小與 PE 相同。
- LV 總容量 =(PE 或 LE 的大小)× LE 數量。
- LVM 運作流程
1. 準備硬碟:備妥實體硬碟或分割區(如 /dev/sdc, /dev/sdd1)。 2. 建立 PV:使用指令將這些裝置轉為 PV。 3. 建立 VG:將一個或多個 PV 組合為 VG,並命名(如 myvg)。 4. 建立 LV:自 VG 切出所需大小的 LV,命名(如 mylv1)。 5. 格式化與掛載:如同一般分割區,先格式化再掛載至目錄。
- 擴充性:當 VG 容量不足時,可新增硬碟建立為 PV,加入既有 VG,即可擴大儲存池。
LVM 相關指令介紹
- PV(實體卷)相關指令
- pvscan:掃描系統所有 PV。
- pvdisplay:顯示 PV 詳細資訊。
- pvs:簡要顯示 PV 資訊。
- pvcreate /dev/sdX1:將指定分割區建立為 PV。
- pvremove /dev/sdX1:移除分割區的 PV 屬性。
- pvmove /dev/sdX1 /dev/sdY1:將來源 PV 上資料遷移至目標 PV。
- VG(卷群組)相關指令
- vgscan:掃描系統所有 VG。
- vgdisplay:顯示 VG 詳細資訊。
- vgs:簡要顯示 VG 資訊。
- vgcreate <vgname> /dev/sdX1 /dev/sdY1:以指定 PV 建立新的 VG。
- vgremove <vgname>:移除指定 VG。
- vgrename <oldvgname> <newvgname>:重新命名 VG。
- vgextend <vgname> /dev/sdZ1:將新 PV 加入現有 VG 擴充容量。
- vgreduce <vgname> /dev/sdX1:自 VG 移除指定 PV。
- LV(邏輯卷)相關指令
- lvscan:掃描系統所有 LV。
- lvdisplay:顯示 LV 詳細資訊。
- lvs:簡要顯示 LV 資訊。
- lvcreate -n <lvname> <vgname>:自指定 VG 建立新 LV。
- lvremove /dev/<vgname>/<lvname>:移除指定 LV。
- lvrename:重新命名 LV。
- lvresize:調整 LV 大小(可增減),支援 +10G、-10G、100G 等語法。
- lvextend:擴充 LV 容量。
- lvreduce:縮減 LV 容量。
LVM 基本架構與概念
- LVM 元件與術語對應
- 實體硬碟需先轉為 PV(Physical Volume),PV 不可直接使用,須群組成 VG(Volume Group)。
- VG 內的最小單位為 PE(Physical Extent);LV 的邏輯單位為 LE(Logical Extent),LE 與 PE 大小一致,講座示例以 4MB 為 PE/LE 大小。
- 從 VG「挖出」容量建立 LV;LV 大小 = LE 數量 × 每個 LE 大小(與 PE 相同),例如 500MB 約對應 125 個 PE/LE(以 4MB 為單位)。
- 名稱範例:VG 名為 MyVG1、LV 名為 MyLV1;裝置路徑為 /dev/MyVG1/MyLV1。
- 建置流程總覽
- 轉換:以 pvcreate 將 SDC、SDD 轉為 PV。
- 群組:以 vgcreate 建立 MyVG1,並將 PV(SDC、SDD)加入;後續可用 vgextend 擴充。
- 切割:以 lvcreate 從 MyVG1 切出 MyLV1(例如大小 500MB)。
- 格式化與掛載:以 mkfs.ext4(講者口誤提及 esd)格式化 /dev/MyVG1/MyLV1,於 /mnt/LVM(示例目錄)掛載後使用。
- 驗證:於掛載點建立目錄與檔案(例如建立 vmvr1 目錄與 test.vmvr 檔,寫入字串以 echo,ls/cat 檢視)。
- 指令族群與檢視工具
- PV 層:pvscan(掃描 PV)、pvdisplay(細節顯示)。
- VG 層:vgscan(掃描 VG)、vgdisplay(細節顯示)、vgcreate(建立 VG)、vgextend(加入 PV 擴充 VG)、vgreduce(移除 PV 縮減 VG)。
- LV 層:lvscan(掃描 LV)、lvdisplay(細節顯示)、lvcreate(建立 LV)、lvremove(移除 LV)。
- 裝置與掛載檢視:lsblk、df、mount;/dev/MyVG1/MyLV1 為實際掛載設備。
實作環境與硬體操作注意事項
- VM 與熱插拔實務
- 在實務主機(如 VDS)通常可熱插拔硬碟;但本次於 VM 環境為模擬,需關機後新增硬碟。
- 新增兩顆硬碟以示範 LVM(示例容量 20G、10G),重點在分辨第一與第二顆。
- 昨日分割示範用過的硬碟需移除以避免裝置命名混淆(避免由 SDB 變為 SDC/STD 等)。
- 開機後以 lsblk/ls 確認裝置;順序可能受核心偵測影響,若順序不一致可重開機重試。
- 裝置命名與穩定性
- 裝置名稱(如 sdb、sdc、sdd)在重啟或硬體變更後可能改變;需以掃描與顯示指令確認對象。
- 建議以 /dev/MyVG1/MyLV1 等邏徑掛載,減少直接以裸裝置掛載造成的風險。
建立 PV/VG/LV 的詳細步驟
- PV 建立
- 指令:pvcreate /dev/sdc、pvcreate /dev/sdd。
- 可用整顆硬碟或特定 partition(例如 /dev/sdc2);使用 partition 前需先完成分割。
- 檢查:pvscan 顯示已建立的 PV,初始尚未隸屬任何 VG。
- VG 建立與擴充
- 建立:vgcreate MyVG1 /dev/sdd /dev/sdc(可先加一顆,後續 vgextend 再加)。
- 顯示:vgscan、vgdisplay 檢視 VG 與容量、PE 數量。
- LV 建立
- 建立:lvcreate -L 500M -n MyLV1 MyVG1(大小可用 500M、1G 等)。
- 檢視:lvscan、lvdisplay;裝置路徑 /dev/MyVG1/MyLV1 生成。
- 格式化與掛載
- 格式化:mkfs.ext4 /dev/MyVG1/MyLV1(講者示例提及 mkfs.esd,實務常用 ext4/xfs)。
- 建目錄並掛載:mkdir -p /mnt/LVM;mount /dev/MyVG1/MyLV1 /mnt/LVM。
- 寫入與驗證:在 /mnt/LVM 建立 vmvr1 目錄與 test.vmvr 檔,echo 寫入字串,ls/cat 確認。
LV 容量動態調整(擴充與縮減)
- 擴充(增加容量)
- 指令偏好:lvresize(講者偏好 lvresize,亦稱 lvscale)。
- 相對擴充:lvresize -L +500M /dev/MyVG1/MyLV1,從 500M 擴至 1G(示例以 PE 計算:PE=4MB,125→250)。
- 絕對設置:lvresize -L 3G /dev/MyVG1/MyLV1,直接設定為 3G。
- 檢視:lsblk、lvdisplay、df 確認容量變更。
- 縮減(減少容量)
- 指令:lvresize -L 2G /dev/MyVG1/MyLV1,將 3G 改為 2G。
- 風險提示:系統會警告可能造成資料遺失;LVM 僅管理空間,不保證檔案系統內容安全。縮減前應確保檔案系統空間使用狀況、先行縮減檔案系統並備份。
- 驗證:縮減後進入掛載點檢視檔案是否仍在,示例中文件仍在。
- 實務建議
- 多採漸進式擴充(例如 +500M、+1G),減少縮減操作。
- 縮減需審慎,若使用者已將空間用滿,強制縮減易導致資料遺失與抱怨。
新增硬碟、資料遷移與移除舊碟
- 新增第三顆硬碟並加入 VG
- 關機新增 100G 硬碟(裝置示例 SDD),開機後以 pvscan 確認未加入任何 VG。
- 建立 PV:pvcreate /dev/sdd。
- 擴充 VG:vgextend MyVG1 /dev/sdd,使 MyVG1 容量由原約 60G 擴至約 160G(講者口語「1.9G」為口誤,脈絡為擴充總容量)。
- 檢視:vgdisplay 顯示 PV 數由 2→3。
- 以 pvmove 遷移資料
- 目的:將舊 20G 硬碟 SDB 上的內容遷移至新 100G 硬碟 SDD。
- 指令:pvmove /dev/sdb /dev/sdd(舊→新),過程需一段時間(示例一至兩分鐘)。
- 確認:遷移完成後資料仍在,掛載後可見。
- 正確移除舊硬碟
- 禁止直接拔除:直接抽出硬碟會使 VG 報錯(AO),影響後續操作。
- 正確流程:
1. vgreduce MyVG1 /dev/sdb(將 SDB 自 VG 移除)。 2. pvremove /dev/sdb(清除 PV 標籤,避免接到他機時造成誤判)。 3. pvscan 確認 SDB 不再為 PV;vgdisplay 顯示 PV 數由 3→2。 4. 關機拔除 SDB(20G),開機後以 lsblk/df 檢視,裝置編號可能改變但資料仍可掛載使用。
- 重新掛載:mount /dev/MyVG1/MyLV1 /mnt/LVM,ls/cat 檢視先前建立檔案(如 test.vmvr)仍在。
- 實務補充
- 操作前後皆建議使用 pvscan/vgscan/lvscan 進行確認。
- 若現場可熱插拔且設備與接頭可靠,可免關機;但為保險亦可選擇關機。
分割、格式化、掛載三步驟邏輯
- 通用流程
- 分割:決定使用整顆硬碟或特定分割區進行 LVM(示例選整顆)。
- 格式化:選擇檔案系統(ext4/xfs 等)於 LV 上建立。
- 掛載:建立目錄並掛載至系統以供使用者使用。
- 系統範例與理解
- 以 CentOS 為例,系統預設分割可能包含 /、/home、swap 等;理解系統如何使用 LVM 與分割有助於正確操作。