เพื่อจุดประสงค์ในการย้ายข้อมูลไปยังตำแหน่งบนคลาวด์

ฉันจำได้ว่าทำเพื่อลูกค้าโดยย้ายไปยัง Azure แต่ฉันจำไม่ได้ว่าพวกเขาสร้างภาพอย่างไร Azure มีส่วนต่อประสานเพื่อสร้างระบบปฏิบัติการจากอิมเมจที่เราจัดหา

Windows 10, Windows Server หรือแม้แต่ Windows 7 - แต่ละตัวเลือกก็น่าสนใจ

แก้ไข: การอัปโหลดที่ฉันกำลังสร้างไม่ได้มีไว้สำหรับ Azure แต่เป็นผู้ให้บริการระบบคลาวด์ที่เล็กกว่า

answer

Microsoft มีคำแนะนำโดยละเอียดเกี่ยวกับการจับภาพVHDเพื่อย้ายไปยัง Azure: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/prepare-for-upload-vhd-image

อีกวิธีหนึ่งคือสร้างWIMไฟล์โดยการบูทจาก Windows ติดตั้ง ISO: https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/capture-and-apply-windows-using-a-single -wim?view=windows-11

คุณควรรู้ว่า Microsoft ไม่ได้ต้องการทำให้สิ่งนี้ง่ายจริงๆ เพราะจะทำให้การละเมิดลิขสิทธิ์ง่ายขึ้นด้วย แน่นอนว่าใน Azure นี่ไม่ใช่ปัญหา

โดยส่วนตัวแล้วฉันจะบูต Linux จาก USB และใช้dd, gz, และrsync:

$ lsblk # will show the block devices
$ mount -o ro /dev/sdb2 /mnt
$ cd /mnt
$ ls # to confirm that it's the right partition / installation
$ umount /mnt
$ dd if=/dev/sdb2 | gzip -9 > image.raw.gz
$ rsync image.raw.gz my.newhost.com:/

อุปสรรคของวิธีนี้คือคุณต้องการพื้นที่เพิ่มขึ้นเป็นสองเท่าในขณะที่คุณเพียงแค่คัดลอกไฟล์ซึ่งยังคงต้องไม่ถูกบีบอัดและขึ้นอยู่กับวัตถุประสงค์ของคุณที่เขียนลงในอุปกรณ์บล็อกบนเป้าหมาย:

# dd if=image.raw.gz | gunzip | dd of=/dev/sdg1

อาจจะดีกว่า dd:

$ qemu-img convert -f raw -O vhd /dev/sdb2 image.vhd
$ rsync image.vhd my.remote.host:~

ซึ่งคุณสามารถรันบนรีโมตโฮสต์ได้ด้วย QEMU/KVM:

$ qemu-system-x86_64 -m 2G -hda image.vhd

ประโยชน์ของวิธีนี้คือ คุณสามารถใช้รูปแบบใดก็ได้ เช่นqcow2. เพียงแทนที่vhdด้านบนสำหรับqcow2. คุณสามารถอ่านเพิ่มเติมเกี่ยวกับqemuและvirt-managerในเอกสารอย่างเป็นทางการ มีเครื่องมือ GUI ที่มีประโยชน์อยู่บ้าง

อีกทางหนึ่ง หากคุณใช้ LAN เดียวกันหรือไม่จำเป็นต้องทำสำเนาต่อ ซึ่งคุณสามารถทำได้ข้างต้นโดยเพียงแค่เรียกใช้คำสั่ง rsync ซ้ำๆ จนกว่าการคัดลอกทั้งหมดจะเสร็จสิ้น และคุณสามารถคัดลอกไปยังไฟล์ใหม่ได้โดยตรง บล็อกอุปกรณ์บนเครื่องเป้าหมาย

ขั้นแรก อนุญาตให้ddเรียกใช้ในฐานะรูทบนเครื่องเป้าหมาย ซึ่งจะต้องเขียนโดยตรงไปยังอุปกรณ์บล็อก หากคุณไม่ได้ลงชื่อเข้าใช้ด้วยrootผู้ใช้:

$ ssh 192.168.1.2
$ visudo 
# Add:
myuser ALL = NOPASSWD: /bin/dd 
# then type :w ENTER and :q ENTER 

จากนั้นคุณสามารถออก:

$ sudo dd if=/dev/sdb2 | gzip -9 - | ssh 192.168.1.2 "gunzip - | sudo dd of=/dev/sdg1"

อีกทางเลือกหนึ่งคือสคริปต์ Python ที่ทำงานคล้ายกับ rsync ดังนั้นหากการคัดลอกถูกขัดจังหวะ ก็สามารถดำเนินการต่อได้ ดังนั้นควรเลือกทั้งสองอย่างให้ดีที่สุด มีความเห็นว่าจะใช้sshกับบัญชีรูทบนรีโมตโฮสต์ ซึ่งไม่อนุญาตให้ล็อกอินด้วยรหัสผ่านโดยค่าเริ่มต้น ดังนั้นคุณต้องเพิ่มssh keyไฟล์ . มีหลายวิธีในการทำเช่นนี้ นี่คือวิธีหนึ่ง:

$ ssh my.remotehost.com "echo `~/.ssh/id_rsa.pub` | sudo tee -a /root/.ssh/id_rsa.pub" # add your user ssh key to the remote root account 

จากนั้นเพียงแค่รับสคริปต์และเรียกใช้:

$ git clone https://github.com/bscp-tool/bscp-tool.github.io.git
$ bscp /dev/sda1 my.remotehost.com:/dev/sdg1