4.4.3. 建立鏡像卷冊

注意

由 RHEL 6.3 發行版起,LVM 支援了 RAID4/5/6 以及新的鏡像實作。欲取得新實作上的相關資訊,請參閱 節 4.4.13, “RAID 邏輯卷冊”

注意

在叢集中建立鏡像 LVM 邏輯卷冊,需使用與在單獨節點上建立鏡像 LVM 邏輯卷冊時的相同指令與程序。然而,若要在叢集中建立鏡像 LVM 卷冊,叢集與叢集鏡像基礎結構必須要運作,叢集必須要 quorate,並且 lvm.conf 檔案中的鎖定類型必須要正確設置,以啟用叢集鎖定。欲取得在叢集中建立鏡像卷冊的範例,請參閱〈節 5.5, “在叢集中建立鏡像 LVM 邏輯卷冊”〉。
若嘗試快速地由叢集中的多重節點,執行多重 LVM 鏡像建立與轉換指令,可能會造成這些指令成為待處理狀態。這可能會造成某些請求的作業因逾時而失效。若要避免此問題,建議您由叢集中的一個節點上,執行叢集鏡像建立指令。
當您要建立鏡像卷冊時,您需要以 lvcreate 指令的 -m 引數來指定複製的資料數量。指定 -m1 的話會建立一個鏡像,並產生出兩份檔案系統:一個 linear 邏輯卷冊和一個副本。相同地,指定了 -m2 的話會建立兩個鏡像,並產生出三份檔案系統。
下列指令會建立一個單鏡像的鏡像邏輯卷冊。卷冊大小為 50 GB,名為 mirrorlv 並由卷冊群組 vg0 中所分割出:
# lvcreate -L 50G -m1 -n mirrorlv vg0
LVM 鏡像會將被複製入區域中的裝置切割,預設大小為 512KB。您可使用 lvcreate 指令的 -R 引數來將區域大小指定為 MB。您亦可藉由編輯 lvm.conf 檔案中的 mirror_region_size 設定來更改預設的區域大小。

注意

基於叢集基礎結構中的限制,大於 1.5TB 的叢集鏡像無法以預設大小 512KB 建立。需要大型鏡像的使用者,應增加預設的區域大小。若沒增加區域大小將會造成 LVM 建立程序停滯,並且同時可能也會使其它 LVM 指令停滯。
當為鏡像指定大小超過 1.5TB 的區域時,您可以 TB 作為您鏡像大小的單位,將其四捨五入為下個 2 的次方,並使用該數字作為 lvcreate 指令的 -R 引數。比方說,若您的鏡像大小為 1.5TB,您可指定 -R 2。若您的鏡像大小為 3TB,您可指定 -R 4。當鏡像大小為 5TB 時,您可指定 -R 8
下列指令將建立一個區域大小為 2MB 的鏡像邏輯卷冊:
# lvcreate -m1 -L 2T -R 2 -n mirror vol_group
當鏡像被建立後,鏡像區域會被同步化。對於大型的鏡像元件來說,同步程序可能會花上許多時間。由 RHEL 6.3 發行版起,當您要建立一個無須再生的新鏡像時,您可指定 --nosync 引數來顯示來自於第一個裝置的初始同步化是非必要的。
LVM 含有一個小型的日誌,它會使用該日誌來記錄哪個區域和哪個鏡像已同步化。就預設值,該日誌會被存放在磁碟上,並且系統重新啟動後依然可保有一致性。您亦可透過 --mirrorlog core 引數來指定將此日誌存放在記憶體中;這可除去額外日誌裝置的需要,不過若要如此,每當系統重新啟動時,整個鏡像就必須被重新同步化。
下列指令將會由 bigvg 卷冊群組建立鏡像邏輯卷冊。該邏輯卷冊名為 ondiskmirvol 並且含有單鏡像。卷冊大小為 12 MB 並且將 mirror log 存放在記憶體中。
# lvcreate -L 12MB -m1 --mirrorlog core -n ondiskmirvol bigvg
  Logical volume "ondiskmirvol" created
mirror log 會被建立在一個與任何 mirror leg 都會被建立於的裝置區隔開的裝置上。不過您亦可透過使用 vgcreate 指令的 --alloc anywhere 引數來在和其中一個 mirror leg 的裝置相同的裝置上建立一個 mirror log。這可能會使效能降低,不過它卻能讓您建立鏡像,儘管您只有兩個基本裝置。
下列指令會建立一個單鏡像的鏡像邏輯卷冊,它的 mirror log 位於與其中一個 mirror leg 的裝置相同的裝置上。在此範例中,vg0 這個卷冊群組只包含著兩個裝置。這項指令所建立的鏡像卷冊的大小為 500 MB,名為 mirrorlv,並且是由卷冊群組 vg0 中所分割出的:
# lvcreate -L 500M -m1 -n mirrorlv -alloc anywhere vg0

注意

對於叢集鏡像來說,mirror log 管理必須為目前最低叢集 ID 的叢集節點完全負責。因此,當持有叢集 mirror log 的裝置在叢集的子集上無法使用時,叢集鏡像可在不造成任何影響的情況下,繼續進行作業,只要最低 ID 的叢集節點保留了 mirror log 的存取權限即可。因為鏡像不會受到干擾,因此也不會進行自動修正(修復)的動作。然而,當最低 ID 的叢集節點失去了 mirror log 的存取權限時,自動動作將會啟動(無論由其它節點對於 log 的存取權限為何)。
若要建立本身被映射的 mirror log,您可指定 --mirrorlog mirrored 引數。下列指令將會由 bigvg 卷冊群組建立鏡像邏輯卷冊。該邏輯卷冊名為 twologvol 並且含有單鏡像。卷冊大小為 12 MB 並且將 mirror log 已被映射,而存放在各別的裝置上。
# lvcreate -L 12MB -m1 --mirrorlog mirrored -n twologvol bigvg
  Logical volume "twologvol" created
和標準的 mirror log 相同,您可藉由使用 vgcreate 指令的 --alloc anywhere 引數,來在與鏡像 leg 相同的裝置上 建立冗餘鏡像 log。這可能會使效能降低,不過它卻能讓您建立冗餘鏡像 log,儘管您沒有足夠的基本裝置,以存放 log 於各別裝置上。
當鏡像被建立後,鏡像區域會被同步化。對於大型的鏡像元件來說,同步程序可能會花上許多時間。當您要建立一個無須再生的新鏡像時,您可指定 --nosync 引數來顯示來自於第一個裝置的初始同步化是非必要的。
您可指定使用來作為 mirror leg 和 log 的裝置為何,以及該使用裝置的哪個扇區。若要強制將日誌存放在某個特定磁碟上,請在磁碟上確切指定一個欲存放日誌的扇區。LVM 並不一定會遵照指令列中所列出的裝置順序。若有任何實體卷冊被列出的話,那將會是唯一被進行分配的空間。任何包含在清單中,並且已被分配的實體扇區皆會被忽略掉。
下列指令會建立一個含有單獨鏡像的鏡像邏輯卷冊。卷冊大小為 500 MB,名為 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/sdc1
下列指令會建立一個含有單獨鏡像的鏡像邏輯卷冊。卷冊大小為 500 MB,名為 mirrorlv,並且是由卷冊群組 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

注意

由 Red Hat Enterprise Linux 6.1 發行版起,您將可在單獨邏輯卷冊中結合 striping 與 mirroring。當建立邏輯卷冊並同時指定鏡像數量(--mirrors X)和磁條數量(--stripes Y)時,會使鏡像裝置所構成的裝置成為等量。

4.4.3.1. 鏡像邏輯卷冊失效政策

您可透過在 lvm.conf 檔案的 activation 部份中使用 mirror_image_fault_policymirror_log_fault_policy 參數,以定義當裝置失效時,鏡像邏輯卷冊會如何運作。當這些參數被設為了 remove 時,系統將會嘗試移除出錯的裝置,並在無此裝置的情況下運作。當此參數被設為了 allocate 時,系統將會嘗試移除出錯的裝置,並嘗試在新裝置上配置空間,以取代失效的裝置;若無適當的裝置和空間可配置取代,此政策的運作方式是與 remove 政策相似的。
就預設值,mirror_log_fault_policy 參數會被設為 allocate。為 log 使用此政策既快速,亦可在當機或重新開機時,記住同步狀態。若您將此政策設為了 remove,當 log 裝置失效時,鏡像便會轉換為使用一種記憶體中的日誌,並且在當機或重新開機時,該鏡像將不會記住它的同步狀態,並且整個鏡像將會被重新同步。
就預設值,mirror_image_fault_policy 參數會被設為 remove。當使用此政策時,若鏡像映像失效,而只有一份完整鏡像的話,鏡像便會轉換為非映射的裝置。若要將鏡像裝置的政策設為 allocate,鏡像需要與裝置同步;這是一項緩慢的程序,不過它可保留裝置的鏡像特性。

注意

當 LVM 鏡像發生了裝置失效的問題時,將會進行一種兩階段的復原程序。第一階段包含移除失效的裝置。這可能會造成鏡像被縮減為線性裝置。第二階段,若 mirror_log_fault_policy 參數被設為了 allocate,它將會嘗試置換所有失效的裝置。然而請注意,若有其它可用裝置,您無法保證在第二階段中,先前由未失效的鏡像所使用的裝置會被選擇。
欲取得由失效的 LVM 鏡像進行手動式復原的相關資訊,請參閱〈節 6.3, “由 LVM 鏡像錯誤中復原”〉。