Làm cách nào để thu nhỏ đĩa VDI đang phát triển động từ VirtualBox?


35

Các đĩa ảo (VDI) đang phát triển linh hoạt của tôi từ các bản cài đặt Ubuntu khác nhau trong Virtual Box thực sự đang "tăng trưởng" một cách đều đặn.

Xóa các tệp trong máy ảo không giải phóng không gian tệp VDI của tôi lấy từ không gian đĩa cứng máy chủ.

Làm cách nào để thu nhỏ các tệp này để cung cấp lại dung lượng đĩa cứng chưa sử dụng cho máy chủ?

Câu trả lời:


34

Một tệp ổ cứng ảo Virtual Box đang phát triển linh hoạt có khả năng phát triển theo yêu cầu của máy ảo lên đến kích thước tối đa mà chúng tôi đã xác định khi thiết lập tệp này. Tuy nhiên, nó không giải phóng không gian của các tệp chúng tôi đã xóa trong HĐH khách.

Trong trường hợp đĩa đã phát triển quá mức, chúng ta có thể nén lại một lần nữa, miễn là không gian chưa sử dụng được lấp đầy bằng số không và ổ đĩa có định dạng VDI.

Đối với hệ thống tệp ext2 đến ext 4, điều này có thể được thực hiện từ máy khách Ubuntu với tiện ích dòng lệnh zerofree * .Cài đặt zerofree

zerofree /dev/sdxX

Điều này cần ổ đĩa để không được sử dụng, và không thể đếm được . Do đó, chúng tôi có thể phải liên kết nó tạm thời với một VM khác mà chúng tôi đã tạo cho mục đích này hoặc chúng tôi cần khởi động môi trường sống Ubuntu trên VM này.

Thay thế /dev/sdxXbằng phân vùng định dạng ext2, ext3 hoặc ext4 trong câu hỏi.

Trên nhiều phân vùng, chúng tôi phải lặp lại zerofreecho mỗi phân vùng. Hãy nhớ rằng bằng cách điền vào các số không, tệp ảo sẽ tạm thời tăng lên kích thước tối đa của nó.

Khi tất cả không gian ổ đĩa chưa sử dụng được lấp đầy bằng số không, chúng tôi sẽ thu nhỏ ổ đĩa bằng

VBoxManage modifyhd <name>.vdi --compact

Điều này sẽ làm giảm đáng kể kích thước tệp của tệp VDI của chúng tôi.

* Trong một khách Windows, chúng tôi có thể thay thế không gian chưa sử dụng bằng tiện ích sdelete.


Điều này cũng sẽ làm việc cho một hệ thống tập tin được mã hóa trong khách?
smichak

Chắc chắn rồi. Nếu bạn đang sử dụng ecryptfs, các tệp được mã hóa trông giống như các tệp bình thường cho các tiện ích đĩa và điều này sẽ hoạt động. Nếu bạn đang sử dụng mã hóa toàn bộ đĩa, dù sao nó cũng sẽ không được nhận dạng là phân vùng được định dạng mở rộng :)
chronospoon

Tôi đang sử dụng phân vùng ext4 trên thiết bị khối dm-crypt ... Tôi đã thử phương pháp này và tôi không thấy tệp .vdi nhỏ hơn sau khi nén. Tôi nghĩ rằng các khối 0 được lưu dưới dạng các khối khác không trên thiết bị khối theo dm-crypt.
smichak

2
@smichak: đó là điểm mã hóa. Nó sẽ mã hóa tất cả ổ đĩa của bạn để đảm bảo chúng tôi không thể thấy ranh giới tệp.
Takkat

3
Nếu bạn không muốn gắn VDI của mình vào máy khác, bạn có thể khởi động vào chế độ khôi phục và gắn đĩa chỉ đọc mount -n -o remount,ro -t ext4 /dev/sda1và sau đó zerofree -v /dev/sda1.
Hamid Nazari

1

Dưới đây là một số cách khác để làm trống không gian đĩa trống (có thể là phần tốn nhiều thời gian nhất). Sau đó, bạn vẫn sẽ phải chạy VBoxManage modifyhd <disk> --compactđể nén tệp đĩa thực.


Lệnh này có thể zero đĩa trong khi nó không được đếm:

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


Dưới đây là ví dụ về cách nhận dd để in đầu ra định kỳ:

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}')


Đây là một ddchương trình giống như sẽ tự động in đầu ra định kỳ:

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

1
Tôi đã thấy zerofreeđược sử dụng trên một hệ thống tập tin được gắn kết, nhưng khi nó được gắn kết chỉ đọc. Ngay cả đối với FS gốc: sudo mount -o remount,ro /- nhưng trong phiên GUI, root sẽ bận, do đó sẽ thất bại. Nhưng có thể trong runlevel 1 ( telinit 1), vì vậy bạn sẽ không cần phải khởi động từ đĩa CD trực tiếp để làm điều đó.
Tomasz Gandor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.