คำแนะนำโดยละเอียดเกี่ยวกับการคัดลอก VM โดยใช้ blocksync.py
คำแนะนำเหล่านี้ใช้กับ VM โดยใช้ดิสก์ที่มี LVM และถือว่า Python อยู่บนโฮสต์แต่ละตัว
ดาวน์โหลดสคริปต์ blocksync.py จากhttps://gist.github.com/rcoup/1338263และวางทั้งโฮสต์ต้นทางและปลายทางในโฟลเดอร์ / home / user ของคุณ
ผู้นำ
- คุณจะต้องเข้าถึง 'ssh' ทั้งสองเครื่อง (แหล่งที่มาและเป้าหมาย) สำหรับผู้ใช้ของคุณ
คุณจะต้องมีการเข้าถึง 'sudo' เพื่อ 'root' บนเครื่องทั้งสอง
หรือคุณสามารถทำทุกอย่างในฐานะรูทได้ แต่ถ้าคีย์ ssh ของคุณให้สิทธิ์การเข้าถึงรูตแก่เครื่องเป้าหมายอย่างน้อยที่สุด ** ในกรณีนี้ให้ลบชื่อผู้ใช้ออกจากบรรทัดคำสั่ง
การตั้งค่าตัวอย่าง
- เครื่องเสมือนอยู่บนโฮสต์ dom0 หรือที่เรียกว่า chewie
- ปลายทางที่ต้องการในโฮสต์ dom0 ที่รู้จักกันในชื่อ darth และมี IP ภายในที่นี่ 10.10.10.38 (สำหรับตัวอย่างของเรา)
- ในกรณีที่เกิดขึ้นจริงเราใช้ centos 7 เป็นระบบปฏิบัติการ dom0 บนเครื่องทั้งสอง
- VIRTUAL Machine ในกรณีนี้เรากำลังเคลื่อนที่เรียกว่า LARRY
- ผู้ใช้ที่ทำการดำเนินการคือ USER (ซึ่งจะเป็นชื่อของคุณ)
- DOM0 หมายถึงเซิร์ฟเวอร์จริง
ขั้นตอน
ขั้นตอนเริ่มต้นบนโฮสต์ต้นทาง
- เข้าสู่ระบบไปยังโฮสต์ dom0 ซึ่งปัจจุบันมีเครื่อง (โฮสต์ "แหล่งที่มา") เช่น:
ssh user@chewie.domainname.com.au
- อยู่ในฐานะผู้ใช้ของคุณดังนั้นอย่าเป็นผู้ใช้ sudo * ทำรายการกับเครื่อง
sudo virsh - ทั้งหมด
- ทิ้งข้อกำหนดของเครื่องโดยใช้เช่น:
sudo virsh dumpxml larry> larry.xml
คัดลอกคำนิยามที่ทิ้งไปยังเครื่องใหม่ (โฮสต์ "เป้าหมาย") เช่น:
scp -p larry.xml 10.10.10.38:larry.xml
คุณสามารถเปลี่ยน ip ภายในเป็นชื่อเซิร์ฟเวอร์ dom0 ปลายทางของคุณได้ ** หมายเหตุ: เป็นการดีที่สุดที่จะใช้ที่อยู่ IP สำหรับเป้าหมายเช่น: scp -p larry.xml user@10.10.10.38: larry.xml
หากคุณไม่สามารถคัดลอกเนื่องจากคีย์ cat larry.xml และคัดลอกจากนั้นคุณสามารถ ssh ลงในเครื่องอื่นและสร้างไฟล์และวาง
ค้นหาขนาดและชื่อของดิสก์ของ VM โดยใช้
sudo lvs - หน่วย B
.
** คำสั่งด้านบนควรแสดงขนาดเป็นไบต์ ** ชื่อดิสก์ของเครื่องอยู่ในคอลัมน์แรกของรายการกลุ่มวอลุ่มในรายการที่สองและขนาดล่าสุด ** กำหนดชื่ออุปกรณ์เป็น / dev // ** ตรวจสอบด้วยคำสั่ง 'll' ตัวอย่างเช่นในผลลัพธ์นี้: vm_larry vg1 -wi-ao ---- 69793218560B
LV VG Attr LSize Pool Origin ข้อมูล% Meta% ย้ายบันทึกการแปลง Cpy% Sync
lv_root vg1 -wi-ao ---- 53687091200B
lv_swap vg1 -wi-ao ---- 17179869184B
vm_vsrv1 vg1 -wi-ao ---- 193273528320B
vm_vsrv10 vg1 -wi-ao ---- 64424509440B
vm_vsrv11 vg1 -wi-ao ---- 161061273600B
vm_vsrv12 vg1 -wi-ao ---- 204010946560B
vm_vsrv2 vg1 -wi-ao ---- 140110725120B
vm_vsrv3 vg1 -wi-ao ---- 128849018880B
vm_larry vg1 -wi-ao ---- 69793218560B
vm_vsrv5 vg1 -wi-ao ---- 257698037760B
vm_vsrv6 vg1 -wi-ao ---- 64424509440B
vm_vsrv7 vg1 -wi-ao ---- 161061273600B
vm_vsrv8 vg1 -wi-ao ---- 64424509440B
vm_vsrv9 vg1 -wi-ao ---- 214748364800B
ขั้นตอนเริ่มต้นในโฮสต์เป้าหมาย
- ลงชื่อเข้าใช้โฮสต์เป้าหมายเช่น
ssh user@darth.domainname.com.au
- อยู่ในฐานะผู้ใช้ของคุณเอง นั่นคือไม่กลายเป็นราก
สร้างไฟล์คำจำกัดความของโวลุ่มเช่น:
vi larry.domainname.com.au-vol.xml
หรือ nano larry.domainname.com.au-vol.xml
ด้วยบรรทัดต่อไปนี้: หมายเหตุ - คุณจะต้องใช้ขนาดเป็นไบต์จาก VM ดั้งเดิมและใส่ลงในสคริปต์ด้านล่าง คำสั่งบนเครื่องต้นทางสำหรับขนาดคือ sudo lvs --units B
<volume type='block'>
<name>larry.domainname.com.au</name>
<capacity unit='bytes'>69793218560</capacity>
<allocation unit='bytes'>69793218560</allocation>
<target>
<path>/dev/centos/larry.domainname.com.au</path>
<permissions>
<mode>0600</mode>
<owner>0</owner>
<group>6</group>
<label>system_u:object_r:fixed_disk_device_t:s0</label>
</permissions>
</target>
</volume>
หมายเหตุ: คำจำกัดความนี้ใช้สำหรับดิสก์ 69793218560 Bytes สำหรับ VM larry ให้เปลี่ยนตามความจำเป็นสำหรับ VM ที่แท้จริง
หมายเหตุ: ชื่อและส่วนสุดท้ายของเส้นทางควรตรงกันและจะใช้เป็นชื่อดิสก์ใหม่
สร้างดิสก์ใหม่จากข้อกำหนดโดยใช้
sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml
มันจะบอกว่า Vol larry.domainname.com.au สร้างขึ้นจาก larry.domainname.com.au-vol.xml
ทำให้ไฟล์อุปกรณ์ดิสก์สามารถเข้าถึงได้:
sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au
sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au
แก้ไขคำจำกัดความ xml ที่คัดลอกไปเช่น:
vi larry.xml
ค้นหาคำจำกัดความของดิสก์ในไฟล์ (ค้นหา "source dev =") และแทนที่อุปกรณ์ด้วยสิ่งที่เพิ่งสร้างขึ้น (คุณสามารถ ls / dev / centos / เพื่อดู vm), เช่น: / dev / drbd4 -> / dev / CentOS / larry.domainname.com.au
การเปลี่ยนแปลงสะพานนี้ไม่ซ้ำกับสถานการณ์ของเรา
** ค้นหาการอ้างอิงถึง "br1" ใน stanzas ของอินเทอร์เฟซและเปลี่ยนเป็น "br0" เช่นคุณกำลังเปลี่ยนบริดจ์ต้นทางซอร์สดังนั้นบรรทัดจะเป็นเช่นนี้
ขั้นตอนสุดท้ายของโฮสต์ต้นทาง
ลงชื่อเข้าใช้โฮสต์ต้นทางเช่น
ssh user@chewie.domainname.com.au
แนวทางปฏิบัติที่ดีที่สุดคือการปิด VM บนโฮสต์ต้นทางก่อนทำการซิงค์ครั้งสุดท้าย แต่ไม่จำเป็นต้องทำ (virsh ปิดชื่อOfMachine)
หากยังไม่ได้โฮสต์โฮสต์ให้ดาวน์โหลดสคริปต์ blocksync.py จากhttps://gist.github.com/rcoup/1338263
หากชื่อผู้ใช้ของคุณคือผู้ใช้ (ตัวอย่าง) ให้คัดลอกสคริปต์ blocksync.py ลงในเครื่องทั้งสองไปยัง / home / user และผู้ใช้ที่ chown: user และ chmod 755 สคริปต์
- หากไม่ได้อยู่ในโฮสต์เป้าหมายให้คัดลอกที่นั่นเช่น:
scp -p blocksync.py user@10.10.10.38: blocksync.py
- ใช้เพื่อคัดลอกดิสก์ต้นทางไปยังดิสก์เป้าหมายเช่น
คำสั่งที่ทำการคัดลอก
sudo -E python blocksync.py / dev / vg1 / vm_larry user@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304
หมายเหตุ: ชื่ออุปกรณ์แรกใช้สำหรับโฮสต์ต้นทางตามที่กำหนดจากคำสั่ง 'lvs' อันนี้มาจาก [[chewie]] โฮสต์ต้นทาง
หมายเหตุ: สิ่งนี้จะทำลายเนื้อหาของดิสก์เป้าหมายตรวจสอบให้แน่ใจว่า /dev/mapper/centos-larry.domainname.com.au ถูกต้อง!
หมายเหตุ: การซิงค์จะใช้เวลานาน - ประมาณ 100 วินาทีต่อกิกะไบต์เช่น: 90 นาทีสำหรับดิสก์ 60 กิกะไบต์
อย่างไรก็ตามคุณสามารถทำการซิงค์ในขณะที่ VM กำลังใช้งานอยู่ การซิงค์ที่ตามมาสามารถเร็วขึ้น 25 เปอร์เซ็นต์
สคริปต์จะพิมพ์พารามิเตอร์ที่ใช้ (อาจมีข้อความเกี่ยวกับโมดูลที่เลิกใช้แล้วไม่เป็นไร) ถัดไปจะแสดงคำสั่ง ssh ที่ใช้และเรียกใช้ (คุณจะเห็นข้อความเจ้าหน้าที่ที่ได้รับอนุญาตเท่านั้นเมื่อดำเนินการ) ในระหว่างการซิงค์มันจะแสดงจำนวนบล็อกที่คัดลอกและความเร็วเฉลี่ย ในที่สุดมันจะพิมพ์ข้อความเสร็จสมบูรณ์ด้วยจำนวนวินาทีที่ใช้
สิ่งที่ควรรู้
คุณสามารถยกเลิกการซิงค์ด้วย CTRL C และเริ่มใหม่ในภายหลังโดยเรียกใช้คำสั่งอีกครั้ง
ขั้นตอนสุดท้ายของโฮสต์เป้าหมาย
หมายเหตุ: อาจจำเป็นต้องเปลี่ยนแปลงรายละเอียดของ VM ให้เหมาะสมกับสภาพแวดล้อมใหม่