Cách giảm kích thước / dung lượng ảo của tệp vdi Virtualbox


8

Tôi muốn biến một máy vật lý chạy MS Windows 7 thành máy ảo VirtualBox. Điều này thật dễ dàng, tôi đã làm điều này trước đây, nhưng lần này tôi cần kích thước / dung lượng ảo của đĩa là một kích thước cố định và nhỏ hơn .

Nó cần được sửa vì tôi sẽ cài đặt mã hóa đĩa PGP trên đó vì lý do tuân thủ. Điều này sẽ mở rộng một đĩa động đến kích thước tối đa.

Ngoài trường hợp đặc biệt này, có những lý do khác để muốn các đĩa nhỏ hơn và cố định. Là kinh nghiệm của tôi. Nếu bạn chạy ví dụ máy chủ xây dựng Jenkins trên đĩa mở rộng động, bạn có thể thấy đĩa nhanh chóng mở rộng đến kích thước tối đa trong khi sử dụng không gian đĩa của hệ điều hành khách ổn định và có nhiều không gian trống.

Sử dụng Disk2vhd tôi đã tạo một tệp vhdx. Tập tin này tôi chuyển đổi sang định dạng vdi.

vboxmanage clonehd --format VDI MSWIN7.VHDX MSWIN7.vdi

Cố ý với vdi, bạn có thể giảm kích thước / dung lượng ảo với các lệnh tương tự như

vboxmanage modifyhd MSWIN7.vdi --resize 160000

Tôi thấy rằng điều này không làm việc. Ngay cả khi bạn thử các biến thể, bạn sẽ liên tục nhận được thông báo lỗi như:

Trạng thái tiến trình: VBOX_E_NOT_SUPPORTED VBoxManage: error: Thay đổi kích thước hoạt động của đĩa cứng cho định dạng này chưa được triển khai!

Dưới đây là cách bố trí đĩa của đĩa vdi của tôi. Tôi đã thêm nó vào máy ảo Ubuntu để xem xét nó bằng Gparted và CloneZilla. Dung lượng khoảng 300GB. Chưa phân bổ 145GB. Được sử dụng là khoảng 153GB.

Tôi muốn thu nhỏ dung lượng xuống khoảng 160GB. Điều này là đủ để phù hợp /dev/sdb1/dev/sdb2.

BTW, tôi đã thử CloneZilla nhưng có vẻ như không muốn thu nhỏ dung lượng vào một đĩa nhỏ hơn. Tôi đã thử các cài đặt khác nhau trong CloneZilla nhưng không thành công.

Làm thế nào tôi có thể giảm kích thước / công suất ảo?

nhập mô tả hình ảnh ở đây

Câu trả lời:


15
  1. Phân bổ không gian ở cuối đĩa trong hệ điều hành khách , trong đó không gian> = size (đĩa nguồn) - kích thước (đĩa mới). Thông thường bằng cách thu hẹp phân vùng cuối cùng .
  2. Tắt máy ảo.
  3. Tạo đĩa Virtual Box mới với kích thước mong muốn.
  4. Di chuyển nội dung từ đĩa cũ sang bên trong đĩa mới:

    vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
    
  5. Bật máy ảo.

  6. Bạn có thể phải thay đổi kích thước phân vùng trong hệ điều hành khách để lấp đầy phần còn lại của đĩa tùy thuộc vào không gian được phân bổ ở bước 1.

2
Đây là cách thực sự chính xác để chuyển đổi một vdi động tạo ra sử dụng phân vùng rất lớn sang một vdi mới (có thể là định dạng kích thước cố định vì lý do hiệu suất). Tôi không biết tại sao không ai trả lời câu hỏi này và thích cách dd ...
zw963

Bạn có ý nghĩa gì bởi "giải phóng không gian ở cuối đĩa"? Bạn đang đề cập đến việc thu nhỏ tệp vdi trên máy chủ, như câu hỏi này: superuser.com/questions/529149/
Kẻ

trong hệ điều hành khách, tôi đã làm rõ bài đăng
Andre Figueiredo

Hoàn hảo! Cảm ơn rât nhiều!
Yamakuzure

Sử dụng vboxmanage clonehd "source-disk.vdi" "new-disk.vdi" --existingphá hủy bảng phân vùng trên hình ảnh mục tiêu.
Mogens TrasherDK

3

Cuối cùng, tôi đã xoay sở để giải câu đố này một cách dễ dàng bất ngờ bằng cách sử dụng tiện ích dòng lệnh được cài đặt sẵn, ddxem Sao chép đĩa . Như được hiển thị bên dưới, bây giờ tôi có ổ 160GB trong hệ điều hành khách của mình được lưu trữ trong tệp vdi VirtualBox cố định 160GB.

nhập mô tả hình ảnh ở đây

Tôi đã giải quyết nó bằng các bước sau:

  1. Thay đổi kích thước đĩa bằng Quản lý đĩa trong MS Windows thành kích thước bằng hoặc nhỏ hơn một chút so với kích thước của VDI.
  2. Thêm vdi nguồn MSWIN7.vdivới MS Windows 7 vào Ubuntu VM dưới dạng đĩa thứ hai.
  3. Tạo một vdi 160GB cố định mới và cũng thêm cái này vào Ubuntu VM. Bây giờ có ba đĩa: /dev/sda1với Ubuntu VM đang chạy, /dev/sdb2với nguồn MSWIN7.vdi/dev/sdc1với vdi mới.
  4. Tạo phân vùng chính xác trên /dev/sdc. CloneZilla đã làm điều này cho tôi. Nó không sao chép dữ liệu nhưng nó đã tạo phân vùng tôi muốn. Tất nhiên bạn có thể làm điều này bằng tay.
  5. Sao chép sdbvào sdcvới ddlệnh tương tự như sudo dd if=/dev/sdb of=/dev/sdc. Lệnh kết thúc với một thông báo lỗi không còn chỗ trống, đó là dự kiến. Điều này tôi bỏ qua vì đây chỉ là không gian chưa được phân bổ mà nó không thể sao chép.

Tôi nghĩ rằng có thể chạy lệnh cho mỗi phân vùng. Có lẽ nó tốt hơn và sẽ không hiển thị thông báo lỗi. sudo dd if=/dev/sdb1 of=/dev/sdc1sudo dd if=/dev/sdb2 of=/dev/sdc2.

vagrant@devops:~$ sudo dd if=/dev/sdb of=/dev/sdc
dd: writing to ‘/dev/sdc’: No space left on device
335544321+0 records in
335544320+0 records out
171798691840 bytes (172 GB) copied, 6360.3 s, 27.0 MB/s

2

Trong trường hợp của tôi, tôi đã có một máy ảo Windows với 50 GB vdi để thu nhỏ lại thành 20 GB.

Tôi đã thử giải pháp Andre Figueiredo nhưng tôi gặp vấn đề với nhân bản vdi.

Khi tôi áp dụng giải pháp Andre Figueiredo và đính kèm phần vdithu nhỏ vào VM, trong khi khởi động, Virtualbox dừng với lỗi I / O.

Có lẽ điều này có liên quan đến btrfshệ thống tập tin của tôi (tôi nghe thấy btrfsgây ra sự cố với Vritualbox vdi).

Giải pháp của tôi:

Tôi đã thử một giải pháp khác để thu nhỏ đĩa VM ( vdi), được đặt tên là OVdi , ( OVdi có kích thước đĩa là 50 GB , phân vùng ntfs đơn với không gian trống 40 GB).

Hãy làm theo các bước sau (đây là trường hợp của tôi, bạn có thể điều chỉnh / phát minh ra các tên vdi khác nhau ):

  • dừng VM (tắt nguồn)

  • tạo một đĩa mới ( vdi) với tên DVdi có kích thước mong muốn (20GB trường hợp của tôi ..)

  • đính kèm DVdi vào VM

  • khởi động VM và cài đặt tiện ích EasyUS Backup miễn phí

  • Thực thi EasyUS và sử dụng chức năng EasyUS Clone (nó nhân bản OVdi MBR và phân vùng ntfs của OVdi bằng cách thu nhỏ vào đĩa DVdi mới )

  • Tắt nguồn VM

  • Tách OVdi khỏi VM

  • Kiểm tra xem DVdi có phải là thiết bị khởi động đầu tiên cho VM không

  • khởi động lại VM

  • Chúc vui vẻ

Đừng quên xóa âm lượng OVdi .

Thực hiện theo các bước này, tôi đã giảm thành công kích thước đĩa VM từ 50 GB xuống còn 20 GB


1

Tôi tin rằng giải pháp này cực kỳ nguy hiểm! Nó phụ thuộc vào tất cả các tệp nằm trong 153 GB đầu tiên của phân vùng 300 GB ban đầu. Lệnh dd không sao chép tập tin. Nó chỉ đơn giản là sao chép TẤT CẢ các khối theo trình tự. Do đó, nếu bạn không may có các tệp quan trọng SAU mức cắt 160 GB, dd sẽ không biết sao chép chúng.

Giải pháp điển hình tôi đã thấy trong nhiều, nhiều bài đăng là tăng sức mạnh cho Windows VM và sử dụng một số kết hợp các công cụ chống phân mảnh và công cụ quản trị để hợp nhất tất cả các tệp vào phía trước đĩa - khó khăn là nhiều công cụ chống phân mảnh không di chuyển được Các tệp hệ thống Windows (tôi đã phải tắt System Recovery để xóa một ổ đĩa không thể di chuyển 7 GB), nằm ở giữa không gian mà bạn đang cố gắng hợp nhất.

Khi bạn đã hợp nhất các tệp vào trước đĩa (MyDefrag là một công cụ phần mềm miễn phí cung cấp hiển thị vị trí của các tệp trên đĩa của bạn), bạn phải giảm kích thước phân vùng Windows của mình. Tôi đã sử dụng công cụ Diskpart với tùy chọn thu nhỏ.

Tại thời điểm này, bạn có thể sử dụng dd để sao chép phân vùng bây giờ nhỏ hơn sang vdi mới.

Tôi cũng đã sử dụng modifymedium win10.vdi --compact, trên máy chủ Linux của mình, nhưng trước tiên tôi phải chạy sdelete.exe trong hệ thống Windows để loại bỏ tất cả không gian chưa sử dụng trước (sdelete -zc :). Sử dụng vboxmanage để thu gọn tệp vdi hiện tại cho phép bạn thực hiện mọi thứ tại chỗ (nhưng luôn có bản sao lưu).


Điều tôi quên đề cập đến là tôi đã thay đổi kích thước phân vùng trong MS Windows trước để đúng kích cỡ. Điều này đảm bảo rằng các tệp nằm trong phần 153GB. MS WUsows sẽ di chuyển các tập tin / dữ liệu. Lưu ý btw rằng MS Windows sẽ không thay đổi kích thước nhiều lần vì các tệp không thể được di chuyển.
onknows
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.