4.4.13.7. 分割與合併 RAID 映像檔

您可暫時性地將 RAID1 陣列的映像檔分割為唯讀,並透過使用 lvconvert 指令,藉由 --trackchanges 引數搭配 --splitmirrors 引數來追蹤任何變更。這能讓您稍後將映像檔重新合併回陣列中,並僅只同步當映像檔被分割時,陣列所遭到更改的部分。
分割 RAID 映像檔的 lvconvert 指令之格式如下。
lvconvert --splitmirrors count --trackchanges vg/lv [removable_PVs]
當您以 --trackchanges 引數來分割 RAID 映像檔時,您可指定欲分割哪個映像檔,不過您不可更改欲分割之卷冊的名稱。此外,最後產生的卷冊將會含有下列限制。
  • 您新建的卷冊將會是唯讀。
  • 您無法重新設定新卷冊的大小。
  • 您無法將剩餘的陣列重新命名。
  • 您無法重設剩餘陣列的大小。
  • 您可獨立啟用新卷冊與剩餘的陣列。
您可藉由執行 lvconvert 搭配 --merge 引數來合併透過了 --trackchanges 引數分割的映像檔。當您合併映像檔時,僅有在映像檔分割後,遭到變更的陣列部分才會被重新同步。
合併 RAID 映像檔的 lvconvert 指令之格式如下。
lvconvert --merge raid_image
下列範例將建立一個 RAID1 邏輯卷冊,並由該卷冊分割一個映像檔,同時追蹤剩餘陣列的變更。
# lvcreate --type raid1 -m2 -L1G -n my_lv .vg
  Logical volume "my_lv" created
# 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/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_lv
  my_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_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/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)
下列範例將由 RAID1 卷冊分割一個映像檔,同時追蹤剩餘陣列的變更,然後再將卷冊重新合併回陣列中。
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
  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_vg
  LV               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_1
  my_vg/my_lv_rimage_1 successfully merged back into 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_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)
當您由 RAID1 卷冊分割映像檔後,您可藉由發出第二項 lvconvert --splitmirrors 指令、重複執行在未指定 --trackchanges 引數的情況下,分割映像檔的初始 lvconvert 指令,來使分割成為永久性。這將移除 --trackchanges 引數所建立的連結。
在您透過 --trackchanges 引數分割了映像檔之後,您無法在該陣列上發送其後的 lvconvert --splitmirrors 指令,除非您的原意乃將被追蹤的映像檔永久分割。
下列指令序列會將映像檔分割、追蹤映像檔並永久性地分割追蹤的映像檔。
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
  my_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_vg
  LV   Copy%  Devices     
  my_lv          /dev/sdc1(1)
  new            /dev/sdd1(1)
然而請注意,下列指令序列將會失敗。
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
  my_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_lv
  Cannot track more than one split image at a time
相似地,下列指令序列也將會失敗,因為分割的映像檔並非被追蹤的映像檔。
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
  my_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_vg
  LV               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/sdc1
  Unable to split additional image from my_lv while tracking changes for my_lv_rimage_1