將邏輯卷從一個卷組移動到另一個卷組
是否可以將邏輯卷從一個卷組整體移動到另一個卷組?
可以創建(或多或少)匹配的 lv 並複制數據,但是有沒有辦法單獨使用 LVM 工具來做到這一點?
如果沒有,是否有理論上的原因或技術限制(範圍大小)?
從 Debian stretch (9.0) 中的 LVM 開始,即 2.02.168-2,可以使用
vgmerge
、lvconvert
和vgsplit
. 由於移動是複制和刪除的組合,因此這也適用於移動。或者,您可以使用
pvmove
來移動物理範圍。引用U&L:物理範圍的目的:單個物理範圍是可以由 LVM 單獨管理的最小磁碟空間單位。
一個完整的使用循環設備的獨立範例會話,
lvconvert
如下所示。摘要:我們
vg1
使用邏輯卷創建卷組lv1
,並vg2
使用,並製作inlv2
的副本。lv1``vg2
創建文件。
truncate pv1 --size 100MB truncate pv2 --size 100MB
在文件上設置循環設備。
losetup /dev/loop1 pv1 losetup /dev/loop2 pv2
在循環設備上創建物理卷(初始化循環設備以供 LVM 使用)。
pvcreate /dev/loop1 /dev/loop2
分別在 /dev/loop1 和 /dev/loop2 上創建卷組 vg1 和 vg2。
vgcreate vg1 /dev/loop1 vgcreate vg2 /dev/loop2
分別在 vg1 和 vg2 上創建邏輯卷 lv1 和 lv2。
lvcreate -L 10M -n lv1 vg1 lvcreate -L 10M -n lv2 vg2
在 lv1 和 lv2 上創建 ext4 文件系統。
mkfs.ext4 -j /dev/vg1/lv1 mkfs.ext4 -j /dev/vg2/lv2
或者,在 lv1 上寫一些東西,以便以後檢查副本是否正確創建。使 vg1 處於非活動狀態。
vgchange -a n vg1
在測試模式下執行合併命令。這會將 vg1 合併到 vg2 中。
vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>> vgmerge -A y -l -t -v vg2 vg1
然後是真的。
vgmerge -A y -l -v vg2 vg1
lv1
然後使用創建 RAID 1 鏡像對lvconvert
。該dest-pv
參數告訴lvconvert
在 上製作鏡像副本/dev/loop2
。lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>> lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2
然後拆分鏡像。新的LV現在
lv1_copy
。lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>> lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1
使
vg2/lv1
不活動。lvchange -a n /dev/vg2/lv1
然後(測試模式)
vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>> vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1
真的
vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1
結果輸出:
lvs [...] lv1 vg1 -wi-a----- 12.00m lv1_copy vg2 -wi-a----- 12.00m lv2 vg2 -wi-a----- 12.00m
筆記:
- 這些命令中的大多數都需要以 root 身份執行。
- 如果兩個卷組中的邏輯卷的名稱有任何重複,
vgmerge
將拒絕繼續。- 在合併時,邏輯卷
vg1
必須處於非活動狀態。vg2
並且在拆分時,屬於的邏輯卷vg1
必須處於非活動狀態。在我們的例子中,這是lv1
.
卷組由整個物理卷組成。一個物理卷由許多extent組成(一個extent通常為4MB);每個區段可能屬於不同的邏輯卷。要將邏輯卷傳輸到不同的組,不能簡單地傳輸擴展區,因為這可能會在源 VG 和目標 VG 之間拆分物理卷。
您可以做的是使用
vgsplit
命令將一個或多個 PV 從源 VG 傳輸到目標 VG。您可以指定要傳輸的 PV 或 LV(但一次只能傳輸一個)。如果指定 LV,則它和源 VG 中的其他 LV 必須位於不同的 PV 上。如果不存在具有指定名稱的 VG,則將創建目標 VG。vgsplit -n source_group/volume_to_copy source_group target_group vgsplit source_group target_group /dev/sdy99 /dev/sdz99
您可能需要先使用
pvmove
將要移動的邏輯卷安排在單獨的 PV 上。如果你打算保留 VG 的物理邊界並移動數據,沒有內置工具,但你可以製作一個鏡像,然後刪除原來的.