將邏輯磁碟區從一個磁碟區組移動到另一個磁碟區組

將邏輯磁碟區從一個磁碟區組移動到另一個磁碟區組

是否可以將邏輯磁碟區從一個磁碟區組整體移動到另一個磁碟區組?

可以建立(或多或少)匹配的 lv 並將資料複製過來,但是有沒有辦法單獨使用 LVM 工具來完成此操作?

如果不是,是否存在理論原因或技術限制(範圍大小)?

答案1

卷組由整個實體卷組成。一個實體磁碟區由許多盤區組成(一個盤區通常為 4MB);每個盤區可能屬於不同的邏輯磁碟區。要將邏輯磁碟區傳輸到不同的群組,不能簡單地傳輸磁碟區,因為這可能會在來源 VG 和目標 VG 之間分割實體磁碟區。

您可以做的是將一個或多個 PV 從來源 VG 傳輸到目標 VG,其中vgsplit命令。您可以指定要傳輸哪些 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 的物理邊界並移動數據,則沒有內建工具,但您可以製作一面鏡子,然後移除原來的鏡子

答案2

vgmerge從 Debian Stretch (9.0) 中的 LVM(即 2.02.168-2)開始,可以使用、lvconvert和的組合跨卷組複製邏輯磁碟區vgsplit。由於移動是複製和刪除的組合,因此這也適用於移動。

或者,您可以使用pvmove來移動物理範圍。去引用U&L:物理範圍的目的

單一實體磁碟區是 LVM 可以單獨管理的最小磁碟空間單位。

下面是使用循環設備的完整獨立範例會話 lvconvert

摘要:我們vg1使用邏輯捲lv1vg2來建立卷宗組,並製作inlv2的副本。lv1vg2

建立文件。

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

筆記:

  1. 大多數這些命令需要以 root 身分運行。#有些指令前面的 表示這是一條註解。它不代表 root 提示符號。

  2. 如果兩個磁碟區組中的邏輯磁碟區名稱有任何重複,vgmerge將拒絕繼續。

  3. 合併時,邏輯磁碟區vg1必須處於非活動狀態。且在分割時,vg2所屬的邏輯磁碟區vg1必須處於非活動狀態。在我們的例子中,這是lv1.

答案3

我將提供我自己的:

umount /somedir/

lvdisplay /dev/vgsource/lv0 --units b

lvcreate -L 12345b -n lv0 vgtarget

dd if=/dev/vgsource/lv0 of=/dev/vgtarget/lv0 bs=1024K conv=noerror,sync status=progress

mount /dev/vgtarget/lv0 /somedir/

如果一切正常,請刪除來源

lvremove vgsource/lv0

答案4

假設您有一個名為s0

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb   s0 lvm2 a--  <223.57g      0  <223.57g
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1     lvm2 ---   931.51g 931.51g       0 

我想移動/dev/sdb/dev/sdc1新的硬碟/dev/sdd1

在sdd1上建立物理卷

$ pvcreate /dev/sdd1

現在您可以s0使用新磁碟擴充卷組

$ vgextend s0 /dev/sdd1

現在您可以開始行動數據

$ pvmove /dev/sdb /dev/sdd1

等待完成

/dev/sdb: Moved: 10.0%
...

/dev/sdb: Moved: 50.0%
...

/dev/sdb: Moved: 100.0%

查看

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used    
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb      lvm2 ---   223.57g 223.57g       0 
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1  s0 lvm2 a--  <931.51g 707.94g <223.57g

現在您可以/dev/sdbs0群組中刪除

$ vgreduce s0 /dev/sdb

按照相同的步驟操作/dev/sdc1

相關內容