Hỗ trợ lệnh TRIM của VirtualBox và SSD


27

Tôi biết về số lượng lớn bài đăng trên internet nói rằng điều này sẽ không hoạt động và tại sao và tôi thực sự đã dành nhiều ngày để tìm giải pháp từ nhiều tháng trước nhưng tôi đã tìm thấy một số mẹo làm thế nào để "hỗ trợ lệnh TRIM" cho máy khách . Tôi đã thử nó và "nó trông" giống như làm việc. Những gì tôi muốn biết là nơi bắt hoặc điều này thực sự hoạt động như bình thường.

Nguồn:
https://forums.virtualbox.org/viewtopic.php?f=7&t=51768
http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html

Lệnh chính xác của tôi đính kèm tệp đĩa:

VBoxManage repositoryageattach "GuestOsMachineName" --storagectl "SATA" --port 1 --device 0 --nonrotational on --discard on --medium "C: \ path \ to \ file.vdi" --type hdd

Mà đã tạo mục này trong tệp * .vbox của máy:

<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
    <Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>

Để chắc chắn tôi sẽ không mất bất kỳ dữ liệu nào, ổ đĩa này là ổ thứ hai được gắn vào máy. Tôi đã thực hiện một thử nghiệm đơn giản như sao chép một số tệp vào ổ đĩa, để lại nó, khởi động lại máy, tắt máy, kiểm tra xem nó có ở đó sau khi khởi động lại không, xem việc sử dụng tệp đĩa trong HĐH máy chủ. Kết quả là:

  • tệp đĩa được đính kèm mà không có tùy chọn --nonrotational và --discard giữ kích thước (động) của nó ngay cả sau khi xóa các tệp trong HĐH khách
  • tệp đĩa được đính kèm với cả hai tùy chọn được đề cập ở trên sẽ giải phóng không gian sau khi dữ liệu bị xóa

Bây giờ đây là câu hỏi của tôi:
- chính xác tùy chọn --discard làm gì? nó không được mô tả trong hướng dẫn VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- nó thực sự chuyển TRIM xuống hệ điều hành máy chủ hay nó trông như thế nào?


3
Virtual TRIM được sử dụng trên một máy ảo được giao tiếp với một đĩa ảo cho cảm giác ảo ...
Fiasco Labs

Ramhound: Vậy tùy chọn hộp kiểm "Ổ đĩa thể rắn" trong menu con lưu trữ để làm gì? Bên cạnh đó, nếu có một tùy chọn như --discard được đề cập trong hướng dẫn, thì nó sẽ được chi tiết. Tôi hoàn toàn không hiểu ý của bạn rằng "có một lý do tại sao nó không được mô tả". Nếu vậy, tại sao nó là trong hướng dẫn?
Krzysztof Szynter

11
Để trả lời @Ramhound blog của tôi là một trong những bài đăng được OP liệt kê. Tôi không chắc lý do của anh ta là gì, nhưng đối với tôi, tôi đã có một Máy ảo mà tôi cần để thu nhỏ kích thước tập tin của đĩa được phân bổ động. Đó là một đĩa chứa dữ liệu đã bị xóa và tôi đang cố thu nhỏ nó xuống kích thước nhỏ hơn - truyền lệnh TRIM cho phép điều đó xảy ra ... thu nhỏ đĩa ảo của tôi từ 12G xuống 7G. Đối với OP, tôi hy vọng bài viết của tôi đã giúp bạn. Tôi đến đây bằng cách xem lưu lượng truy cập đến trên blog của tôi.
Jayson Rowe

Chỉ là một cảnh báo cho bất cứ ai quan tâm đến chủ đề này. Việc thực hiện cắt xén trên trình giả lập hình ảnh đĩa VirtualBox là rất có lỗi và có khả năng sẽ làm hỏng vm của bạn. Có một lỗi 2 năm mở cho nó. Có thể kích hoạt nó nhưng đừng lãng phí thời gian để thử nó.
Dominik SMogor

Tôi nghĩ đây là lỗi mà Dominik đang đề cập đến: virtualbox.org/ticket/16450
bobpaul

Câu trả lời:


19

--discardtùy chọn chỉ định rằng vdihình ảnh sẽ được thu nhỏ để đáp ứng với trimlệnh từ hệ điều hành khách. Các yêu cầu sau đây phải được đáp ứng:

  • định dạng đĩa phải là VDI
  • khu vực bị xóa phải có ít nhất 1MB (kích thước)
  • [có thể] khu vực bị xóa phải được bao phủ một hoặc nhiều khối 1MB (căn chỉnh)

Rõ ràng hệ điều hành khách phải được cấu hình để phát trimlệnh, thông thường điều đó có nghĩa là hệ điều hành khách được tạo ra để nghĩ rằng đĩa là ổ SSD. Ext4 hỗ trợ -o discardgắn cờ; OSX có thể yêu cầu cài đặt bổ sung vì theo mặc định, chỉ có SSD do Apple cung cấp mới được ban hành lệnh này . Windows phải tự động phát hiện và hỗ trợ SSD ít nhất trong phiên bản 7 và 8, tôi không rõ liệu phát hiện có xảy ra khi cài đặt hay chạy không. Trình điều khiển Linux exFAT (lịch sự của Samsung) hỗ trợ hủy lệnh . Không rõ Microsoft triển khai exFAT có hỗ trợ tương tự hay không, mặc dù hệ thống tệp được thiết kế cho flash bắt đầu.

Ngoài ra, có các phương pháp ad hoc để phát hành trim, ví dụ fstrimlệnh Linux , một phần của util-linuxgói.

Các giải pháp trước đó yêu cầu người dùng loại bỏ các khu vực không sử dụng, ví dụ như sử dụng zerofreevà nén đĩa một cách rõ ràng (tôi cho rằng điều đó chỉ có thể khi vm ngoại tuyến).


1
Ngoài ra, sử dụng một số thứ khử trùng lặp trên btrfs (đặc biệt là một lỗ đục lỗ cho 0 vùng) và btrfs balancethực sự giúp tạo ra càng nhiều vùng có thể điều chỉnh càng tốt.
Omnifarious

12

Vì đây là kết quả hàng đầu trên Google, hãy để tôi làm rõ các câu trả lời khác một chút, mặc dù đây là một bài viết cũ. Trên thực tế, có thể khiến TRIM hoạt động theo nghĩa là các khối ảo không được sử dụng trên hệ thống tệp khách có thể có các khối flash vật lý tương ứng được đánh dấu là không sử dụng để sử dụng flash tốt hơn. Các mảnh thậm chí đã có mặt trong các câu trả lời và ý kiến ​​khác.

Đầu tiên, máy chủ phải được thiết lập sao cho không gian trống được TRIM'ed. Bạn có thể gắn hệ thống tập tin với -o loại bỏ hoặc bạn có thể chạy fstrim trên hệ thống tập tin thường xuyên thông qua cron. Tôi thích cái sau, vì tùy chọn đầu tiên có thể dẫn đến việc hệ thống bị khóa khi xóa nhiều tệp cùng một lúc.

Định dạng đĩa được sử dụng phải là kích thước động VDI như qarma ghi.

Đảm bảo rằng nonrotational = "true" Discard = "true" được đặt trong tệp .vbox như được mô tả trong OP.

Sau đó kích hoạt TRIM trong hệ điều hành khách như bình thường. Trong Linux, tôi lại đề xuất một công việc định kỳ chạy fstrim. Điều này có lẽ còn quan trọng hơn ở đây, vì chi phí thực hiện TRIM trên hình ảnh đĩa ảo cao hơn nhiều so với SSD vật lý, do dữ liệu được di chuyển xung quanh để làm cho hình ảnh nhỏ hơn.

Bây giờ, vì hình ảnh đĩa thường xuyên được nén, nó sẽ chỉ chiếm dung lượng thực tế được sử dụng, cộng với một số kích thước khối 1 MB trên đầu như qarma ghi. Điều này một lần nữa có nghĩa là không gian trống sẽ được TRIM trên ổ SSD chủ.


Trên thực tế, tôi đã giết một số máy ảo của mình bằng lệnh trim.
davidbaumann

@davidbaumann Điều đó đã xảy ra như thế nào?
dvtan

Trên thực tế, sau khi kích hoạt nó, nó bắt đầu cắt giảm khoảng 20GB. Chính xác tại thời điểm này, Máy tính xách tay đã bị sập (có một số vấn đề với GPU của tôi những ngày này). forum.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann

Lệnh thực hiện việc này với đĩa đầu tiên hiện có (giả sử SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM
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.