ส่งออกและนำเข้าเครื่องเสมือน Hyper-V การส่งออกและการนำเข้าเครื่องเสมือน Hyper-V

เมื่อทำงานกับการจำลองเสมือน จำเป็นต้องถ่ายโอนเครื่องเสมือนจากไฮเปอร์ไวเซอร์ประเภทหนึ่งไปยังอีกประเภทหนึ่งเป็นระยะ เนื่องจากระบบเสมือนจริงแต่ละระบบทำงานได้ในรูปแบบของตัวเอง จึงไม่สามารถถ่ายโอนเครื่องได้อย่างง่ายดาย คุณจะต้องแปลงเป็นรูปแบบไฮเปอร์ไวเซอร์ที่ต้องการ วันนี้เราจะมาบอกวิธีการทำเช่นนี้สำหรับสองคนมากที่สุด ระบบยอดนิยม การจำลองเสมือนของ VMwareและไฮเปอร์-วี

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

รูปแบบ ดิสก์เสมือนไฮเปอร์ไวเซอร์ที่แตกต่างกันยังแตกต่างกัน แต่ก็ไม่ใช่เรื่องยาก - คุณเพียงแค่ต้องใช้ซอฟต์แวร์พิเศษในการแปลง ความละเอียดอ่อนเพียงอย่างเดียวคือ guest OS ต้องได้รับการสนับสนุนโดยไฮเปอร์ไวเซอร์ทั้งสองประเภท มิฉะนั้นจะต้องดำเนินมาตรการเพิ่มเติมเพื่อให้แน่ใจว่า การทำงานปกติอย่างไรก็ตาม หัวข้อนี้อยู่นอกเหนือขอบเขตของบทความนี้

มาดูกระบวนการกัน ตัวอย่างจริง- ลูกค้ารายหนึ่งของเราซื้อ รุ่นบรรจุกล่อง“Megaplan” ซึ่งผู้พัฒนากำลังจัดจำหน่ายอย่างมาก ในลักษณะเดิม: ในรูปแบบของอิมเมจเครื่องเสมือนในรูปแบบ เปิดรูปแบบการจำลองเสมือน (OVF)ซึ่งได้รับการสนับสนุน วีเอ็มแวร์และ VirtualBox- ที่จริงแล้วเครื่องเสมือนมี Ubuntu 12.04 พร้อมด้วยเว็บเซิร์ฟเวอร์ที่กำหนดค่า DBMS และส่วนประกอบอื่น ๆ ที่จำเป็นสำหรับการทำงานของ Megaplan ซึ่งเป็นเว็บแอปพลิเคชันทั่วไป ในเวลาเดียวกัน ข้อตกลงใบอนุญาตห้ามการเข้าถึงระบบปฏิบัติการเกสต์

ทิ้งนโยบายการออกใบอนุญาตไว้เบื้องหลัง และเราจะแปลกใจเพียงว่าในขณะที่ขายซอฟต์แวร์เซิร์ฟเวอร์ระดับองค์กรในราคาที่สูง นักพัฒนาจะเพิกเฉยต่อไฮเปอร์ไวเซอร์ที่ร้ายแรงโดยทั่วไปโดยเสนอให้ใช้ไฮเปอร์ไวเซอร์เดสก์ท็อปประเภทที่สอง

หากเครื่องเสมือนทำงานบนแพลตฟอร์ม VMWare อยู่แล้ว (ตามปกติ) ให้ลบ VMWare Tools ออกจากเครื่องแล้วปิดเครื่อง

ตอนนี้คุณสามารถเริ่มการแปลงดิสก์เสมือนได้แล้ว สำหรับสิ่งนี้เราจะใช้ ยูทิลิตี้ฟรีตัวแปลง StarWind V2V อินเทอร์เฟซและการใช้งานนั้นง่ายมาก มาเลือกดิสก์เสมือนต้นทาง (ไฟล์ที่มีนามสกุล วีเอ็มดีเค).

เมื่อการแปลงเสร็จสมบูรณ์ ให้ไปที่คุณสมบัติอีกครั้ง ฮาร์ดไดรฟ์และเลือกอิมเมจ VHDX ที่นั่น ยืนยันการเปลี่ยนแปลงและเริ่มเครื่องเสมือน ตรวจสอบให้แน่ใจว่าทุกอย่างทำงานได้ดีเก่า ดิสก์วีเอชดีสามารถลบได้

การแปลงเครื่องเสมือน Hyper-V เป็น VMWare ทำได้ในลักษณะเดียวกัน เราแปลงดิสก์เสมือนเป็น VMDK หากใช้ดิสก์รูปแบบ VHDX จะต้องแปลงเป็น VHD ก่อนโดยใช้ Hyper-V ในลักษณะเดียวกับที่เราทำข้างต้น จากนั้นเราก็สร้างใน VMware เสมือนเครื่องสำหรับระบบเกสต์ที่ใช้กับพารามิเตอร์ที่เหมือนกันและในการตั้งค่าดิสก์เราระบุว่าจะใช้อันที่แปลงโดยเรา ดิสก์ VMDK- หลังจากสตาร์ทเครื่องเสมือนแล้ว อย่าลืมติดตั้งแพ็คเกจ VMWare Tools ที่จำเป็นสำหรับ งานเต็มเปี่ยมระบบแขก

  • แท็ก:

กรุณาเปิดใช้งาน JavaScript เพื่อดู

11.02.2012 - 18:26

มาดูสคริปต์สำหรับส่งออก VM บนเซิร์ฟเวอร์ Hyper-V
เป้าหมายคือการทำให้กระบวนการเป็นอัตโนมัติด้วยตรรกะสูงสุดโดยไม่กระทบต่อประสิทธิภาพการผลิต ด้วยเหตุนี้ฉันจึงเขียนสคริปต์ที่ฉันส่งไปตั้งแต่เนิ่นๆ สถานการณ์เปลี่ยนแปลงทุกวัน ระบบกำลังทำงานอยู่ในการผลิตอยู่แล้ว ดังนั้นจึงจำเป็นต้องลดความเสี่ยงในการทำลายบางสิ่งให้เหลือน้อยที่สุด ด้วยเหตุนี้ ฉันจึงแก้ไขสคริปต์ ซึ่งแนวคิดไม่เปลี่ยนแปลง:

  1. ค้นหา VM
  2. ปิด VM
  3. การส่งออก VM
  4. เปิด VM

เพิ่มเฉพาะ "ruffles" และ "monograms" เท่านั้น
ข้อกำหนดหลักคือการบันทึก VM 2 ชุด ทั้งชุดปัจจุบันและชุดก่อนหน้า เมื่อมีการสร้างสำเนาใหม่ สำเนาก่อนหน้าจะถูกลบ และสำเนาปัจจุบันจะถูกเปลี่ยนชื่อเป็นสำเนาก่อนหน้า ทุกอย่างถูกนำไปใช้โดยใช้ตัวอย่างของแค็ตตาล็อกวันนี้และเมื่อวาน

คุณสมบัติหลักของสคริปต์:

  1. ตรวจสอบการมีอยู่ของ VM ที่จำเป็นในรายการ VM การกระทำทั้งหมดจะถูกบันทึกไว้ในไฟล์บันทึก
  2. หากพบ VM - ลบไดเรกทอรีด้วยรายการก่อนหน้า ไดเรกทอรีปัจจุบันเปลี่ยนชื่อเป็นอันก่อนหน้า สร้างไดเร็กทอรีสำหรับรายการปัจจุบัน
  3. ตรวจสอบสถานะของ VM หาก VM กำลังทำงาน - หยุด VM ส่งออก VM ไปยังไดเร็กทอรีที่กำหนด เปิดตัว
  4. หาก VM หยุดทำงาน ให้ส่งออก VM ไปยังไดเร็กทอรีที่กำหนด
  5. หาก VM อยู่ในสถานะอื่น VM จะเขียนลงในบันทึก
  6. หากไม่พบ VM ระบบจะเขียนลงในบันทึก
  7. หลังจากส่งออก - ลบข้อมูลทั้งหมดเกี่ยวกับ VHD ทดสอบ VHD เขียนลงในบันทึก
  8. ส่งอีเมลถึงผู้รับเกี่ยวกับการดำเนินงานที่เสร็จสมบูรณ์ โดยกำหนดความสำคัญของจดหมายในกรณีที่เกิดความล้มเหลว

มีคุณสมบัติบางประการ:

  1. เมื่อส่งจดหมาย บันทึกที่วางแผนจะส่งเป็นไฟล์แนบจะต้องไม่อยู่ในเส้นทาง UNC กล่าวอีกนัยหนึ่ง หากคุณต้องการส่งบันทึกเป็นไฟล์แนบ คุณจะต้องวางไว้บนนั้น ดิสก์ภายในเครื่องหรือ ไดเร็กทอรีเครือข่ายเชื่อมต่อกับดิสก์แยกต่างหาก
  2. สคริปต์รวบรวมข้อมูลเกี่ยวกับดิสก์ VHD พร้อมฟังก์ชันเพิ่มเติม เพื่อให้ใช้ฟังก์ชันการตรวจสอบได้สำเร็จ ดิสก์ไม่ควรอยู่บนเส้นทาง UNC คุณจะต้องเชื่อมต่อไดรฟ์เครือข่ายอีกครั้ง
  3. เพื่อควบคุมการดำเนินการส่งออกเครื่องตามกำหนดเวลา มีการพยายามแนะนำพารามิเตอร์ "ชื่อ VM"

สำหรับ งานที่ประสบความสำเร็จคุณต้องติดตั้งโมดูลนี้ ฉันคิดว่าจะไม่มีปัญหา
สคริปต์:

พารามิเตอร์ ($VM) # พารามิเตอร์ขาเข้าของเครื่องเสมือน (VM)

ถ้า (! (รับโมดูล - ชื่อ Hyperv) )
{
# เปิดใช้งานโมดูล
นำเข้าโมดูล Hyperv
}
ถ้า ($VM -eq $null )
{
เขียน-Host "ป้อนชื่อของเครื่องเสมือน"
}

# ==== พารามิเตอร์เริ่มต้น
$ComputerName = รับเนื้อหา env:COMPUTERNAME
# เชื่อมต่อไดรฟ์ R: เพื่อรับข้อมูลเกี่ยวกับ VHD
เรียกใช้ Expression -Command "net use R: \\Server /y"
# รีเซ็ตตัวนับ
$count = $false # ทริกเกอร์ของ VM ที่พบ
$export_count = $false # ตัวนับการส่งออก VM ที่ประสบความสำเร็จ
# กำหนดชื่อ\ที่อยู่ของไฟล์บันทึก
$log = "\\เซิร์ฟเวอร์\สำรอง\Logs \$VM\" + (รับวันที่ - รูปแบบ "ปปป-ดด") +" .log "
# กำหนดเส้นทางไปยังโฟลเดอร์ด้วย RK
$BackupDir = "
\\เซิร์ฟเวอร์\สำรอง\" +$VM
# พาธไปยังโฟลเดอร์ที่มี RK เพื่อลบข้อมูลออกจาก VHD
$InfoDir = "R:\backup \" +$VM
# ข้อมูลสำหรับอีเมล
$ผู้ส่ง = "
[email protected]"
$SMTP = " smtp.contoso.com"
$ผู้รับ = @(" [email protected] ") # กลุ่มการแจกจ่ายกับผู้รับที่ตรวจสอบการสำรองข้อมูล
$AttachePath = "
R:\backup\Logs\$VM \" + (รับวันที่ - รูปแบบ "yyy-MM") +".log"

# ฟังก์ชั่นส่งข้อความ ตอนที่เขียน ไม่รู้ฟังก์ชั่น Send-MailMessage เลยเขียนฟังก์ชั่นของตัวเองขึ้นมา ฉันไม่ต้องการที่จะทำซ้ำ “มันใช้งานได้ - อย่าแตะต้องมัน!”
ฟังก์ชั่น SendEmail($Subject ,$Body ,$Priority )
{
$Message = System.Net.Mail.MailMessage ใหม่
$Server = System.Net.Mail.SMTPClient วัตถุใหม่
$Attache = System.Net.Mail.Attachment ใหม่-Object($AttachePath )
# ==== ข้อความ
$ผู้รับ |
ForEach-Object ( $ข้อความ .To.Add($_ ) )
$ข้อความ .จาก = $ผู้ส่ง
$ข้อความ .เรื่อง = $เรื่อง
$ข้อความ .Body = $Body
$ข้อความ .Attachments.Add($แนบ )
$Message .Priority = [ System.Net.Mail.MailPriority] ::$Priority
# ==== กำลังส่ง
$Server.Host = $SMTP
}

# =========================================
$Server.Send($ข้อความ)
# เริ่มบันทึก (รับวันที่) + "`r` n การเริ่มต้นสคริปต์ส่งออก VM " `r` n กำลังรับรายการเครื่องเสมือน... `r` n"

# รับรายการ VM
$VMArray = รับ-VM |
เลือก-วัตถุ-คุณสมบัติ VMElementName
{
foreach($องค์ประกอบใน $VMArray)
# ค้นหา VM ที่กำหนด
{
ถ้า ($VM -eq $element .VMElementName) $log_string = $log_string + “พบเครื่องเสมือนแล้ว ฉันกำลังดำเนินการ”การกระทำที่ระบุ
...`เปล่า'
$count = $จริง

# ========== การทำงานของโฟลเดอร์ ===============
# ลบโฟลเดอร์เมื่อวาน
ลบรายการ -Path ($BackupDir + "\Yesterday" ) -Recurse -ErrorVariable ผิดพลาด
{
ถ้า ($ ผิดพลาด)
# หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
'r'n"" การลบไดเรกทอรีเมื่อวานนี้ล้มเหลว การส่งออก $VM ถูกยกเลิก ข้อผิดพลาด: "
}
+ $ผิดพลาด
{
ถ้า ($VM -eq $element .VMElementName) อื่น
"การลบไดเร็กทอรีเมื่อวานสำเร็จแล้ว `r` n"
# เปลี่ยนชื่อโฟลเดอร์วันนี้ เปลี่ยนชื่อรายการ -Path ($BackupDir + "\วันนี้"
ลบรายการ -Path ($BackupDir + "\Yesterday" ) -Recurse -ErrorVariable ผิดพลาด
{
) -ชื่อใหม่ ($BackupDir + "\เมื่อวาน" ) -Force -ErrorVariable ผิดพลาด
# หากมีข้อผิดพลาดในการเปลี่ยนชื่อให้หยุดการดำเนินการ # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
$log_string = $log_string + $err + "" การลบไดเรกทอรีเมื่อวานนี้ล้มเหลว การส่งออก $VM ถูกยกเลิก ข้อผิดพลาด: "
}
+ $ผิดพลาด
{
ถ้า ($VM -eq $element .VMElementName) " การเปลี่ยนชื่อไดเรกทอรีเมื่อวานนี้ล้มเหลว การส่งออก $VM ถูกยกเลิก ข้อผิดพลาด: "
"การเปลี่ยนชื่อโฟลเดอร์เสร็จสมบูรณ์แล้ว `r` n"
# สร้างโฟลเดอร์วันนี้ เปลี่ยนชื่อรายการ -Path ($BackupDir + "รายการใหม่ -Path ($BackupDir + "
ลบรายการ -Path ($BackupDir + "\Yesterday" ) -Recurse -ErrorVariable ผิดพลาด
{
) -ItemType Directory -Force -ErrorVariable ผิดพลาด
# หากมีข้อผิดพลาดในการเปลี่ยนชื่อให้หยุดการดำเนินการ # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
# หากมีข้อผิดพลาดในการสร้าง ให้หยุดการดำเนินการ $MailBody = $Mailbody + (รับวันที่ -รูปแบบ "(yyyy-MM-dd) hh:mm:ss" ) +" การลบไดเรกทอรีเมื่อวานนี้ล้มเหลว การส่งออก $VM ถูกยกเลิก ข้อผิดพลาด: "
}
+ $ผิดพลาด
{
ถ้า ($VM -eq $element .VMElementName) "การสร้างไดเรกทอรีเมื่อวานนี้ล้มเหลว การส่งออก $VM ถูกยกเลิก ข้อผิดพลาด: "
"การสร้างโฟลเดอร์ Today สำเร็จแล้ว `r` n"

#========== สิ้นสุดการทำงานกับโฟลเดอร์
#========== การทำงานกับ VM
# หากสถานะของเครื่องเป็น "กำลังทำงาน" แสดงว่า
{
if ((Get-VMSummary $VM ) .enabledstate -eq "Running" )
#เริ่มปิดเครื่อง $log_string = $log_string + ((รับวันที่ -รูปแบบ "(yyyy-MM-dd) hh:mm:ss" ) +)
"เครื่องเสมือนกำลังทำงานอยู่ ฉันกำลังหยุดมัน `r` n"
ลบรายการ -Path ($BackupDir + "\Yesterday" ) -Recurse -ErrorVariable ผิดพลาด
{
# หากมีข้อผิดพลาดในการเปลี่ยนชื่อให้หยุดการดำเนินการ # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
# หากมีข้อผิดพลาดในการสร้าง ให้หยุดการดำเนินการ เรียกใช้-vmshutdown -VM $VM - เหตุผล "ส่งออก VM"" การลบไดเรกทอรีเมื่อวานนี้ล้มเหลว การส่งออก $VM ถูกยกเลิก ข้อผิดพลาด: "
}
+ $ผิดพลาด
{

-Force -ErrorVariable ผิดพลาด
"VM ไม่หยุด การส่งออก $VM ถูกขัดจังหวะ ข้อผิดพลาด: " "เครื่องเสมือนหยุดแล้ว กำลังส่งออก"
"VM ไม่หยุด การส่งออก $VM ถูกขัดจังหวะ ข้อผิดพลาด: " $MailBody = $MailBody + (รับวันที่ -รูปแบบ "(yyyy-MM-dd) hh:mm:ss" ) +
เปลี่ยนชื่อรายการ -Path ($BackupDir + "
ลบรายการ -Path ($BackupDir + "\Yesterday" ) -Recurse -ErrorVariable ผิดพลาด
{
# หากมีข้อผิดพลาดในการเปลี่ยนชื่อให้หยุดการดำเนินการ # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
# หากมีข้อผิดพลาดในการสร้าง ให้หยุดการดำเนินการ "เครื่องเสมือนหยุดทำงานแล้ว"" การลบไดเรกทอรีเมื่อวานนี้ล้มเหลว การส่งออก $VM ถูกยกเลิก ข้อผิดพลาด: "
}
+ $ผิดพลาด
{
"ส่งออกเครื่องเสมือน" "การส่งออก VM เสร็จสมบูรณ์โดยมีข้อผิดพลาด การส่งออก $VM ถูกขัดจังหวะ ข้อผิดพลาด: "
"VM ไม่หยุด การส่งออก $VM ถูกขัดจังหวะ ข้อผิดพลาด: "
$log_string = $log_string + (รับวันที่ -รูปแบบ "(yyyy-MM-dd) hh:mm:ss" ) +
}
"เครื่องเสมือนได้ถูกส่งออกเรียบร้อยแล้ว ฉันกำลังเริ่มต้นมัน"
$export_count = $จริง
ลบรายการ -Path ($BackupDir + "\Yesterday" ) -Recurse -ErrorVariable ผิดพลาด
{
# หากมีข้อผิดพลาดในการเปลี่ยนชื่อให้หยุดการดำเนินการ # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
# หากมีข้อผิดพลาดในการสร้าง ให้หยุดการดำเนินการ "VM ไม่สามารถเริ่มต้นได้ ข้อผิดพลาด: "" การลบไดเรกทอรีเมื่อวานนี้ล้มเหลว การส่งออก $VM ถูกยกเลิก ข้อผิดพลาด: "
}
+ $ผิดพลาด
{
"ส่งออกเครื่องเสมือน"
"VM ไม่หยุด การส่งออก $VM ถูกขัดจังหวะ ข้อผิดพลาด: " "เครื่องเสมือนกำลังทำงานอยู่" r`n "
}
}
}
elseif((รับ-VMSummary $VM ) .enabledstate -eq "หยุด" )
{
# ส่งออก VM โดยไม่ต้องยืนยันด้วยไฟล์ทั้งหมด (xml, vhd ฯลฯ) และรอจนกว่าจะเสร็จสิ้น
"ส่งออกเครื่องเสมือน" "เครื่องเสมือนอยู่ในโหมดหยุด กำลังส่งออก"
"VM ไม่หยุด การส่งออก $VM ถูกขัดจังหวะ ข้อผิดพลาด: " "เครื่องเสมือนอยู่ในโหมดหยุด"
ส่งออก-VM -VM $VM -path ($backupDir + " เปลี่ยนชื่อรายการ -Path ($BackupDir + ") -บังคับ -copystate -รอ -ErrorVariable ผิดพลาด
ลบรายการ -Path ($BackupDir + "\Yesterday" ) -Recurse -ErrorVariable ผิดพลาด
{
# หากมีข้อผิดพลาดในการเปลี่ยนชื่อให้หยุดการดำเนินการ # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
# หากมีข้อผิดพลาดในการสร้าง ให้หยุดการดำเนินการ "การส่งออก VM ล้มเหลว การส่งออก $VM ถูกขัดจังหวะ ข้อผิดพลาด: "" การลบไดเรกทอรีเมื่อวานนี้ล้มเหลว การส่งออก $VM ถูกยกเลิก ข้อผิดพลาด: "
}
+ $ผิดพลาด
{
"ส่งออกเครื่องเสมือน" "เครื่องเสมือนถูกส่งออกสำเร็จแล้ว"
"VM ไม่หยุด การส่งออก $VM ถูกขัดจังหวะ ข้อผิดพลาด: " "เครื่องเสมือนถูกส่งออกสำเร็จแล้ว"
$log_string = $log_string + (รับวันที่ -รูปแบบ "(yyyy-MM-dd) hh:mm:ss" ) +
}
}
+ $ผิดพลาด
{
$vm_state = (รับ-VMSummary -VM $VM ) .EnabledState
"ส่งออกเครื่องเสมือน"
"VM ไม่หยุด การส่งออก $VM ถูกขัดจังหวะ ข้อผิดพลาด: " "เครื่องเสมือนไม่ได้ถูกส่งออก สถานะ $VM = $vm_state .`r` n"
}
}
}
}
}
}
ถ้า ($นับ) # หากพบ VM
{
ถ้า (! ($export_count) ) # หาก VM ไม่ได้ถูกส่งออก
{
ถ้า ($VM -eq $element .VMElementName) "การส่งออกเครื่องเสมือน $VM เสร็จสมบูรณ์โดยมีข้อผิดพลาด กระบวนการถูกยกเลิก `r` n"
$MailBody = $MailBody + "การส่งออกเครื่องเสมือน $VM เสร็จสมบูรณ์โดยมีข้อผิดพลาด กระบวนการถูกยกเลิก `r` n"
}
อื่น # หาก VM ถูกส่งออก
{
ถ้า ($VM -eq $element .VMElementName) "ฉันกำลังค้นหา *.VHD สำหรับ $VM ... `r` n"
# ค้นหา *.vhd ในไดเรกทอรีที่ระบุ
ถ้า (รับรายการ -Path ($InfoDir + " \T วันนี้\" + $VM + "\ฮาร์ดดิสก์เสมือน\* ") - รวม *.*vhd | Select-Object - ชื่อคุณสมบัติ)
{
#$VHDInfo = "
ข้อมูล VHD:`r`n"
มุ่งหน้า( $ องค์ประกอบใน (รับรายการ -Path ($InfoDir + "\วันนี้\" + $VM + " \V ฮาร์ดดิสก์เสมือน\*") - รวม * .* vhd |
{
เลือก-วัตถุ -ชื่อคุณสมบัติ) )
ถ้า ($VM -eq $element .VMElementName) # สำหรับแต่ละองค์ประกอบที่พบ เราได้รับข้อมูลและเขียนลงในบันทึกและบรรทัดสำหรับเขียน"ข้อมูลสำหรับ" # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
+ $องค์ประกอบ .ชื่อ + ": \T วันนี้\" + $VM + "$SomeVHDInfo = รับ-VHDInfo -VHDPaths ($InfoDir + "
\ฮาร์ดดิสก์เสมือน\" + $element .Name) # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
$log_string = $log_string + "เส้นทาง: " + $SomeVHDInfo .Path + " # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
$log_string = $log_string + "ขนาดไฟล์: " + ([ System.Math] ::Round(($SomeVHDInfo .FileSize/ 1Gb) ,2 ) ) + "Gb # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
$log_string = $log_string + "การเชื่อมโยง VM: " + $SomeVHDInfo .InSavedState + " # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
ถ้า ($VM -eq $element .VMElementName) "$log_string = $log_string + "ติดตั้งแล้ว: " + $SomeVHDInfo .InUse + "ปริมาณสูงสุดไฟล์: " # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
+ ([ System.Math] ::Round(($SomeVHDInfo .MaxInternalSize/ 1Gb) ,2 ) ) + "Gb # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
$log_string = $log_string + "ประเภทรูปภาพ: " + $SomeVHDInfo .TypeName + "
# เราตรวจสอบ VHD VM \T วันนี้\" + $VM + "$TestVHD = "VHD: " + $element .Name + ": " + (ทดสอบ-VHD -VHDPaths ($InfoDir + "
\Virtual Hard Disks\" + $element .Name) ) # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
$log_string = $log_string + $TestVHD + " # หากมีข้อผิดพลาดในการลบให้หยุดการดำเนินการ
}
}
อื่น $MailBody = $Mailbody + $TestVHD + "
{
# ทันใดนั้น VHD ไม่ได้อยู่ในไดเรกทอรีนี้ O_O $log_string = $log_string + "*.VHD สำหรับ
$MailBody = $MailBody + "*.VHD สำหรับ $log_string = $log_string + "*.VHD สำหรับ
}
}
}
อื่น # ไม่พบ VM บนเซิร์ฟเวอร์
{
$log_string = $log_string +
$MailBody = $MailBody + "ไม่พบเครื่องเสมือน $VM กระบวนการสิ้นสุดลงแล้ว `r` n"
}

"ส่งออกเครื่องเสมือน" "การทำงานบน $VM เสร็จสิ้นแล้ว"
ถ้า ($VM -eq $element .VMElementName) "======================== `r` n"

$เมล์หัวเรื่อง = " รายงานการส่งออก $VM"
#ส่งจดหมาย:
SendEmail - หัวเรื่อง $ MailSubject - เนื้อความ $ MailBody - ลำดับความสำคัญ $ MailPriority

#net ใช้ R: /delete /y ฟังก์ชั่นนี้ไม่จำเป็นต้องเรียกใช้

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

Hyper-V – การตั้งค่าเครือข่าย การสร้างจุดตรวจ การนำเข้าและส่งออกเครื่องเสมือน

โดยค่าเริ่มต้น ทุกอย่างจะเป็นเสมือน เครื่องไฮเปอร์-วีโดยพื้นฐานแล้วเป็นแซนด์บ็อกซ์และแยกออกจากคอมพิวเตอร์และเครือข่ายอื่นโดยสิ้นเชิง และหากคุณต้องการให้เครื่องเสมือนของคุณสื่อสารกับ VM อื่น ๆ คอมพิวเตอร์ทางกายภาพเครือข่ายและอินเทอร์เน็ตคุณต้องสร้าง สวิตช์เสมือน- คุณสามารถทำได้ในตัวจัดการ Hyper-V โดยคลิกที่ Virtual Switch Manager ในแผงด้านขวา

แต่ก่อนอื่นคุณต้องตัดสินใจว่าคุณกำลังสร้างสวิตช์เสมือนประเภทใด และ Virtual Switch Manager ก็มีคำอธิบายข้อความของสวิตช์แต่ละประเภท

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

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

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

หลังจากที่คุณสร้างสวิตช์เสมือนแล้ว คุณจะต้องเชื่อมต่อกับสวิตช์เสมือน ในพื้นที่ส่วนกลางของ Hyper-V Manager ให้คลิกที่ VM ที่เหมาะสม จากนั้นที่บริเวณด้านขวาล่าง ให้คลิกการตั้งค่า ซึ่งจะเปิดการตั้งค่าเครื่องเสมือน

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

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

ความสนใจ- แม้ว่าตัวเลือกมากมายสามารถเปลี่ยนแปลงได้ในการตั้งค่าของ VM เอง แต่บางตัวเลือกที่ตั้งค่าไว้เมื่อสร้างเครื่องเสมือนสามารถเปลี่ยนแปลงได้โดยการปิดเครื่องเท่านั้น

การสร้างจุดตรวจ Hyper-V

หากคุณทำการเปลี่ยนแปลงที่สำคัญกับ Windows 8.1 เช่น การติดตั้ง โปรแกรมเดสก์ท็อปหรือ อัพเดตวินโดวส์, ถูกสร้างขึ้น จุดระบบการกู้คืน. นั่นคือสำเนาของไฟล์ระบบปฏิบัติการที่สำคัญจะถูกบันทึกเช่น รีจิสทรีของ Windowsก่อนที่พวกเขาจะเปลี่ยนไป และหากมีสิ่งผิดปกติเกิดขึ้น การเปลี่ยนแปลงสามารถย้อนกลับและกลับสู่เพิ่มเติมได้ รัฐต้นหน้าต่าง

Hyper-V ยังมีฟังก์ชันจุดตรวจของตัวเอง - . นี่คือภาพรวมที่คุณสามารถถ่ายได้ตลอดเวลา ในการดำเนินการนี้ในแผงกลางของตัวจัดการ Hyper-V ให้เลือก VM ที่คุณต้องการสร้างสแน็ปช็อตและที่มุมขวาล่างของหน้าต่างควบคุมให้คลิกที่ลิงก์จุดควบคุม

สร้าง จุดควบคุมปรากฏใน Hyper-V Manager Center คุณสามารถคลิกที่รายการใดก็ได้และย้อนกลับเครื่องเสมือนไปยังจุดนั้น ส่งออกสแน็ปช็อต หรือลบออก

Hyper-V - นำเข้าและส่งออกเครื่องเสมือน

บางครั้งคุณอาจต้องสร้างเครื่องเสมือนและใช้งานบนคอมพิวเตอร์เครื่องอื่นหรือบันทึกสำเนาของ VM เพียงสร้าง VM คัดลอกไฟล์นี้ไปยังคอมพิวเตอร์เครื่องอื่นแล้วเปิดที่นั่นจะไม่ทำงาน หากต้องการนำเข้าเครื่องเสมือนไปยัง Hyper-V มีตัวเลือกการนำเข้าและส่งออกพิเศษ หากต้องการส่งออก VM ใน Hyper-V Manager ให้เลือกตัวเลือกนี้ ที่มุมขวาล่างของหน้าต่าง Hyper-V Manager ตัวเลือกการส่งออกจะปรากฏขึ้น คลิกที่มันแล้วระบบจะถามคุณว่าโฟลเดอร์ใดที่คุณต้องการบันทึกสำเนาของ VM กระบวนการส่งออกไม่สามารถมองเห็นได้และค่อนข้างรวดเร็ว

  • ก่อนหน้านี้ส่งออกไปที่ เสมือน Hyper-Vจากนั้นคุณสามารถนำเข้ารถได้ ในการดำเนินการนี้โดยไม่ต้องเลือก VM ที่มุมขวาบนของหน้าต่างตัวจัดการ Hyper-V ให้คลิกที่ลิงก์นำเข้าเครื่องเสมือน

  • ตัวช่วยสร้างการนำเข้าเครื่องเสมือนจะเปิดขึ้นและถามคุณว่าสำเนา VM ที่บันทึกไว้อยู่ในโฟลเดอร์ใด (ไม่ใช่ไฟล์)

  • จากนั้นคุณจะเห็นชื่อของ VM และรายละเอียดการสร้าง หากนี่คือสิ่งที่คุณกำลังมองหา คลิกถัดไป

  • ตอนนี้คุณจะถูกถามว่าคุณต้องการนำเข้า VM อย่างไร มีความเป็นไปได้สามประการสำหรับสิ่งนี้:
  1. เครื่องเสมือนที่ลงทะเบียนแล้ว- ใช้หากคุณกำลังดำเนินการนำเข้าโดยตรง VM อยู่ในโฟลเดอร์เดียวกับที่ส่งออกไป และคุณต้องการปล่อยไว้ที่นั่น
  2. การกู้คืนเครื่องเสมือน- ใช้หาก VM ไม่ได้อยู่ในโฟลเดอร์ที่ส่งออก ตัวอย่างเช่น นี่คือสำเนาที่สร้างจากอิมเมจหลักบนเซิร์ฟเวอร์
  3. สำเนาเครื่องเสมือน- ใช้หากคุณต้องการสร้างสำเนาในเครื่องของ VM ที่มีอยู่ โดยปล่อย "หลัก" ไว้เหมือนเดิม เช่น เพื่อนำเข้าไปยังพีซีเครื่องอื่นในภายหลัง ตัวเลือกนี้ยังใช้หากคุณกำลังสร้างสำเนาของ VM ที่นำเข้าแล้ว

ความสนใจ- หากคุณนำเข้า VM โดยไม่ทำสำเนา การเปลี่ยนแปลงใดๆ ที่คุณทำกับ VM และปัญหาใดๆ จะยังคงอยู่ในนั้น และคุณจะสูญเสียสำเนาหลักที่ปลอดภัยไปอย่างมีประสิทธิภาพ

  • หากคุณต้องการสร้างสำเนาของเครื่องเสมือน ระบบจะถามว่าคุณต้องการบันทึกไว้ที่ใด

  • ขั้นตอนสุดท้ายคือการยืนยันการตั้งค่าที่เลือก

การรวมบริการเพิ่มเติมเข้ากับเครื่องเสมือน

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

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

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

3 มิถุนายน 2554 เวลา 20:40 น

PowerShell+ไฮเปอร์-V

  • การจำลองเสมือน

ฉันไม่สามารถใช้ gui อีกต่อไป...

นี่เป็นวิธีที่การสนทนาของฉันเริ่มต้นโดยประมาณกับเพื่อนที่ต้องส่งออกเครื่องเสมือนจาก Hyper-V หลายครั้งติดต่อกันภายในระยะเวลาอันสั้น โดยทั่วไป จะดำเนินการโดยใช้ Hyper-V Manager (HVM) ซึ่งได้รับการติดตั้งพร้อมกับบทบาท Hyper-V ด้านล่าง วินโดวส์เซิร์ฟเวอร์ 2008 อาร์2. ฉันต้องยอมรับว่าอินเทอร์เฟซของโปรแกรมนี้ไม่ทำให้เกิดอารมณ์ด้านลบในตัวฉัน ในบรรดาโปรแกรมการจัดการทั้งหมดที่ Microsoft จัดหาให้กับเซิร์ฟเวอร์ ดูเหมือนว่าฉันจะสะดวกและเข้าใจได้มากที่สุด (เช่นฉันเปรียบเทียบกับ IIS Manager ซึ่งทำให้เกิดความสับสนในหมู่ผู้ใช้ใหม่และความขุ่นเคืองอย่างรุนแรงในหมู่ผู้ที่ใช้ IIS 6 ในเซิร์ฟเวอร์ปี 2546) . อย่างไรก็ตาม หากคุณต้องการส่งออกหรือนำเข้าเครื่องเสมือนในจำนวน N ชิ้นในช่วงเวลา t-time การใช้ Hyper-V Manager คุณสามารถทำลายปุ่มเมาส์และเกลียด Hyper-V อย่างมาก นี่คือจุดที่ PowerShell มาช่วยเหลือ
นำเข้าโมดูล HyperV
... และตามค่าเริ่มต้นไม่มีโมดูลดังกล่าวใน PowerShell Microsoft ตัดสินใจว่าจะไม่มีใครเขียน cmdlets เพื่อจัดการ Hyper-V (เป็นแนวคิดที่แปลกประหลาดอย่างแท้จริง) ในทางกลับกัน โลกนี้เต็มไปด้วยผู้คนที่รู้วิธีและพร้อมที่จะทำให้ชีวิตง่ายขึ้นสำหรับตนเองและผู้ใช้รายอื่น นี่คือวิธีที่ไลบรารีการจัดการ PowerShell สำหรับ Hyper-V เกิดขึ้น
สิ่งแรกที่คุณต้องทำคือดาวน์โหลดโมดูล + เอกสารประกอบนี้ตามที่คุณต้องการ (ดูทั้งสองได้ที่: http://phyperv.codeplex.com/releases)
จากนั้นคุณจะต้องติดตั้งโมดูลนี้ กระบวนการไม่ซับซ้อน (run ติดตั้งไฟล์ยอมเสียสละตัวเอง)
ตอนนี้คุณสามารถทำงานได้ เราเปิดตัว PowerShell นำเข้าโมดูล (สิ่งที่เขียนในคำบรรยาย)
และเราสามารถเข้าถึงฟังก์ชันทั้งหมดที่เราสามารถใช้ผ่าน HVM ได้ นี่คือบางส่วน:

กำลังเชื่อมต่อกับเครื่องเสมือน
ใหม่ VMConnectSession

การจัดการสถานะของเครื่องเสมือน
รับ-VMState, ชุด-VMState, แปลง-VmState,
Ping-VM, ทดสอบ-VMHeartBeat, Shutdown-VM, Start-VM, Stop-VM, ระงับ-VM
รับ-VMKVP, เพิ่ม-KVP, ลบ-KVP, รับ-VMJPEG

ความสามารถในการสำรองข้อมูล ส่งออกเครื่องเสมือน และถ่ายภาพสแนปช็อต
ส่งออก VM, นำเข้า VM, รับ-VMSnapshot, เลือก-VMSnapshot, ใช้-VMSnapshot, ใหม่-VMSnapshot, ลบ-VMSnapshot, เปลี่ยนชื่อ-VMSnapShot, อัปเดต-VMSnapshot, รับ-VMSnapshotTree, Get-VmBackupScript

การเพิ่มและการลบเสมือน เครื่องจักร การตั้งค่าคุณสมบัติ
ใหม่-VM, Remove-VM, Set-VM, Get-VMCPUCount, Set-VMCPUCount, Get-VMMemory, Set-VMMemory, Set-VMSerialPort

การจัดการตัวควบคุมดิสก์
รับ VMDiskController
เพิ่ม-VMSCSIController, ลบ-VMSCSIcontroller
รับ-VMDriveByController, เพิ่ม-VMDRIVE, ลบ-VMdrive
รับ-VMDisByDrive, เพิ่ม-VMDISK, ชุด-VMDisk, รับ-VMDisk
รับ-VMFloppyDisk, เพิ่ม-VMFloppyDisk
เพิ่ม-VMNewHardDisk

การจัดการอินเทอร์เฟซเครือข่าย
รับ-VMNIC, รายการ-VMNIC, เลือก-VMNIC, Add-VMNIC, ลบ-VMNIC, ชุด-VMNICAddress, ชุด-VMNICConnection, รับ-VMNICport,
รับ-VMnicSwitch, เลือก-VMSwitch, ใหม่-VMSwitchPort, รับ-VMByMACaddress, เลือก-VMExternalEthernet,
ใหม่-VMExternalSwitch, ใหม่-VMInternalSwitch, ใหม่-VmPrivateSwitch

การทำงานกับไฟล์ VHD
Get-VHDDefaultPath, Get-VHDInfo, New-VHD, Compact-VHD, Test-VHD, แปลง-VHD, Merge-VHD, Mount-VHD, Unmount-VHD

คำสั่งทั้งหมดที่ได้รับนั้นพูดเพื่อตัวเอง
ตัวอย่างเช่น หากต้องการดูสถานะของเครื่องเสมือน เพียงป้อน:
รายการ-VMState ชื่อ virt รถยนต์
และผลที่ตามมาคือ:

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

สิ่งที่ดีที่สุดคือสิ่งที่ฉันต้องการ เพื่อน - โอกาสส่งออกในเบื้องหลังตามกำหนดเวลา เมื่อต้องการทำเช่นนี้ คุณสามารถเขียน cmdlet ที่คุณสามารถพุชลงใน Scheduler ได้ ตัวอย่างเช่น สำหรับฉัน cmdlet นี้จะหยุดเครื่องเสมือน ส่งออก เริ่มต้นใหม่อีกครั้ง และส่งจดหมายถึงฉันเกี่ยวกับข้อผิดพลาดหรือความสำเร็จของ cmdlet หลังจากนี้ การควบคุมจะถูกถ่ายโอนไปยังสคริปต์อื่นที่เก็บถาวรและส่งการสำรองข้อมูลไปยัง ftp ระยะไกล
ส่งออก: ส่งออก-vm -vm MyVM1 -path D:\backups\VM -copystate -wait -force
พารามิเตอร์ -copystate บอกว่าทุกอย่างจำเป็นต้องคัดลอก (รวมถึงดิสก์เสมือน => ขนาดการส่งออกเอาต์พุตอาจมีขนาดใหญ่มาก)

แทนที่จะได้ข้อสรุป
อย่างที่คุณเห็นการจัดการของคุณ เครื่องเสมือนจาก PowerShell นั้นสะดวกและไร้ความเครียด คุณเพียงแค่ต้องอ่านพารามิเตอร์ของคำสั่งที่คุณต้องการและเขียนสคริปต์ของคุณ

ป.ล.ฉันไม่ได้แสร้งทำเป็นว่า "ค้นพบอเมริกา" เลย ฉันแค่ตัดสินใจว่าจะมีใครสักคนพบว่าข้อมูลเกี่ยวกับโมดูลที่มีประโยชน์นี้มีประโยชน์ ฉันได้อธิบายมากที่สุดเท่านั้น ตัวเลือกง่ายๆซึ่งคุณสามารถใช้ไลบรารีการจัดการ PowerShell สำหรับ Hyper-V ได้ หากใครรู้หรือเคยเขียนเองเพิ่มเติม เครื่องมือที่สะดวกเพื่อเพิ่มประสิทธิภาพการทำงานกับ Hyper-V ฉันยินดีที่จะเรียนรู้เกี่ยวกับสิ่งเหล่านี้