ฉันจะย่อขนาดดิสก์ VDI ที่กำลังเติบโตจาก VirtualBox ได้อย่างไร


35

ดิสก์เสมือนจริง (VDI) ที่กำลังเติบโตแบบไดนามิกของฉันจากการติดตั้ง Ubuntu หลายชนิดในกล่องเสมือนจริง ๆ แล้ว "กำลังเติบโต" อย่างแน่นอน

การลบไฟล์ในเครื่องเสมือนไม่เพิ่มพื้นที่ว่างในไฟล์ VDI ที่ฉันใช้จากพื้นที่ว่างบนฮาร์ดดิสก์ของโฮสต์

ฉันจะลดขนาดไฟล์เหล่านี้เพื่อให้พื้นที่ว่างในฮาร์ดดิสก์ที่ไม่ได้ใช้กลับไปยังโฮสต์ได้อย่างไร

คำตอบ:


34

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

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

สำหรับ ext2 ไปต่อ 4 ระบบแฟ้มนี้สามารถทำได้จากผู้เข้าพักอูบุนตูกับอรรถประโยชน์บรรทัดคำสั่งzerofree *ติดตั้ง zerofree

zerofree /dev/sdxX

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

แทนที่/dev/sdxXด้วย ext2, ext3 หรือ ext4 จัดรูปแบบพาร์ทิชันในคำถาม

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

เมื่อพื้นที่ไดรฟ์ที่ไม่ได้ใช้ทั้งหมดเต็มไปด้วยเลขศูนย์เราจะย่อขนาดไดรฟ์ด้วย

VBoxManage modifyhd <name>.vdi --compact

นี่จะลดขนาดไฟล์ของไฟล์ VDI ของเราลงอย่างมาก

* ในการเป็นแขกรับเชิญของ Windows sdeleteเราสามารถเปลี่ยนพื้นที่ไม่ได้ใช้กับยูทิลิตี้


สิ่งนี้จะใช้ได้กับระบบไฟล์ที่เข้ารหัสภายในแขกหรือไม่
smichak

แน่ใจ หากคุณกำลังใช้ecryptfsงานไฟล์ที่เข้ารหัสจะมีลักษณะเหมือนกับไฟล์ปกติของยูทิลิตีของดิสก์และจะใช้งานได้ หากคุณกำลังใช้การเข้ารหัสเต็มรูปแบบดิสก์ก็จะไม่ได้รับการยอมรับในฐานะที่เป็นต่อรูปแบบพาร์ทิชันอยู่แล้ว :)
chronospoon

ฉันใช้พาร์ติชั่น ext4 ในอุปกรณ์บล็อก DMM-Crypt ... ฉันลองใช้วิธีนี้แล้วและฉันไม่เห็นไฟล์. vdi ที่เล็กลงหลังจากการบีบอัด ฉันคิดว่ามีการบันทึกศูนย์เป็นบล็อกที่ไม่ใช่ศูนย์ในอุปกรณ์บล็อกภายใต้ dm-crypt
smichak

2
@smichak: นั่นคือจุดเข้ารหัส มันจะเข้ารหัสไดรฟ์ทั้งหมดของคุณเพื่อให้แน่ใจว่าเราไม่สามารถเห็นขอบเขตไฟล์
Takkat

3
หากคุณไม่ต้องการที่จะแนบ VDI ของท่านไปยังเครื่องอื่นคุณสามารถบูตเข้าสู่โหมดการกู้คืนและการติดตั้งดิสก์อ่านได้อย่างเดียวแล้วmount -n -o remount,ro -t ext4 /dev/sda1 zerofree -v /dev/sda1
ฮามิด Nazari

1

ต่อไปนี้เป็นวิธีทางเลือกในการลดพื้นที่ว่างในดิสก์ให้เป็นศูนย์ (ซึ่งอาจเป็นส่วนที่ใช้เวลามากที่สุด) หลังจากนั้นคุณจะยังคงต้องเรียกใช้VBoxManage modifyhd <disk> --compactเพื่อกระชับไฟล์ดิสก์จริง


คำสั่งนี้สามารถเป็นศูนย์ดิสก์ในขณะที่มันถูก unmount:

apt-get install zerofree
zerofree -v /dev/sdxN


นี่คือตัวอย่างของวิธีรับ dd เพื่อพิมพ์เอาต์พุตเป็นระยะ:

dd if=/dev/zero of=temp-file-on-disk bs=20M

# run this to get the process ID of the dd command
pgrep -l '^dd$'
# then put the process ID on the command line to "kill -USR1"
# this will tell dd to print the current status (in another terminal)
kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}')


นี่คือddโปรแกรมที่คล้ายกันซึ่งจะพิมพ์ผลลัพธ์โดยอัตโนมัติเป็นระยะ:

apt-get install dcfldd
dcfldd if=/dev/zero of=temp-file-on-disk bs=20M

1
ฉันเคยเห็นzerofreeใช้ในระบบไฟล์ที่ติดตั้ง แต่เมื่อมันถูกติดตั้งแบบอ่านอย่างเดียว แม้สำหรับรูท FS: sudo mount -o remount,ro /- แต่ในเซสชัน GUI รูทจะไม่ว่างดังนั้นจึงจะล้มเหลว แต่มันเป็นไปได้ใน runlevel 1 ( telinit 1) ดังนั้นคุณไม่จำเป็นต้องบูตจากซีดีจริงเพื่อใช้งาน
Tomasz Gandor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.