VMware Workstation: วิธีลดขนาดสูงสุด. vmdk


27

ฉันมีไฟล์ดิสก์ 150 GB (.vmdk ซึ่งไม่ได้รับการจัดสรรล่วงหน้า) ที่เก็บเครื่องเสมือนของฉัน

ไฟล์นี้มีขนาด 20 GB แต่มันเพิ่มขึ้นทุกวันแม้ว่าฉันจะไม่เก็บอะไรใหม่ในระบบไฟล์ของแขก

ฉันค้นหาวิธีการลดขนาดสูงสุดของดิสก์นี้เป็นชั่วโมงเพื่อที่จะได้ไม่ถึง 150 GB (ฉันต้องการตั้งค่าขีด จำกัด เป็น 30 GB และดูว่าจะเกิดอะไรขึ้นเมื่อ VM มาถึงขนาดนี้) .

สิ่งที่ฉันได้ลอง:

  • การแปลงอิมเมจของดิสก์ด้วย VMware Converter →ไม่ทำงานเครื่องมือนี้อนุญาตให้สร้างสำเนาแบบเต็มหรือ 'ลิงก์โคลน' เท่านั้น
  • การสร้างเครื่องเสมือนใหม่ที่ว่างเปล่าขนาดที่ต้องการเพื่อคัดลอกข้อมูล 20GB ไปยัง. vmdk →ใหม่ฉันไม่สามารถหาวิธีที่จะทำการคัดลอกหรือแม้แต่เชื่อมต่อดิสก์ใหม่กับ VM ที่มีอยู่ของฉัน (เพื่อให้ฉันทำสำเนาโดยใช้ ระบบปฏิบัติการ guest)
  • ดูในไฟล์. vmx เพื่อตรวจสอบว่าขนาดสูงสุดไม่ได้ถูกตั้งค่าเป็นข้อความธรรมดา (ไม่ใช่)

แม้ว่างานนี้ดูเหมือนจะง่ายมากในทางเทคนิค (ไม่มีการหดตัวที่เกี่ยวข้องเพียงแค่เปลี่ยนขนาด จำกัด อย่างง่าย ๆ ) แต่ฉันก็ยังคิดไม่ถึงที่นี่ ...

มีวิธีแก้ไขไหม?


1
เนื่องจากมีการสร้างพาร์ติชันบนดิสก์เสมือนเพื่อเติมเต็มพื้นที่โฆษณาดังนั้นจึงมีความเกี่ยวข้องกับ“ การลดขนาดที่ยุ่งยาก”
Daniel B

คำตอบ:


25

ขั้นตอนปกติสำหรับการลดขนาดของดิสก์. vmdk คือ:

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

  2. ศูนย์พื้นที่ที่ไม่ได้ใช้ทั้งหมดบนดิสก์
    สำหรับ Windows ใช้sdeletesdelete -c : สำหรับลินุกซ์:
    dd if=/dev/zero of=/mytempfile && rm -f /mytempfile

  3. ลดขนาดดิสก์ (ซึ่งอาจใช้เวลาค่อนข้างนานในการทำให้เสร็จ)
    VMware Workstation: เมนู VM / จัดการ / ล้างข้อมูลดิสก์ หรือใช้:
    สำหรับ ESX:vmware-vdiskmanager.exe -k [VMDK PATH]
    vmkfstools --punchzero [VMDK PATH]

การแปลงดิสก์จากที่สามารถเติบโตได้จนถึงการจัดสรรล่วงหน้าสามารถหยุดการเติบโตได้ สิ่งนี้สามารถทำได้โดยใช้ vmware-vdiskmanager กับ-tพารามิเตอร์ที่มีค่าคือ:

0 : single growable virtual disk
1 : growable virtual disk split in 2Gb files
2 : single preallocated virtual disk
3 : preallocated virtual disk split in 2Gb files

คำสั่งต่อไปนี้จะแปลง. vmdk จาก Growable เป็น preallocated:

vmware-vdiskmanager -r current_disk_name.vmdk -t 3 new_disk_name.vmdk

หากคุณต้องการเปลี่ยนขนาดของดิสก์คุณควรทำสิ่งนี้ในขณะที่ดิสก์ยังอยู่ในรูปแบบที่ขยายได้ (ตัวอย่างที่นี่ )

สำหรับข้อมูลเพิ่มเติมโปรดดูที่ คู่มือผู้ใช้เสมือนดิสก์ผู้จัดการ


2
สิ่งนี้ไม่ลดขนาดไดรฟ์ที่โฆษณาภายใน
Daniel B

@DanielB: ไม่มันไม่ลดขนาดสูงสุดเพียงแค่ขนาดทางกายภาพ การลดขนาดสูงสุดอาจเป็นอันตรายได้เนื่องจากบางระบบปฏิบัติการไม่สามารถบู๊ตได้หากไม่มีพื้นที่ว่างบนดิสก์ระบบ
harrymc

3
นี่เป็นเทคนิคที่มีประโยชน์ที่ฉันใช้เพื่อลดพื้นที่ที่ VMDK ครอบครอง อย่างไรก็ตามนี่ไม่ได้แก้ปัญหาของฉันอย่างสมบูรณ์ราวกับว่าฉันต้องการให้ VMDK อยู่ภายใต้เสมอสมมติว่า 30GB ฉันจะต้องทำซ้ำการดำเนินการเป็นระยะ (ซึ่งใช้เวลานานแน่นอน)
Sébastien

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

1
@harrymc การแปลงดิสก์เป็นขนาดคงที่จะเหมาะกับความต้องการของฉัน ฉันไม่พบวิธีทำเช่นนี้กับ VMWare Workstation หรือ Converter
Sébastien

6

ไฟล์นี้มีขนาด 20GB แต่มันเพิ่มขึ้นทุกวันแม้ว่าฉันจะไม่เก็บอะไรใหม่ในระบบไฟล์ของแขก

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

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

A. ใช้พาร์ติชั่นเพียง 30GB และปล่อยให้เหลือเป็นพื้นที่ว่าง หากคุณแบ่งพื้นที่เพิ่มเติมแล้วคุณต้องลดขนาด / ลบมันสร้างพาร์ติชันใหม่จากนั้นถ่ายโอนข้อมูลด้วยศูนย์และต่อยตามที่อธิบายโดย @harrymc เนื่องจากพื้นที่ในพื้นที่ที่ไม่แบ่งพาร์ติชั่นจึงไม่เคยใช้ดิสก์เสมือนจริงจะไม่เติบโตเกิน 30GB

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

C. สร้างดิสก์เสมือนใหม่สูงสุด 30GB เพิ่มเป็นดิสก์ใหม่ในเครื่องเสมือนปัจจุบันของคุณย้ายข้อมูลทั้งหมดไปยังดิสก์เสมือนใหม่โดยใช้เครื่องมือสำรอง คุณสามารถใช้ live Linux สำหรับการโคลนได้

ตัวเลือกที่แนะนำคือ A


2

ทำไมไม่เพียงตั้งค่าขนาดของดิสก์ที่เกี่ยวข้องกับ 30GB จาก 150GB

คุณจะต้องตั้งค่าผลรวมของพาร์ติชันทั้งหมดให้น้อยกว่า 30GB คุณจะต้องลดขนาดของพาร์ติชั่นลงในขณะที่คุณไป มีเอกสารจำนวนมากในไซต์นี้เกี่ยวกับวิธีย่อขนาดพาร์ติชันลงดังนั้นฉันจะไม่ทำซ้ำที่นี่อีกครั้ง

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


5
ฉันไม่ได้สร้าง VM ส่วนตัวนี่คือเหตุผล
Sébastien

ฉันจะย่อขนาดดิสก์เองได้อย่างไร ฉันมีพาร์ติชั่นภายในดิสก์ลดขนาดลง แต่vdiskmanager.exe -k [VMDK PATH]ตามที่แนะนำในการตอบกลับอื่นไม่ทำให้ไดร์ฟลดขนาดลง
Aaron Franke

ปัญหาที่ไม่ได้บันทึกไว้อย่างชัดเจนคือวิธีการปรับขนาดอุปกรณ์ vmdk (หลังจากปรับขนาดพาร์ติชันแน่นอน) @mdpc ด้วยฉันคิดว่าคำตอบของคุณไม่สร้างสรรค์ มีหลายครั้งที่คุณจำเป็นต้องปรับขนาดข้อมูลบนvm ที่มีอยู่ดังนั้นจึงไม่มีจุดชี้นิ้วที่ VM ควรสร้างอย่างถูกต้อง
basos

2

มีทางอ้อมในการใช้VMWare Converterเพื่อสร้าง VM ใหม่และขนาดเล็กกว่า VMDK จากนั้นแปลง VMDK ดั้งเดิมเป็น VMDK ที่เล็กกว่าที่สร้างขึ้นใหม่

ลดขนาด VMDK

ขั้นตอนรายละเอียดที่นี่

โปรดทราบว่าการเปลี่ยนแปลงขนาด VMDK จะต้องมีการอัพเดตที่สอดคล้องกับตารางพาร์ติชันด้วย


นี่เป็น VMWare Workstation VM และตัวเลือกการคัดลอกขั้นสูงเหล่านี้ไม่ได้รับการเสนอโดย Converter สำหรับ VM ประเภทนี้ มันจะไม่ให้ฉันเปลี่ยนขนาดของดิสก์
Sébastien

2

ใช้งานได้สำหรับการกระจัดกระจาย VMDK (ไม่ได้รับการจัดสรรล่วงหน้า) จำเป็นต้องมีการจัดระเบียบก่อนที่จะย่อขนาดเพื่อให้แน่ใจว่าพื้นที่ที่ใช้ต่อเนื่องกัน

จัดเรียงข้อมูลภายใน Windows

ในเครื่องเสมือน Windows คุณต้องเรียกใช้การจัดเรียงข้อมูลดิสก์จากใน Windows ก่อน การจัดเรียงข้อมูลภายใน Windows ช่วยให้มั่นใจได้ว่าพื้นที่ใช้งานทั้งหมดนั้นต่อเนื่องกัน จากนั้นคุณสามารถลดขนาดของดิสก์เสมือนได้

ลดขนาดดิสก์เสมือน

ในการย่อขนาดดิสก์เสมือน:

เปิดแผงเครื่องมือ / กล่องเครื่องมือ VMware:

ใน Windows:

ดับเบิลคลิกที่ไอคอนเครื่องมือ VMware ในถาดระบบหรือคลิกเริ่ม> แผงควบคุม> เครื่องมือ VMware

ใน Linux:

เปิดเทอร์มินัลและเรียกใช้คำสั่งนี้:

VMware-กล่อง

หมายเหตุ: ใน Workstation 9.x (Windows) ขึ้นไปการย่อขนาดจะทำโดยอัตโนมัติในขณะที่ล้างดิสก์ ดังนั้นตัวเลือกนี้จะถูกลบออกจากแผงเครื่องมือ VMware ไปที่ VM> จัดการ> ล้างข้อมูลดิสก์ ไม่พร้อมใช้งานใน Linux เวอร์ชันของ VMware Workstation 9.x และใหม่กว่า

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

จากฐานความรู้ VMWare


การอ่านคำตอบที่มีอยู่ก่อนหลีกเลี่ยงคำตอบที่ซ้ำกัน
harrymc

1
ขออภัยฉันโพสต์ไว้ใหม่ด้วยโพรซีเดอร์แบบเต็มและซอร์ส สิ่งนี้อาจช่วยเขาได้มากขึ้น
Jalal Mostafa

ไม่ตอบ op ด้วยเช่นกัน OP ต้องการลดขนาดสูงสุดไม่ใช่ขนาดปัจจุบัน
Ryuu

2

คำตอบของ @harrym ค่อนข้างดี แต่จริงๆแล้วมันไม่ตอบคำถาม สหกรณ์ต้องการที่จะลดขนาดสูงสุด ปัญหาคือไฮเปอร์ไวเซอร์ไม่ทราบว่าขนาดที่นำเสนอ (ขนาดสูงสุด aka) จริง ๆ แล้วถูกใช้โดยระบบปฏิบัติการ การบดอัด (vmware-vdiskmakager -k) นำไปใช้กับ vmdk ที่เติบโตได้ มันไม่ได้ทำอะไรกับคนที่จัดสรรล่วงหน้า

ดังนั้นขั้นตอนในการย่อขนาดดิสก์คือ:

  1. ปรับขนาดพาร์ติชันบนดิสก์ผ่านระบบปฏิบัติการหรือผ่านซีดีสดที่เหมาะสม
  2. ปรับขนาดอุปกรณ์ vmdk อย่างระมัดระวังเลือกขอบเขตที่จะไม่ลดพื้นที่พาร์ติชันที่ใช้งานได้ คุณสามารถเว้นที่ว่างในการแต่งภาพได้มากกว่าที่จำเป็นจริงๆ

ขั้นตอนแรกเกี่ยวข้องกับกระบวนการจากภายใน VM และแตกต่างกันไปตาม guest OS ขั้นตอนที่สองอาจได้รับการสนับสนุนโดยคำสั่ง vmware แต่ฉันไม่พบวิธีการทำเช่นนั้น ดังนั้นวิธีแฮ็ค

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

คำเตือน: อย่าลืมสำรองข้อมูลสำคัญก่อนการดำเนินการใด ๆ !!

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

    จากแขกระบบปฏิบัติการ: windows 7

    1. คุณสามารถใช้ความสามารถในการปรับขนาดออนไลน์ เป็นความคิดที่ดีที่จะจัดระเบียบดิสก์จากภายในเควสระบบปฏิบัติการ
    2. เรียกใช้ diskmgmt.msc เลือกพาร์ติชัน (ระดับเสียง) บนดิสก์ที่คุณต้องการปรับขนาดคลิกขวา -> ลดขนาดโวลุ่ม ในกล่องโต้ตอบที่ปรากฏลดขนาดตามความต้องการของคุณ โปรดทราบว่าเนื่องจากมีการใช้งานพาร์ติชัน (หากเป็นดิสก์ระบบหรือมีการแยกส่วนอย่างหนัก) คุณอาจไม่สามารถกู้คืนพื้นที่ว่างส่วนใหญ่ของคุณได้ เผื่อที่จะออกจากพื้นที่ว่างพิเศษ
    3. ตอนนี้เราต้องการทราบว่าพาร์ทิชันที่ลงท้ายด้วยเซกเตอร์ของดิสก์ (หรือไบต์) สมมติว่านี่เป็นพาร์ติชั่นเพียงตัวเดียวในอุปกรณ์เราใช้ขนาดของไดรฟ์ตามที่แสดงบนคอมพิวเตอร์ของฉัน -> เลือกดิสก์ -> คลิกขวา -> คุณสมบัติ -> ความจุ: หมายเหตุตัวเลขเป็นไบต์ (เช่นในตัวอย่างของฉัน 107371032576 ราคา 99,9GB) เพิ่มบางร้อย megs เพื่อความปลอดภัย (+204800) (เช่น 107371237376) เพื่อให้แน่ใจว่าเราไม่จำเป็นต้องเพิ่มอะไรที่ขาดหายไปเราสามารถใช้ยูทิลิตี linepart diskd cmd เพื่อค้นหาพาร์ติชั่นออฟเซ็ตจากจุดเริ่มต้นของอุปกรณ์ เรียกใช้ diskpart จากนั้น: ลิสต์ดิสก์, เลือก disk id , list list, เลือก part id , detail ตัวอย่าง:

    diskpart> ส่วนรายละเอียด

    พาร์ติชัน 1

    ออฟเซ็ตเป็นไบต์: 1048576

    ตรวจสอบให้แน่ใจว่าคุณเพิ่มหมายเลขนี้เป็นขนาดดิสก์อย่างน้อยที่สุด ตอนนี้เราต้องแปลงไบต์เป็นส่วนที่หารด้วย 512 และปัดเศษขึ้น (เพดาน) เช่น 209709448 โปรดจดบันทึกหมายเลขนี้สำหรับขั้นตอนที่ 3

    ผ่านซีดีสด: SystemResqueCD

    1. หรือคุณสามารถใช้ซีดี resque ( SystemResqueCDเป็นข้อเสนอของฉัน) ดาวน์โหลด ISO ที่ใช้บู๊ตได้ติดตั้งเป็นอุปกรณ์ซีดีรอมเสมือนกับคุณ VM บูตจากซีดี (โดยกดปุ่ม Esc บนหน้าจอบูต VMWare คุณอาจต้องลอง บางครั้งก็ปรากฏขึ้นในไม่ช้า) เมื่อถึงประเภทพรอมต์คำสั่ง: startx หวังว่าจะนำคุณไปสู่ส่วนต่อประสานกราฟิก
    2. เมื่ออยู่บนเดสก์ท็อปของ systemresque เริ่ม gparted (เช่นจากเทอร์มินัล) ค้นหาพาร์ติชันที่จะปรับขนาด (ต้องยกเลิกการต่อเชื่อมอย่างสะอาดถ้ามีข้อสงสัยจะทำเรื่องสแกนจากระบบปฏิบัติการเกสต์) ทำการปรับขนาดและวางแผนพื้นที่อย่างรอบคอบ
    3. อีกครั้งเราจำเป็นต้องค้นหาจุดสิ้นสุดที่สิ้นสุดในเซกเตอร์ (หรือไบต์) ของพาร์ติชัน เปิดเทอร์มินัลแล้วเขียน [ อุปกรณ์ ] แยกแล้วตามด้วยหน่วย s พิมพ์ เช่น

หมายเลขเริ่มต้นขนาดสิ้นสุดประเภทระบบไฟล์แฟล็ก

1 2048 วินาที 113455103s 113453056s บูตหลัก ntfs

จดบันทึกภาคสิ้นสุดและเพิ่ม 1 เช่น 113455104 จดบันทึกหมายเลขนี้สำหรับขั้นตอนที่ 3

  1. เนื่องจากแฮ็คทำงานกับไฟล์เดียวที่จัดสรรล่วงหน้าแล้ว (ประเภท 2) vmdks (ยังไม่ได้ลองหลายประเภทไฟล์) เราจะแปลงไฟล์ที่สามารถจัดสรรล่วงหน้าเป็นส่วนแรกได้ เราจะต้องใช้พาร์ติชันที่มีพื้นที่ว่างชั่วคราวเป็นขนาดสูงสุดของอุปกรณ์ชั่วคราว (เช่น 150GB)

    vmware-vdiskmanager.exe -r sourcevmdk -t 2 destvmdk

  2. ตอนนี้ส่วนที่ยุ่งยากสำหรับดิสก์ที่จัดสรรล่วงหน้าควรมี 2 vmdks

    disk.vmdk disk-flat.vmdk

    อดีตเป็นเพียง KB ยาวและหลังถือข้อมูลขยาย เปิดตัวแรก (disk.vmdk) ในขณะที่เวิร์กสเตชัน VMWare ปิดอยู่ซึ่งมีตัวแก้ไขข้อความ (Notepad ++ ++ เป็นคำแนะนำของฉัน) ค้นหาบรรทัด

    RW 113455104 FLAT "Windows 7_x64-fl-flat.vmdk" 0

    ใช่คุณจะได้รับคะแนนฟิลด์ที่สองคือจำนวนของภาคที่จัดสรรสำหรับอุปกรณ์ ในการตรวจสอบความถูกต้องคูณด้วย 512 และค้นหาขนาดเป็นไบต์แล้วหารด้วย 1073741824 (1024 ** 3) เพื่อค้นหาขนาดเป็น GB นี่ควรเป็นขนาดของอุปกรณ์ก่อนหน้า

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

  3. จนถึงขณะนี้ยังไม่ได้รับข้อมูลใด ๆ ทำขั้นตอนสุดท้ายนี้เพื่อตัดส่วนขยายออกให้หมด เราจะใช้ฟังก์ชั่นการเปลี่ยนชื่อของ vmware-vdiskmanager เพื่อสร้าง vmdk ใหม่ด้วยขนาดที่ถูกตัดแต่งแล้ว

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk


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