มีวิธีง่าย ๆ ในการย้าย / คัดลอกโลจิคัลวอลุ่มจากกลุ่มวอลุ่มหนึ่งไปยังอีกกลุ่มหนึ่งหรือไม่? (LVM2)


15

ฉันกำลังจัดเรียงดิสก์จำนวนมากบนเซิร์ฟเวอร์ที่บ้านและพบว่าตัวเองอยู่ในตำแหน่งที่ต้องการย้ายโลจิคัลวอลุ่ม LVM จำนวนมากไปยังกลุ่มวอลุ่มอื่น มีวิธีง่าย ๆ ในการทำเช่นนี้? ฉันเห็นการกล่าวถึงcplvคำสั่ง แต่ดูเหมือนว่าจะเก่าหรือไม่ใช่สิ่งที่เคยมีสำหรับ Linux

คำตอบ:


20

หากคุณสามารถจัดเรียงโลจิคัลวอลุ่มให้อยู่ในเซ็ตย่อยแยกต่างหากของฟิสิคัลวอลุ่มจากส่วนที่เหลือของกลุ่มวอลุ่มต้นทาง ( lvconvert sourcevg/sourcelv /dev/pv1 ...อาจช่วยได้) คุณสามารถใช้vgsplitเพื่อแยก lv ออกเป็น vg ใหม่และvgmergeรวม vg ใหม่เข้ากับ เป้าหมาย vg

แม้ว่า LVM มีคุณลักษณะมิเรอร์ที่คุณไม่สามารถ (sanely) ใช้ในการทำสำเนาระหว่างกลุ่มปริมาณเพราะขาทั้งสองข้างของกระจกจะต้องอาศัยอยู่บน VG เดียวกันและสมาคมไม่สามารถหัก

คุณสามารถคัดลอกปริมาณ LVM ไปอีกวิธีหนึ่งที่คุณต้องการคัดลอกปริมาณการใด ๆ ไปยังอีก: สร้าง LV dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4Mเป้าหมายของขนาดที่เหมาะสมแล้วคัดลอกเนื้อหาที่มี หากปริมาณที่ใช้งานอยู่คุณสามารถใช้ประโยชน์จาก LVM เพื่อทำสำเนาที่สอดคล้องกันก่อน: ถ่ายภาพสแน็ปช็อตของแหล่งที่มา lv lvcreate -sก่อนจากนั้นจึงคัดลอกภาพรวม


1
Brilliant Gilles .... vgsplit / vgmerge อาจจะใช้ได้: ฉันสามารถใช้ pvmove หลังจากนั้นเพื่อย้ายส่วนขยายทางกายภาพไปยังดิสก์ใหม่แล้วลบไดรฟ์ข้อมูลเก่าออกจาก VG
jkp

ความอัปยศนี้ไม่ได้ผลสำหรับฉันในท้ายที่สุดเนื่องจากขนาดขอบเขตที่แตกต่างกัน หากนั่นไม่ใช่ปัญหาสำหรับคุณแม้ว่าฉันจะแนะนำวิธีนี้จะง่ายที่สุด
jkp

หลังจากdd(ถ้าคุณไม่รีบเร่งที่จะกำจัดวอลลุ่มเก่า) อย่าลืมเปลี่ยน UUID ของระบบไฟล์ใหม่: tune2fs -U random / dev / targetvg / targetlv
midenok

2
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

pvmove สามารถย้ายข้อมูลระหว่างฟิสิคัลวอลุ่ม: คู่มือผู้ดูแลระบบ LVM


10
แต่ไม่ใช่ระหว่างกลุ่มวอลุ่ม
MattBianco

ฉันพูดซ้ำ: วิธีนี้ใช้ไม่ได้กับกลุ่มวอลุ่มสองกลุ่ม
kissgyorgy

vgextendvg1 แรกกับ pv ใหม่จากนั้นpvmovelv ของคุณไปยัง pv ใหม่vgsplitvg ชั่วคราวที่คุณvgmergeอยู่ใน vg2 จากนั้นpvmoveให้ lv to vg2 ดั้งเดิม pv อีกครั้งvgreducevg2 เพื่ออ่าน pv กลาง หรือเพื่อหลีกเลี่ยงการคัดลอกกลางคุณสามารถรวม vg1 ใน vg2, pvmovelv1 และvgsplitvg1 อีกครั้งจาก vg2 อีกครั้ง คำตอบนี้ควรจะตอบโจทย์ของ @ MattBianco และ @kissgyorgy และเทียบเท่ากับวิธีแก้ปัญหาของ @Gilles แต่แทนที่สแน็ปช็อตและddระดับpvmove
ล่าง

1

ในฐานะของ LVM ใน Debian ยืด (9.0) คือ 2.02.168-2 มันเป็นไปได้ที่จะทำสำเนาของปริมาณตรรกะข้ามกลุ่มปริมาณการใช้การรวมกันของvgmerge, และlvconvert vgsplitเนื่องจากการย้ายเป็นการรวมกันของการคัดลอกและการลบการทำเช่นนี้จึงเหมาะสำหรับการย้าย

หรือคุณสามารถใช้pvmoveเพื่อย้ายระดับเสียง

เซสชันตัวอย่างแบบสมบูรณ์ในตัวเองโดยใช้อุปกรณ์วนรอบและ lvconvertตามมา

สรุป: เราสร้างกลุ่มปริมาณvg1ที่มีปริมาณตรรกะlv1และvg2ด้วยlv2และทำสำเนาของในlv1vg2

สร้างไฟล์

truncate pv1 --size 100MB
truncate pv2 --size 100MB

ตั้งค่าอุปกรณ์วนรอบในไฟล์

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

สร้างฟิสิคัลวอลุ่มบนอุปกรณ์ลูป (เตรียมข้อมูลเบื้องต้นอุปกรณ์ลูปสำหรับใช้โดย LVM)

pvcreate /dev/loop1 /dev/loop2

สร้างกลุ่มวอลุ่มvg1และvg2เปิด/dev/loop1และ/dev/loop2 ตามลำดับ

vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2

สร้างโลจิคัลวอลุ่มlv1และlv2เปิดvg1และvg2ตามลำดับ

lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2

สร้าง filesystems ext4 บนและlv1lv2

mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2

เลือกเขียนบางอย่างlv1เพื่อให้คุณสามารถตรวจสอบภายหลังว่าสำเนาถูกสร้างขึ้นอย่างถูกต้อง ทำให้vg1ไม่ใช้งาน

vgchange -a n vg1

เรียกใช้คำสั่งผสานในโหมดทดสอบ สิ่งนี้ผสานlv1เข้าlv2กับ

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

แล้วสร้างกระจกคู่ RAID 1 จากการใช้lv1 lvconvertก <> อาร์กิวเมนต์บอกlvconvertทำสำเนากระจก บนlv1_copy/dev/loop2

lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2

จากนั้นก็แยกกระจก lv1_copyเลเวลใหม่อยู่ในขณะนี้

lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1

ทำให้vg2ไม่ใช้งาน

vgchange -a n vg2

จากนั้น (โหมดทดสอบ)

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) คำสั่งเหล่านี้ส่วนใหญ่จะต้องถูกเรียกใช้ในฐานะรูท

2) หากมีการทำซ้ำชื่อของโลจิคัลวอลุ่มในกลุ่มวอลุ่มสองกลุ่มvgmergeจะปฏิเสธที่จะดำเนินการต่อ

3) เมื่อรวม:

Logical volumes in `vg1` must be inactive

และแยก:

Logical volume `vg2/lv1` must be inactive.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.