邏輯卷冊管理程式管理
LVM 管理員指南
版 1
摘要
簡介
1. 有關本指南
2. 閱讀對象
3. 軟體版本
表格 1. 軟體版本
| 軟體 | 描述 |
|---|---|
|
Red Hat Enterprise Linux 6
|
請參閱 RHEL 6 或更新版本
|
|
GFS2
|
請參閱 RHEL 6 或更新版本的 GFS2
|
4. 相關文件
- 安裝指南 — 記載了 Red Hat Enterprise Linux 6 安裝上的相關資訊。
- 建置指南 — 提供了 Red Hat Enterprise Linux 6 的建置、配置與管理上的相關資訊。
- 儲存管理指南 — 提供了如何有效在 Red Hat Enterprise Linux 6 上管理儲存裝置與檔案系統的相關資訊。
- High Availability 外掛程式總覽 — 提供了 Red Hat High Availability 外掛程式的e高層總覽。
- 叢集管理 — 提供了有關於安裝、配置和管理 Red Hat High Availability 外掛程式上的相關資訊。
- Global File System 2:配置與管理 — 提供了有關於安裝、配置和維護 Red Hat GFS2(Red Hat 全域檔案系統 2)上的相關資訊,並且這項資訊包含在 Resilient Storage 外掛程式中。
- DM Multipath — 提供了有關於 Red Hat Enterprise Linux 6 Device-Mapper Multipath 功能使用上的相關資訊。
- 負載平衡器管理 — 提供了有關於透過 Red Hat Load Balancer 外掛程式配置高效能系統和服務上的相關資訊,一組提供了 Linux 虛擬伺服器(LVS),以在多台真實伺服器之間,平衡 IP 負載的整合軟體元件。
- 發行公告 — 提供了最新 Red Hat 產品發行版的相關資訊。
5. 我們需要您的意見!
Logical_Volume_Manager_Administration(EN)-6 (2012-6-15-15:20)
章 1. LVM 邏輯卷測管理程式
1.1. 新功能與遭到變更的功能
1.1.1. Red Hat Enterprise Linux 6.0 上經過變更,和新的功能
- 您可透過
lvm.conf檔案的activation部份中的mirror_image_fault_policy和mirror_log_fault_policy參數,來定義當裝置失效時,鏡像邏輯卷冊會如何反應。當此參數被設為了remove時,系統會嘗試移除出錯的裝置,並在沒此裝置的情況下運作。當此參數被設為了allocate時,系統會嘗試移除出錯的裝置,並嘗試在新裝置上配置空間,以取代失效的裝置;若無適當的裝置與空間可用來替代的話,此政策將會如remove政策一般運作。欲取得更多有關於 LVM 鏡像失效政策上的相關資訊,請參閱〈節 4.4.3.1, “鏡像邏輯卷冊失效政策”〉。 - 在 Red Hat Enterprise Linux 6 發行版上,Linux I/O 堆疊已經過改善,以處理廠商所提供的 I/O 限制資訊。這能讓儲存管理工具(包括 LVM)優化資料定位與存取。這項支援可透過更改
lvm.conf檔案中,data_alignment_detection和data_alignment_offset_detection的預設值來停用,不建議您停用這項支援。欲取得 LVM 中的資料對稱資訊以及更改data_alignment_detection和data_alignment_offset_detection的預設值的關資訊,請參閱/etc/lvm/lvm.conf檔案的內嵌文件,此文件同時亦記載於〈附錄 B, LVM 配置檔案〉中。欲取得有關於 RHEL 6 中的 I/O 堆疊與 I/O 限制支援上的一般資訊,請參閱【儲存裝置管理指南】。 - 在 RHEL 6 中,Device Mapper 直接提供了
udev整合上的支援。這會同步化 Device Mapper 和所有與 Device Mapper 相關的udev,包括 LVM 裝置。欲取得更多有關於udev裝置管理員的 Device Mapper 支援上的相關資訊,請參閱〈節 A.3, “udev Device Manager(裝置管理員)的 Device Mapper 支援”〉。 - 在 RHEL 6 發行版上,當磁碟失效時,您可使用
lvconvert --repair指令來修復鏡像。這會將鏡像復原為正常的狀態。欲取得lvconvert --repair指令上的相關資訊,請參閱〈節 4.4.3.3, “修復鏡像邏輯裝置”〉。 - 從 RHEL 6 發行版開始,您將能使用
lvconvert指令的--merge選項來將 snapshot 合併入它原始的卷冊中。欲取得 snapshot 合併上的相關資訊,請參閱 節 4.4.5, “合併 Snapshot 卷冊”。 - 由 RHEL 6 發行版起,您將能使用
lvconvert指令的--splitmirrors引數來切割重複的鏡像邏輯卷冊映像,以形成新的邏輯卷冊。欲取得此選項使用上的相關資訊,請參閱〈節 4.4.3.2, “由鏡像邏輯卷冊切割出冗餘映像”〉。 - 現在當在建立鏡像邏輯裝置時,您可為透過了使用
lvcreate指令的--mirrorlog mirrored引數所映射的鏡像邏輯裝置,建立一個鏡像 log。欲取得使用此裝置上的相關資訊,請參閱〈節 4.4.3, “建立鏡像卷冊”〉。
1.1.2. Red Hat Enterprise Linux 6.1 上經過變更,和新的功能
- 從 Red Hat Enterprise Linux 6.1 發行版支援建立鏡像邏輯卷冊的 snapshot 邏輯卷冊。您可如您建立線性或磁條邏輯卷冊一般地建立鏡像卷冊的 snapshot。欲取得更多有關於建立 snapshot 卷冊上的相關資訊,請參閱〈節 4.4.4, “建立快照卷冊(Snapshot Volumes)”〉。
- 當延伸 LVM 卷冊時,您現在已能使用
lvextend指令的--alloc cling選項,來指定cling分配政策。此政策將會在與既有邏輯卷冊的最後磁區相同的實體卷冊上選擇空間。若實體卷冊上的空間不足,並且lvm.conf檔案中已定義了一列標籤,LVM 將會檢查是否有任何標籤已連接至實體卷冊,並嘗試在既有扇區和新扇區之間,比對這些實體卷冊標籤。 - 您現在已可在
pvchange、vgchange或lvchange指令中指定多重--addtag和--deltag引數。欲取得有關於新增或移除物件標籤上的相關資訊,請參閱〈節 C.1, “新增和移除物件標籤”〉。 - LVM 物件標籤中允許的字元已擴增,標籤現在已可包含「/」、「=」、「!」、「:」、「#」,以及「&」字元。欲取得 LVM 物件標籤上的相關資訊,請參閱〈附錄 C, LVM 物件標籤(Object Tags)〉。
- 您現在已可在單獨的邏輯卷冊中合併 RAID0(striping)和 RAID1(mirroring)。建立邏輯卷冊並同時指定鏡像數量(
--mirrors X)與磁條數量(--stripes Y),會使鏡像裝置所構成的裝置成為等量。欲取得建立鏡像邏輯卷冊上的相關資訊,請參閱〈節 4.4.3, “建立鏡像卷冊”〉。 - 由 Red Hat Enterprise Linux 6.1 發行版起,若您需要在叢集邏輯卷冊上建立一致的資料備份,您可單獨地啟用卷冊,然後建立 snapshot。欲取得更多有關於在一個節點上,單獨啟用邏輯卷冊的相關資訊,請參閱〈節 4.7, “在叢集中啟用各別節點上的邏輯卷冊”〉。
1.1.3. RHEL 6.2 上受到變更以及新的功能
- Red Hat Enterprise Linux 6.2 發行版本的
lvm.conf配置檔案支援issue_discards參數。當此參數被設定時,如果邏輯卷冊不再使用實體卷冊的空間時,LVM 會發出棄置訊號至邏輯卷冊下方的實體卷冊。\n欲知此參數的更多資訊,請參閱/etc/lvm/lvm.conf檔案中的文件,或從 附錄 B, LVM 配置檔案 中取得。
1.1.4. RHEL 6.3 上受到變更以及新的功能
- 由 RHEL 6.3 發行版起,LVM 支援了 RAID4/5/6 以及新的鏡像實作。欲知 RAID 邏輯卷冊的相關資訊,請參閱 節 4.4.13, “RAID 邏輯卷冊”。
- 當您建立新的鏡射裝置,且不需要加以修改時,您可以指定
--nosync選項,表示不需要從第一個裝置進行初始同步。欲知建立鏡射卷冊的資訊,請參閱〈節 4.4.3, “建立鏡像卷冊”〉。 - 本手冊現在也記載 snapshot
autoextend功能。欲知建立 snapshot 卷冊的資訊,請參閱〈節 4.4.4, “建立快照卷冊(Snapshot Volumes)”〉。
1.2. 邏輯卷冊
- 可變通的容量當使用邏輯卷冊時,檔案系統可延伸至多重磁碟上,因為您可將磁碟和分割區聚合為一個單獨的邏輯卷冊。
- 可重設大小的儲存池(Resizeable storage pools)您可在不格式化與重新分割基本磁碟裝置的情況下透過基本的軟體指令來延伸或遞減邏輯卷冊的大小。
- 線上資料重置(Online data relocation)若要建置更新、更快,或更有彈性的儲存子系統,您可在您的系統啟用時移動資料。資料可在磁碟使用中的時候被重新整理。比方說,您可在移除一個熱插拔磁碟之前先將它清空。
- 方便的裝置命名邏輯儲存卷冊可管理於用戶定義群組中,並且您可視您的喜好來進行命名。
- 多磁碟記錄塊串操作(Disk striping)您可建立一個將資料分散在兩個或更多磁碟上的邏輯卷冊。這會顯著地增加總處理能力。
- 卷冊鏡像邏輯卷冊提供了一個便利的方式來為您的資料配置一個鏡像。
- 卷冊快照(Volume Snapshots)當使用邏輯卷冊時,您能夠透過產生裝置快照來進行含有一致性的備份,或在不影響真實資料的情況下測試進行變更後的效果。
1.3. LVM 架構總覽
- 可變通的容量
- 更有效率的 metadata 儲存
- 較佳的復原格式
- 新的 ASCII metadata 格式
- metadata 的基元變更
- metadata 的重複副本
vgconvert 指令來將卷冊群組由 LVM1 格式轉換為 LVM2 格式。如欲取得更多有關於轉換 LVM metadata 格式的相關資訊,請參閱 vgconvert(8) man page。

圖形 1.1. LVM 邏輯卷冊元件
1.4. 叢集邏輯卷測管理員(Clustered Logical Volume Manager,CLVM)
- 若您系統只有一個節點需要存取您配置來作為邏輯卷冊的儲存裝置,那麼您可使用 LVM 並且不使用 CLVM 的延伸,以該節點建立的邏輯卷冊便都會是節點的本地邏輯卷冊。
- 若您使用叢集系統作為容錯服務用,而任何時候皆只有一個存取儲存裝置的節點會啟用的話,您應使用 High Availability Logical Volume Management 代理程式(HA-LVM)。
- 若您的叢集有超過一個節點需要存取您的儲存裝置並在啟用的節點之間進行共享的話,那麼您就必須使用 CLVM。CLVM 允許用戶透過在配置邏輯卷冊時將實體儲存裝置鎖定以便配置共享儲存裝置上的邏輯卷冊,並使用叢集鎖定服務來管理共享儲存裝置。
clvmd daemon, 皆必須要執行。clvmd daemon 為 LVM 的關鍵叢集延伸。clvmd daemon 會在各個叢集電腦中執行,並在叢集中分配 LVM metadata 的更新,提供各個叢集電腦相同的邏輯卷冊視點。欲取得更多有關於安裝和管理 High Availability 外掛程式的相關資訊,請參閱《叢集管理》。
clvmd 會在開機時啟動,您可針對於 clvmd 服務執行一項 chkconfig ... on 指令,如下:
# chkconfig clvmd onclvmd daemon 沒有啟動的話,您可針對於 clvmd 服務執行一項 service ... start 指令,如下:
# service clvmd start警告

圖形 1.2. CLVM 總覽
注意
lvm.conf 檔案,CLVM 才能達到叢集全域(cluster-wide)的鎖定。欲取得有關於配置 lvm.conf 檔案來支援叢集鎖定上的相關資訊,請查看 lvm.conf 這個檔案。欲取得有關於 lvm.conf 檔案的相關資訊,請參閱〈附錄 B, LVM 配置檔案〉。
1.5. 文件總覽
- 〈章 2, LVM 元件〉描述了構成一個 LVM 邏輯卷冊的元件。
- 〈章 3, LVM 管理總覽〉提供了您配置 LVM 邏輯卷冊所進行的基本步驟之總覽(無論您是使用 LVM 指令列介面〔CLI〕指令或是 LVM 圖形化用戶介面〔GUI〕)。
- 〈章 4, 透過 CLI 指令來進行 LVM 管理〉概述了您可透過 LVM CLI 指令來執行,並建立和維護邏輯卷冊的各別管理工作。
- 〈章 5, LVM 配置範例〉提供了各種 LVM 配置的範例。
- 〈章 6, LVM 疑難排解〉提供了針對於各種 LVM 問題所進行的疑難排解上的指示。
- 〈章 7, 利用 LVM GUI 來進行 LVM 管理〉概述了 LVM GUI 的作業。
- 〈附錄 A, 裝置映射(Device Mapper)設備〉描述了 LVM 使用來映射邏輯和實體卷冊的 Device Mapper。
- 〈附錄 B, LVM 配置檔案〉描述了 LVM 配置檔案。
- 〈附錄 C, LVM 物件標籤(Object Tags)〉描述了 LVM 物件標籤和主機標籤。
- 〈附錄 D, LVM 卷冊群組 Metadata〉描述了 LVM 卷冊群組的 metadata,並包含一個 LVM 卷冊群組的 metadata 範本。
章 2. LVM 元件
2.1. 實體卷冊
2.1.1. LVM 實體卷冊配置
注意

圖形 2.1. 實體卷冊配置
2.1.2. 磁碟上的多重分割區
- 管理上的方便性在系統中若各個真實的磁碟只出現一次的話,這將能簡化系統中的硬體追蹤(特別是當磁碟發生錯誤時)。此外,單獨磁碟上的多重實體卷冊可能會造成 kernel 在啟動時發出有關於不明分割區類型的相關警告。
- 等量磁碟效能(Striping performance)LVM 無法得知兩個實體卷冊是否位於相同的實體磁碟上。若您在兩個實體卷冊位於相同實體磁碟上時建立了一個等量的邏輯卷冊的話,等量磁碟可能會位於相同磁碟的不同分割區上。這將會造成效能上的降低。
2.2. 卷冊群組
2.3. LVM 邏輯卷冊
2.3.1. 線性邏輯卷冊

圖形 2.2. 扇區映射(Extent Mapping)
VG1 和一個大小為 4MB 的實體扇區。此卷冊群組包含了兩個實體卷冊,它們名為 PV1 和 PV2。實體卷冊會被劃分為 4MB 的單位,因為那就是扇區的大小。在此範例中,PV1 的大小為 100 個扇區(400MB)並且 PV2 的大小為 200 個扇區(800MB)。您可建立一個大小為 1 至 300 個扇區之間(4MB 至 1200MB)的線性卷冊。在此範例中,名為 LV1 的線性卷冊的大小為 300 個扇區。

圖形 2.3. 含有不平均的實體卷冊的線性卷冊
LV1,大小為 250 個扇區(1000MB)以及 LV2,大小為 50 個扇區(200MB)。

圖形 2.4. 多重邏輯卷冊
2.3.2. 等量邏輯卷冊
- 第一個等量磁碟的資料已被寫至 PV1
- 第二個等量磁碟的資料已被寫至 PV2
- 第三個等量磁碟的資料已被寫至 PV3
- 第四個等量磁碟的資料已被寫至 PV1

圖形 2.5. 將資料等量分配在三個 PV 之間
2.3.3. 鏡像邏輯卷冊

圖形 2.6. 鏡像邏輯卷冊
2.3.4. Snapshot 卷冊
注意
注意
注意
/usr)之所需空間,會比擁有較多寫入次數的卷冊的長期性 snapshot 之所需空間還要少。
- 一般來講,snapshot 會使用於當您需要在邏輯卷冊上進行備份,而不影響持續進行資料更新的即時系統的情況下。
- 您可在一個 snapshot 檔案系統上執行
fsck這項指令,以檢查檔案系統的整合性,並判斷原始的檔案系統是否需要進行檔案系統修復。 - 因為 snapshot 為可讀寫(read/write),因此您可透過製作一個 snapshot,並針對於該 snapshot 執行測試的方式,來使用應用程式針對於生產資料進行測試,並且完全不動到真實的資料。
- 您可建立 LVM 卷冊,以搭配 Red Hat 虛擬化使用。LVM snapshot 可被使用來建立虛擬客座映像的 snapshot。這些 snapshot 可提供便利的方式來修改既有客座端,或以最少額外儲存空間來建立新客座端。欲取得在 Red Hat Virtualization 中建立以 LVM 為基礎的儲存集區之資訊,請參閱《虛擬管理指南》。
lvconvert 指令的 --merge 選項來將 snapshot 合併入它原始的卷冊中。此功能的用途之一,就是當您遺失資料或檔案時,進行系統復原,或是當您需要將系統回復為先前的狀態時。當您合併了 snapshot 卷冊之後,形成的邏輯卷冊將會擁有原始卷冊的名稱、minor 數字,以及 UUID,並且合併的 snapshot 將會被移除。欲取得使用此選項上的相關資訊,請參閱〈節 4.4.5, “合併 Snapshot 卷冊”〉。
章 3. LVM 管理總覽
3.1. 在叢集中建立 LVM 卷冊
clvmd daemon,如〈節 1.4, “叢集邏輯卷測管理員(Clustered Logical Volume Manager,CLVM)”〉中所描述。
lvm.conf 檔案,CLVM 才能達到叢集全域(cluster-wide)的鎖定。如欲取得有關於配置 lvm.conf 檔案來支援叢集鎖定,請查看 lvm.conf 這個檔案。欲取得有關於 lvm.conf 檔案的相關資訊,請參閱〈附錄 B, LVM 配置檔案〉。
警告
3.2. 邏輯卷冊建立總覽
- 初始化您將會使用來作為實體卷冊的 LVM 卷冊分割區(這會將它們標記下來)。
- 建立卷冊群組。
- 建立邏輯卷冊
注意
- 藉由
mkfs.gfs2指令來在邏輯卷冊上建立一個 GFS2 檔案系統。 - 透過
mkdir指令來建立新的掛載點。在叢集的系統中,請在叢集中所有的節點上建立掛載點。 - 掛載檔案系統。您可能會希望為系統中的各個節點附加一列行列至
fstab檔案中。
3.3. 在邏輯卷冊上遞增檔案系統
- 建立一個新的實體卷冊
- 將包含著邏輯卷冊以及您所希望遞增的檔案系統的卷冊群組延伸來包含新的實體卷冊。
- 將邏輯卷冊延伸來包含新的實體卷冊。
- 遞增檔案系統。
3.4. 邏輯卷冊備份
lvm.conf 檔案中停用。就預設值,metadata 的備份儲存於 /etc/lvm/backup 檔案中,並且 metadata archive 則儲存在 /etc/lvm/archive 檔案中。Metadata archive 儲存在 /etc/lvm/archive 檔案中的保留時間長短,和 archive 檔案的數量取決於您在 lvm.conf 檔案中所設的參數。每日的系統備份,皆應包含著 /etc/lvm 目錄的內容於備份中。
vgcfgbackup 指令來手動式地將 metadata 備份至 /etc/lvm/backup 檔案。您可利用 vgcfgrestore 指令來恢復 metadata。vgcfgbackup 和 vgcfgrestore 指令的描述位於〈節 4.3.12, “備份卷冊群組的 Metadata”〉中。
3.5. 記錄
- 標準輸出/錯誤
- syslog
- 日誌檔案
- 外部記錄功能
/etc/lvm/lvm.conf 檔案中設置(描述於〈附錄 B, LVM 配置檔案〉中)。
章 4. 透過 CLI 指令來進行 LVM 管理
注意
clvmd daemon。如欲取得更多相關資訊,請參閱〈節 3.1, “在叢集中建立 LVM 卷冊”〉。
4.1. 使用 CLI 指令
--units 引數時,小寫表示單位為 1024 的倍數,而大寫則表示單位為 1000 的倍數。
vg0 的卷冊群組中的 lvol0 邏輯卷冊可被指定為 vg0/lvol0。當需要一列必要的卷冊群組,不過卻被保留為空白時,該卷冊群組中的所有邏輯卷冊就會被帶入。比方說,lvdisplay vg0 指令將會顯示 vg0 卷冊群組中所有的邏輯卷冊。
-v 引數,您可多重輸入該引數來增加輸出的詳細度。比方說,下列範例顯示了 lvcreate 指令的預設輸出。
# lvcreate -L 50MB new_vg
Rounding up size to full physical extent 52.00 MB
Logical volume "lvol0" created
lvcreate 指令以及 -v 引數的輸出。
# lvcreate -v -L 50MB new_vg
Finding volume group "new_vg"
Rounding up size to full physical extent 52.00 MB
Archiving volume group "new_vg" metadata (seqno 4).
Creating logical volume lvol0
Creating volume group backup "/etc/lvm/backup/new_vg" (seqno 5).
Found volume group "new_vg"
Creating new_vg-lvol0
Loading new_vg-lvol0 table
Resuming new_vg-lvol0 (253:2)
Clearing start of logical volume "lvol0"
Creating volume group backup "/etc/lvm/backup/new_vg" (seqno 5).
Logical volume "lvol0" created
-vv、-vvv 或是 -vvvv 引數來顯示更加詳細的指令執行資訊。目前,-vvvv 引數提供了最大量的資訊。下列範例僅顯示了 lvcreate 指令以及 -vvvv 引數的輸出的前幾個行列。
# lvcreate -vvvv -L 50MB new_vg
#lvmcmdline.c:913 Processing: lvcreate -vvvv -L 50MB new_vg
#lvmcmdline.c:916 O_DIRECT will be used
#config/config.c:864 Setting global/locking_type to 1
#locking/locking.c:138 File-based locking selected.
#config/config.c:841 Setting global/locking_dir to /var/lock/lvm
#activate/activate.c:358 Getting target version for linear
#ioctl/libdm-iface.c:1569 dm version OF [16384]
#ioctl/libdm-iface.c:1569 dm versions OF [16384]
#activate/activate.c:358 Getting target version for striped
#ioctl/libdm-iface.c:1569 dm versions OF [16384]
#config/config.c:864 Setting activation/mirror_region_size to 512
...
--help 引數來顯示任何 LVM CLI 指令的協助畫面。
# commandname --helpman 指令:
# man commandnameman lvm 指令提供了有關於 LVM 的一般線上資訊。
/dev/sdf 的實體卷冊(卷冊群組的一部分),然後再將它放回去時,卻發現它已成為了 /dev/sdk 時,這將會非常有幫助。LVM 還是有辦法找到實體卷冊,因為它會藉由實體卷冊的 UUID 來進行辨識,而非藉由實體卷冊的裝置名稱。欲取得在建立實體卷冊時,指定實體卷冊 UUID 上的相關資訊,請參閱〈節 6.4, “復原實體卷冊的 Metadata”〉。
4.2. 實體卷冊管理
4.2.1. 建立實體卷冊
4.2.1.1. 設定分割區類型
fdisk 或是 cfdisk 指令來設為 0x8e。當使用整個磁碟裝置時,只有分割表必須被清除掉,如此一來便能有效地清除該磁碟上的所有資料。您可藉由使用下列指令來將第一個磁區化零以便移除現有的分割表:
# dd if=/dev/zero of=PhysicalVolume bs=512 count=14.2.1.2. 初始化實體卷冊
pvcreate 指令來初始化一個將被用來作為實體卷冊的區塊裝置。初始化和格式化檔案系統是相似的。
/dev/sdd、/dev/sde 和 /dev/sdf 為 LVM 實體卷冊,以事後作為 LVM 邏輯卷冊一部份使用。
# pvcreate /dev/sdd /dev/sde /dev/sdfpvcreate 指令。下列範例將 /dev/hdb1 作為 LVM 實體卷冊初始化並作為事後 LVM 邏輯卷冊的一部分來使用。
# pvcreate /dev/hdb14.2.1.3. 掃描區塊裝置
lvmdiskscan 指令來掃描可用來作為實體卷冊的區塊裝置,如下列範例所示。
# lvmdiskscan
/dev/ram0 [ 16.00 MB]
/dev/sda [ 17.15 GB]
/dev/root [ 13.69 GB]
/dev/ram [ 16.00 MB]
/dev/sda1 [ 17.14 GB] LVM physical volume
/dev/VolGroup00/LogVol01 [ 512.00 MB]
/dev/ram2 [ 16.00 MB]
/dev/new_vg/lvol0 [ 52.00 MB]
/dev/ram3 [ 16.00 MB]
/dev/pkl_new_vg/sparkie_lv [ 7.14 GB]
/dev/ram4 [ 16.00 MB]
/dev/ram5 [ 16.00 MB]
/dev/ram6 [ 16.00 MB]
/dev/ram7 [ 16.00 MB]
/dev/ram8 [ 16.00 MB]
/dev/ram9 [ 16.00 MB]
/dev/ram10 [ 16.00 MB]
/dev/ram11 [ 16.00 MB]
/dev/ram12 [ 16.00 MB]
/dev/ram13 [ 16.00 MB]
/dev/ram14 [ 16.00 MB]
/dev/ram15 [ 16.00 MB]
/dev/sdb [ 17.15 GB]
/dev/sdb1 [ 17.14 GB] LVM physical volume
/dev/sdc [ 17.15 GB]
/dev/sdc1 [ 17.14 GB] LVM physical volume
/dev/sdd [ 17.15 GB]
/dev/sdd1 [ 17.14 GB] LVM physical volume
7 disks
17 partitions
0 LVM physical volume whole disks
4 LVM physical volumes
4.2.2. 顯示實體卷冊
pvs、pvdisplay 以及 pvscan。
pvs 指令會將實體卷冊資訊以可配置的格式顯示(一個實體卷冊一行)。pvs 指令提供了許多格式控制,並且對於進行 script 相當有幫助。如欲取得使用 pvs 指令來自訂化您的輸出的相關資訊,請參閱〈節 4.8, “LVM 的自訂化回報”〉。
pvdisplay 指令會為各個實體卷冊提供詳細的多行輸出。它會以一個固定的格式來顯示實體的內容(大小、扇區、卷冊群組等等)。
pvdisplay 指令的輸出。
# pvdisplay
--- Physical volume ---
PV Name /dev/sdc1
VG Name new_vg
PV Size 17.14 GB / not usable 3.40 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 4388
Free PE 4375
Allocated PE 13
PV UUID Joqlch-yWSj-kuEn-IdwM-01S9-XO8M-mcpsVe
pvscan 指令會掃描系統中所有受支援的 LVM 區塊裝置來作為實體卷冊。
# pvscan
PV /dev/sdb2 VG vg0 lvm2 [964.00 MB / 0 free]
PV /dev/sdc1 VG vg0 lvm2 [964.00 MB / 428.00 MB free]
PV /dev/sdc2 lvm2 [964.84 MB]
Total: 3 [2.83 GB] / in use: 2 [1.88 GB] / in no VG: 1 [964.84 MB]
lvm.conf 中定義一個過濾器,如此一來這項指令將會避免掃描特定的實體卷冊。欲取得如何使用過濾器來控制哪些裝置需被掃描的相關資訊,請查看〈節 4.5, “透過過濾器來控制 LVM 裝置掃描(LVM Device Scans)”〉。
4.2.3. 避免配置於實體卷冊上
pvchange 指令來避免將實體扇區分配在一個或更多實體卷冊的可用空間上。若有磁碟錯誤或是若您要將實體卷冊移除的話,這將會是必要的。
/dev/sdk1 上。
# pvchange -x n /dev/sdk1pvchange 指令的 -xy 引數來允許分配。
4.2.5. 移除實體卷冊
pvremove 指令來將 LVM 標籤移除掉。執行 pvremove 指令可將一個空的實體卷冊上的 LVM metadata 零化掉。
vgreduce 指令來將它由卷冊群組中移除(如〈節 4.3.6, “由卷冊群組中移除實體卷冊”〉中所述)。
# pvremove /dev/ram15
Labels on physical volume "/dev/ram15" successfully wiped
4.3. 卷冊群組管理
4.3.1. 建立卷冊群組
vg1 的卷冊群組,它將會包含 /dev/sdd1 和 /dev/sde1 這兩個實體卷冊。
# vgcreate vg1 /dev/sdd1 /dev/sde1vgcreate 指令的 -s 選項來指定扇區大小。您可透過使用 vgcreate 指令的 -p 和 -l 引數來限制卷冊群組所能擁有的實體或邏輯卷冊數量。
normal 分配政策。您可使用 vgcreate 指令的 --alloc 引數來指定 contiguous、anywhere 或 cling 的分配政策。
contiguous 政策會需要新的扇區和既有的扇區相鄰。若有足夠的可用扇區來滿足分配請求,不過 normal 分配政策不使用它們的話,anywhere 分配政策則會使用它們,儘管將兩個磁帶放置在相同的實體卷冊上會降低效能。cling 政策會將新的扇區放置在與邏輯卷冊相同磁帶中的既有扇區相同的實體卷冊上。這些政策可透過使用 vgchange 指令來進行變更。
cling 政策與 LVM 標籤來指定在延伸 LVM 卷冊時,要使用哪個額外實體卷冊上的相關資訊,請參閱〈節 4.4.12.3, “以 cling 分配政策延伸邏輯卷冊”〉。
normal 以外的分配政策只有在特殊的情況下(當您需要指定不尋常或是非標準扇區分配時),才需要使用到。
/dev 目錄中的裝置特殊檔案目錄樹中,格式如下:
/dev/vg/lv/
myvg1 和 myvg2,各個都含有三個稱為 lvo1、lvo2 和 lvo3 的邏輯卷冊,這將會建立六個裝置特殊檔案:
/dev/myvg1/lv01 /dev/myvg1/lv02 /dev/myvg1/lv03 /dev/myvg2/lv01 /dev/myvg2/lv02 /dev/myvg2/lv03
4.3.2. 在叢集中建立卷冊群組
vgcreate 指令來建立卷冊群組,就如同您在單獨的節點上建立它們一樣。
vgcreate 指令的 -c n 選項來建立一個本機、只有叢集中的一個節點可看見的卷冊群組。
vg1 並且包含著實體卷冊 /dev/sdd1 和 /dev/sde1 的本機卷冊。
# vgcreate -c n vg1 /dev/sdd1 /dev/sde1vgs 指令來檢查一個現有的卷冊群組是否是個叢集卷冊群組。若此卷冊已位於叢集中,這項指令便會顯示 c 這個屬性。下列指令顯示了卷冊群組 VolGroup00 和 testvg1 的屬性。在此範例中,VolGroup00 尚未加入叢集中,而 testvg1 則已加入了叢集,如 Attr 標題下的 c 屬性所示。
# vgs
VG #PV #LV #SN Attr VSize VFree
VolGroup00 1 2 0 wz--n- 19.88G 0
testvg1 1 1 0 wz--nc 46.00G 8.00M
4.3.3. 新增實體卷冊至卷冊群組中
vgextend 指令。vgextend 這項指令會藉由新增一個或更多個可用的實體卷冊來遞增卷冊群組的容量。
/dev/sdf1 實體卷冊新增至卷冊群組 vg1 中。
# vgextend vg1 /dev/sdf14.3.4. 顯示卷冊群組
vgs 和 vgdisplay。
vgs 指令會以可配置的格式來提供卷冊群組資訊(一個卷冊群組一行)。vgs 指令提供了許多格式控制,並且對於進行 script 相當有幫助。如欲取得有關於使用 vgs 指令來自訂化您的輸出的相關資訊,請參閱〈節 4.8, “LVM 的自訂化回報”〉。
vgdisplay 指令會以固定的格式來顯示卷冊群組內容(例如大小、扇區、實體卷冊數量等等)。下列範例顯示了 vgdisplay 指令針對於 new_vg 卷冊群組的輸出。若您不指定卷冊群組的話,所有現有的卷冊群組皆會顯示。
# vgdisplay new_vg
--- Volume group ---
VG Name new_vg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 11
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 51.42 GB
PE Size 4.00 MB
Total PE 13164
Alloc PE / Size 13 / 52.00 MB
Free PE / Size 13151 / 51.37 GB
VG UUID jxQJ0a-ZKk0-OpMO-0118-nlwO-wwqd-fD5D32
4.3.5. 掃描磁碟來找尋卷冊群組以便建立快取檔案
vgscan 指令會掃描系統中所有受支援的磁碟裝置並尋找 LVM 實體卷冊和卷冊群組。這會將 LVM 快取建立在 /etc/lvm/cache/.cache 檔案中,該檔案含有一列現有的 LVM 裝置清單。
vgscan 指令,並且也會在進行 LVM 作業時的其它時候(例如當您執行一項 vgcreate 指令,或是當 LVM 偵測到不一致的狀況時)執行。
注意
vgscan 指令,這會使得系統能看見系統開機時所不存在的新裝置。這可能會是必要的,比方說當您新增磁碟至一部 SAN 上的系統,或是當您熱插拔一個被標記為實體卷冊的新磁碟時。
lvm.conf 檔案中定義一個過濾器,以限制掃描避免特定裝置。欲取得有關於使用過濾器來控制欲掃描之裝置的相關資訊,請參閱〈節 4.5, “透過過濾器來控制 LVM 裝置掃描(LVM Device Scans)”〉。
vgscan 指令的輸出。
# vgscan
Reading all physical volumes. This may take a while...
Found volume group "new_vg" using metadata type lvm2
Found volume group "officevg" using metadata type lvm2
4.3.6. 由卷冊群組中移除實體卷冊
vgreduce 指令。vgreduce 指令會藉由移除一個或更多個空的實體卷冊來縮減卷冊群組的容量。這會釋放出需要被使用於不同卷冊群組中或是由系統中移除的實體卷冊。
pvdisplay 指令來確認實體卷冊並未被任何邏輯卷冊使用中。
# pvdisplay /dev/hda1
-- Physical volume ---
PV Name /dev/hda1
VG Name myvg
PV Size 1.95 GB / NOT usable 4 MB [LVM: 122 KB]
PV# 1
PV Status available
Allocatable yes (but full)
Cur LV 1
PE Size (KByte) 4096
Total PE 499
Free PE 0
Allocated PE 499
PV UUID Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7
pvmove 指令來將資料遷移至另一個實體卷冊上。然後使用 vgreduce 指令來移除掉實體卷冊:
/dev/hda1 由 my_volume_group 卷冊群組中移除。
# vgreduce my_volume_group /dev/hda14.3.7. 更改卷冊群組的參數
vgchange 指令可被使用來停用和啟用卷冊群組,如〈節 4.3.8, “啟用和停用卷冊群組”〉中所示。您亦可使用這項指令,來為既有的卷冊群組更改數個卷冊群組參數。
vg00 的最大邏輯卷冊數量更改為 128。
# vgchange -l 128 /dev/vg00vgchange 指令所能更改的卷冊群組參數的相關資訊,請參閱 vgchange(8) man page。
4.3.8. 啟用和停用卷冊群組
vgchange 指令的 -a(--available)引數。
my_volume_group。
# vgchange -a n my_volume_grouplvchange 指令來停用各別的邏輯卷冊,如〈節 4.4.8, “更改邏輯卷冊群組的參數”〉中所示。欲取得有關於在叢集中的各別節點上,啟用邏輯卷冊的相關資訊,請參閱〈節 4.7, “在叢集中啟用各別節點上的邏輯卷冊”〉。
4.3.9. 移除卷冊群組
vgremove 指令。
# vgremove officevg
Volume group "officevg" successfully removed
4.3.10. 分割卷冊群組
vgsplit 指令。
pvmove 指令來強制分割。
bigvg卷冊群組分割出了新的卷冊群組 smallvg。
# vgsplit bigvg smallvg /dev/ram15
Volume group "smallvg" successfully split from "bigvg"
4.3.11. 結合卷冊群組
vgmerge 指令。您可將一個未啟用的「來源」卷冊和一個啟用或未啟用的「目標」卷冊結合在一起,不過卷冊的實體扇區大小必須相等並且概括了這兩個卷冊群組的實體和邏輯卷冊必須符合目標卷冊群組的限制。
my_vg 合併入啟用,或未啟用的卷冊群組 databases 中,並提供詳細的 runtime 資訊。
# vgmerge -v databases my_vg4.3.12. 備份卷冊群組的 Metadata
lvm.conf 檔案中將它停用。就預設值,metadata 備份儲存在 /etc/lvm/backup 檔案中,並且 metadata archive 則儲存在 /etc/lvm/archives 檔案中。您可透過 vgcfgbackup 指令來手動式地將 metadata 備份至 /etc/lvm/backup 檔案中。
vgcfrestore 指令會將卷冊群組的 metadata 由 archive 復原至卷冊群組中所有的實體卷冊中。
vgcfgrestore 指令來復原實體卷冊 metadata 上的相關範例,請參閱〈節 6.4, “復原實體卷冊的 Metadata”〉。
4.3.13. 為卷冊群組重新命名
vgrename 指令來為現有的卷冊群組重新命名。
vg02 命名為 my_volume_group
# vgrename /dev/vg02 /dev/my_volume_group
# vgrename vg02 my_volume_group4.3.14. 將卷冊群組移至另一部系統
vgexport 和 vgimport 指令來這麼作。
vgexport 指令會使得系統無法存取一個未啟用的卷冊群組,這能讓您將它的實體卷冊拆卸。vgimport 指令會使得卷冊群組在由 vgexport 指令使其停用後能再次地被系統存取。
- 請確認沒有用戶正在存取卷冊群組中啟用中卷冊上的檔案,然後再將邏輯卷冊卸載。
- 請使用
vgchange指令的-a n引數來將卷冊群組標記為停用,這可避免在卷冊群組上再有任何活動進行。 - 請使用
vgexport指令來匯出卷冊群組。這可避免它被您要從之移除的系統存取它。當您匯出了卷冊群組後,當您執行pvscan指令時,實體卷冊便會顯示在一個已匯出的卷冊群組中。#
pvscanPV /dev/sda1 is in exported VG myvg [17.15 GB / 7.15 GB free] PV /dev/sdc1 is in exported VG myvg [17.15 GB / 15.15 GB free] PV /dev/sdd1 is in exported VG myvg [17.15 GB / 15.15 GB free] ...當系統關閉後,您便可將構成卷冊群組的磁碟拔除然後將它們連接至新的系統上。 - 當磁碟被插入新的系統上時,請使用
vgimport指令來匯入卷冊群組,並使新的系統能夠存取它。 - 請使用
vgchange指令的-a y引數來啟用卷冊群組。 - 掛載檔案系統來使它能被使用。
4.4. 邏輯卷冊管理
4.4.1. 建立線性邏輯卷冊
lvcreate 指令。若您不為邏輯卷冊指定一組名稱的話,預設的 lvol# 就會被使用,而 # 代表邏輯卷冊的內部號碼。
vg1 卷冊群組中,建立大小為 10 GB 的邏輯卷冊。
# lvcreate -L 10G vg1testvg 卷冊群組中,建立一個 1,500 MB、名為 testlv 的線性邏輯卷冊,並建立 /dev/testvg/testlv 這個區塊裝置。
# lvcreate -L1500 -n testlv testvgvg0 卷冊群組中的可用扇區,建立一個 50 GB、名為 gfslv 的邏輯卷冊。
# lvcreate -L 50G -n gfslv vg0lvcreate 指令的 -l 引數來指定扇區中邏輯卷冊的大小。您亦可使用此引數來指定使用於邏輯卷冊的卷冊群組比例。下列指令將會建立一個稱為 mylv 的邏輯卷冊,它使用了卷冊群組 testvol 中 60% 的總空間。
# lvcreate -l 60%VG -n mylv testvglvcreate 指令的 -l 引數來指定卷冊群組中作為邏輯卷冊的剩下空間的比例。下列指令將會建立一個稱為 yourlv 的邏輯卷冊,它將會使用卷冊群組 testvol 中所有未分配的空間。
# lvcreate -l 100%FREE -n yourlv testvglvcreate 指令的 -l 引數,來建立一個使用了整個卷冊群組的邏輯卷冊。還有另一個方式可使用來建立使用整個卷冊群組的邏輯卷冊,那即是使用 vgdisplay 指令來找尋「Total PE」大小,然後使用這些結果來作為 lvcreate 指令的輸入。
mylv 的邏輯卷冊,該邏輯卷冊會將稱為 testvg 的卷冊群組填滿。
#vgdisplay testvg | grep "Total PE"Total PE 10230 #lvcreate -l 10230 testvg -n mylv
lvcreate 指令列後方指定實體卷冊或卷冊。下列指令將會在 testvg 卷冊群組中建立一個由實體卷冊 /dev/sdg1 分配,並稱為 testlv 的邏輯卷冊。
# lvcreate -L 1500 -ntestlv testvg /dev/sdg1testvg 中的實體卷冊 /dev/sda1 中的扇區 0 至 24,以及實體卷冊 /dev/sdb1 中的扇區 50 至 124 建立了一個線性邏輯卷冊。
# lvcreate -l 100 -n testlv testvg /dev/sda1:0-24 /dev/sdb1:50-124/dev/sda1 實體卷冊的扇區 0 至 25 建立了一個線性邏輯卷冊,然後在扇區 100 繼續編排邏輯卷冊。
# lvcreate -l 100 -n testlv testvg /dev/sda1:0-25:100-inherit,並且所套用的政策和卷冊群組所使用的相同。這些政策可透過使用 lvchange 指令來更改。如欲取得分配政策上的相關資訊,請參閱〈節 4.3.1, “建立卷冊群組”〉。
4.4.2. 建立等量卷冊
lvcreate 指令的 -i 引數來指定磁條的數量。這可決定邏輯卷冊需要被分散至多少實體卷冊上。磁條的數量不可大於卷冊群組中的實體卷冊數量(除非使用了 --alloc anywhere 引數)。
gfslv,並由卷冊群組 vg0 中所分割出。
# lvcreate -L 50G -i2 -I64 -n gfslv vg0stripelv,並且位於卷冊群組 testvg 中。該磁條會使用 /dev/sda1 的磁區 0-49 以及 /dev/sdb1 的磁區 50-99。
# lvcreate -l 100 -i2 -nstripelv testvg /dev/sda1:0-49 /dev/sdb1:50-99
Using default stripesize 64.00 KB
Logical volume "stripelv" created
4.4.3. 建立鏡像卷冊
注意
注意
lvm.conf 檔案中的鎖定類型必須要正確設置,以啟用叢集鎖定。欲取得在叢集中建立鏡像卷冊的範例,請參閱〈節 5.5, “在叢集中建立鏡像 LVM 邏輯卷冊”〉。
lvcreate 指令的 -m 引數來指定複製的資料數量。指定 -m1 的話會建立一個鏡像,並產生出兩份檔案系統:一個 linear 邏輯卷冊和一個副本。相同地,指定了 -m2 的話會建立兩個鏡像,並產生出三份檔案系統。
mirrorlv 並由卷冊群組 vg0 中所分割出:
# lvcreate -L 50G -m1 -n mirrorlv vg0lvcreate 指令的 -R 引數來將區域大小指定為 MB。您亦可藉由編輯 lvm.conf 檔案中的 mirror_region_size 設定來更改預設的區域大小。
注意
lvcreate 指令的 -R 引數。比方說,若您的鏡像大小為 1.5TB,您可指定 -R 2。若您的鏡像大小為 3TB,您可指定 -R 4。當鏡像大小為 5TB 時,您可指定 -R 8。
# lvcreate -m1 -L 2T -R 2 -n mirror vol_group--nosync 引數來顯示來自於第一個裝置的初始同步化是非必要的。
--mirrorlog core 引數來指定將此日誌存放在記憶體中;這可除去額外日誌裝置的需要,不過若要如此,每當系統重新啟動時,整個鏡像就必須被重新同步化。
bigvg 卷冊群組建立鏡像邏輯卷冊。該邏輯卷冊名為 ondiskmirvol 並且含有單鏡像。卷冊大小為 12 MB 並且將 mirror log 存放在記憶體中。
# lvcreate -L 12MB -m1 --mirrorlog core -n ondiskmirvol bigvg
Logical volume "ondiskmirvol" created
vgcreate 指令的 --alloc anywhere 引數來在和其中一個 mirror leg 的裝置相同的裝置上建立一個 mirror log。這可能會使效能降低,不過它卻能讓您建立鏡像,儘管您只有兩個基本裝置。
vg0 這個卷冊群組只包含著兩個裝置。這項指令所建立的鏡像卷冊的大小為 500 MB,名為 mirrorlv,並且是由卷冊群組 vg0 中所分割出的:
# lvcreate -L 500M -m1 -n mirrorlv -alloc anywhere vg0注意
--mirrorlog mirrored 引數。下列指令將會由 bigvg 卷冊群組建立鏡像邏輯卷冊。該邏輯卷冊名為 twologvol 並且含有單鏡像。卷冊大小為 12 MB 並且將 mirror log 已被映射,而存放在各別的裝置上。
# lvcreate -L 12MB -m1 --mirrorlog mirrored -n twologvol bigvg
Logical volume "twologvol" created
vgcreate 指令的 --alloc anywhere 引數,來在與鏡像 leg 相同的裝置上 建立冗餘鏡像 log。這可能會使效能降低,不過它卻能讓您建立冗餘鏡像 log,儘管您沒有足夠的基本裝置,以存放 log 於各別裝置上。
--nosync 引數來顯示來自於第一個裝置的初始同步化是非必要的。
mirrorlv,並且是由卷冊群組 vg0 中所切割出來的。mirror 的第一個 leg 位於 /dev/sda1 裝置上,mirror 的第二個 leg 位於 /dev/sdb1 裝置上,mirror logs 則位於 /dev/sdc1 上。
# lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1 /dev/sdb1 /dev/sdc1mirrorlv,並且是由卷冊群組 vg0 中所切割出來的。mirror的第一個 leg 位於 /dev/sda1 裝置的扇區 0 至 499 上,mirror的第二個 leg 位於 /dev/sdb1 裝置的扇區 0 至 499 上,並且 mirror log 由 /dev/sdc1 裝置的扇區 0 上起始。這些為 1MB 的扇區。若有任何指定的扇區早已被分配的話,它們將會被忽略掉。
# lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1:0-499 /dev/sdb1:0-499 /dev/sdc1:0注意
--mirrors X)和磁條數量(--stripes Y)時,會使鏡像裝置所構成的裝置成為等量。
4.4.3.1. 鏡像邏輯卷冊失效政策
lvm.conf 檔案的 activation 部份中使用 mirror_image_fault_policy 和 mirror_log_fault_policy 參數,以定義當裝置失效時,鏡像邏輯卷冊會如何運作。當這些參數被設為了 remove 時,系統將會嘗試移除出錯的裝置,並在無此裝置的情況下運作。當此參數被設為了 allocate 時,系統將會嘗試移除出錯的裝置,並嘗試在新裝置上配置空間,以取代失效的裝置;若無適當的裝置和空間可配置取代,此政策的運作方式是與 remove 政策相似的。
mirror_log_fault_policy 參數會被設為 allocate。為 log 使用此政策既快速,亦可在當機或重新開機時,記住同步狀態。若您將此政策設為了 remove,當 log 裝置失效時,鏡像便會轉換為使用一種記憶體中的日誌,並且在當機或重新開機時,該鏡像將不會記住它的同步狀態,並且整個鏡像將會被重新同步。
mirror_image_fault_policy 參數會被設為 remove。當使用此政策時,若鏡像映像失效,而只有一份完整鏡像的話,鏡像便會轉換為非映射的裝置。若要將鏡像裝置的政策設為 allocate,鏡像需要與裝置同步;這是一項緩慢的程序,不過它可保留裝置的鏡像特性。
注意
mirror_log_fault_policy 參數被設為了 allocate,它將會嘗試置換所有失效的裝置。然而請注意,若有其它可用裝置,您無法保證在第二階段中,先前由未失效的鏡像所使用的裝置會被選擇。
4.4.3.2. 由鏡像邏輯卷冊切割出冗餘映像
lvconvert 指令的 --splitmirrors 引數,並指定欲切割的冗餘映像數量。您必須使用指令的 --name 引數來為新切割的邏輯卷冊指定一組名稱。
vg/lv 切割一個名為 copy 的新邏輯卷冊。新邏輯卷冊包含了兩個 mirror leg。在此範例中,LVM 選擇要切割哪些裝置。
# lvconvert --splitmirrors 2 --name copy vg/lvvg/lv 中,切割出一個名為 copy 的新邏輯卷冊。新邏輯卷冊包含了兩個含有 /dev/sdc1 和 /dev/sde1 裝置的新邏輯卷冊。
# lvconvert --splitmirrors 2 --name copy vg/lv /dev/sd[ce]14.4.3.3. 修復鏡像邏輯裝置
lvconvert --repair 指令來修復鏡像。這會使鏡像恢復為原本正常的狀態。lvconvert --repair 指令是一項互動式的指令,它會提示詢問您是否希望系統嘗試替換掉任何失效的裝置。
- 若要跳過提示並替換所有失效的裝置,請在指令列上指定
-y選項。 - 若要跳過提示,並不替換任何失效的裝置,請在指令列上指定
-f選項。 - 若要跳過提示並還是要為鏡像映像和鏡像 log 替換不同的政策,您可指定
--use-policies引數,以使用lvm.conf檔案中的mirror_log_fault_policy和mirror_device_fault_policy參數所指定的裝置替換政策。
4.4.3.4. 更改鏡像卷冊配置
lvconvert 指令來新增或減少邏輯卷冊所包含的鏡像數量。這能讓您將邏輯卷冊由鏡像卷冊轉換為線性卷冊,或由線性卷冊轉換為鏡像卷冊。您亦可使用這項指令來重新配置既有邏輯卷冊的其它鏡像參數,例如 corelog。
lvconvert 指令來將鏡像復原。此步驟提供於〈節 6.3, “由 LVM 鏡像錯誤中復原”〉之中。
vg00/lvol1 轉換為鏡像邏輯卷冊。
# lvconvert -m1 vg00/lvol1vg00/lvol1 轉換為線性邏輯卷冊,並移除 mirror leg。
# lvconvert -m0 vg00/lvol1vg00/lvol1 上。此範例顯示了 lvconvert 指令在將卷冊改變為擁有兩個 mirror leg 之前與之後的卷冊配置。
#lvs -a -o name,copy_percent,devices vg00LV Copy% Devices lvol1 100.00 lvol1_mimage_0(0),lvol1_mimage_1(0) [lvol1_mimage_0] /dev/sda1(0) [lvol1_mimage_1] /dev/sdb1(0) [lvol1_mlog] /dev/sdd1(0) #lvconvert -m 2 vg00/lvol1vg00/lvol1: Converted: 13.0% vg00/lvol1: Converted: 100.0% Logical volume lvol1 converted. #lvs -a -o name,copy_percent,devices vg00LV Copy% Devices lvol1 100.00 lvol1_mimage_0(0),lvol1_mimage_1(0),lvol1_mimage_2(0) [lvol1_mimage_0] /dev/sda1(0) [lvol1_mimage_1] /dev/sdb1(0) [lvol1_mimage_2] /dev/sdc1(0) [lvol1_mlog] /dev/sdd1(0)
4.4.4. 建立快照卷冊(Snapshot Volumes)
lvcreate 指令的 -s 引數來建立 snapshot 卷冊。Snapshot 卷冊是可寫入的。
注意
注意
/dev/vg00/snap 的 snapshot 邏輯卷冊。它建立了名為 /dev/vg00/lvol1 的原始邏輯卷冊的 snapshot。若原始的邏輯卷冊包含了一個檔案系統,您可將 snapshot 邏輯卷冊掛載在一個任意的目錄上以便在原始檔案系統進行更新的同時存取檔案系統的內容來進行備份。
# lvcreate --size 100M --snapshot --name snap /dev/vg00/lvol1lvdisplay 指令來指定原始的卷冊,可產生出包含著一個含有所有 snapshot 邏輯卷冊與其狀態(啟用或停用)之清單的輸出。
/dev/new_vg/lvol0 的狀態,並且有個 snapshot 卷冊 /dev/new_vg/newvgsnap 已被建立。
# lvdisplay /dev/new_vg/lvol0
--- Logical volume ---
LV Name /dev/new_vg/lvol0
VG Name new_vg
LV UUID LBy1Tz-sr23-OjsI-LT03-nHLC-y8XW-EhCl78
LV Write Access read/write
LV snapshot status source of
/dev/new_vg/newvgsnap1 [active]
LV Status available
# open 0
LV Size 52.00 MB
Current LE 13
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:2
lvs 指令會顯示初始卷冊以及各個 snapshot 卷冊目前被使用到的比例。下列範例顯示了在一部包含著邏輯卷冊 /dev/new_vg/lvol0 的系統上輸入 lvs 指令的預設輸出,並且有個 snapshot 卷冊 /dev/new_vg/newvgsnap 已被建立。
# lvs
LV VG Attr LSize Origin Snap% Move Log Copy%
lvol0 new_vg owi-a- 52.00M
newvgsnap1 new_vg swi-a- 8.00M lvol0 0.20
警告
lvs 指令來監控 snapshot 卷冊的比例以確保它不會滿出。一個用滿 100% 的 snapshot 基本上一定會發生問題,因為若要寫至未修改的初始卷冊部份中一定得將該 snapshot 損毀才能成功。
lvm.conf 檔案中指定 snapshot_autoextend_threshold 選項。此選項能在每當剩餘的 snapshot 空間低於您所設置的門檻值時,自動延伸 snapshot。若要使用這項功能,卷冊群組中需要含有未分配的空間。
snapshot_autoextend_threshold 和 snapshot_autoextend_percent 的相關資訊位於 lvm.conf 檔案中。欲取得有關於 lvm.conf 檔案上的相關資訊,請參閱 附錄 B, LVM 配置檔案。
4.4.5. 合併 Snapshot 卷冊
lvconvert 指令的 --merge 選項,來將 snapshot 併入其原始卷冊中。若原始卷冊和 snapshot 卷冊兩者皆未開啟的話,合併程序便會即刻啟動。否則,合併將會在原始或 snapshot 卷冊第一次啟用和兩者皆關閉時啟動。若要將 snapshot 合併入一個無法關閉的原始卷冊(比方說 root 檔案系統)中,這項合併程序將會被延後,直到原始卷冊下次啟用時。當進行合併程序時,所產生的邏輯卷冊將會擁有原始卷冊的名稱、minor 號碼,以及 UUID。當合併程序在進行時,對於原始卷冊所進行的讀取和寫入,將會看似它們是被導向至即將被合併的 snapshot。當合併程序完成時,合併的 snapshot 將會被移除。
vg00/lvol1_snap 併入它的原始卷冊中。
# lvconvert --merge vg00/lvol1_snapvg00/lvol1、vg00/lvol2 和 vg00/lvol3 皆被標記了 @some_tag。下列指令會序列式地合併所有三個卷冊的 snapshot 邏輯卷冊:vg00/lvol1、vg00/lvol2,然後 vg00/lvol3。若使用了 --background 選項的話,所有 snapshot 邏輯卷冊的合併程序將會平行式地啟動。
# lvconvert --merge @some_taglvconvert --merge 指令上的相關資訊,請參閱 lvconvert(8) man page。
4.4.6. 一致的裝置號碼
lvcreate 和 lvchange 指令,並使用下列引數來進行指定:
--persistent y --major major --minor minor
fsid 參數可能能夠避免在 LVM 中設置一致性的裝置號碼的必要性。
4.4.7. 重設邏輯卷冊大小
lvreduce 指令。若邏輯卷冊包含著一個檔案系統,請確認先減少檔案系統(或使用 LVM GUI),如此一來邏輯卷冊大小就總是能至少和檔案系統所預期的大小相等。
vg00 卷冊群組中的邏輯卷冊 lvol1 的大小減少 3 個邏輯扇區。
# lvreduce -l -3 vg00/lvol14.4.8. 更改邏輯卷冊群組的參數
lvchange 指令。如欲取得一列包含著您可更改的參數之清單,請查看 lvchange(8) man page。
vg00 中的 lvol1 卷冊之權限更改為唯讀。
# lvchange -pr vg00/lvol14.4.9. 重新為邏輯卷冊命名
lvrename 指令。
vg02 中的邏輯卷冊 lvold 重新命名為 lvnew。
# lvrename /dev/vg02/lvold /dev/vg02/lvnew
# lvrename vg02 lvold lvnew4.4.10. 移除邏輯卷冊
lvremove 這項指令。若該邏輯卷冊目前已掛載,請在將此卷冊移除前將它卸載。此外,在一個叢集環境中,您必須先將邏輯卷冊停用才可將之移除。
/dev/testvg/testlv 由卷冊群組 testvg 中移除。請注意,在此情況下,邏輯卷冊並未被停用。
#lvremove /dev/testvg/testlvDo you really want to remove active logical volume "testlv"? [y/n]:yLogical volume "testlv" successfully removed
lvchange -an 指令來在移除某個邏輯卷冊前先將它停用,在此情況下,您將不會看見一個提示要求您驗證是否要將一個啟用中的邏輯卷冊移除掉。
4.4.11. 顯示邏輯卷冊
lvs、lvdisplay 以及 lvscan。
lvs 指令會以可配置的格式來提供邏輯卷冊資訊,並以一行一個邏輯卷冊的格式顯示。lvs 指令提供了大量的格式控制,並有助於編寫 script。欲取得有關於如何使用 lvs 指令來自訂您的輸出的相關資訊,請參閱〈節 4.8, “LVM 的自訂化回報”〉。
lvdisplay 指令可利用固定的格式來顯示邏輯卷冊的內容(像是大小、格式和映射)。
vg00 中的 lvol2 的屬性。若是已為此原始邏輯卷冊建立了 snapshot 邏輯卷冊的話,這項指令便會顯示一列含有所有 snapshot 邏輯卷冊以及其狀態(啟用中或停用中)的清單。
# lvdisplay -v /dev/vg00/lvol2lvscan 指令會掃秒系統中所有的邏輯卷冊並將它們列出,如下列範例。
# lvscan
ACTIVE '/dev/vg0/gfslv' [1.46 GB] inherit
4.4.12. 遞增邏輯卷冊
lvextend 指令。
/dev/myvg/homevol 延伸為 12 GB。
# lvextend -L12G /dev/myvg/homevol
lvextend -- extending logical volume "/dev/myvg/homevol" to 12 GB
lvextend -- doing automatic backup of volume group "myvg"
lvextend -- logical volume "/dev/myvg/homevol" successfully extended
/dev/myvg/homevol。
# lvextend -L+1G /dev/myvg/homevol
lvextend -- extending logical volume "/dev/myvg/homevol" to 13 GB
lvextend -- doing automatic backup of volume group "myvg"
lvextend -- logical volume "/dev/myvg/homevol" successfully extended
lvcreate 指令相同,您可使用 lvextend 指令的 -l 引數來指定扇區的數量,並遞增邏輯卷冊的大小。您亦可使用此引數來指定卷冊群組的百分比例,或是卷冊群組剩下可用空間的百分比。下列指令將會延伸一個名為 testlv 的邏輯卷冊,並填滿卷冊群組 myvg 中所有未分配的空間。
# lvextend -l +100%FREE /dev/myvg/testlv
Extending logical volume testlv to 68.59 GB
Logical volume testlv successfully resized
4.4.12.1. 延伸等量的卷冊
vg,如下列透過 vgs 指令所示。
# vgs
VG #PV #LV #SN Attr VSize VFree
vg 2 0 0 wz--n- 271.31G 271.31G
#lvcreate -n stripe1 -L 271.31G -i 2 vgUsing default stripesize 64.00 KB Rounding up size to full physical extent 271.31 GB Logical volume "stripe1" created #lvs -a -o +devicesLV VG Attr LSize Origin Snap% Move Log Copy% Devices stripe1 vg -wi-a- 271.31G /dev/sda1(0),/dev/sdb1(0)
# vgs
VG #PV #LV #SN Attr VSize VFree
vg 2 1 0 wz--n- 271.31G 0
#vgextend vg /dev/sdc1Volume group "vg" successfully extended #vgsVG #PV #LV #SN Attr VSize VFree vg 3 1 0 wz--n- 406.97G 135.66G
# lvextend vg/stripe1 -L 406G
Using stripesize of last segment 64.00 KB
Extending logical volume stripe1 to 406.00 GB
Insufficient suitable allocatable extents for logical volume stripe1: 34480
more required
#vgextend vg /dev/sdd1Volume group "vg" successfully extended #vgsVG #PV #LV #SN Attr VSize VFree vg 4 1 0 wz--n- 542.62G 271.31G #lvextend vg/stripe1 -L 542GUsing stripesize of last segment 64.00 KB Extending logical volume stripe1 to 542.00 GB Logical volume stripe1 successfully resized
lvextend 指令失敗後延伸了現有的等量邏輯卷冊來使用剩下的可用空間。
#lvextend vg/stripe1 -L 406GUsing stripesize of last segment 64.00 KB Extending logical volume stripe1 to 406.00 GB Insufficient suitable allocatable extents for logical volume stripe1: 34480 more required #lvextend -i1 -l+100%FREE vg/stripe1
4.4.12.2. 延伸鏡像卷冊
lvextend 指令來擴展鏡像邏輯卷冊,而無需同步新的鏡像區域。
lvcreate 指令建立鏡像邏輯卷冊時,使用了 --nosync 選項的話,當鏡像被建立時,鏡像區域將不會被同步(如 節 4.4.3, “建立鏡像卷冊” 中所述)。若您稍後以 --nosync 選項來延伸您所建立的鏡像,延伸的鏡像也不會當下被同步。
lvs 指令來顯示卷冊屬性,以判斷既有的邏輯卷冊是否是透過 --nosync 選項所建立的。若鏡像卷冊是在未初始同步的情況下建立的,邏輯卷冊的屬性 bit 1 將會是 "M",若透過初始同步所建立,則屬性 bit 1 將會是 "m"。
lv 的鏡像邏輯卷冊之屬性,此鏡像邏輯卷冊乃在未同步的情況下建立的,因此屬性 bit 1 顯示為 "M"。屬性 bit 7 為 "m",代表目標類型為 mirror。欲取得屬性 bit 意義上的相關資訊,請參閱 表格 4.4, “lvs 顯示欄位”。
# lvs vg
LV VG Attr LSize Pool Origin Snap% Move Log Copy% Convert
lv vg Mwi-a-m- 5.00g lv_mlog 100.00
lvextend 指令來擴充此鏡像邏輯卷冊,鏡像延伸將不會被重新同步。
lvcreate 指令的 --nosync 選項的情況下建立鏡像邏輯卷冊,您可透過 lvextend 指令的 --nosync 選項,來在不重新同步鏡像的情況下,擴展邏輯卷冊。
--nosync 選項的情況下建立的邏輯卷冊,這代表該鏡像被建立時已同步。然而此範例指定了當在延伸卷冊時,不同步鏡像。請注意,卷冊的屬性為 "m",不過在執行了 lvextend 指令並搭配 --nosync 選項時,卷冊的屬性則為 "M"。
#lvs vgLV VG Attr LSize Pool Origin Snap% Move Log Copy% Convert lv vg mwi-a-m- 20.00m lv_mlog 100.00 #lvextend -L +5G vg/lv --nosyncExtending 2 mirror images. Extending logical volume lv to 5.02 GiB Logical volume lv successfully resized #lvs vgLV VG Attr LSize Pool Origin Snap% Move Log Copy% Convert lv vg Mwi-a-m- 5.02g lv_mlog 100.00
--nosync 選項來建立鏡像。反之,您將會被提示是否要針對於邏輯卷冊延伸的部分,進行完整的重新同步。
注意
--nosync 選項來建立或延伸了卷冊的話,您將無法延伸鏡像邏輯卷冊。然而,若您未指定 --nosync 選項的話,您便可在鏡像復原時將其延伸。
4.4.12.3. 以 cling 分配政策延伸邏輯卷冊
lvextend 指令的 --alloc cling 選項,來指定 cling 定位政策。此政策將會選擇與既有邏輯卷冊的最後磁區相同的實體卷冊上的空間。若實體卷冊上的空間不足,並且有一列標籤定義於 lvm.conf 檔案中的話,LVM 將會檢查是否有任何標籤連接至實體卷冊,並嘗試比對既有扇區和新扇區之間的實體卷冊標籤。
lvm.conf 檔案中指定下列一行:
cling_tag_list = [ "@site1", "@site2" ]
lvm.conf 檔案已修改,並包含了以下一行;
cling_tag_list = [ "@A", "@B" ]
taft 已被建立,並包含了實體卷冊 /dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1、/dev/sdf1、/dev/sdg1,以及 /dev/sdh1。這些實體卷冊已標記為 A、B 和 C。範例中未使用 C 標籤,不過這會顯示 LVM 使用了標籤,來選擇哪些實體卷冊將使用於 mirror leg。
# pvs -a -o +pv_tags /dev/sd[bcdefgh]1
PV VG Fmt Attr PSize PFree PV Tags
/dev/sdb1 taft lvm2 a- 135.66g 135.66g A
/dev/sdc1 taft lvm2 a- 135.66g 135.66g B
/dev/sdd1 taft lvm2 a- 135.66g 135.66g B
/dev/sde1 taft lvm2 a- 135.66g 135.66g C
/dev/sdf1 taft lvm2 a- 135.66g 135.66g C
/dev/sdg1 taft lvm2 a- 135.66g 135.66g A
/dev/sdh1 taft lvm2 a- 135.66g 135.66g A
taft 卷冊群組中建立一個 100GB 的鏡像卷冊。
# lvcreate -m 1 -n mirror --nosync -L 100G taft
# lvs -a -o +devices
LV VG Attr LSize Log Copy% Devices
mirror taft Mwi-a- 100.00g mirror_mlog 100.00
mirror_mimage_0(0),mirror_mimage_1(0)
[mirror_mimage_0] taft iwi-ao 100.00g /dev/sdb1(0)
[mirror_mimage_1] taft iwi-ao 100.00g /dev/sdc1(0)
[mirror_mlog] taft lwi-ao 4.00m /dev/sdh1(0)
cling 分配政策來顯示 mirror leg 應使用相同標籤的實體卷冊來延伸。
# lvextend --alloc cling -L +100G taft/mirror
Extending 2 mirror images.
Extending logical volume mirror to 200.00 GiB
Logical volume mirror successfully resized
C 的實體卷冊會被忽略。
# lvs -a -o +devices
LV VG Attr LSize Log Copy% Devices
mirror taft Mwi-a- 200.00g mirror_mlog 50.16
mirror_mimage_0(0),mirror_mimage_1(0)
[mirror_mimage_0] taft Iwi-ao 200.00g /dev/sdb1(0)
[mirror_mimage_0] taft Iwi-ao 200.00g /dev/sdg1(0)
[mirror_mimage_1] taft Iwi-ao 200.00g /dev/sdc1(0)
[mirror_mimage_1] taft Iwi-ao 200.00g /dev/sdd1(0)
[mirror_mlog] taft lwi-ao 4.00m /dev/sdh1(0)
4.4.13. RAID 邏輯卷冊
- 新的鏡像實作之磁區類型為
raid1。先前實作的磁區類型則為mirror。 - 新的鏡射實作採用了 MD 軟體 RAID,RAID 4/5/6 實作亦然。
- 鏡像的實作為各個 mirror image 保有了完全冗余的 bitmap 區域,這會增強其錯誤處理的能力。這代表以此磁區類型建立的鏡像沒有
--mirrorlog或是--corelog選項。 - 新的鏡像實作可處理暫時性的錯誤。
- 新的鏡射實作支援 snapshot(較高等級的 RAID 實作亦如此)。目前尚不支援針對於磁區類型為
mirror的鏡像製作 snapshot(儘管可建立)。 - 鏡像映像檔能暫時性地由陣列中分割,並事後合併回陣列中。
- 新的 RAID 實作無法偵測到叢集。您無法在叢集卷冊群組中建立 LVM RAID 邏輯卷冊。
4.4.13.1. 建立 RAID 邏輯卷冊
lvcreate 指令的 --type 引數來指定 RAID 類型。一般當您透過 lvcreate 指令建立邏輯卷冊時,--type 會是隱藏的。比方說,當您指定 -i stripes 引數時,lvcreate 指令會假定設置 --type stripe 選項。當您指定 -m mirrors 引數時,lvcreate 指令則會假定設置 --type mirror 選項。然而當您建立 RAID 邏輯卷冊時,您必須明確指定您想要的磁區類型。可使用的 RAID 磁區類型詳述於 表格 4.1, “RAID 磁區類型” 中。
表格 4.1. RAID 磁區類型
| 磁區類型 | 描述 | ||
|---|---|---|---|
raid1 | RAID1 鏡射 | ||
raid4 | RAID4 特屬的同位磁碟 | ||
raid5 | 和 raid5_ls 相同 | ||
raid5_la |
| ||
raid5_ra |
| ||
raid5_ls |
| ||
raid5_rs |
| ||
raid6 | 和 raid6_zr 相同 | ||
raid6_zr |
| ||
raid6_nr |
| ||
raid6_nc |
|
raid[1456])應已足夠。欲取得更多有關於 RAID 5/6 所使用之不同演算法則上的相關資訊,請參閱《常用的 RAID 磁碟資料格式規格》的第四章節,位於 http://www.snia.org/sites/default/files/SNIA_DDF_Technical_Position_v2.0.pdf。
lv_rmeta_0 與 lv_rmeta_1),以及兩個資料子卷冊(lv_rimage_0 與 lv_rimage_1)。相同的,當建立一個三向的 stripe(加上一個隱藏的同位裝置)RAID4 時,將會產生四個 metadata 子卷冊(lv_rmeta_0、lv_rmeta_1、lv_rmeta_2 以及 lv_rmeta_3)和四個資料子卷冊(lv_rimage_0、lv_rimage_1、lv_rimage_2 以及 lv_rimage_3)。
my_vg 中,建立一個大小為 1G 的雙向 RAID1 陣列,名為 my_lv。
# lvcreate --type raid1 -m 1 -L 1G -n my_lv my_vg-m 引數所指定的值,來建立數個 RAID1 陣列。儘管 -m 引數與先前的鏡像實作中,使用來指定數量的引數相同,在此情況下,您會藉由明確將磁區類型設為 raid1,以置換預設磁區類型 mirror。相同地,您亦可透過熟悉的 -i argument,指定 RAID 4/5/6 邏輯卷冊的 stripe 數量,將預設的磁區類型置換為您想要的 RAID 類型。您亦可透過 -I 引數來指定 stripe 的大小。
注意
lvm.conf 檔案中的 mirror_segtype_default,來將預設的鏡像磁區類型設為 raid1。
my_vg 卷冊群組中建立一個 RAID5 陣列(三個 stripe 加上一個隱藏同位磁碟),名為 my_lv 並且大小為 1G。請注意,您必須如同為 LVM stripe 卷冊一般的指定 stripe 數量;正確的同位磁碟數量將會被自動加入。
# lvcreate --type raid5 -i 3 -L 1G -n my_lv my_vgmy_vg 卷冊群組中,建立一個 RAID6 陣列(三個 stripe 加上兩個隱藏同位磁碟),名為 my_lv 並且大小為 1G。
# lvcreate --type raid6 -i 3 -L 1G -n my_lv my_vg4.4.13.2. 將線性裝置轉換為 RAID 裝置
lvconvert 指令的 --type 引數,來將既有的線性邏輯卷冊轉換為 RAID 裝置。
my_vg 中的線性邏輯卷冊 my_lv 轉換為一個雙向的 RAID1 陣列。
# lvconvert --type raid1 -m 1 my_vg/my_lv
# lvs -a -o name,copy_percent,devices my_vg
LV Copy% Devices
my_lv /dev/sde1(0)
#lvconvert --type raid1 -m 1 my_vg/my_lv#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 6.25 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sde1(0) [my_lv_rimage_1] /dev/sdf1(1) [my_lv_rmeta_0] /dev/sde1(256) [my_lv_rmeta_1] /dev/sdf1(0)
lvconvert 將會失敗。
4.4.13.3. 將 LVM RAID1 邏輯卷冊轉換為一個 LVM 線性邏輯卷冊
lvconvert 指令,並指定 -m0 引數來將既有的 RAID1 LVM 邏輯卷冊轉換為一個 LVM 線性邏輯卷冊。這將會移除構成了 RAID 陣列的所有 RAID 資料子卷冊,以及所有 RAID metadata 子卷冊,並使最上層的 RAID1 映像檔成為線性邏輯卷冊。
# lvs -a -o name,copy_percent,devices my_vg
LV Copy% Devices
my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0)
[my_lv_rimage_0] /dev/sde1(1)
[my_lv_rimage_1] /dev/sdf1(1)
[my_lv_rmeta_0] /dev/sde1(0)
[my_lv_rmeta_1] /dev/sdf1(0)
my_vg/my_lv 轉換為一個 LVM 線性裝置。
#lvconvert -m0 my_vg/my_lv#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv /dev/sde1(1)
/dev/sda1 和 /dev/sda2。在此範例中,lvconvert 指令將移除 /dev/sda1,並將 /dev/sdb1 保留為構成線性裝置的實體卷冊。
#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sda1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rmeta_0] /dev/sda1(0) [my_lv_rmeta_1] /dev/sdb1(0) #lvconvert -m0 my_vg/my_lv /dev/sda1#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv /dev/sdb1(1)
4.4.13.4. 將鏡像 LVM 裝置轉換為 RAID 1 裝置
lvconvert 指令,透過指定 --type raid1 引數來將既有的 LVM 裝置轉換為一個 RAID1 LVM 裝置。這會將鏡像的子卷冊(*_mimage_*)重新命名為 RAID 子卷冊(*_rimage_*)。此外 mirror log 將會被移除,並且將在與相應資料子卷冊相同的實體卷冊上,為資料子卷冊建立 metadata 子卷冊(*_rmeta_*)。
my_vg/my_lv 的格式。
# lvs -a -o name,copy_percent,devices my_vg
LV Copy% Devices
my_lv 15.20 my_lv_mimage_0(0),my_lv_mimage_1(0)
[my_lv_mimage_0] /dev/sde1(0)
[my_lv_mimage_1] /dev/sdf1(0)
[my_lv_mlog] /dev/sdd1(0)
my_vg/my_lv 轉換為一個 RAID1 邏輯卷冊。
#lvconvert --type raid1 my_vg/my_lv#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sde1(0) [my_lv_rimage_1] /dev/sdf1(0) [my_lv_rmeta_0] /dev/sde1(125) [my_lv_rmeta_1] /dev/sdf1(125)
4.4.13.5. 修改既有 RAID1 裝置中的映像檔數量
lvconvert 指令來指定額外欲新增或移除的 metadata/data 子卷冊配對。欲取得在較早的 LVM 鏡射實作中修改卷冊配置上的相關資訊,請參閱 節 4.4.3.4, “更改鏡像卷冊配置”。
lvconvert 指令來新增映像檔至 RAID1 裝置時,您可指定最終產生之裝置的映像檔總數,或是指定欲新增至該裝置的映像檔數量。您亦可選用性地指定欲在哪個實體裝置上放置新的 metadata/data 映像檔配對。
*_rmeta_*)總是會位於與其資料子卷冊配對(*_rimage_*)相同的實體裝置上。Metadata/data 子卷冊配對將不會如同其它 RAID 陣列中的 metadata/data 子卷冊一般,建立在相同的實體卷冊上(除非您指定 --alloc anywhere)。
lvconvert -m new_absolute_count vg/lv [removable_PVs] lvconvert -m +num_additional_images vg/lv [removable_PVs]
my_vg/my_lv:
# lvs -a -o name,copy_percent,devices my_vg
LV Copy% Devices
my_lv 6.25 my_lv_rimage_0(0),my_lv_rimage_1(0)
[my_lv_rimage_0] /dev/sde1(0)
[my_lv_rimage_1] /dev/sdf1(1)
[my_lv_rmeta_0] /dev/sde1(256)
[my_lv_rmeta_1] /dev/sdf1(0)
my_vg/my_lv 一個三向的 RAID1 裝置:
#lvconvert -m 2 my_vg/my_lv#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 6.25 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(0) [my_lv_rimage_1] /dev/sdf1(1) [my_lv_rimage_2] /dev/sdg1(1) [my_lv_rmeta_0] /dev/sde1(256) [my_lv_rmeta_1] /dev/sdf1(0) [my_lv_rmeta_2] /dev/sdg1(0)
my_vg/my_lv 轉換為一個三向的 RAID1 裝置,並指定陣列將使用實體卷冊 /dev/sdd1:
#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 56.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sda1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rmeta_0] /dev/sda1(0) [my_lv_rmeta_1] /dev/sdb1(0) #lvconvert -m 2 my_vg/my_lv /dev/sdd1#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 28.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sda1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rimage_2] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sda1(0) [my_lv_rmeta_1] /dev/sdb1(0) [my_lv_rmeta_2] /dev/sdd1(0)
lvconvert 指令,由 RAID1 裝置移除映像檔時,您可為最終產生的裝置指定映像檔總數,或是指定欲由裝置上移除多少映像檔。您亦可選用性的指定欲由哪些實體卷冊移除裝置。
lvconvert -m new_absolute_count vg/lv [removable_PVs] lvconvert -m -num_fewer_images vg/lv [removable_PVs]
lv_rimage_0、lv_rimage_1 和 lv_rimage_2 的三向 RAID1 陣列中移除了 lv_rimage_1,這將會產生一個包含 lv_rimage_0 和 lv_rimage_1 的 RAID1 陣列。子卷冊 lv_rimage_2 將會被重新命名,並置於空位中成為 lv_rimage_1。
my_vg/my_lv 的格式。
# lvs -a -o name,copy_percent,devices my_vg
LV Copy% Devices
my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
[my_lv_rimage_0] /dev/sde1(1)
[my_lv_rimage_1] /dev/sdf1(1)
[my_lv_rimage_2] /dev/sdg1(1)
[my_lv_rmeta_0] /dev/sde1(0)
[my_lv_rmeta_1] /dev/sdf1(0)
[my_lv_rmeta_2] /dev/sdg1(0)
#lvconvert -m1 my_vg/my_lv#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdf1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdf1(0)
/dev/sde1。
#lvconvert -m1 my_vg/my_lv /dev/sde1#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sdf1(1) [my_lv_rimage_1] /dev/sdg1(1) [my_lv_rmeta_0] /dev/sdf1(0) [my_lv_rmeta_1] /dev/sdg1(0)
4.4.13.6. 將 RAID 映像檔分割為各別的邏輯卷冊
lvconvert --splitmirrors count -n splitname vg/lv [removable_PVs]
注意
my_lv 分割為兩個線性的邏輯卷冊:my_lv 與 new。
#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 12.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdf1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdf1(0) #lvconvert --splitmirror 1 -n new my_vg/my_lv#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv /dev/sde1(1) new /dev/sdf1(1)
my_lv 分割為一個線性的雙磁碟 RAID1 邏輯卷冊:my_lv,以及一個線性邏輯卷冊 new。
#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdf1(1) [my_lv_rimage_2] /dev/sdg1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdf1(0) [my_lv_rmeta_2] /dev/sdg1(0) #lvconvert --splitmirror 1 -n new my_vg/my_lv#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdf1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdf1(0) new /dev/sdg1(1)
4.4.13.7. 分割與合併 RAID 映像檔
lvconvert 指令,藉由 --trackchanges 引數搭配 --splitmirrors 引數來追蹤任何變更。這能讓您稍後將映像檔重新合併回陣列中,並僅只同步當映像檔被分割時,陣列所遭到更改的部分。
lvconvert 指令之格式如下。
lvconvert --splitmirrors count --trackchanges vg/lv [removable_PVs]
--trackchanges 引數來分割 RAID 映像檔時,您可指定欲分割哪個映像檔,不過您不可更改欲分割之卷冊的名稱。此外,最後產生的卷冊將會含有下列限制。
- 您新建的卷冊將會是唯讀。
- 您無法重新設定新卷冊的大小。
- 您無法將剩餘的陣列重新命名。
- 您無法重設剩餘陣列的大小。
- 您可獨立啟用新卷冊與剩餘的陣列。
lvconvert 搭配 --merge 引數來合併透過了 --trackchanges 引數分割的映像檔。當您合併映像檔時,僅有在映像檔分割後,遭到變更的陣列部分才會被重新同步。
lvconvert 指令之格式如下。
lvconvert --merge raid_image
#lvcreate --type raid1 -m2 -L1G -n my_lv .vgLogical volume "my_lv" created #lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sdb1(1) [my_lv_rimage_1] /dev/sdc1(1) [my_lv_rimage_2] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sdb1(0) [my_lv_rmeta_1] /dev/sdc1(0) [my_lv_rmeta_2] /dev/sdd1(0) #lvconvert --splitmirrors 1 --trackchanges my_vg/my_lvmy_lv_rimage_2 split from my_lv for read-only purposes. Use 'lvconvert --merge my_vg/my_lv_rimage_2' to merge back into my_lv #lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sdb1(1) [my_lv_rimage_1] /dev/sdc1(1) my_lv_rimage_2 /dev/sdd1(1) [my_lv_rmeta_0] /dev/sdb1(0) [my_lv_rmeta_1] /dev/sdc1(0) [my_lv_rmeta_2] /dev/sdd1(0)
#lvconvert --splitmirrors 1 --trackchanges my_vg/my_lvlv_rimage_1 split from my_lv for read-only purposes. Use 'lvconvert --merge my_vg/my_lv_rimage_1' to merge back into my_lv #lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sdc1(1) my_lv_rimage_1 /dev/sdd1(1) [my_lv_rmeta_0] /dev/sdc1(0) [my_lv_rmeta_1] /dev/sdd1(0) #lvconvert --merge my_vg/my_lv_rimage_1my_vg/my_lv_rimage_1 successfully merged back into my_vg/my_lv #lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sdc1(1) [my_lv_rimage_1] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sdc1(0) [my_lv_rmeta_1] /dev/sdd1(0)
lvconvert --splitmirrors 指令、重複執行在未指定 --trackchanges 引數的情況下,分割映像檔的初始 lvconvert 指令,來使分割成為永久性。這將移除 --trackchanges 引數所建立的連結。
--trackchanges 引數分割了映像檔之後,您無法在該陣列上發送其後的 lvconvert --splitmirrors 指令,除非您的原意乃將被追蹤的映像檔永久分割。
#lvconvert --splitmirrors 1 --trackchanges my_vg/my_lvmy_lv_rimage_1 split from my_lv for read-only purposes. Use 'lvconvert --merge my_vg/my_lv_rimage_1' to merge back into my_lv #lvconvert --splitmirrors 1 -n new my_vg/my_lv#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv /dev/sdc1(1) new /dev/sdd1(1)
#lvconvert --splitmirrors 1 --trackchanges my_vg/my_lvmy_lv_rimage_1 split from my_lv for read-only purposes. Use 'lvconvert --merge my_vg/my_lv_rimage_1' to merge back into my_lv #lvconvert --splitmirrors 1 --trackchanges my_vg/my_lvCannot track more than one split image at a time
#lvconvert --splitmirrors 1 --trackchanges my_vg/my_lvmy_lv_rimage_1 split from my_lv for read-only purposes. Use 'lvconvert --merge my_vg/my_lv_rimage_1' to merge back into my_lv #lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sdc1(1) my_lv_rimage_1 /dev/sdd1(1) [my_lv_rmeta_0] /dev/sdc1(0) [my_lv_rmeta_1] /dev/sdd1(0) #lvconvert --splitmirrors 1 -n new my_vg/my_lv /dev/sdc1Unable to split additional image from my_lv while tracking changes for my_lv_rimage_1
4.4.13.8. 設定 RAID 錯誤政策
lvm.conf 檔案中的 raid_fault_policy 欄位所定義的偏好設定,來以自動的方式處理裝置錯誤。
- 若
raid_fault_policy欄位設為了allocate,系統將會嘗試以來自卷冊群組中的可用裝置,來替換失效的裝置。若沒有可用裝置,此情況將會回報給系統日誌。 - 若
raid_fault_policy欄位設為了warn,系統將會產生一則警告,並且日誌將會顯示裝置已失效。這能讓使用者判斷應進行什麼樣的動作。
4.4.13.8.1. 「allocate」RAID 錯誤政策
lvm.conf 檔案中的 raid_fault_policy 欄位已設為 allocate。RAID 邏輯卷冊的格式如下。
# lvs -a -o name,copy_percent,devices my_vg
LV Copy% Devices
my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
[my_lv_rimage_0] /dev/sde1(1)
[my_lv_rimage_1] /dev/sdf1(1)
[my_lv_rimage_2] /dev/sdg1(1)
[my_lv_rmeta_0] /dev/sde1(0)
[my_lv_rmeta_1] /dev/sdf1(0)
[my_lv_rmeta_2] /dev/sdg1(0)
/dev/sde 裝置失效,系統日誌將會顯示錯誤訊息。
# grep lvm /var/log/messages
Jan 17 15:57:18 bp-01 lvm[8599]: Device #0 of raid1 array, my_vg-my_lv, has failed.
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at
250994294784: Input/output error
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at
250994376704: Input/output error
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at 0:
Input/output error
Jan 17 15:57:18 bp-01 lvm[8599]: /dev/sde1: read failed after 0 of 2048 at
4096: Input/output error
Jan 17 15:57:19 bp-01 lvm[8599]: Couldn't find device with uuid
3lugiV-3eSP-AFAR-sdrP-H20O-wM2M-qdMANy.
Jan 17 15:57:27 bp-01 lvm[8599]: raid1 array, my_vg-my_lv, is not in-sync.
Jan 17 15:57:36 bp-01 lvm[8599]: raid1 array, my_vg-my_lv, is now in-sync.
raid_fault_policy 欄位已設為 allocate,因此失效的裝置將會被替換為來自於卷冊群組中的新裝置。
# lvs -a -o name,copy_percent,devices vg
Couldn't find device with uuid 3lugiV-3eSP-AFAR-sdrP-H20O-wM2M-qdMANy.
LV Copy% Devices
lv 100.00 lv_rimage_0(0),lv_rimage_1(0),lv_rimage_2(0)
[lv_rimage_0] /dev/sdh1(1)
[lv_rimage_1] /dev/sdf1(1)
[lv_rimage_2] /dev/sdg1(1)
[lv_rmeta_0] /dev/sdh1(0)
[lv_rmeta_1] /dev/sdf1(0)
[lv_rmeta_2] /dev/sdg1(0)
vgreduce --removemissing VG。
raid_fault_policy 已設為 allocate,不過卻無可用裝置的話,配置將會失敗,使邏輯卷冊維持現狀。若配置失敗,您可選擇修復磁碟,然後如 節 4.4.13.8.2, “「warn」RAID 錯誤政策(Fault Policy)” 中所述地停用邏輯卷冊。此外,您亦可將失效的裝置替換掉,如 節 4.4.13.9, “替換 RAID 裝置” 中所述。
4.4.13.8.2. 「warn」RAID 錯誤政策(Fault Policy)
lvm.conf 檔案中的 raid_fault_policy 欄位已設為 warn。RAID 邏輯卷冊的格式如下。
# lvs -a -o name,copy_percent,devices my_vg
LV Copy% Devices
my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
[my_lv_rimage_0] /dev/sdh1(1)
[my_lv_rimage_1] /dev/sdf1(1)
[my_lv_rimage_2] /dev/sdg1(1)
[my_lv_rmeta_0] /dev/sdh1(0)
[my_lv_rmeta_1] /dev/sdf1(0)
[my_lv_rmeta_2] /dev/sdg1(0)
/dev/sdh 裝置失效,系統日誌將會顯示錯誤訊息。然而在此情況下,LVM 將不會自動透過替換映像檔,以嘗試修復 RAID 裝置。反之,若裝置失效,您可如下透過 lvconvert 指令的 --repair 引數來替換裝置。
#lvconvert --repair my_vg/my_lv/dev/sdh1: read failed after 0 of 2048 at 250994294784: Input/output error /dev/sdh1: read failed after 0 of 2048 at 250994376704: Input/output error /dev/sdh1: read failed after 0 of 2048 at 0: Input/output error /dev/sdh1: read failed after 0 of 2048 at 4096: Input/output error Couldn't find device with uuid fbI0YO-GX7x-firU-Vy5o-vzwx-vAKZ-feRxfF. Attempt to replace failed RAID images (requires full device resync)? [y/n]:y#lvs -a -o name,copy_percent,devices my_vgCouldn't find device with uuid fbI0YO-GX7x-firU-Vy5o-vzwx-vAKZ-feRxfF. LV Copy% Devices my_lv 64.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdf1(1) [my_lv_rimage_2] /dev/sdg1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdf1(0) [my_lv_rmeta_2] /dev/sdg1(0)
vgreduce --removemissing VG。
#lvchange -an my_vg/my_lv#lvchange -ay my_vg/my_lv
4.4.13.9. 替換 RAID 裝置
lvconvert 指令的 --replace 引數這單一步驟,取代 RAID 卷冊中的裝置。
lvconvert --replace 的格式如下。
lvconvert --replace dev_to_remove vg/lv [possible_replacements]
#lvcreate --type raid1 -m2 -L 1G -n my_lv my_vgLogical volume "my_lv" created #lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sdb1(1) [my_lv_rimage_1] /dev/sdb2(1) [my_lv_rimage_2] /dev/sdc1(1) [my_lv_rmeta_0] /dev/sdb1(0) [my_lv_rmeta_1] /dev/sdb2(0) [my_lv_rmeta_2] /dev/sdc1(0) #lvconvert --replace /dev/sdb2 my_vg/my_lv#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 37.50 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sdb1(1) [my_lv_rimage_1] /dev/sdc2(1) [my_lv_rimage_2] /dev/sdc1(1) [my_lv_rmeta_0] /dev/sdb1(0) [my_lv_rmeta_1] /dev/sdc2(0) [my_lv_rmeta_2] /dev/sdc1(0)
#lvcreate --type raid1 -m1 -L 100 -n my_lv my_vgLogical volume "my_lv" created #lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sda1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rmeta_0] /dev/sda1(0) [my_lv_rmeta_1] /dev/sdb1(0) #pvsPV VG Fmt Attr PSize PFree /dev/sda1 my_vg lvm2 a-- 1020.00m 916.00m /dev/sdb1 my_vg lvm2 a-- 1020.00m 916.00m /dev/sdc1 my_vg lvm2 a-- 1020.00m 1020.00m /dev/sdd1 my_vg lvm2 a-- 1020.00m 1020.00m #lvconvert --replace /dev/sdb1 my_vg/my_lv /dev/sdd1#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 28.00 my_lv_rimage_0(0),my_lv_rimage_1(0) [my_lv_rimage_0] /dev/sda1(1) [my_lv_rimage_1] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sda1(0) [my_lv_rmeta_1] /dev/sdd1(0)
replace 引數,一次取代超過一組 RAID 裝置,如以下範例所示:
#lvcreate --type raid1 -m 2 -L 100 -n my_lv my_vgLogical volume "my_lv" created #lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sda1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rimage_2] /dev/sdc1(1) [my_lv_rmeta_0] /dev/sda1(0) [my_lv_rmeta_1] /dev/sdb1(0) [my_lv_rmeta_2] /dev/sdc1(0) #lvconvert --replace /dev/sdb1 --replace /dev/sdc1 my_vg/my_lv#lvs -a -o name,copy_percent,devices my_vgLV Copy% Devices my_lv 60.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sda1(1) [my_lv_rimage_1] /dev/sdd1(1) [my_lv_rimage_2] /dev/sde1(1) [my_lv_rmeta_0] /dev/sda1(0) [my_lv_rmeta_1] /dev/sdd1(0) [my_lv_rmeta_2] /dev/sde1(0)
注意
lvconvert --replace 指令來指定取代用的磁碟時,取代磁碟不該從陣列中已使用的磁碟空間中分配。舉例來說,lv_rimage_0 與 lv_rimage_1 就不該位於同樣的實體卷冊上。
4.5. 透過過濾器來控制 LVM 裝置掃描(LVM Device Scans)
vgscan 指令會被執行來掃描系統上的區塊裝置以搜尋 LVM 標籤,判斷出它們哪一個才是實體卷冊,並讀取 metadata 來建立一列卷冊群組清單。實體卷冊的名稱儲存在系統中各個節點的 cache 檔案中(/etc/lvm/cache/.cache)。後續的指令可讀取該檔案來避免重新掃描(rescanning)。
lvm.conf 配置檔案中設定過濾器,以控制 LVM 該掃描哪些裝置。這些位於 lvm.conf 中的過濾器包含著一系列套用至 /dev 目錄中的裝置名稱的基本正規表示式,以決定是否要接受或拒絕找到的各個區塊裝置。
a/loop/ 相當於 a/.*loop.*/ 並且將會與 /dev/solooperation/lvol1 相符。
filter = [ "a/.*/" ]
filter = [ "r|/dev/cdrom|" ]
filter = [ "a/loop.*/", "r/.*/" ]
filter =[ "a|loop.*|", "a|/dev/hd.*|", "r|.*|" ]
filter = [ "a|^/dev/hda8$|", "r/.*/" ]
4.6. 線上資料重置(Online Data Relocation)
pvmove 指令來在系統使用中的時候移動資料。
pvmove 這項指令會將要移至不同部份中的資料分開並建立一個暫時性的鏡像來移動各個部份。如欲取得更多有關於 pvmove 指令作業上的相關資訊,請查看 pvmove(8) man page。
注意
pvmove 作業,您應該確定已安裝 cmirror 與 cmirror-kmod 套件,同時 cmirror 服務處於執行狀態。必須安裝的 cmirror-kmod 套件端視執行中的 kernel 核心而定。舉例來說,如果執行中的 kernel 是 kernel-largesmp,那就需要有 cmirror-kmod-largesmp 以對應 kernel 版本。
/dev/sdc1 上移至卷冊群組中其它可使用的實體卷冊上:
# pvmove /dev/sdc1MyLV 的扇區。
# pvmove -n MyLV /dev/sdc1pvmove 指令的執行可能會花上一段時間,我們建議您在背景環境(background)中執行這項指令來避免完成度更新顯示在前景環境(foreground)中。下列指令會將所有分配至實體卷冊 /dev/sdc1 的扇區移至背景環境中的 /dev/sdf1。
# pvmove -b /dev/sdc1 /dev/sdf1
# pvmove -i5 /dev/sdd14.7. 在叢集中啟用各別節點上的邏輯卷冊
lvchange -aey 這項指令。另外,您亦可使用 lvchange -aly 指令來只在本機節點上啟用邏輯卷冊,而非特別地啟用。您之後可同時地在額外的節點上啟用它們。
4.8. LVM 的自訂化回報
pvs、lvs 和 vgs 指令來產生出簡明與可自訂化的 LVM 物件報告。這些指令所產生的報告包含著各個物件的一行輸出。各個行列都包含著一列和物件相關、經過排序的屬性的欄位。有五種方式可選擇欲回報的物件:藉由實體卷冊、卷冊群組、邏輯卷冊、實體卷冊區段,以及邏輯卷冊區段。
- 您可使用來控制產生出的報告格式的指令引數之摘要。
- 您能為 LVM 物件選擇的欄位之清單。
- 您可使用來排序產生出的報告的指令引數之 摘。要
- 指定回報輸出單位的指示。
4.8.1. 格式控制
pvs、lvs 或 vgs 指令都能看見顯示出的預設欄位和排序順序。您可藉由下列引數來控制這些指令的輸出:
- 您可藉由使用
-o引數來改變預設顯示的欄位。比方說,下列輸出為pvs指令的預設輸出(它顯示出了有關於實體卷冊的相關資訊)。#
pvsPV VG Fmt Attr PSize PFree /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G下列指令只會顯示實體卷冊的名稱和大小。#
pvs -o pv_name,pv_sizePV PSize /dev/sdb1 17.14G /dev/sdc1 17.14G /dev/sdd1 17.14G - 您可透過一個加號(+)來將一個欄位附加至輸出,這能夠和 -o 引數一起組合使用。下列範例除了會顯示預設的欄位還會顯示實體卷冊的 UUID。
#
pvs -o +pv_uuidPV VG Fmt Attr PSize PFree PV UUID /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G onFF2w-1fLC-ughJ-D9eB-M7iv-6XqA-dqGeXY /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G Joqlch-yWSj-kuEn-IdwM-01S9-X08M-mcpsVe /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G yvfvZK-Cf31-j75k-dECm-0RZ3-0dGW-UqkCS - 新增
-v引數至一項指令可增加額外的欄位。比方說,輸入pvs -v指令的話將會顯示出預設欄位以及DevSize和PV UUID這兩個額外的欄位。#
pvs -vScanning for physical volume names PV VG Fmt Attr PSize PFree DevSize PV UUID /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G 17.14G onFF2w-1fLC-ughJ-D9eB-M7iv-6XqA-dqGeXY /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G 17.14G Joqlch-yWSj-kuEn-IdwM-01S9-XO8M-mcpsVe /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G 17.14G yvfvZK-Cf31-j75k-dECm-0RZ3-0dGW-tUqkCS --noheadings引數會將標題的行列抑制住。這對於編寫 script 相當有幫助。下列範例合併使用了--noheadings和pv_name引數來產生了一列包含著所有實體卷冊的清單。#
pvs --noheadings -o pv_name/dev/sdb1 /dev/sdc1 /dev/sdd1--separator 分隔符號這個引數使用了分隔符號來區隔了各個欄位。下列範例透過了一個等於符號(=)來區分了pvs的預設輸出欄位。#
pvs --separator =PV=VG=Fmt=Attr=PSize=PFree /dev/sdb1=new_vg=lvm2=a-=17.14G=17.14G /dev/sdc1=new_vg=lvm2=a-=17.14G=17.09G /dev/sdd1=new_vg=lvm2=a-=17.14G=17.14G若要在使用separator引數時讓欄位對稱的話,請合併使用separator引數以及--aligned引數。#
pvs --separator = --alignedPV =VG =Fmt =Attr=PSize =PFree /dev/sdb1 =new_vg=lvm2=a- =17.14G=17.14G /dev/sdc1 =new_vg=lvm2=a- =17.14G=17.09G /dev/sdd1 =new_vg=lvm2=a- =17.14G=17.14G
pvs(8)、vgs(8) 以及 lvs(8) man page。
# vgs -o +pv_name
VG #PV #LV #SN Attr VSize VFree PV
new_vg 3 1 0 wz--n- 51.42G 51.37G /dev/sdc1
new_vg 3 1 0 wz--n- 51.42G 51.37G /dev/sdd1
new_vg 3 1 0 wz--n- 51.42G 51.37G /dev/sdb1
4.8.2. 物件選擇
pvs、vgs 和 lvs 來顯示出有關於 LVM 物件的相關資訊。
pvs 指令,name 代表 pv_name,不過對 vgs 指令來講,name 會被解譯為 vg_name。
pvs -o pv_free。
# pvs -o +free
PFree
17.14G
17.09G
17.14G
4.8.2.1. pvs 指令
pvs 指令的顯示引數,以及出現在標頭顯示中的欄位名稱與欄位描述。
表格 4.2. pvs 顯示欄位
| 引數 | 標頭 | 描述 |
|---|---|---|
dev_size | DevSize | 實體卷冊所建立於的基本裝置上的大小 |
pe_start | 第一個 PE | 設為基本裝置中第一個實體扇區的起始的偏差值 |
pv_attr | Attr | 實體卷冊狀態:(a)llocatable 或 e(x)ported。 |
pv_fmt | Fmt | 實體卷冊的 metadata 格式(lvm2 或 lvm1) |
pv_free | PFree | 實體卷冊上剩下的可用空間 |
pv_name | PV | 實體卷冊名稱 |
pv_pe_alloc_count | Alloc | 已使用的實體扇區數量 |
pv_pe_count | PE | 實體扇區數量 |
pvseg_size | SSize | 實體卷冊的區段大小 |
pvseg_start | 起始 | 實體卷冊區段的起始實體扇區 |
pv_size | PSize | 實體卷冊的大小 |
pv_tags | PV Tag | 連接至實體卷冊的 LVM 標籤 |
pv_used | 已使用 | 實體卷冊上目前已使用的空間 |
pv_uuid | PV UUID | 實體卷冊的 UUID |
pvs 指令就預設值會顯示下列欄位:pv_name、vg_name、pv_fmt、pv_attr、pv_size、pv_free。它們是藉由 pv_name 來排序的。
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 new_vg lvm2 a- 17.14G 17.14G
/dev/sdc1 new_vg lvm2 a- 17.14G 17.09G
/dev/sdd1 new_vg lvm2 a- 17.14G 17.13G
-v 引數以及 pvs 指令可將下列欄位附加至預設的輸出:dev_size、pv_uuid。
# pvs -v
Scanning for physical volume names
PV VG Fmt Attr PSize PFree DevSize PV UUID
/dev/sdb1 new_vg lvm2 a- 17.14G 17.14G 17.14G onFF2w-1fLC-ughJ-D9eB-M7iv-6XqA-dqGeXY
/dev/sdc1 new_vg lvm2 a- 17.14G 17.09G 17.14G Joqlch-yWSj-kuEn-IdwM-01S9-XO8M-mcpsVe
/dev/sdd1 new_vg lvm2 a- 17.14G 17.13G 17.14G yvfvZK-Cf31-j75k-dECm-0RZ3-0dGW-tUqkCS
pvs 指令的 --segments 引數來顯示有關於各個實體卷冊區段的相關資訊。區段相當於扇區的群組。區段視點(segment view)可有效幫助您查看您的邏輯卷冊是否已分散掉。
pvs --segments 指令就預設值會顯示下列欄位:pv_name、vg_name、pv_fmt、pv_attr、pv_size、pv_free、pvseg_start、pvseg_size。它們是藉由實體卷冊中的 pv_name 和 pvseg_size 來排序的。
# pvs --segments
PV VG Fmt Attr PSize PFree Start SSize
/dev/hda2 VolGroup00 lvm2 a- 37.16G 32.00M 0 1172
/dev/hda2 VolGroup00 lvm2 a- 37.16G 32.00M 1172 16
/dev/hda2 VolGroup00 lvm2 a- 37.16G 32.00M 1188 1
/dev/sda1 vg lvm2 a- 17.14G 16.75G 0 26
/dev/sda1 vg lvm2 a- 17.14G 16.75G 26 24
/dev/sda1 vg lvm2 a- 17.14G 16.75G 50 26
/dev/sda1 vg lvm2 a- 17.14G 16.75G 76 24
/dev/sda1 vg lvm2 a- 17.14G 16.75G 100 26
/dev/sda1 vg lvm2 a- 17.14G 16.75G 126 24
/dev/sda1 vg lvm2 a- 17.14G 16.75G 150 22
/dev/sda1 vg lvm2 a- 17.14G 16.75G 172 4217
/dev/sdb1 vg lvm2 a- 17.14G 17.14G 0 4389
/dev/sdc1 vg lvm2 a- 17.14G 17.14G 0 4389
/dev/sdd1 vg lvm2 a- 17.14G 17.14G 0 4389
/dev/sde1 vg lvm2 a- 17.14G 17.14G 0 4389
/dev/sdf1 vg lvm2 a- 17.14G 17.14G 0 4389
/dev/sdg1 vg lvm2 a- 17.14G 17.14G 0 4389
pvs -a 指令來查看 LVM 所偵測到不過尚未被初始化為 LVM 實體卷冊的裝置。
# pvs -a
PV VG Fmt Attr PSize PFree
/dev/VolGroup00/LogVol01 -- 0 0
/dev/new_vg/lvol0 -- 0 0
/dev/ram -- 0 0
/dev/ram0 -- 0 0
/dev/ram2 -- 0 0
/dev/ram3 -- 0 0
/dev/ram4 -- 0 0
/dev/ram5 -- 0 0
/dev/ram6 -- 0 0
/dev/root -- 0 0
/dev/sda -- 0 0
/dev/sdb -- 0 0
/dev/sdb1 new_vg lvm2 a- 17.14G 17.14G
/dev/sdc -- 0 0
/dev/sdc1 new_vg lvm2 a- 17.14G 17.09G
/dev/sdd -- 0 0
/dev/sdd1 new_vg lvm2 a- 17.14G 17.14G
4.8.2.2. vgs 指令
vgs 指令的顯示引數、出現在標頭顯示中的欄位名稱,以及欄位的描述。
表格 4.3. vgs 顯示欄位
| 引數 | 標頭 | 描述 |
|---|---|---|
lv_count | #LV | 卷冊群組中所包含的邏輯卷冊數量 |
max_lv | MaxLV | 卷冊群組中可允許的最大邏輯卷冊數量(若無限制的話便是 0) |
max_pv | MaxPV | 卷冊群組中可允許的最大實體卷冊數量(若無限制的話便是 0) |
pv_count | #PV | 定義卷冊群組的實體卷冊數量 |
snap_count | #SN | 卷冊群組所包含的 snapshot 數量 |
vg_attr | Attr | 卷冊群組的狀態:可寫入(w)、唯讀(r)、可重設大小(z)、已匯出(x)、部分的(p)以及已聚成叢集(c)。 |
vg_extent_count | #Ext | 卷冊群組中的實體扇區數量 |
vg_extent_size | Ext | 卷冊群組中的實體扇區大小 |
vg_fmt | Fmt | 卷冊群組的 metadata 格式(lvm2 或 lvm1) |
vg_free | VFree | 卷冊群組中剩下的可用空間大小 |
vg_free_count | Free | 卷冊群組中可使用的實體扇區數量 |
vg_name | VG | 卷冊群組名稱 |
vg_seqno | Seq | 表示卷冊群組修訂版本的號碼 |
vg_size | VSize | 卷冊群組的大小 |
vg_sysid | SYS ID | LVM1 System ID |
vg_tags | VG Tags | 連接至卷冊群組的 LVM 標籤 |
vg_uuid | VG UUID | 卷冊群組的 UUID |
vgs 指令就預設值會顯示下列欄位:vg_name、pv_count、lv_count、snap_count、vg_attr、vg_size、vg_free。它們是藉由 vg_name 來排序的。
# vgs
VG #PV #LV #SN Attr VSize VFree
new_vg 3 1 1 wz--n- 51.42G 51.36G
vgs 指令和 -v 引數會將下列欄位新增至預設的畫面:vg_extent_size、vg_uuid。
# vgs -v
Finding all volume groups
Finding volume group "new_vg"
VG Attr Ext #PV #LV #SN VSize VFree VG UUID
new_vg wz--n- 4.00M 3 1 1 51.42G 51.36G jxQJ0a-ZKk0-OpMO-0118-nlwO-wwqd-fD5D32
4.8.2.3. lvs 指令
lvs 指令的顯示引數,以及它所出現在標頭顯示中的欄位名稱和該欄位的描述。
表格 4.4. lvs 顯示欄位
| 引數 | 標頭 | 描述 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Chunk | Snapshot 卷冊中的單位大小 | ||||||||
copy_percent | Copy% | 鏡像卷冊的同步化百分比;在實體卷冊被透過 pv_move 指令移動時也會使用到 | ||||||||
devices | 裝置 | 構成邏輯卷冊的基本裝置:實體卷冊、邏輯卷冊,以及起始實體扇區和邏輯扇區 | ||||||||
lv_attr | Attr | 邏輯卷冊的狀態。邏輯卷冊的 attribute bit 如下:
| ||||||||
lv_kernel_major | KMaj | 邏輯卷冊的實際主要裝置代碼(若未啟用的話就是 -1) | ||||||||
lv_kernel_minor | KMIN | 邏輯卷冊的實際鏡像裝置代碼(若未啟用的話就是 -1) | ||||||||
lv_major | Maj | 邏輯卷冊的持續性主要裝置代碼(若未指定的話就是 -1) | ||||||||
lv_minor | Min | 邏輯卷冊的持續性次要裝置代碼(若未指定的話就是 -1) | ||||||||
lv_name | LV | 邏輯卷冊名稱 | ||||||||
lv_size | LSize | 邏輯卷冊大小 | ||||||||
lv_tags | LV Tags | 連接至邏輯卷冊的 LVM 標籤 | ||||||||
lv_uuid | LV UUID | 邏輯卷冊的 UUID。 | ||||||||
mirror_log | Log | 鏡像 log 所位於的裝置 | ||||||||
modules | 模組 | 使用此邏輯卷冊所需要的相應 kernel 裝置映射(device-mapper)目標 | ||||||||
move_pv | 移動 | 提供一個透過 pvmove 指令來建立的暫時性邏輯卷冊的實體卷冊 | ||||||||
origin | 起源 | snapshot 卷冊的起源裝置 | ||||||||
| 範圍 | 鏡像邏輯卷冊的單位大小 | ||||||||
seg_count | #Seg | 邏輯卷冊中的區段數量 | ||||||||
seg_size | SSize | 邏輯卷冊中的區段大小 | ||||||||
seg_start | 起始 | 邏輯卷冊中的區段偏差值 | ||||||||
seg_tags | Seg Tags | 連接至邏輯卷冊之區段的 LVM 標籤 | ||||||||
segtype | 類型 | 邏輯卷冊的區段類型(例如:mirror、striped、linear) | ||||||||
snap_percent | Snap% | Snapshot 目前的使用量百分比 | ||||||||
stripes | #Str | 邏輯卷冊中的磁帶或鏡像數量 | ||||||||
| 磁帶 | 等量邏輯卷冊中的磁條單位大小 |
lvs 指令就預設值會顯示下列欄位:lv_name、vg_name、lv_attr、lv_size、origin、snap_percent、move_pv、mirror_log、copy_percent、convert_lv。它們就預設值會被藉由卷冊群組中的 vg_name 和 lv_name 來排序。
# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lvol0 new_vg owi-a- 52.00M
newvgsnap1 new_vg swi-a- 8.00M lvol0 0.20
lvs 指令以及 -v 引數便能將下列欄位新增至預設的畫面中:seg_count、lv_major、lv_minor、lv_kernel_major、lv_kernel_minor、lv_uuid。
# lvs -v
Finding all logical volumes
LV VG #Seg Attr LSize Maj Min KMaj KMin Origin Snap% Move Copy% Log Convert LV UUID
lvol0 new_vg 1 owi-a- 52.00M -1 -1 253 3 LBy1Tz-sr23-OjsI-LT03-nHLC-y8XW-EhCl78
newvgsnap1 new_vg 1 swi-a- 8.00M -1 -1 253 5 lvol0 0.20 1ye1OU-1cIu-o79k-20h2-ZGF0-qCJm-CfbsIx
lvs 指令的 --segments 引數來顯示含有強調區段資訊的預設欄位的相關資訊。當您使用 segments 引數時,seg 前綴字元為非必要的。lvs --segments 指令就預設值會顯示下列欄位:lv_name、vg_name、lv_attr、stripes、segtype、seg_size。畫面就預設值會藉由卷冊群組中的 vg_name、lv_name 以及邏輯卷冊中的 seg_start 來排序。若邏輯卷冊被分散的話,這項指令的輸出便會將其顯示出來。
# lvs --segments
LV VG Attr #Str Type SSize
LogVol00 VolGroup00 -wi-ao 1 linear 36.62G
LogVol01 VolGroup00 -wi-ao 1 linear 512.00M
lv vg -wi-a- 1 linear 104.00M
lv vg -wi-a- 1 linear 104.00M
lv vg -wi-a- 1 linear 104.00M
lv vg -wi-a- 1 linear 88.00M
lvs --segments 指令以及 -v 引數便可新增下列欄位至預設的畫面中:seg_start、stripesize、chunksize。
# lvs -v --segments
Finding all logical volumes
LV VG Attr Start SSize #Str Type Stripe Chunk
lvol0 new_vg owi-a- 0 52.00M 1 linear 0 0
newvgsnap1 new_vg swi-a- 0 8.00M 1 linear 0 8.00K
lvs 指令在一部配置了一個邏輯卷冊的系統上的預設輸出,以及 lvs 指令和 segments 引數的預設輸出。
#lvsLV VG Attr LSize Origin Snap% Move Log Copy% lvol0 new_vg -wi-a- 52.00M #lvs --segmentsLV VG Attr #Str Type SSize lvol0 new_vg -wi-a- 1 linear 52.00M
4.8.3. 排序 LVM 報告
lvs、vgs 或 pvs 指令的所有輸出都要先被產生並儲存於內部之後才可進行排序並且行列才可正確對稱。您可指定 --unbuffered 這個引數來在未排序的輸出一被產生時即刻將它顯示出。
-O 引數。無須在輸出中包含這些欄位。
pvs 指令的輸出,它顯示了實體卷冊的名稱、大小以及可用空間。
# pvs -o pv_name,pv_size,pv_free
PV PSize PFree
/dev/sdb1 17.14G 17.14G
/dev/sdc1 17.14G 17.09G
/dev/sdd1 17.14G 17.14G
# pvs -o pv_name,pv_size,pv_free -O pv_free
PV PSize PFree
/dev/sdc1 17.14G 17.09G
/dev/sdd1 17.14G 17.14G
/dev/sdb1 17.14G 17.14G
# pvs -o pv_name,pv_size -O pv_free
PV PSize
/dev/sdc1 17.14G
/dev/sdd1 17.14G
/dev/sdb1 17.14G
-O 引數之後,於您所指定的欄位之前前置 - 這個字元。
# pvs -o pv_name,pv_size,pv_free -O -pv_free
PV PSize PFree
/dev/sdd1 17.14G 17.14G
/dev/sdb1 17.14G 17.14G
/dev/sdc1 17.14G 17.09G
4.8.4. 指定單位
--units 引數。您可指定 (b)ytes、(k)ilobytes、(m)egabytes、(g)igabytes、(t)erabytes、(e)xabytes、(p)etabytes、以及 (h)uman-readable。預設的顯示為 human-readable。您可透過在 lvm.conf 檔案的 global 部份中設定 units 這個參數來置換預設值。
pvs 指令的輸出為 MB 而非預設的 GB。
# pvs --units m
PV VG Fmt Attr PSize PFree
/dev/sda1 lvm2 -- 17555.40M 17555.40M
/dev/sdb1 new_vg lvm2 a- 17552.00M 17552.00M
/dev/sdc1 new_vg lvm2 a- 17552.00M 17500.00M
/dev/sdd1 new_vg lvm2 a- 17552.00M 17552.00M
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 new_vg lvm2 a- 17.14G 17.14G
/dev/sdc1 new_vg lvm2 a- 17.14G 17.09G
/dev/sdd1 new_vg lvm2 a- 17.14G 17.14G
# pvs --units G
PV VG Fmt Attr PSize PFree
/dev/sdb1 new_vg lvm2 a- 18.40G 18.40G
/dev/sdc1 new_vg lvm2 a- 18.40G 18.35G
/dev/sdd1 new_vg lvm2 a- 18.40G 18.40G
pvs 指令的輸出顯示成了幾個磁區。
# pvs --units s
PV VG Fmt Attr PSize PFree
/dev/sdb1 new_vg lvm2 a- 35946496S 35946496S
/dev/sdc1 new_vg lvm2 a- 35946496S 35840000S
/dev/sdd1 new_vg lvm2 a- 35946496S 35946496S
pvs 指令的輸出以 4 MB 為單位的方式顯示出。
# pvs --units 4m
PV VG Fmt Attr PSize PFree
/dev/sdb1 new_vg lvm2 a- 4388.00U 4388.00U
/dev/sdc1 new_vg lvm2 a- 4388.00U 4375.00U
/dev/sdd1 new_vg lvm2 a- 4388.00U 4388.00U
章 5. LVM 配置範例
5.1. 在三個磁碟上建立一個 LVM 邏輯卷冊
new_logical_volume 的 LVM 邏輯卷冊,它包含著位於 /dev/sda1、/dev/sdb1 以及 /dev/sdc1 的磁碟。
5.1.1. 建立實體卷冊(Physical Volumes)
警告
/dev/sda1、/dev/sdb1 以及 /dev/sdc1 上的所有資料都損毀。
# pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1
Physical volume "/dev/sda1" successfully created
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
5.1.2. 建立卷冊群組
new_vol_group。
# vgcreate new_vol_group /dev/sda1 /dev/sdb1 /dev/sdc1
Volume group "new_vol_group" successfully created
vgs 指令來顯示新卷冊群組的屬性。
# vgs
VG #PV #LV #SN Attr VSize VFree
new_vol_group 3 0 0 wz--n- 51.45G 51.45G
5.1.3. 建立邏輯卷冊
new_vol_group 卷冊群組建立邏輯卷冊 new_logical_volume。此範例會建立一個使用卷冊群組 2GB 的邏輯卷冊。
# lvcreate -L2G -n new_logical_volume new_vol_group
Logical volume "new_logical_volume" created
5.1.4. 建立檔案系統
#mkfs.gfs2 -plock_nolock -j 1 /dev/new_vol_group/new_logical_volumeThis will destroy any data on /dev/new_vol_group/new_logical_volume. Are you sure you want to proceed? [y/n]yDevice: /dev/new_vol_group/new_logical_volume Blocksize: 4096 Filesystem Size: 491460 Journals: 1 Resource Groups: 8 Locking Protocol: lock_nolock Lock Table: Syncing... All Done
#mount /dev/new_vol_group/new_logical_volume /mnt[root@tng3-1 ~]#dfFilesystem 1K-blocks Used Available Use% Mounted on /dev/new_vol_group/new_logical_volume 1965840 20 1965820 1% /mnt
5.2. 建立一個磁條邏輯卷冊(Striped Logical Volume)
striped_logical_volume 的 LVM 磁條邏輯卷冊(LVM striped logical volume),它會將資料分散到 /dev/sda1、/dev/sdb1 和 /dev/sdc1 磁碟上去。
5.2.1. 建立實體卷冊(Physical Volumes)
警告
/dev/sda1、/dev/sdb1 以及 /dev/sdc1 上的所有資料都損毀。
# pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1
Physical volume "/dev/sda1" successfully created
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
5.2.2. 建立卷冊群組
volgroup01。
# vgcreate volgroup01 /dev/sda1 /dev/sdb1 /dev/sdc1
Volume group "volgroup01" successfully created
vgs 指令來顯示新卷冊群組的屬性。
# vgs
VG #PV #LV #SN Attr VSize VFree
volgroup01 3 0 0 wz--n- 51.45G 51.45G
5.2.3. 建立邏輯卷冊
volgroup01 這個卷冊群組建立磁條邏輯卷冊 striped_logical_volume。此範例會建立一個大小為 2GB 的邏輯卷冊,它將含有三個磁條,並且每個磁條大小為 4 KB。
# lvcreate -i3 -I4 -L2G -nstriped_logical_volume volgroup01
Rounding size (512 extents) up to stripe boundary size (513 extents)
Logical volume "striped_logical_volume" created
5.2.4. 建立檔案系統
#mkfs.gfs2 -plock_nolock -j 1 /dev/volgroup01/striped_logical_volumeThis will destroy any data on /dev/volgroup01/striped_logical_volume. Are you sure you want to proceed? [y/n]yDevice: /dev/volgroup01/striped_logical_volume Blocksize: 4096 Filesystem Size: 492484 Journals: 1 Resource Groups: 8 Locking Protocol: lock_nolock Lock Table: Syncing... All Done
#mount /dev/volgroup01/striped_logical_volume /mnt[root@tng3-1 ~]#dfFilesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/VolGroup00-LogVol00 13902624 1656776 11528232 13% / /dev/hda1 101086 10787 85080 12% /boot tmpfs 127880 0 127880 0% /dev/shm /dev/volgroup01/striped_logical_volume 1969936 20 1969916 1% /mnt
5.3. 分割卷冊群組
mylv 是由 myvol 這個卷冊群組所分割的,並且它包含著 /dev/sda1、/dev/sdb1 以及 /dev/sdc1 這三個實體卷冊。
myvg 這個卷冊群組便會包含著 /dev/sda1 和 /dev/sdb1。第二個邏輯群組 yourvg 則會包含著 /dev/sdc1。
5.3.1. 判斷可用空間
pvscan 指令來判斷出卷冊群組中目前有多少可用空間。
# pvscan
PV /dev/sda1 VG myvg lvm2 [17.15 GB / 0 free]
PV /dev/sdb1 VG myvg lvm2 [17.15 GB / 12.15 GB free]
PV /dev/sdc1 VG myvg lvm2 [17.15 GB / 15.80 GB free]
Total: 3 [51.45 GB] / in use: 3 [51.45 GB] / in no VG: 0 [0 ]
5.3.2. 移動資料
pvmove 指令來將 /dev/sdc1 中所有已使用的實體扇區移至 /dev/sdb1。pvmove 指令的執行可能會花上一段時間。
# pvmove /dev/sdc1 /dev/sdb1
/dev/sdc1: Moved: 14.7%
/dev/sdc1: Moved: 30.3%
/dev/sdc1: Moved: 45.7%
/dev/sdc1: Moved: 61.0%
/dev/sdc1: Moved: 76.6%
/dev/sdc1: Moved: 92.2%
/dev/sdc1: Moved: 100.0%
/dev/sdc1 上的所有空間都可使用。
# pvscan
PV /dev/sda1 VG myvg lvm2 [17.15 GB / 0 free]
PV /dev/sdb1 VG myvg lvm2 [17.15 GB / 10.80 GB free]
PV /dev/sdc1 VG myvg lvm2 [17.15 GB / 17.15 GB free]
Total: 3 [51.45 GB] / in use: 3 [51.45 GB] / in no VG: 0 [0 ]
5.3.3. 分割卷冊群組
yourvg,請使用 vgsplit 指令來分割卷冊群組 myvg。
lvchange 指令或是 vgchange 指令來停用邏輯卷冊。下列指令可停用邏輯卷冊 mylv 然後由 myvg 卷冊群組分割 yourvg 卷冊群組,然後將實體卷冊 /dev/sdc1 移至新的卷冊群組 yourvg 中。
#lvchange -a n /dev/myvg/mylv#vgsplit myvg yourvg /dev/sdc1Volume group "yourvg" successfully split from "myvg"
vgs 指令來查看這兩個卷冊群組的屬性。
# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 2 1 0 wz--n- 34.30G 10.80G
yourvg 1 0 0 wz--n- 17.15G 17.15G
5.3.4. 建立新的邏輯卷冊
yourlv。
# lvcreate -L5G -n yourlv yourvg
Logical volume "yourlv" created
5.3.5. 製作檔案系統和掛載新的邏輯卷冊
#mkfs.gfs2 -plock_nolock -j 1 /dev/yourvg/yourlvThis will destroy any data on /dev/yourvg/yourlv. Are you sure you want to proceed? [y/n]yDevice: /dev/yourvg/yourlv Blocksize: 4096 Filesystem Size: 1277816 Journals: 1 Resource Groups: 20 Locking Protocol: lock_nolock Lock Table: Syncing... All Done [root@tng3-1 ~]#mount /dev/yourvg/yourlv /mnt
5.3.6. 啟用和掛載原本的邏輯卷冊
mylv,因此在您掛載它之前您必須再次啟用它。
#lvchange -a y mylv[root@tng3-1 ~]#mount /dev/myvg/mylv /mnt[root@tng3-1 ~]#dfFilesystem 1K-blocks Used Available Use% Mounted on /dev/yourvg/yourlv 24507776 32 24507744 1% /mnt /dev/myvg/mylv 24507776 32 24507744 1% /mnt
5.4. 由邏輯卷冊中移除磁碟
5.4.1. 將扇區移至現有的實體卷冊中
myvg 卷冊群組中的四個實體卷冊上。
# pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda1 myvg lvm2 a- 17.15G 12.15G 5.00G
/dev/sdb1 myvg lvm2 a- 17.15G 12.15G 5.00G
/dev/sdc1 myvg lvm2 a- 17.15G 12.15G 5.00G
/dev/sdd1 myvg lvm2 a- 17.15G 2.15G 15.00G
/dev/sdb1 的扇區移除,如此一來我們才能將該磁碟由卷冊群組中移除。
pvmove 指令並且不使用其它選項,如此一來扇區便會被分配置其它裝置上。
# pvmove /dev/sdb1
/dev/sdb1: Moved: 2.0%
...
/dev/sdb1: Moved: 79.2%
...
/dev/sdb1: Moved: 100.0%
pvmove 指令執行完成後,扇區的分配會如下所示:
# pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda1 myvg lvm2 a- 17.15G 7.15G 10.00G
/dev/sdb1 myvg lvm2 a- 17.15G 17.15G 0
/dev/sdc1 myvg lvm2 a- 17.15G 12.15G 5.00G
/dev/sdd1 myvg lvm2 a- 17.15G 2.15G 15.00G
vgreduce 指令來將 /dev/sdb1 實體卷冊由卷冊群組中移除。
# vgreduce myvg /dev/sdb1
Removed "/dev/sdb1" from volume group "myvg"
[root@tng3-1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda1 myvg lvm2 a- 17.15G 7.15G
/dev/sdb1 lvm2 -- 17.15G 17.15G
/dev/sdc1 myvg lvm2 a- 17.15G 12.15G
/dev/sdd1 myvg lvm2 a- 17.15G 2.15G
5.4.2. 將扇區移至新磁碟上
myvg 卷冊群組中的三個實體卷冊上:
# pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda1 myvg lvm2 a- 17.15G 7.15G 10.00G
/dev/sdb1 myvg lvm2 a- 17.15G 15.15G 2.00G
/dev/sdc1 myvg lvm2 a- 17.15G 15.15G 2.00G
/dev/sdb1 的扇區移至新的 /dev/sdd1 裝置上。
5.4.2.1. 新建實體卷冊
/dev/sdd1 建立新的實體卷冊。
# pvcreate /dev/sdd1
Physical volume "/dev/sdd1" successfully created
5.4.2.2. 新增實體卷冊至卷冊群組中
/dev/sdd1 至現有的卷冊群組 myvg 中。
#vgextend myvg /dev/sdd1Volume group "myvg" successfully extended [root@tng3-1]#pvs -o+pv_usedPV VG Fmt Attr PSize PFree Used /dev/sda1 myvg lvm2 a- 17.15G 7.15G 10.00G /dev/sdb1 myvg lvm2 a- 17.15G 15.15G 2.00G /dev/sdc1 myvg lvm2 a- 17.15G 15.15G 2.00G /dev/sdd1 myvg lvm2 a- 17.15G 17.15G 0
5.4.2.3. 移動資料
pvmove 指令來將資料由 /dev/sdb1 移至 /dev/sdd1。
#pvmove /dev/sdb1 /dev/sdd1/dev/sdb1: Moved: 10.0% ... /dev/sdb1: Moved: 79.7% ... /dev/sdb1: Moved: 100.0% [root@tng3-1]#pvs -o+pv_usedPV VG Fmt Attr PSize PFree Used /dev/sda1 myvg lvm2 a- 17.15G 7.15G 10.00G /dev/sdb1 myvg lvm2 a- 17.15G 17.15G 0 /dev/sdc1 myvg lvm2 a- 17.15G 15.15G 2.00G /dev/sdd1 myvg lvm2 a- 17.15G 15.15G 2.00G
5.4.2.4. 將舊的實體卷冊由卷冊群組中移除
/dev/sdb1 中移走後,您便可將它由卷冊群組中移除。
# vgreduce myvg /dev/sdb1
Removed "/dev/sdb1" from volume group "myvg"
5.5. 在叢集中建立鏡像 LVM 邏輯卷冊
lvm.conf 檔案中的鎖定類型並需正確設定,以允許直接或透過 lvmconf 指令啟用叢集鎖定(如 節 3.1, “在叢集中建立 LVM 卷冊” 中所描述)。
- 若要建立一個讓叢集中所有節點皆能共享的鏡像邏輯卷冊,鎖定類型必須正確設定於叢集裡各個節點上的
lvm.conf檔案中。就預設值,鎖定類型會被設為本機。若要進行變更,請在叢集中的各個節點上執行下列指令,以啟用叢集鎖定:#
/sbin/lvmconf --enable-cluster - 若要建立叢集化的邏輯卷冊,叢集架構必須在叢集中的各個節點上啟用並運作。下列範例驗證了
clvmddaemon 正在啟用它的節點上運作:ps auxw | grep clvmdroot 17642 0.0 0.1 32164 1072 ? Ssl Apr06 0:00 clvmd -T20 -t 90下列指令將顯示叢集狀態的本機檢視:#
cman_tool servicesfence domain member count 3 victim count 0 victim now 0 master nodeid 2 wait state none members 1 2 3 dlm lockspaces name clvmd id 0x4104eefa flags 0x00000000 change member 3 joined 1 remove 0 failed 0 seq 1,1 members 1 2 3 - 確認
cmirror套件已安裝。 - 啟用
cmirrord服務#
service cmirrord startStarting cmirrord: [ OK ] - 建立鏡像。第一個步驟就是建立實體卷冊。下列指令將建立三個實體卷冊。兩個實體卷冊將使用於鏡像 leg,並且第三個實體卷冊將會包含鏡像 log。
#
pvcreate /dev/xvdb1Physical volume "/dev/xvdb1" successfully created [root@doc-07 ~]#pvcreate /dev/xvdb2Physical volume "/dev/xvdb2" successfully created [root@doc-07 ~]#pvcreate /dev/xvdc1Physical volume "/dev/xvdc1" successfully created - 建立卷冊群組。此範例將建立包含了先前步驟所建立的三個實體卷冊的卷冊群組
vg001。#
vgcreate vg001 /dev/xvdb1 /dev/xvdb2 /dev/xvdc1Clustered volume group "vg001" successfully created請注意vgcreate指令的輸出顯示了卷冊群組已叢集化。您可藉由vgs指令來驗證卷冊群組是否已叢集化,這將會顯示卷冊群組的屬性。若卷冊群組已叢集化,它將會顯示 c 屬性。vgs vg001VG #PV #LV #SN Attr VSize VFree vg001 3 0 0 wz--nc 68.97G 68.97G - 建立鏡像邏輯卷冊。此範例將由卷冊群組
vg001建立邏輯卷冊mirrorlv。此卷冊含有一個鏡像 leg。此範例指定了實體卷冊的哪個磁區將會被使用來作為邏輯卷冊。#
lvcreate -l 1000 -m1 vg001 -n mirrorlv /dev/xvdb1:1-1000 /dev/xvdb2:1-1000 /dev/xvdc1:0Logical volume "mirrorlv" created您可使用lvs指令來顯示鏡像建立的進度。下列範例顯示了鏡像已同步化 47%、91%,並且當鏡像完成後便成為 100% 同步化。#
lvs vg001/mirrorlvLV VG Attr LSize Origin Snap% Move Log Copy% Convert mirrorlv vg001 mwi-a- 3.91G vg001_mlog 47.00 [root@doc-07 log]#lvs vg001/mirrorlvLV VG Attr LSize Origin Snap% Move Log Copy% Convert mirrorlv vg001 mwi-a- 3.91G vg001_mlog 91.00 [root@doc-07 ~]#lvs vg001/mirrorlvLV VG Attr LSize Origin Snap% Move Log Copy% Convert mirrorlv vg001 mwi-a- 3.91G vg001_mlog 100.00鏡像的完成會記載於系統日誌中:May 10 14:52:52 doc-07 [19402]: Monitoring mirror device vg001-mirrorlv for events May 10 14:55:00 doc-07 lvm[19402]: vg001-mirrorlv is now in-sync
- 您可搭配使用
lvs與-o +devices選項來顯示鏡像的配置,包括構成鏡像 leg 的裝置有哪些。您可看見此範例中的邏輯卷冊是以兩個線性映像和一個 log 所組成的。#
lvs -a -o +devicesLV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices mirrorlv vg001 mwi-a- 3.91G mirrorlv_mlog 100.00 mirrorlv_mimage_0(0),mirrorlv_mimage_1(0) [mirrorlv_mimage_0] vg001 iwi-ao 3.91G /dev/xvdb1(1) [mirrorlv_mimage_1] vg001 iwi-ao 3.91G /dev/xvdb2(1) [mirrorlv_mlog] vg001 lwi-ao 4.00M /dev/xvdc1(0)您可使用lvs指令的seg_pe_ranges選項來顯示資料配置。您可使用此選項來驗證您的配置是否有正確冗餘。這項指令的輸出會顯示 PE 範圍,並且格式與lvcreate和lvresize指令的輸入相同。#
lvs -a -o +seg_pe_ranges --segmentsPE Ranges mirrorlv_mimage_0:0-999 mirrorlv_mimage_1:0-999 /dev/xvdb1:1-1000 /dev/xvdb2:1-1000 /dev/xvdc1:0-0
注意
章 6. LVM 疑難排解
6.1. 疑難排解診斷結果
- 使用任何指令的
-v、-vv、-vvv或-vvvv引數來取得更加詳細的輸出。 - 若問題和邏輯卷冊的啟動相關的話,請在配置檔案的「log」部份中設置「activation = 1」然後以
-vvvv引數來執行指令。當您檢查過了這些輸出時,請記得將這個參數重設為 0 以避免發生機器在記憶體不足的情況下將機器鎖住的問題。 - 請執行
lvmdump指令,它提供了用來作為診斷用的資訊傾印。如欲取得更多相關資訊,請參閱lvmdump(8) man page。 - 您可執行
lvs -v、pvs -a或dmsetup info -c指令來取得額外的系統資訊。 - 在
/etc/lvm/backup檔案中(或於/etc/lvm/archive檔案中的壓縮版本)檢查 metadata 的最後一個備份。 - 透過執行
lvm dumpconfig指令來檢查目前的配置資訊。 - 檢查
/etc/lvm目錄中的.cache檔案來取得有關於哪個裝置上含有實體卷冊的相關記錄。
6.2. 顯示錯誤裝置的相關資訊
lvs 或 vgs 指令的 -P 引數來顯示原本不會出現在輸出中,有關於錯誤卷冊的相關資訊。此引數允許某些作業的進行,儘管內部的 metadata 並不完全地一致。比方說,若構成卷冊群組 vg 的其中一個裝置發生錯誤的話,vgs 指令可能會顯示下列輸出。
# vgs -o +devices
Volume group "vg" not found
vgs 指令的 -P 引數的話,卷冊群組還是無法使用,不過您可看見更多有關於錯誤裝置的相關資訊。
# vgs -P -o +devices
Partial mode. Incomplete volume groups will be activated read-only.
VG #PV #LV #SN Attr VSize VFree Devices
vg 9 2 0 rz-pn- 2.11T 2.07T unknown device(0)
vg 9 2 0 rz-pn- 2.11T 2.07T unknown device(5120),/dev/sda1(0)
-P 引數的 lvs 指令會顯示下列輸出。
# lvs -a -o +devices
Volume group "vg" not found
-P 引數來顯示錯誤的邏輯卷冊。
# lvs -P -a -o +devices
Partial mode. Incomplete volume groups will be activated read-only.
LV VG Attr LSize Origin Snap% Move Log Copy% Devices
linear vg -wi-a- 20.00G unknown device(0)
stripe vg -wi-a- 20.00G unknown device(5120),/dev/sda1(0)
-P 引數的 pvs 和 lvs 指令的輸出。
# vgs -a -o +devices -P
Partial mode. Incomplete volume groups will be activated read-only.
VG #PV #LV #SN Attr VSize VFree Devices
corey 4 4 0 rz-pnc 1.58T 1.34T my_mirror_mimage_0(0),my_mirror_mimage_1(0)
corey 4 4 0 rz-pnc 1.58T 1.34T /dev/sdd1(0)
corey 4 4 0 rz-pnc 1.58T 1.34T unknown device(0)
corey 4 4 0 rz-pnc 1.58T 1.34T /dev/sdb1(0)
# lvs -a -o +devices -P
Partial mode. Incomplete volume groups will be activated read-only.
LV VG Attr LSize Origin Snap% Move Log Copy% Devices
my_mirror corey mwi-a- 120.00G my_mirror_mlog 1.95 my_mirror_mimage_0(0),my_mirror_mimage_1(0)
[my_mirror_mimage_0] corey iwi-ao 120.00G unknown device(0)
[my_mirror_mimage_1] corey iwi-ao 120.00G /dev/sdb1(0)
[my_mirror_mlog] corey lwi-ao 4.00M /dev/sdd1(0)
6.3. 由 LVM 鏡像錯誤中復原
mirror_log_fault_policy 參數設為 remove,需要您手動重建鏡射之復原範例。欲知設定 mirror_log_fault_policy 參數的方法,請參閱〈節 6.3, “由 LVM 鏡像錯誤中復原”〉。
# pvcreate /dev/sd[abcdefgh][12]
Physical volume "/dev/sda1" successfully created
Physical volume "/dev/sda2" successfully created
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sdc1" successfully created
Physical volume "/dev/sdc2" successfully created
Physical volume "/dev/sdd1" successfully created
Physical volume "/dev/sdd2" successfully created
Physical volume "/dev/sde1" successfully created
Physical volume "/dev/sde2" successfully created
Physical volume "/dev/sdf1" successfully created
Physical volume "/dev/sdf2" successfully created
Physical volume "/dev/sdg1" successfully created
Physical volume "/dev/sdg2" successfully created
Physical volume "/dev/sdh1" successfully created
Physical volume "/dev/sdh2" successfully created
vg 和鏡像卷冊 groupfs。
#vgcreate vg /dev/sd[abcdefgh][12]Volume group "vg" successfully created [root@link-08 ~]#lvcreate -L 750M -n groupfs -m 1 vg /dev/sda1 /dev/sdb1 /dev/sdc1Rounding up size to full physical extent 752.00 MB Logical volume "groupfs" created
lvs 指令來驗證 mirror leg 和 mirror log 的基本裝置和鏡像卷冊的格式。請注意,在第一個範例中,鏡像還未完整同步化;您應等到 Copy% 這個欄位顯示了 100.00 之後才繼續進行。
#lvs -a -o +devicesLV VG Attr LSize Origin Snap% Move Log Copy% Devices groupfs vg mwi-a- 752.00M groupfs_mlog 21.28 groupfs_mimage_0(0),groupfs_mimage_1(0) [groupfs_mimage_0] vg iwi-ao 752.00M /dev/sda1(0) [groupfs_mimage_1] vg iwi-ao 752.00M /dev/sdb1(0) [groupfs_mlog] vg lwi-ao 4.00M /dev/sdc1(0) [root@link-08 ~]#lvs -a -o +devicesLV VG Attr LSize Origin Snap% Move Log Copy% Devices groupfs vg mwi-a- 752.00M groupfs_mlog 100.00 groupfs_mimage_0(0),groupfs_mimage_1(0) [groupfs_mimage_0] vg iwi-ao 752.00M /dev/sda1(0) [groupfs_mimage_1] vg iwi-ao 752.00M /dev/sdb1(0) [groupfs_mlog] vg lwi-ao 4.00M i /dev/sdc1(0)
/dev/sda1 這個鏡像的主要 leg 發生了錯誤。任何寫入至鏡像卷冊的動作都會造成 LVM 偵測到錯誤的鏡像。當這情況發生時,LVM 會將鏡像轉換為單獨的線性卷冊。在此情況下,若要進行轉換的話,請執行 dd 這項指令
# dd if=/dev/zero of=/dev/vg/groupfs count=10
10+0 records in
10+0 records out
lvs 指令來驗證裝置現在是否是個 linear 裝置。因為磁碟發生錯誤,因而產生了 I/O 錯誤。
# lvs -a -o +devices
/dev/sda1: read failed after 0 of 2048 at 0: Input/output error
/dev/sda2: read failed after 0 of 2048 at 0: Input/output error
LV VG Attr LSize Origin Snap% Move Log Copy% Devices
groupfs vg -wi-a- 752.00M /dev/sdb1(0)
pvcreate 指令時,您將會看見「inconsistent(不一致)」的警告。您可藉由執行 vgreduce --removemissing 指令,來避免這項警告出現。
#pvcreate /dev/sdi[12]Physical volume "/dev/sdi1" successfully created Physical volume "/dev/sdi2" successfully created [root@link-08 ~]#pvscanPV /dev/sdb1 VG vg lvm2 [67.83 GB / 67.10 GB free] PV /dev/sdb2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdc1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdc2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdd1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdd2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sde1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sde2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdf1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdf2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdg1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdg2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdh1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdh2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdi1 lvm2 [603.94 GB] PV /dev/sdi2 lvm2 [603.94 GB] Total: 16 [2.11 TB] / in use: 14 [949.65 GB] / in no VG: 2 [1.18 TB]
#vgextend vg /dev/sdi[12]Volume group "vg" successfully extended #pvscanPV /dev/sdb1 VG vg lvm2 [67.83 GB / 67.10 GB free] PV /dev/sdb2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdc1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdc2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdd1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdd2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sde1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sde2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdf1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdf2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdg1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdg2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdh1 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdh2 VG vg lvm2 [67.83 GB / 67.83 GB free] PV /dev/sdi1 VG vg lvm2 [603.93 GB / 603.93 GB free] PV /dev/sdi2 VG vg lvm2 [603.93 GB / 603.93 GB free] Total: 16 [2.11 TB] / in use: 16 [2.11 TB] / in no VG: 0 [0 ]
# lvconvert -m 1 /dev/vg/groupfs /dev/sdi1 /dev/sdb1 /dev/sdc1
Logical volume mirror converted.
lvs 指令來驗證鏡像是否已被儲存。
# lvs -a -o +devices
LV VG Attr LSize Origin Snap% Move Log Copy% Devices
groupfs vg mwi-a- 752.00M groupfs_mlog 68.62 groupfs_mimage_0(0),groupfs_mimage_1(0)
[groupfs_mimage_0] vg iwi-ao 752.00M /dev/sdb1(0)
[groupfs_mimage_1] vg iwi-ao 752.00M /dev/sdi1(0)
[groupfs_mlog] vg lwi-ao 4.00M /dev/sdc1(0)
6.4. 復原實體卷冊的 Metadata
警告
# lvs -a -o +devices
Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.
Couldn't find all physical volumes for volume group VG.
Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.
Couldn't find all physical volumes for volume group VG.
...
/etc/lvm/archive 目錄來找尋被覆寫的實體卷冊的 UUID。若要找尋特定卷冊群組最後一個已知、有效、壓縮過的 LVM metadata,請查看 VolumeGroupName_xxxx.vg 檔案。
partial(-P)引數能讓您找到遺失或損毀的實體卷冊的 UUID。
# vgchange -an --partial
Partial mode. Incomplete volume groups will be activated read-only.
Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.
Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.
...
pvcreate 指令的 --uuid 和 --restorefile 引數來復原實體卷冊。下列範例已將 /dev/sdh1 裝置標記為實體卷冊和以上所顯示的 UUID(FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk)。這項指令會透過包含在 VG_00050.vg 中的 metadata 資訊(卷冊群組最近期良好封存的 metadata)來將實體卷冊的標籤恢復。restorefile 引數會指示 pvcreate 指令使新的實體卷冊能和卷冊群組上的舊實體卷冊相容,並確保新的 metadata 不會被放置在舊實體卷冊包含著資料的位置上(這是有可能會發生的,比方說在原始的 pvcreate 指令有使用控制 metadata 定位的指令列引數的情況下,或是實體卷冊原本是透過使用不同預設值的不同版本軟體來建立的情況下)。pvcreate 指令只會將 LVM metadata 區域覆寫,而不會影響到現有的資料區域。
# pvcreate --uuid "FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk" --restorefile /etc/lvm/archive/VG_00050.vg /dev/sdh1
Physical volume "/dev/sdh1" successfully created
vgcfgrestore 指令來儲存卷冊群組的 metadata。
# vgcfgrestore VG
Restored volume group VG
# lvs -a -o +devices
LV VG Attr LSize Origin Snap% Move Log Copy% Devices
stripe VG -wi--- 300.00G /dev/sdh1 (0),/dev/sda1(0)
stripe VG -wi--- 300.00G /dev/sdh1 (34728),/dev/sdb1(0)
#lvchange -ay /dev/VG/stripe[root@link-07 backup]#lvs -a -o +devicesLV VG Attr LSize Origin Snap% Move Log Copy% Devices stripe VG -wi-a- 300.00G /dev/sdh1 (0),/dev/sda1(0) stripe VG -wi-a- 300.00G /dev/sdh1 (34728),/dev/sdb1(0)
fsck 指令來將資料復原。
6.5. 替換一個遺失的實體卷冊
vgdisplay 指令的 --partial 和 --verbose 引數來顯示任何已不存在的實體卷冊的 UUID 和大小。若您希望取代另一個相同大小的實體卷冊,您可使用 pvcreate 指令以及 --restorefile 和 --uuid 引數,以初始化一個和遺失的實體卷冊相同 UUID 的新裝置。接著您便可使用 vgcfgrestore 指令來復原卷冊群組的 metadata。
6.6. 將遺失的實體卷冊由一個卷冊群組中移除掉
vgchange 指令的 --partial 引數來啟用卷冊群組中剩下的實體卷冊。您可透過 vgreduce 指令的 --removemissing 引數來將所有使用了該實體卷冊的邏輯卷冊由卷冊群組中移除。
vgreduce 指令和 --test 引數來驗證您所要銷毀的邏輯卷冊。
vgcfgrestore 指令來將卷冊群組的 metadata 復原為先前的狀態以撤消 vgreduce 指令。比方說,若您使用了 vgreduce 指令的 --removemissing 引數而不使用 --test 引數並且發現您移除了您想要保留的邏輯卷冊,您還是能夠將實體卷冊替換掉並使用另一項 vgcfgrestore 指令來將卷冊群組復原為它先前的狀態。
6.7. 邏輯卷冊的可用扇區不足
vgdisplay 或 vgs 指令的輸出來假設您有足夠的扇區並建立一個邏輯卷冊時,您可能會看見「Insufficient free extents(可用扇區不足)」這則錯誤訊息。這是因為這些指令會將數字的兩個小數位數四捨五入以便提供易於讀取的輸出。若要指定確切的大小,請使用可用實體扇區的計算而不是使用一些位元組來斷定邏輯卷冊的大小。
vgdisplay 指令就預設值會包含下列顯示了可用實體扇區的輸出。
# vgdisplay
--- Volume group ---
...
Free PE / Size 8780 / 34.30 GB
vgs 指令的 vg_free_count 和 vg_extent_count 引數來顯示可用的扇區和扇區的總數。
# vgs -o +vg_free_count,vg_extent_count
VG #PV #LV #SN Attr VSize VFree Free #Ext
testvg 2 0 0 wz--n- 34.30G 34.30G 8780 8780
# lvcreate -l8780 -n testlv testvg
# vgs -o +vg_free_count,vg_extent_count
VG #PV #LV #SN Attr VSize VFree Free #Ext
testvg 2 1 0 wz--n- 34.30G 0 0 8780
章 7. 利用 LVM GUI 來進行 LVM 管理
system-config-lvm 來啟動此工具程式。儲存裝置管理指南的 LVM 一章提供了如何逐步地使用此工具,來配置 LVM 邏輯卷冊的相關指南。
附錄 A. 裝置映射(Device Mapper)設備
dmraid 指令亦使用 Device Mapper。Device Mapper 的應用程式介面為 ioctl system call。dmsetup 指令則為用戶介面。
dmsetup 指令來查詢的基本 device-mapper 裝置。欲取得更多有關於映射表格當中的裝置格式上的相關資訊,請參閱〈節 A.1, “裝置表格映射”〉。如需取得使用 dmsetup 指令來查詢某個裝置上的相關資訊,請參閱〈節 A.2, “dmsetup 指令”〉。
A.1. 裝置表格映射
start length mapping[mapping_parameters...]
start 這個參數必須等於 0。一個行列上的 start + length 參數必須等於下個行列上的 start。指定於映射表格行列中的映射參數,取決於該行列上所指定的 mapping。
/dev/hda)參照,或是被格式為 major:minor 的 major 和 minor 數字參照。我們建議使用 major:minor 這個格式因為它避免了路徑名稱搜尋。
0 35258368 linear 8:48 65920 35258368 35258368 linear 8:32 65920 70516736 17694720 linear 8:16 17694976 88211456 17694720 linear 8:16 256
linear。行列剩下的部份則包含著 linear 目標的參數。
- linear
- striped
- mirror
- snapshot 和 snapshot-origin
- error
- zero
- multipath
- crypt
A.1.1. Linear 映射目標
start lengthlineardevice offset
start- 在虛擬裝置中啟用區塊
length- 此區段的長度
device- 區塊裝置,被檔案系統中的裝置名稱所參照,或是被格式為
major:minor的 major 和 minor 數字所參照 offset- 在裝置上啟用映射的偏差值(offset)
0 16384000 linear 8:2 41156992
/dev/hda 這個裝置的 linear 目標。
0 20971520 linear /dev/hda 384
A.1.2. 等量映射目標
start lengthstriped#stripes chunk_size device1 offset1 ... deviceN offsetN
device 和 offset 參數。
start- 在虛擬裝置中啟用區塊
length- 此區段的長度
#stripes- 虛擬裝置的等量磁碟數量
chunk_size- 切換至下一個等量磁碟之前可寫至各個等量磁碟的磁區數量;必須至少和 kernel page 大小的 2 的 n 次方一樣大
device- 區塊裝置,被檔案系統中的裝置名稱所參照,或是被格式為
major:minor的 major 和 minor 數字所參照。 offset- 在裝置上啟用映射的偏差值(offset)
0 73728 striped 3 128 8:9 384 8:8 384 8:7 9789824
- 0
- 在虛擬裝置中啟用區塊
- 73728
- 此區段的長度
- striped 3 128
- 跨越了三個裝置的 stripe 以及大小為 128 block 的 chunk size
- 8:9
- 第一個裝置的 major:minor 數字
- 384
- 第一個裝置上的映射的起始偏差值
- 8:8
- 第二個裝置上的 major:minor 數字
- 384
- 第二個裝置上的映射的起始偏差值
- 8:7
- 第三個裝置上的 major:minor 數字
- 9789824
- 第三個裝置上的映射的起始偏差值
0 65536 striped 2 512 /dev/hda 0 /dev/hdb 0
A.1.3. 鏡像映射目標
start lengthmirrorlog_type #logargs logarg1 ... logargN #devs device1 offset1 ... deviceN offsetN
start- 在虛擬裝置中啟用區塊
length- 此區段的長度
log_type- 各種可能的日誌類型與它們的引數如下:
core- 鏡像位於本機,並且鏡像日誌(mirror log)存放在核心記憶體(core memory)中。此日誌類型接受 1 到 3 個引數:regionsize [[
no]sync] [block_on_error] disk- 鏡像位於本機,並且鏡像日誌存放在磁碟上。此日誌類型接受 2 到 4 個引數:logdevice regionsize [[
no]sync] [block_on_error] clustered_core- 鏡像已被叢集連結,並且鏡像日誌存放在核心記憶體中。此日誌類型接受 2 到 4 個引數:regionsize UUID [[
no]sync] [block_on_error] clustered_disk- 鏡像已被叢集連結,並且鏡像日誌存放在磁碟上。此日誌類型接受 3 到 5 個引數:logdevice regionsize UUID [[
no]sync] [block_on_error]
LVM 會保存一個小型的日誌,它會使用該日誌來追蹤哪些區域已和鏡像同步化。regionsize 這個引數能指定這些區域的大小。在一個叢集環境中,UUID 這個引數是個和鏡像日誌裝置相聯的唯一識別碼(unique identifier),日誌狀態可從而在叢集環境下被保留。[no]sync這個可選的引數可被用來將鏡像指定為「in-sync」或是「out-of-sync」。block_on_error這個引數可用來使鏡像針對於錯誤進行回應而不是將它們忽略掉。 #log_args- 將會被指定在映射中的日誌引數數量
logargs- 鏡像的日誌引數;日誌引數的數量是透過
#log-args參數來指定的,並且有效的日誌引數則是透過log_type參數來判斷出的。 #devs- 鏡像中的 leg 數量;各個 leg 皆被指定了一個裝置和偏差值。
device- 各個鏡像 leg 的區塊裝置,由檔案系統中的裝置名稱參照,或由格式為
major:minor的 major 和 minor 數字參照。如#devs參數所顯示,各個鏡像 leg 都會被指定一個區塊裝置和偏差值。 offset- 裝置上的映射的起始偏差值。如
#devs參數所顯示,各個鏡像 leg 都會被指定一個區塊裝置和偏差值。
0 52428800 mirror clustered_disk 4 253:2 1024 UUID block_on_error 3 253:3 0 253:4 0 253:5 0
- 0
- 在虛擬裝置中啟用區塊
- 52428800
- 此區段的長度
- mirror clustered_disk
- 含有一個指定了鏡像已被叢集連結並且鏡像日誌存放在磁碟上的鏡像目標
- 4
- 會有四個鏡像日誌
- 253:2
- 日誌裝置的 major:minor 數字
- 1024
- 鏡像日誌使用來追蹤已同步化之鏡像的區域大小
UUID- 用來在叢集環境下保留日誌資訊的鏡像日誌裝置 UUID
block_on_error- 鏡像應針對於錯誤做出回應
- 3
- 鏡像中的 leg 數量
- 253:3 0 253:4 0 253:5 0
- 構成各個鏡像 leg 的裝置的 major:minor 數字和偏差值
A.1.4. 快照和 snapshot-origin 映射目標
- 一個含有
linear映射的裝置,並且該映射包含著來源卷冊的原始映射表格。 - 一個含有
linear映射的裝置,它會被用來作為來源卷冊的寫入即複製(copy-on-write,COW)的裝置;針對於各個寫入動作,原始資料都會被儲存在各個 snapshot 的 COW 裝置中,如此一來它的可見內容便不會遭到更改(直到 COW 裝置滿出)。 - 一個含有
snapshot映射的裝置,它結合了 #1 與 #2,也就是可見的快照卷冊。 - 「原始」卷冊(它使用了原始來源卷冊所使用的裝置號碼),它的表格已被替換為一個來自於裝置 #1 的「snapshot-origin」映射。
base 的 LVM 卷冊以及一個基於該卷冊、名為 snap 的快照卷冊。
#lvcreate -L 1G -n base volumeGroup#lvcreate -L 100M --snapshot -n snap volumeGroup/base
#dmsetup table|grep volumeGroupvolumeGroup-base-real: 0 2097152 linear 8:19 384 volumeGroup-snap-cow: 0 204800 linear 8:19 2097536 volumeGroup-snap: 0 2097152 snapshot 254:11 254:12 P 16 volumeGroup-base: 0 2097152 snapshot-origin 254:11 #ls -lL /dev/mapper/volumeGroup-*brw------- 1 root root 254, 11 29 ago 18:15 /dev/mapper/volumeGroup-base-real brw------- 1 root root 254, 12 29 ago 18:15 /dev/mapper/volumeGroup-snap-cow brw------- 1 root root 254, 13 29 ago 18:15 /dev/mapper/volumeGroup-snap brw------- 1 root root 254, 10 29 ago 18:14 /dev/mapper/volumeGroup-base
snapshot-origin 目標的格式如下:
start lengthsnapshot-originorigin
start- 在虛擬裝置中啟用區塊
length- 此區段的長度
origin- 快照的基本卷冊
snapshot-origin 通常會有一個或是更多個基於它的快照。讀取動作會直接被映射至 backing device。針對於各個寫入動作,原始資料都會被儲存在各個快照的 COW 裝置中來保存它的可見內容直到 COW 裝置填滿。
snapshot 目標的格式如下:
start lengthsnapshotorigin COW-deviceP|Nchunksize
start- 在虛擬裝置中啟用區塊
length- 此區段的長度
origin- 快照的基本卷冊
COW-device- 遭到更改的資料區塊所被儲存至的裝置
- P|N
- P(Persistent〔一致性〕)或是 N(Not persistent〔非一致性〕);顯示了快照在系統重新啟動後是否還會存在。針對於暫時性的快照(N),磁碟上必須要儲存較少 metadata;它們可被 kernel 保存在記憶體中。
chunksize- 被存放在 COW 裝置上、遭到更改的資料區塊大小(以磁區為單位)
snapshot-origin 目標。
0 2097152 snapshot-origin 254:11
snapshot 目標。這個快照裝置經過了系統重新啟動後將依然有效,並且儲存在 COW 裝置上的資料的區塊大小為 16 個磁區。
0 2097152 snapshot 254:11 254:12 P 16
A.1.5. error 映射目標
error 映射目標除了 start 和 length 這兩個參數之外不接受額外的參數。
error 目標。
0 65536 error
A.1.6. zero 映射目標
zero 映射目標是個相當於 /dev/zero 的區塊裝置。對於此映射所進行的讀取作業會回傳一些零的區塊。寫至此映射的資料將會被丟棄,不過寫入作業會成功。zero 映射目標不接受 start 和 length 參數以外的額外參數。
zero 目標。
0 65536 zero
A.1.7. multipath 映射目標
multipath 目標的格式如下:
start lengthmultipath#features [feature1 ... featureN] #handlerargs [handlerarg1 ... handlerargN] #pathgroups pathgroup pathgroupargs1 ... pathgroupargsN
pathgroupargs 參數。
start- 在虛擬裝置中啟用區塊
length- 此區段的長度
#features- multipath 功能的數量以及它們的功能。若此參數為零的話,那麼就不會有
feature這個參數並且下一個裝置映射參數會是#handlerargs。\n\n目前只有一個受支援的 multipath 功能,queue_if_no_path,可以在multipath.conf檔案中的features屬性中設定。這表示此多路徑裝置目前已設為若沒有可用路徑的話便會將 I/O 作業置於佇列中。在以下例子裡,multipath.conf檔案中的no_path_retry屬性只有在嘗試路徑數次且失敗後,並被標示為失敗時,才會被設定到佇列 I/O 操作中。在這情況下,映射就會以下列格式來顯示出,直到所有路徑檢查程式所被指定的檢查次數都已完成後。0 71014400 multipath 1 queue_if_no_path 0 2 1 round-robin 0 2 1 66:128 \ 1000 65:64 1000 round-robin 0 2 1 8:0 1000 67:192 1000
當所有路徑檢查程式所被指定的檢查次數都已完成後,映射就會以下列格式顯示出。0 71014400 multipath 0 0 2 1 round-robin 0 2 1 66:128 1000 65:64 1000 \ round-robin 0 2 1 8:0 1000 67:192 1000
#handlerargs- 硬體處理程式引數的數量以及那些引數。硬體處理程式會在切換路徑群組或是處理 I/O 錯誤時指定一個用來執行硬體特屬之動作的模組。若這被設為 0 的話,那麼下個參數便是
#pathgroups。 #pathgroups- 路徑群組的數量。路徑群組(path group)代表一組路徑,並且多路徑的裝置將會在這些路徑上進行負載平衡。各個路徑群組都有一組
pathgroupargs參數。 pathgroup- 下一個嘗試的路徑群組。
pathgroupsargs- 各個路徑群組都包含著下列引數:
pathselector #selectorargs #paths #pathargs device1 ioreqs1 ... deviceN ioreqsN路徑群組中的各個路徑都都有一組路徑引數。pathselector- 可指定使用中的演算法來判斷下個 I/O 作業該使用此路徑群組中的哪個路徑。
#selectorargs- 允許此引數使用於 multipath 映射的路徑選擇器引數數量。目前,這個引數的值總會是 0。
#paths- 此路徑群組中的路徑數量。
#pathargs- 為此群組中各個路徑所指定的路徑引數數量。目前,這個數字總會是 1,也就是
ioreqs引數。 device- 路徑的區塊裝置號碼,以格式為
major:minor的 major 和 minor 數字來參照 ioreqs- 要切換至目前群組中的下個路徑前所需要用來 route 至此路徑的 I/O 請求數量。

圖形 A.1. Multipath 映射目標
0 71014400 multipath 0 0 4 1 round-robin 0 1 1 66:112 1000 \ round-robin 0 1 1 67:176 1000 round-robin 0 1 1 68:240 1000 \ round-robin 0 1 1 65:48 1000
0 71014400 multipath 0 0 1 1 round-robin 0 4 1 66:112 1000 \ 67:176 1000 68:240 1000 65:48 1000
A.1.8. crypt 映射目標
crypt 目標會將通過指定裝置的資料加密。它使用了 kernel 的 Crypto API。
crypt 目標的格式如下:
start lengthcryptcipher key IV-offset device offset
start- 在虛擬裝置中啟用區塊
length- 此區段的長度
cipher- Cipher 包含著
cipher[-chainmode]-ivmode[:iv options]。cipher- 可用的 Cipher 列在
/proc/crypto中(比方說aes)。 chainmode- 總是使用
cbc。請勿使用ebc;它並不使用初始向量(IV)。 ivmode[:iv options]- IV 是個使用來改變加密的初始向量。IV 模式為
plain或essiv:hash。-plain的ivmode使用了磁區編號(加上 IV 偏差值)來作為 IV。-essiv的ivmode是為了避免 watermark 弱點用的。
key- 加密金鑰、以十六進位提供
IV-offset- 初始向量(Initial Vector,IV)偏差值
device- 區塊裝置,被檔案系統中的裝置名稱所參照,或是被格式為
major:minor的 major 和 minor 數字所參照 offset- 在裝置上啟用映射的偏差值(offset)
crypt 目標的範例。
0 2097152 crypt aes-plain 0123456789abcdef0123456789abcdef 0 /dev/hda 0
A.2. dmsetup 指令
dmsetup 指令是一項用來和 Device Mapper 進行通訊的指令列 wrapper。如欲取得有關於 LVM 裝置的一般系統資訊,您可使用描述於下列部份的 dmsetup 指令的 info、ls、status 和 deps 選項。
dmsetup 指令的額外選項和功能上的相關資訊,請查看 dmsetup(8) man page。
A.2.1. dmsetup info 指令
dmsetup info device 這項指令提供了有關於 Device Mapper 裝置的總覽資訊。若您不指定一個裝置名稱的話,輸出便會是有關於目前所有已配置的 Device Mapper 裝置的相關資訊。若您指定了一個裝置,那麼這項指令便只會產生該裝置的相關資訊。
dmsetup info 指令提供了下列種類的資訊:
Name- 裝置的名稱。LVM 裝置是以卷冊群組名稱和邏輯卷冊名稱來表示並以連字符號來區隔開。原始名稱中的連字符號會被轉譯為兩個連字符號。
State- 可能的裝置狀態有
SUSPENDED、ACTIVE和READ-ONLY。dmsetup suspend指令會將裝置狀態設為SUSPENDED。當裝置休眠(suspend)時,該裝置的所有 I/O 作業都會停下。dmsetup resume指令則會將裝置狀態恢復為ACTIVE。 Read Ahead- 系統將為讀取作業繼續進行中的任何已開啟的檔案所預讀的資料區塊數量。就預設值,kernel 會自動地選擇一個適當的值。您可透過
--readaheadoption of thedmsetup指令來更改這個值。 Tables present- 此類型的可能狀態為
LIVE和INACTIVE。INACTIVE這個狀態顯示了有個表格已被載入並且該表格會在dmsetup resume指令將裝置狀態恢復為ACTIVE時被換入。此時,該表格的狀態會成為LIVE。如欲取得相關資訊,請參閱dmsetupman page。 Open count- Open reference count 表示了裝置被開啟了多少次。
mount指令可將裝置開啟。 Event number- 目前取得的事件數量。輸入
dmsetup wait n這項指令能讓用戶等待第 n 項事件,並在取得該項事件之前阻擋調用。 Major, minor- Major 和 minor
Number of targets- 構成一個裝置的片段數量。比方說一個跨距了三個磁碟的 linear 裝置將會有三個目標。一個由磁碟起始和結尾(少了中間)所構成的 linear 裝置將會有兩個目標。
UUID- 裝置的 UUID。
dmsetup info 指令的部份輸出。
# dmsetup info
Name: testgfsvg-testgfslv1
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Open count: 0
Event number: 0
Major, minor: 253, 2
Number of targets: 2
UUID: LVM-K528WUGQgPadNXYcFrrf9LnPlUMswgkCkpgPIgYzSvigM7SfeWCypddNSWtNzc2N
...
Name: VolGroup00-LogVol00
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Open count: 1
Event number: 0
Major, minor: 253, 0
Number of targets: 1
UUID: LVM-tOcS1kqFV9drb0X1Vr8sxeYP0tqcrpdegyqj5lZxe45JMGlmvtqLmbLpBcenh2L3
A.2.2. dmsetup ls 指令
dmsetup ls 指令來列出映射裝置的裝置名稱。您可透過使用 dmsetup ls --target target_type 指令來列出擁有至少一個指定類型的目標的裝置。如欲取得其它 dmsetup ls 的選項的相關資訊,請參閱 dmsetup man page。
# dmsetup ls
testgfsvg-testgfslv3 (253:4)
testgfsvg-testgfslv2 (253:3)
testgfsvg-testgfslv1 (253:2)
VolGroup00-LogVol01 (253:1)
VolGroup00-LogVol00 (253:0)
# dmsetup ls --target mirror
lock_stress-grant--02.1722 (253, 34)
lock_stress-grant--01.1720 (253, 18)
lock_stress-grant--03.1718 (253, 52)
lock_stress-grant--02.1716 (253, 40)
lock_stress-grant--03.1713 (253, 47)
lock_stress-grant--02.1709 (253, 23)
lock_stress-grant--01.1707 (253, 8)
lock_stress-grant--01.1724 (253, 14)
lock_stress-grant--03.1711 (253, 27)
dmsetup ls 指令提供了一項 --tree 選項,以將裝置之間的相依性,如下列範例以樹狀顯示。
# dmsetup ls --tree
vgtest-lvmir (253:13)
├─vgtest-lvmir_mimage_1 (253:12)
│ └─mpathep1 (253:8)
│ └─mpathe (253:5)
│ ├─ (8:112)
│ └─ (8:64)
├─vgtest-lvmir_mimage_0 (253:11)
│ └─mpathcp1 (253:3)
│ └─mpathc (253:2)
│ ├─ (8:32)
│ └─ (8:16)
└─vgtest-lvmir_mlog (253:4)
└─mpathfp1 (253:10)
└─mpathf (253:6)
├─ (8:128)
└─ (8:80)
A.2.3. dmsetup status 指令
dmsetup status device 這項指令提供了指定裝置中的各個目標的狀態資訊。若您不指定裝置名稱的話,輸出便會是有關於所有目前已配置的 Device Mapper 裝置的相關資訊。您只可透過 dmsetup status --target target_type 指令來將擁有至少一個指定類型的目標的裝置狀態列出。
# dmsetup status
testgfsvg-testgfslv3: 0 312352768 linear
testgfsvg-testgfslv2: 0 312352768 linear
testgfsvg-testgfslv1: 0 312352768 linear
testgfsvg-testgfslv1: 312352768 50331648 linear
VolGroup00-LogVol01: 0 4063232 linear
VolGroup00-LogVol00: 0 151912448 linear
A.2.4. dmsetup deps 指令
dmsetup deps device 指令會提供一列裝置配對(major、minor),並且這些裝置配對已被指定裝置的映射表格所參照。若您不指定裝置名稱的話,輸出將會是有關於所有目前已配置的 Device Mapper 裝置的相關資訊。
# dmsetup deps
testgfsvg-testgfslv3: 1 dependencies : (8, 16)
testgfsvg-testgfslv2: 1 dependencies : (8, 16)
testgfsvg-testgfslv1: 1 dependencies : (8, 16)
VolGroup00-LogVol01: 1 dependencies : (8, 2)
VolGroup00-LogVol00: 1 dependencies : (8, 2)
lock_stress-grant--02.1722 裝置之相依的指令:
# dmsetup deps lock_stress-grant--02.1722
3 dependencies : (253, 33) (253, 32) (253, 31)
A.3. udev Device Manager(裝置管理員)的 Device Mapper 支援
udev 裝置管理員的主要用途就是在 /dev 目錄中提供動態式的節點設定方式。這些節點的建置是以使用者空間中的 udev 應用程式規則來指定的。這些規則會直接在來自於 kernel 的 udev 事件上進行處理,以完成特定裝置的新增、移除,或變更。這為熱插拔支援提供了方便和中央化的機制。
udev 裝置管理員亦可以自己的名稱建立符號連結。這提供使用者視需求選擇自訂化命名,以及選擇 /dev 目錄中之目錄結構的自由。
udev 事件皆包含了有關於被裝置的裝置的基本資訊,例如它的名、它所屬之子系統、裝置類型、所使用的 major 與 minor 號碼,以及事件的類型。除了能存取 /sys 目錄中所找到,並且 udev 規則中亦可存取的所有資訊,使用者亦能根據這項資訊,並條件性地執行規則,利用基本的過濾器。
udev 裝置管理員還提供了中央化的節點權限設定。使用者能輕易地新增一組自訂的規則,以定義任何在處理事件時,所能使用的任何資訊所指定的裝置。
udev 規則中直接新增 program hook。udev 裝置管理員可調用這些程式,以提供處理事件所需的額外處理。並且,程式亦可透過這項處理來匯出環境變數。任何得到的結果,皆可使用於規則中作為補充的資訊來源。
udev 函式庫的軟體皆能取得和處理 udev 事件,以及所有資訊,因此處理程序便不僅限於 udev daemon。
A.3.1. udev 與裝置管理員的整合
udev 整合支援。這可同步化 Device Mapper 以及所有與 Device Mapper 裝置相關的 udev 程序,包括 LVM 裝置。同步化是必要的,因為 udev daemon 中的規則應用程式格式,是與裝置變更來源之程式的平行處理。(例如 dmsetup 和 LVM)。少了這項支援,將造成一項以往使用者嘗試移除一個依然開啟,並由 udev 規則所處理的裝置,而造成了先前變更事件上的問題;這特別是在裝置變更之間的時間非常短的情況下,經常發生。
udev 規則支援。〈表格 A.1, “Device-Mapper 裝置的 udev 規則”〉概述了這些規則,並且這些規則安裝在 /lib/udev/rules.d 中。
表格 A.1. Device-Mapper 裝置的 udev 規則
| 檔案名稱 | 描述 | ||
|---|---|---|---|
10-dm.rules |
| ||
11-dm-lvm.rules |
| ||
13-dm-disk.rules | 包含了一般可套用至所有 Device Mapper 裝置的規則,並在 /dev/disk/by-id、/dev/disk/by-uuid 以及 /dev/disk/by-uuid 目錄中建立符號連結。 | ||
95-dm-notify.rules | 包含了通知使用 libdevmapper(就如同 LVM 和 dmsetup)時的等待時間的規則。通知會在所有先前規則被套用後才會完成,以確保所有 udev 處理程序皆已完成。之後被通知的程序便會復原。 |
12-dm-permissions.rules 檔案來新增額外的自訂權限規則。此檔案並非安裝在 /lib/udev/rules 目錄中;它位於 /usr/share/doc/device-mapper-版本 目錄中。12-dm-permissions.rules 檔案是個範本,它包含了有關於如何根據一些相符規則,以設置權限的相關提示;此檔案包含了一些常見情況下的範例。您可編輯此檔案,並手動式地將它放置在 /etc/udev/rules.d 目錄中,如此一來當您進行更新時,這些設定皆能被保留住。
DM_NAME:Device Mapper 裝置名稱DM_UUID:Device Mapper 裝置 UUIDDM_SUSPENDED:Device Mapper 裝置的暫停狀態DM_UDEV_RULES_VSN:udev規則版本(這主要是用來讓所有其它規則檢查,先前所提到的變數是否透過正式的 Device Mapper 規則所設置的)
11-dm-lvm.rules 中:
DM_UUID:Device Mapper 裝置 UUIDDM_VG_NAME:卷冊群組名稱DM_LV_LAYER:LVM 層名
12-dm-permissions.rules 檔案中,以為特定 Device Mapper 裝置定義權限,如 12-dm-permissions.rules 檔案中所記載。
A.3.2. 支援 udev 的指令與介面
表格 A.2. 支援 udev 的 dmsetup 指令
| 指令 | 描述 |
|---|---|
dmsetup udevcomplete | 使用來通知 udev 已完成了處理規則,並解除了等待程序上的鎖定(由 95-dm-notify.rules 中的 udev 規則調用)。 |
dmsetup udevcomplete_all | 使用於除錯用途,以手動式地解除所有等待程序上的鎖定。 |
dmsetup udevcookies | 使用於除錯用途,以顯示所有既有的 cookies(系統全域的旗號)。 |
dmsetup udevcreatecookie | 使用於手動式建立 cookie(旗號)。這對於在一個同步化的資源下執行多項程序來說,相當有幫助。 |
dmsetup udevreleasecookie | 使用來等待全部與所有單一同步化 cookie 的程序相關的 udev 處理程序。 |
udev 整合的 dmsetup 選項如下。
--udevcookie- 需為我們所希望加入 udev 交易中的所有 dmsetup 程序定義。它可與
udevcreatecookie和udevreleasecookie搭配使用:COOKIE=$(dmsetup udevcreatecookie) dmsetup command --udevcookie $COOKIE .... dmsetup command --udevcookie $COOKIE .... .... dmsetup command --udevcookie $COOKIE .... dmsetup udevreleasecookie --udevcookie $COOKIE
除了使用--udevcookie選項之外,您可直接將變數匯出至程序的環境中:export DM_UDEV_COOKIE=$(dmsetup udevcreatecookie) dmsetup command ... dmsetup command ... ... dmsetup command ...
--noudevrules- 停用 udev 規則。節點/符號連結將會由
libdevmapper本身所建立。此選項的用途乃為了在udev無法正常運作的情況下進行除錯。 --noudevsync- 停用
udev同步化。這也是為了進行除錯。
dmsetup 與其選項上的相關資訊,請查看 dmsetup(8) man page。
udev 整合的選項:
--noudevrules:就如與dmsetup指令搭配使用一般,將會停用udev規則。--noudevsync:就如與dmsetup指令搭配使用一般,將會停用udev同步化。
lvm.conf 檔案包含了下列支援 udev 整合的選項:
udev_rules:全域啟用/停用所有 LVM2 指令的udev_rules。udev_sync:全域啟用/停用所有 LVM 指令的udev同步化。
lvm.conf 檔案選項上的相關資訊,請參閱 lvm.conf 檔案中的內嵌註解。
附錄 B. LVM 配置檔案
lvm.conf 配置檔案會被由 LVM_SYSTEM_DIR 這個環境變數所指定的目錄載入,預設值會是 /etc/lvm。
lvm.conf 檔案可指定所要載入的額外配置檔案。檔案中之後的設定將會覆蓋先前的設定。若要在載入所有配置檔案之後顯示使用中的設定,請執行 lvm dumpconfig 指令。
B.1. LVM 配置檔案
- /etc/lvm/lvm.conf
- 工具所讀取的中央配置檔案。
- etc/lvm/lvm_hosttag.conf
- 額外配置檔案會針對於存在的主機標記(host tag)被讀取:
lvm_hosttag.conf。若該檔案定義了新的標記的話,那麼額外的配置檔案便會被附加至即將被讀取的清單中。欲取得更多有關於主機標記的相關資訊,請參閱〈節 C.2, “主機標籤(Host Tags)”〉。
- /etc/lvm/cache/.cache
- 裝置名稱過濾快取檔案(可配置)。
- /etc/lvm/backup/
- 自動卷冊群組 metadata 備份的目錄(可配置)。
- /etc/lvm/archive/
- 自動卷冊群組 metadata 壓縮檔的目錄(可藉由目錄路徑和封存紀錄深度來進行配置)。
- /var/lock/lvm/
- 在單主機的配置中,檔案會被鎖定來預防 parallel tool 執行並損壞 metadata;在叢集中,叢集全域的 DLM 會被使用。
B.2. 範例 lvm.conf 檔案
lvm.conf 配置檔案的範本。您的配置檔案可能會與此檔案有所不同。
# This is an example configuration file for the LVM2 system.
# It contains the default settings that would be used if there was no
# /etc/lvm/lvm.conf file.
#
# Refer to 'man lvm.conf' for further information including the file layout.
#
# To put this file in a different directory and override /etc/lvm set
# the environment variable LVM_SYSTEM_DIR before running the tools.
#
# N.B. Take care that each setting only appears once if uncommenting
# example settings in this file.
# This section allows you to configure which block devices should
# be used by the LVM system.
devices {
# Where do you want your volume groups to appear ?
dir = "/dev"
# An array of directories that contain the device nodes you wish
# to use with LVM2.
scan = [ "/dev" ]
# If set, the cache of block device nodes with all associated symlinks
# will be constructed out of the existing udev database content.
# This avoids using and opening any inapplicable non-block devices or
# subdirectories found in the device directory. This setting is applied
# to udev-managed device directory only, other directories will be scanned
# fully. LVM2 needs to be compiled with udev support for this setting to
# take effect. N.B. Any device node or symlink not managed by udev in
# udev directory will be ignored with this setting on.
obtain_device_list_from_udev = 1
# If several entries in the scanned directories correspond to the
# same block device and the tools need to display a name for device,
# all the pathnames are matched against each item in the following
# list of regular expressions in turn and the first match is used.
# preferred_names = [ ]
# Try to avoid using undescriptive /dev/dm-N names, if present.
preferred_names = [ "^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d" ]
# A filter that tells LVM2 to only use a restricted set of devices.
# The filter consists of an array of regular expressions. These
# expressions can be delimited by a character of your choice, and
# prefixed with either an 'a' (for accept) or 'r' (for reject).
# The first expression found to match a device name determines if
# the device will be accepted or rejected (ignored). Devices that
# don't match any patterns are accepted.
# Be careful if there are symbolic links or multiple filesystem
# entries for the same device as each name is checked separately against
# the list of patterns. The effect is that if any name matches any 'a'
# pattern, the device is accepted; otherwise if any name matches any 'r'
# pattern it is rejected; otherwise it is accepted.
# Don't have more than one filter line active at once: only one gets used.
# Run vgscan after you change this parameter to ensure that
# the cache file gets regenerated (see below).
# If it doesn't do what you expect, check the output of 'vgscan -vvvv'.
# By default we accept every block device:
filter = [ "a/.*/" ]
# Exclude the cdrom drive
# filter = [ "r|/dev/cdrom|" ]
# When testing I like to work with just loopback devices:
# filter = [ "a/loop/", "r/.*/" ]
# Or maybe all loops and ide drives except hdc:
# filter =[ "a|loop|", "r|/dev/hdc|", "a|/dev/ide|", "r|.*|" ]
# Use anchors if you want to be really specific
# filter = [ "a|^/dev/hda8$|", "r/.*/" ]
# The results of the filtering are cached on disk to avoid
# rescanning dud devices (which can take a very long time).
# By default this cache is stored in the /etc/lvm/cache directory
# in a file called '.cache'.
# It is safe to delete the contents: the tools regenerate it.
# (The old setting 'cache' is still respected if neither of
# these new ones is present.)
cache_dir = "/etc/lvm/cache"
cache_file_prefix = ""
# You can turn off writing this cache file by setting this to 0.
write_cache_state = 1
# Advanced settings.
# List of pairs of additional acceptable block device types found
# in /proc/devices with maximum (non-zero) number of partitions.
# types = [ "fd", 16 ]
# If sysfs is mounted (2.6 kernels) restrict device scanning to
# the block devices it believes are valid.
# 1 enables; 0 disables.
sysfs_scan = 1
# By default, LVM2 will ignore devices used as components of
# software RAID (md) devices by looking for md superblocks.
# 1 enables; 0 disables.
md_component_detection = 1
# By default, if a PV is placed directly upon an md device, LVM2
# will align its data blocks with the md device's stripe-width.
# 1 enables; 0 disables.
md_chunk_alignment = 1
# Default alignment of the start of a data area in MB. If set to 0,
# a value of 64KB will be used. Set to 1 for 1MiB, 2 for 2MiB, etc.
# default_data_alignment = 1
# By default, the start of a PV's data area will be a multiple of
# the 'minimum_io_size' or 'optimal_io_size' exposed in sysfs.
# - minimum_io_size - the smallest request the device can perform
# w/o incurring a read-modify-write penalty (e.g. MD's chunk size)
# - optimal_io_size - the device's preferred unit of receiving I/O
# (e.g. MD's stripe width)
# minimum_io_size is used if optimal_io_size is undefined (0).
# If md_chunk_alignment is enabled, that detects the optimal_io_size.
# This setting takes precedence over md_chunk_alignment.
# 1 enables; 0 disables.
data_alignment_detection = 1
# Alignment (in KB) of start of data area when creating a new PV.
# md_chunk_alignment and data_alignment_detection are disabled if set.
# Set to 0 for the default alignment (see: data_alignment_default)
# or page size, if larger.
data_alignment = 0
# By default, the start of the PV's aligned data area will be shifted by
# the 'alignment_offset' exposed in sysfs. This offset is often 0 but
# may be non-zero; e.g.: certain 4KB sector drives that compensate for
# windows partitioning will have an alignment_offset of 3584 bytes
# (sector 7 is the lowest aligned logical block, the 4KB sectors start
# at LBA -1, and consequently sector 63 is aligned on a 4KB boundary).
# But note that pvcreate --dataalignmentoffset will skip this detection.
# 1 enables; 0 disables.
data_alignment_offset_detection = 1
# If, while scanning the system for PVs, LVM2 encounters a device-mapper
# device that has its I/O suspended, it waits for it to become accessible.
# Set this to 1 to skip such devices. This should only be needed
# in recovery situations.
ignore_suspended_devices = 0
# During each LVM operation errors received from each device are counted.
# If the counter of a particular device exceeds the limit set here, no
# further I/O is sent to that device for the remainder of the respective
# operation. Setting the parameter to 0 disables the counters altogether.
disable_after_error_count = 0
# Allow use of pvcreate --uuid without requiring --restorefile.
require_restorefile_with_uuid = 1
# Minimum size (in KB) of block devices which can be used as PVs.
# In a clustered environment all nodes must use the same value.
# Any value smaller than 512KB is ignored.
# Ignore devices smaller than 2MB such as floppy drives.
pv_min_size = 2048
# The original built-in setting was 512 up to and including version 2.02.84.
# pv_min_size = 512
# Issue discards to a logical volumes's underlying physical volume(s) when
# the logical volume is no longer using the physical volumes' space (e.g.
# lvremove, lvreduce, etc). Discards inform the storage that a region is
# no longer in use. Storage that supports discards advertise the protocol
# specific way discards should be issued by the kernel (TRIM, UNMAP, or
# WRITE SAME with UNMAP bit set). Not all storage will support or benefit
# from discards but SSDs and thinly provisioned LUNs generally do. If set
# to 1, discards will only be issued if both the storage and kernel provide
# support.
# 1 enables; 0 disables.
issue_discards = 0
}
# This section allows you to configure the way in which LVM selects
# free space for its Logical Volumes.
#allocation {
# When searching for free space to extend an LV, the "cling"
# allocation policy will choose space on the same PVs as the last
# segment of the existing LV. If there is insufficient space and a
# list of tags is defined here, it will check whether any of them are
# attached to the PVs concerned and then seek to match those PV tags
# between existing extents and new extents.
# Use the special tag "@*" as a wildcard to match any PV tag.
#
# Example: LVs are mirrored between two sites within a single VG.
# PVs are tagged with either @site1 or @site2 to indicate where
# they are situated.
#
# cling_tag_list = [ "@site1", "@site2" ]
# cling_tag_list = [ "@*" ]
#
# Changes made in version 2.02.85 extended the reach of the 'cling'
# policies to detect more situations where data can be grouped
# onto the same disks. Set this to 0 to revert to the previous
# algorithm.
#
# maximise_cling = 1
#
# Set to 1 to guarantee that mirror logs will always be placed on
# different PVs from the mirror images. This was the default
# until version 2.02.85.
#
# mirror_logs_require_separate_pvs = 0
#}
# This section that allows you to configure the nature of the
# information that LVM2 reports.
log {
# Controls the messages sent to stdout or stderr.
# There are three levels of verbosity, 3 being the most verbose.
verbose = 0
# Should we send log messages through syslog?
# 1 is yes; 0 is no.
syslog = 1
# Should we log error and debug messages to a file?
# By default there is no log file.
#file = "/var/log/lvm2.log"
# Should we overwrite the log file each time the program is run?
# By default we append.
overwrite = 0
# What level of log messages should we send to the log file and/or syslog?
# There are 6 syslog-like log levels currently in use - 2 to 7 inclusive.
# 7 is the most verbose (LOG_DEBUG).
level = 0
# Format of output messages
# Whether or not (1 or 0) to indent messages according to their severity
indent = 1
# Whether or not (1 or 0) to display the command name on each line output
command_names = 0
# A prefix to use before the message text (but after the command name,
# if selected). Default is two spaces, so you can see/grep the severity
# of each message.
prefix = " "
# To make the messages look similar to the original LVM tools use:
# indent = 0
# command_names = 1
# prefix = " -- "
# Set this if you want log messages during activation.
# Don't use this in low memory situations (can deadlock).
# activation = 0
}
# Configuration of metadata backups and archiving. In LVM2 when we
# talk about a 'backup' we mean making a copy of the metadata for the
# *current* system. The 'archive' contains old metadata configurations.
# Backups are stored in a human readeable text format.
backup {
# Should we maintain a backup of the current metadata configuration ?
# Use 1 for Yes; 0 for No.
# Think very hard before turning this off!
backup = 1
# Where shall we keep it ?
# Remember to back up this directory regularly!
backup_dir = "/etc/lvm/backup"
# Should we maintain an archive of old metadata configurations.
# Use 1 for Yes; 0 for No.
# On by default. Think very hard before turning this off.
archive = 1
# Where should archived files go ?
# Remember to back up this directory regularly!
archive_dir = "/etc/lvm/archive"
# What is the minimum number of archive files you wish to keep ?
retain_min = 10
# What is the minimum time you wish to keep an archive file for ?
retain_days = 30
}
# Settings for the running LVM2 in shell (readline) mode.
shell {
# Number of lines of history to store in ~/.lvm_history
history_size = 100
}
# Miscellaneous global LVM2 settings
global {
# The file creation mask for any files and directories created.
# Interpreted as octal if the first digit is zero.
umask = 077
# Allow other users to read the files
#umask = 022
# Enabling test mode means that no changes to the on disk metadata
# will be made. Equivalent to having the -t option on every
# command. Defaults to off.
test = 0
# Default value for --units argument
units = "h"
# Since version 2.02.54, the tools distinguish between powers of
# 1024 bytes (e.g. KiB, MiB, GiB) and powers of 1000 bytes (e.g.
# KB, MB, GB).
# If you have scripts that depend on the old behaviour, set this to 0
# temporarily until you update them.
si_unit_consistency = 1
# Whether or not to communicate with the kernel device-mapper.
# Set to 0 if you want to use the tools to manipulate LVM metadata
# without activating any logical volumes.
# If the device-mapper kernel driver is not present in your kernel
# setting this to 0 should suppress the error messages.
activation = 1
# If we can't communicate with device-mapper, should we try running
# the LVM1 tools?
# This option only applies to 2.4 kernels and is provided to help you
# switch between device-mapper kernels and LVM1 kernels.
# The LVM1 tools need to be installed with .lvm1 suffices
# e.g. vgscan.lvm1 and they will stop working after you start using
# the new lvm2 on-disk metadata format.
# The default value is set when the tools are built.
# fallback_to_lvm1 = 0
# The default metadata format that commands should use - "lvm1" or "lvm2".
# The command line override is -M1 or -M2.
# Defaults to "lvm2".
# format = "lvm2"
# Location of proc filesystem
proc = "/proc"
# Type of locking to use. Defaults to local file-based locking (1).
# Turn locking off by setting to 0 (dangerous: risks metadata corruption
# if LVM2 commands get run concurrently).
# Type 2 uses the external shared library locking_library.
# Type 3 uses built-in clustered locking.
# Type 4 uses read-only locking which forbids any operations that might
# change metadata.
locking_type = 1
# Set to 0 to fail when a lock request cannot be satisfied immediately.
wait_for_locks = 1
# If using external locking (type 2) and initialisation fails,
# with this set to 1 an attempt will be made to use the built-in
# clustered locking.
# If you are using a customised locking_library you should set this to 0.
fallback_to_clustered_locking = 1
# If an attempt to initialise type 2 or type 3 locking failed, perhaps
# because cluster components such as clvmd are not running, with this set
# to 1 an attempt will be made to use local file-based locking (type 1).
# If this succeeds, only commands against local volume groups will proceed.
# Volume Groups marked as clustered will be ignored.
fallback_to_local_locking = 1
# Local non-LV directory that holds file-based locks while commands are
# in progress. A directory like /tmp that may get wiped on reboot is OK.
locking_dir = "/var/lock/lvm"
# Whenever there are competing read-only and read-write access requests for
# a volume group's metadata, instead of always granting the read-only
# requests immediately, delay them to allow the read-write requests to be
# serviced. Without this setting, write access may be stalled by a high
# volume of read-only requests.
# NB. This option only affects locking_type = 1 viz. local file-based
# locking.
prioritise_write_locks = 1
# Other entries can go here to allow you to load shared libraries
# e.g. if support for LVM1 metadata was compiled as a shared library use
# format_libraries = "liblvm2format1.so"
# Full pathnames can be given.
# Search this directory first for shared libraries.
# library_dir = "/lib"
# The external locking library to load if locking_type is set to 2.
# locking_library = "liblvm2clusterlock.so"
# Treat any internal errors as fatal errors, aborting the process that
# encountered the internal error. Please only enable for debugging.
abort_on_internal_errors = 0
# Check whether CRC is matching when parsed VG is used multiple times.
# This is useful to catch unexpected internal cached volume group
# structure modification. Please only enable for debugging.
detect_internal_vg_cache_corruption = 0
# If set to 1, no operations that change on-disk metadata will be permitted.
# Additionally, read-only commands that encounter metadata in need of repair
# will still be allowed to proceed exactly as if the repair had been
# performed (except for the unchanged vg_seqno).
# Inappropriate use could mess up your system, so seek advice first!
metadata_read_only = 0
# 'mirror_segtype_default' defines which segtype will be used when the
# shorthand '-m' option is used for mirroring. The possible options are:
#
# "mirror" - The original RAID1 implementation provided by LVM2/DM. It is
# characterized by a flexible log solution (core, disk, mirrored)
# and by the necessity to block I/O while reconfiguring in the
# event of a failure. Snapshots of this type of RAID1 can be
# problematic.
#
# "raid1" - This implementation leverages MD's RAID1 personality through
# device-mapper. It is characterized by a lack of log options.
# (A log is always allocated for every device and they are placed
# on the same device as the image - no separate devices are
# required.) This mirror implementation does not require I/O
# to be blocked in the kernel in the event of a failure.
#
# Specify the '--type <mirror|raid1>' option to override this default
# setting.
mirror_segtype_default = "mirror"
}
activation {
# Set to 1 to perform internal checks on the operations issued to
# libdevmapper. Useful for debugging problems with activation.
# Some of the checks may be expensive, so it's best to use this
# only when there seems to be a problem.
checks = 0
# Set to 0 to disable udev synchronisation (if compiled into the binaries).
# Processes will not wait for notification from udev.
# They will continue irrespective of any possible udev processing
# in the background. You should only use this if udev is not running
# or has rules that ignore the devices LVM2 creates.
# The command line argument --nodevsync takes precedence over this setting.
# If set to 1 when udev is not running, and there are LVM2 processes
# waiting for udev, run 'dmsetup udevcomplete_all' manually to wake them up.
udev_sync = 1
# Set to 0 to disable the udev rules installed by LVM2 (if built with
# --enable-udev_rules). LVM2 will then manage the /dev nodes and symlinks
# for active logical volumes directly itself.
# N.B. Manual intervention may be required if this setting is changed
# while any logical volumes are active.
udev_rules = 1
# Set to 1 for LVM2 to verify operations performed by udev. This turns on
# additional checks (and if necessary, repairs) on entries in the device
# directory after udev has completed processing its events.
# Useful for diagnosing problems with LVM2/udev interactions.
verify_udev_operations = 0
# How to fill in missing stripes if activating an incomplete volume.
# Using "error" will make inaccessible parts of the device return
# I/O errors on access. You can instead use a device path, in which
# case, that device will be used to in place of missing stripes.
# But note that using anything other than "error" with mirrored
# or snapshotted volumes is likely to result in data corruption.
missing_stripe_filler = "error"
# How much stack (in KB) to reserve for use while devices suspended
reserved_stack = 256
# How much memory (in KB) to reserve for use while devices suspended
reserved_memory = 8192
# Nice value used while devices suspended
process_priority = -18
# If volume_list is defined, each LV is only activated if there is a
# match against the list.
# "vgname" and "vgname/lvname" are matched exactly.
# "@tag" matches any tag set in the LV or VG.
# "@*" matches if any tag defined on the host is also set in the LV or VG
#
# volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
# Size (in KB) of each copy operation when mirroring
mirror_region_size = 512
# Setting to use when there is no readahead value stored in the metadata.
#
# "none" - Disable readahead.
# "auto" - Use default value chosen by kernel.
readahead = "auto"
# 'mirror_image_fault_policy' and 'mirror_log_fault_policy' define
# how a device failure affecting a mirror is handled.
# A mirror is composed of mirror images (copies) and a log.
# A disk log ensures that a mirror does not need to be re-synced
# (all copies made the same) every time a machine reboots or crashes.
#
# In the event of a failure, the specified policy will be used to determine
# what happens. This applies to automatic repairs (when the mirror is being
# monitored by dmeventd) and to manual lvconvert --repair when
# --use-policies is given.
#
# "remove" - Simply remove the faulty device and run without it. If
# the log device fails, the mirror would convert to using
# an in-memory log. This means the mirror will not
# remember its sync status across crashes/reboots and
# the entire mirror will be re-synced. If a
# mirror image fails, the mirror will convert to a
# non-mirrored device if there is only one remaining good
# copy.
#
# "allocate" - Remove the faulty device and try to allocate space on
# a new device to be a replacement for the failed device.
# Using this policy for the log is fast and maintains the
# ability to remember sync state through crashes/reboots.
# Using this policy for a mirror device is slow, as it
# requires the mirror to resynchronize the devices, but it
# will preserve the mirror characteristic of the device.
# This policy acts like "remove" if no suitable device and
# space can be allocated for the replacement.
#
# "allocate_anywhere" - Not yet implemented. Useful to place the log device
# temporarily on same physical volume as one of the mirror
# images. This policy is not recommended for mirror devices
# since it would break the redundant nature of the mirror. This
# policy acts like "remove" if no suitable device and space can
# be allocated for the replacement.
mirror_log_fault_policy = "allocate"
mirror_image_fault_policy = "remove"
# 'snapshot_autoextend_threshold' and 'snapshot_autoextend_percent' define
# how to handle automatic snapshot extension. The former defines when the
# snapshot should be extended: when its space usage exceeds this many
# percent. The latter defines how much extra space should be allocated for
# the snapshot, in percent of its current size.
#
# For example, if you set snapshot_autoextend_threshold to 70 and
# snapshot_autoextend_percent to 20, whenever a snapshot exceeds 70% usage,
# it will be extended by another 20%. For a 1G snapshot, using up 700M will
# trigger a resize to 1.2G. When the usage exceeds 840M, the snapshot will
# be extended to 1.44G, and so on.
#
# Setting snapshot_autoextend_threshold to 100 disables automatic
# extensions. The minimum value is 50 (A setting below 50 will be treated
# as 50).
snapshot_autoextend_threshold = 100
snapshot_autoextend_percent = 20
# While activating devices, I/O to devices being (re)configured is
# suspended, and as a precaution against deadlocks, LVM2 needs to pin
# any memory it is using so it is not paged out. Groups of pages that
# are known not to be accessed during activation need not be pinned
# into memory. Each string listed in this setting is compared against
# each line in /proc/self/maps, and the pages corresponding to any
# lines that match are not pinned. On some systems locale-archive was
# found to make up over 80% of the memory used by the process.
# mlock_filter = [ "locale/locale-archive", "gconv/gconv-modules.cache" ]
# Set to 1 to revert to the default behaviour prior to version 2.02.62
# which used mlockall() to pin the whole process's memory while activating
# devices.
use_mlockall = 0
# Monitoring is enabled by default when activating logical volumes.
# Set to 0 to disable monitoring or use the --ignoremonitoring option.
monitoring = 1
# When pvmove or lvconvert must wait for the kernel to finish
# synchronising or merging data, they check and report progress
# at intervals of this number of seconds. The default is 15 seconds.
# If this is set to 0 and there is only one thing to wait for, there
# are no progress reports, but the process is awoken immediately the
# operation is complete.
polling_interval = 15
}
####################
# Advanced section #
####################
# Metadata settings
#
# metadata {
# Default number of copies of metadata to hold on each PV. 0, 1 or 2.
# You might want to override it from the command line with 0
# when running pvcreate on new PVs which are to be added to large VGs.
# pvmetadatacopies = 1
# Default number of copies of metadata to maintain for each VG.
# If set to a non-zero value, LVM automatically chooses which of
# the available metadata areas to use to achieve the requested
# number of copies of the VG metadata. If you set a value larger
# than the total number of metadata areas available then
# metadata is stored in them all.
# The default value of 0 ("unmanaged") disables this automatic
# management and allows you to control which metadata areas
# are used at the individual PV level using 'pvchange
# --metadataignore y/n'.
# vgmetadatacopies = 0
# Approximate default size of on-disk metadata areas in sectors.
# You should increase this if you have large volume groups or
# you want to retain a large on-disk history of your metadata changes.
# pvmetadatasize = 255
# List of directories holding live copies of text format metadata.
# These directories must not be on logical volumes!
# It's possible to use LVM2 with a couple of directories here,
# preferably on different (non-LV) filesystems, and with no other
# on-disk metadata (pvmetadatacopies = 0). Or this can be in
# addition to on-disk metadata areas.
# The feature was originally added to simplify testing and is not
# supported under low memory situations - the machine could lock up.
#
# Never edit any files in these directories by hand unless you
# you are absolutely sure you know what you are doing! Use
# the supplied toolset to make changes (e.g. vgcfgrestore).
# dirs = [ "/etc/lvm/metadata", "/mnt/disk2/lvm/metadata2" ]
#}
# Event daemon
#
dmeventd {
# mirror_library is the library used when monitoring a mirror device.
#
# "libdevmapper-event-lvm2mirror.so" attempts to recover from
# failures. It removes failed devices from a volume group and
# reconfigures a mirror as necessary. If no mirror library is
# provided, mirrors are not monitored through dmeventd.
mirror_library = "libdevmapper-event-lvm2mirror.so"
# snapshot_library is the library used when monitoring a snapshot device.
#
# "libdevmapper-event-lvm2snapshot.so" monitors the filling of
# snapshots and emits a warning through syslog when the use of
# the snapshot exceeds 80%. The warning is repeated when 85%, 90% and
# 95% of the snapshot is filled.
snapshot_library = "libdevmapper-event-lvm2snapshot.so"
# Full path of the dmeventd binary.
#
# executable = "/sbin/dmeventd"
}
附錄 C. LVM 物件標籤(Object Tags)
database 標籤的邏輯卷冊。
lvs @database
C.1. 新增和移除物件標籤
pvchange 指令的 --addtag 或 --deltag 選項。
vgchange 或 vgcreate 指令的 --addtag 或 --deltag 選項。
lvchange 或 lvcreate 指令的 --addtag 或 --deltag 選項。
pvchange、vgchange 或 lvchange 指令中指定多重的 --addtag 和 --deltag 引數。比方說,下列指令會將 T9 和 T10 標籤由 grant 卷冊群組中刪除,並新增 T13 和 T14 標籤。
vgchange --deltag T9 --deltag T10 --addtag T13 --addtag T14 grant
C.2. 主機標籤(Host Tags)
tags 的部份中設置了 hosttags = 1 的話,主機標籤就會被透過使用機器的主機名稱來自動地定義。這能讓您使用通用的配置檔案並在您所有的機器上複製,如此一來它們便會持有相同的檔案副本,不過機器之間的特性可能會根據主機名稱而有所不同。
host1 時,下列配置檔案中的項目就會定義 tag1 以及 tag2。
tags { tag1 { } tag2 { host_list = ["host1"] } }
C.3. 利用標籤來控制啟用
vgchange -ay)的過濾器,並且只會啟用 vg1/lvol0 和該主機上在 metadata 中含有 database 標籤的邏輯卷冊或卷冊群組。
activation { volume_list = ["vg1/lvol0", "@database" ] }
tags { hosttags = 1 }
db2 主機上啟用 vg1/lvol2 的話,請進行下列步驟:
- 在叢集中的任何主機上執行
lvchange --addtag @db2 vg1/lvol2。 - 執行
lvchange -ay vg1/lvol2。
附錄 D. LVM 卷冊群組 Metadata
pvcreate 指令的 --metadatacopies 0 選項來建立一個實體卷冊並且不建立任何 metadata 的副本。一旦您選擇了實體卷冊將會包含的 metadata 副本數量後,您之後便無法再針對它進行變更。不過請注意,不管任何時候,每個卷冊群組都必須包含著至少一個實體卷冊以及一個 metadata 區域(除非您使用了一項能讓您將卷冊群組 metadata 儲存在檔案系統中的進階配置設定)。若您打算在未來將卷冊群組切割的話,所有卷冊群組就都需要至少一個 metadata 副本。
pvcreate 指令的 --metadatasize 選項來指定 metadata 的大小。對於包含上百個實體卷冊與邏輯卷冊的卷冊群組來說,預設值可能會太小。
D.1. 實體卷冊標籤(Physical Volume Label)
pvcreate 指令會將實體卷冊標籤放置在第二個 512 位元組的磁區中。這個標籤亦可被選擇性地放置於前四個磁區中的任何一個,因為掃描實體卷冊標籤的 LVM 工具會檢查前四個磁區。實體卷冊的標籤是以 LABELONE 這個字串作為起始的。
- 實體卷冊的 UUID
- 區塊裝置的大小(以位元組為單位)
- 無終結(NULL-terminated)的資料區域位置清單
- 無終結的 metadata 區域位置清單
D.2. Metadata 內容
- 有關於它如何以及何時被建立的相關資訊
- 有關於卷冊群組的資訊
- 名稱和特殊 id
- 一個每當 metadata 被更新時便會跟著遞增的版本號碼
- 任何屬性:可讀取/寫入?可重設大小?
- 任何它所可能包含的實體卷冊和邏輯卷冊數量上的管理限制
- 扇區大小(以磁區〔sector〕為單位,定義為 512 個位元組)
- 一列未經順序排序、構成卷冊群組的實體卷冊,各個都含有:
- 它的 UUID,用來測定包含著它的區塊裝置
- 任何屬性,例如實體卷冊是否可被分配
- 實體卷冊中第一個扇區起始的 offset(單位為磁區〔sector〕)
- 扇區數量
- 一列未經順序排序的邏輯卷冊。各個都含有
- 一列經過順序排序的邏輯卷冊區段(logical volume segment)。Metadata 會針對於各個區段來包含一個映射以套用至經過排序的實體卷冊區段或是邏輯卷冊區段
D.3. Metadata 範例
myvg 的卷冊群組的 LVM 卷冊群組 metadata 範例。
# Generated by LVM2: Tue Jan 30 16:28:15 2007
contents = "Text Format Volume Group"
version = 1
description = "Created *before* executing 'lvextend -L+5G /dev/myvg/mylv /dev/sdc'"
creation_host = "tng3-1" # Linux tng3-1 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686
creation_time = 1170196095 # Tue Jan 30 16:28:15 2007
myvg {
id = "0zd3UT-wbYT-lDHq-lMPs-EjoE-0o18-wL28X4"
seqno = 3
status = ["RESIZEABLE", "READ", "WRITE"]
extent_size = 8192 # 4 Megabytes
max_lv = 0
max_pv = 0
physical_volumes {
pv0 {
id = "ZBW5qW-dXF2-0bGw-ZCad-2RlV-phwu-1c1RFt"
device = "/dev/sda" # Hint only
status = ["ALLOCATABLE"]
dev_size = 35964301 # 17.1491 Gigabytes
pe_start = 384
pe_count = 4390 # 17.1484 Gigabytes
}
pv1 {
id = "ZHEZJW-MR64-D3QM-Rv7V-Hxsa-zU24-wztY19"
device = "/dev/sdb" # Hint only
status = ["ALLOCATABLE"]
dev_size = 35964301 # 17.1491 Gigabytes
pe_start = 384
pe_count = 4390 # 17.1484 Gigabytes
}
pv2 {
id = "wCoG4p-55Ui-9tbp-VTEA-jO6s-RAVx-UREW0G"
device = "/dev/sdc" # Hint only
status = ["ALLOCATABLE"]
dev_size = 35964301 # 17.1491 Gigabytes
pe_start = 384
pe_count = 4390 # 17.1484 Gigabytes
}
pv3 {
id = "hGlUwi-zsBg-39FF-do88-pHxY-8XA2-9WKIiA"
device = "/dev/sdd" # Hint only
status = ["ALLOCATABLE"]
dev_size = 35964301 # 17.1491 Gigabytes
pe_start = 384
pe_count = 4390 # 17.1484 Gigabytes
}
}
logical_volumes {
mylv {
id = "GhUYSF-qVM3-rzQo-a6D2-o0aV-LQet-Ur9OF9"
status = ["READ", "WRITE", "VISIBLE"]
segment_count = 2
segment1 {
start_extent = 0
extent_count = 1280 # 5 Gigabytes
type = "striped"
stripe_count = 1 # linear
stripes = [
"pv0", 0
]
}
segment2 {
start_extent = 1280
extent_count = 1280 # 5 Gigabytes
type = "striped"
stripe_count = 1 # linear
stripes = [
"pv1", 0
]
}
}
}
}
附錄 E. 修訂歷史
| 修訂記錄 | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 修訂 4.0-2.2.400 | 2013-10-31 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
| 修訂 4.0-2.2 | Tue Sep 25 2012 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
| 修訂 4.0-2.1 | Mon Aug 27 2012 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
| 修訂 4.0-2 | Fri Jun 15 2012 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
| 修訂 4.0-1 | Fri Apr 13 2012 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
| 修訂 3.0-4 | Mon Nov 21 2011 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
| 修訂 3.0-3 | Mon Nov 07 2011 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
| 修訂 3.0-2 | Wed Oct 12 2011 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
| 修訂 3.0-1 | Mon Sep 19 2011 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
| 修訂 2.0-1 | Thu May 19 2011 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
| 修訂 1.0-1 | Wed Nov 10 2010 | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
索引
符號
- /lib/udev/rules.d 目錄, udev 與裝置管理員的整合
- 一致的裝置號碼, 一致的裝置號碼
- 停用卷冊群組, 啟用和停用卷冊群組
- 備份
- metadata, 邏輯卷冊備份, 備份卷冊群組的 Metadata
- 檔案, 邏輯卷冊備份
- 分割區
- 多重, 磁碟上的多重分割區
- 分割區類型,設定, 設定分割區類型
- 初始化
- 剩餘的
- 邏輯卷冊, 重新為邏輯卷冊命名
- 區塊裝置
- 掃描, 掃描區塊裝置
- 卷冊群組
- vgs 顯示引數, vgs 指令
- 停用, 啟用和停用卷冊群組
- 分割
- 範例程式, 分割卷冊群組
- 劃分, 分割卷冊群組
- 合併, 結合卷冊群組
- 啟用, 啟用和停用卷冊群組
- 在系統之間進行移動, 將卷冊群組移至另一部系統
- 壓縮, 由卷冊群組中移除實體卷冊
- 定義, 卷冊群組
- 延伸, 新增實體卷冊至卷冊群組中
- 建立, 建立卷冊群組
- 建立於叢集中, 在叢集中建立卷冊群組
- 擴充, 新增實體卷冊至卷冊群組中
- 更改參數, 更改卷冊群組的參數
- 移除, 移除卷冊群組
- 管理,一般, 卷冊群組管理
- 組合, 結合卷冊群組
- 縮減, 由卷冊群組中移除實體卷冊
- 重新命名, 為卷冊群組重新命名
- 顯示, 顯示卷冊群組, LVM 的自訂化回報, vgs 指令
- 叢集環境, 叢集邏輯卷測管理員(Clustered Logical Volume Manager,CLVM), 在叢集中建立 LVM 卷冊
- 可用扇區不足的訊息, 邏輯卷冊的可用扇區不足
- 啟用卷冊群組, 啟用和停用卷冊群組
- 啟用邏輯卷冊
- 各別節點, 在叢集中啟用各別節點上的邏輯卷冊
- 單位,指令列, 使用 CLI 指令
- 報告格式,LVM 裝置, LVM 的自訂化回報
- 失效的裝置
- 顯示, 顯示錯誤裝置的相關資訊
- 實體卷冊
- pvs 顯示引數, pvs 指令
- 初始化, 初始化實體卷冊
- 定義, 實體卷冊
- 建立, 建立實體卷冊
- 復原, 替換一個遺失的實體卷冊
- 復原遺失的卷冊, 將遺失的實體卷冊由一個卷冊群組中移除掉
- 描述, LVM 實體卷冊配置
- 新增至卷冊群組, 新增實體卷冊至卷冊群組中
- 由卷冊群組中移除, 由卷冊群組中移除實體卷冊
- 移除, 移除實體卷冊
- 管理,一般, 實體卷冊管理
- 配置, LVM 實體卷冊配置
- 重設大小, 重設實體卷冊的大小
- 顯示, 顯示實體卷冊, LVM 的自訂化回報, pvs 指令
- 實體扇區
- 防止配置, 避免配置於實體卷冊上
- 封存檔案, 邏輯卷冊備份
- 建立
- LVM 卷冊於叢集中, 在叢集中建立 LVM 卷冊
- 卷冊群組, 建立卷冊群組
- 卷冊群組,已叢集化, 在叢集中建立卷冊群組
- 實體卷冊, 建立實體卷冊
- 磁條邏輯卷冊,範例, 建立一個磁條邏輯卷冊(Striped Logical Volume)
- 邏輯卷冊, 建立線性邏輯卷冊
- 邏輯卷冊,範例, 在三個磁碟上建立一個 LVM 邏輯卷冊
- 建立 LVM 卷冊
- 總覽, 邏輯卷冊建立總覽
- 快取檔案
- 意見
- 本指南的聯絡資訊, 我們需要您的意見!
- 扇區
- 指令列單位, 使用 CLI 指令
- 掃描
- 區塊裝置, 掃描區塊裝置
- 掃描裝置,過濾器, 透過過濾器來控制 LVM 裝置掃描(LVM Device Scans)
- 擴展檔案系統
- 邏輯卷冊, 在邏輯卷冊上遞增檔案系統
- 新功能與遭到更改的功能, 新功能與遭到變更的功能
- 檔案系統
- 在邏輯卷冊上擴展, 在邏輯卷冊上遞增檔案系統
- 疑難排解, LVM 疑難排解
- 磁條邏輯卷冊
- 定義, 等量邏輯卷冊
- 延伸, 延伸等量的卷冊
- 建立範例, 建立一個磁條邏輯卷冊(Striped Logical Volume)
- 擴充, 延伸等量的卷冊
- 移除
- 實體卷冊, 移除實體卷冊
- 邏輯卷冊, 移除邏輯卷冊
- 邏輯卷冊中的磁碟, 由邏輯卷冊中移除磁碟
- 等量邏輯卷冊
- 建立, 建立等量卷冊
- 管理程序, LVM 管理總覽
- 線上資料重定位, 線上資料重置(Online Data Relocation)
- 線信邏輯卷冊
- 轉換為鏡像, 更改鏡像卷冊配置
- 線性邏輯卷冊
- 總覽
- 新功能與遭到變更的功能, 新功能與遭到變更的功能
- 裝置大小,最大值, 建立卷冊群組
- 裝置掃描過濾器, 透過過濾器來控制 LVM 裝置掃描(LVM Device Scans)
- 裝置特殊檔案目錄, 建立卷冊群組
- 裝置號碼
- 裝置路徑名稱, 使用 CLI 指令
- 記錄, 記錄
- 詳細輸出, 使用 CLI 指令
- 說明畫面, 使用 CLI 指令
- 資料重定位,線上, 線上資料重置(Online Data Relocation)
- 路徑名稱, 使用 CLI 指令
- 過濾器, 透過過濾器來控制 LVM 裝置掃描(LVM Device Scans)
- 邏輯卷冊
- lvs 顯示引數, lvs 指令
- snapshot, 建立快照卷冊(Snapshot Volumes)
- 定義, 邏輯卷冊, LVM 邏輯卷冊
- 延伸, 遞增邏輯卷冊
- 建立, 建立線性邏輯卷冊
- 建立範例, 在三個磁碟上建立一個 LVM 邏輯卷冊
- 擴充, 遞增邏輯卷冊
- 更改參數, 更改邏輯卷冊群組的參數
- 本機存取, 在叢集中啟用各別節點上的邏輯卷冊
- 獨占存取, 在叢集中啟用各別節點上的邏輯卷冊
- 移除, 移除邏輯卷冊
- 等量, 建立等量卷冊
- 管理,一般, 邏輯卷冊管理
- 線性, 建立線性邏輯卷冊
- 縮小, 縮減邏輯卷冊
- 縮減, 縮減邏輯卷冊
- 重新命名, 重新為邏輯卷冊命名
- 重設大小, 重設邏輯卷冊大小
- 鏡像, 建立鏡像卷冊
- 顯示, 顯示邏輯卷冊, LVM 的自訂化回報, lvs 指令
- 配置
- 政策, 建立卷冊群組
- 防止, 避免配置於實體卷冊上
- 配置範例, LVM 配置範例
- 重新命名
- 卷冊群組, 為卷冊群組重新命名
- 重設大小
- 鏡像邏輯卷冊
- 叢集化, 在叢集中建立鏡像 LVM 邏輯卷冊
- 失效復原, 由 LVM 鏡像錯誤中復原
- 失效政策, 鏡像邏輯卷冊失效政策
- 定義, 鏡像邏輯卷冊
- 延伸, 延伸鏡像卷冊
- 建立, 建立鏡像卷冊
- 擴充, 延伸鏡像卷冊
- 轉換為線性, 更改鏡像卷冊配置
- 重新配置, 更改鏡像卷冊配置
- 顯示
A
- archive 檔案, 備份卷冊群組的 Metadata
B
- backup 檔案, 備份卷冊群組的 Metadata
C
L
M
- man page 畫面, 使用 CLI 指令
- metadata
- 備份, 邏輯卷冊備份, 備份卷冊群組的 Metadata
- 復原, 復原實體卷冊的 Metadata
- mirror_image_fault_policy 配置參數, 鏡像邏輯卷冊失效政策
- mirror_log_fault_policy 配置參數, 鏡像邏輯卷冊失效政策
P
- pvdisplay 指令, 顯示實體卷冊
- pvmove 指令, 線上資料重置(Online Data Relocation)
- pvremove 指令, 移除實體卷冊
- pvresize 指令, 重設實體卷冊的大小
- pvs 指令, LVM 的自訂化回報
- 顯示引數, pvs 指令
- pvscan 指令, 顯示實體卷冊
R
- rules.d 目錄, udev 與裝置管理員的整合
S
- snapshot 卷冊
- 定義, Snapshot 卷冊
- snapshot 邏輯卷冊
U
- udev 裝置管理員, udev Device Manager(裝置管理員)的 Device Mapper 支援
- udev 規則, udev 與裝置管理員的整合
V
- vgcfbackup 指令, 備份卷冊群組的 Metadata
- vgcfrestore 指令, 備份卷冊群組的 Metadata
- vgchange 指令, 更改卷冊群組的參數
- vgcreate 指令, 建立卷冊群組, 在叢集中建立卷冊群組
- vgdisplay 指令, 顯示卷冊群組
- vgexport 指令, 將卷冊群組移至另一部系統
- vgextend指令, 新增實體卷冊至卷冊群組中
- vgimport 指令, 將卷冊群組移至另一部系統
- vgmerge 指令, 結合卷冊群組
- vgmknodes 指令, 重新建立一個卷冊群組目錄
- vgreduce 指令, 由卷冊群組中移除實體卷冊
- vgrename 指令, 為卷冊群組重新命名
- vgs 指令, LVM 的自訂化回報
- 顯示引數, vgs 指令
- vgscan 指令, 掃描磁碟來找尋卷冊群組以便建立快取檔案
- vgsplit指令, 分割卷冊群組
