Dukungan perintah TRIM VirtualBox dan SSD

27

Saya menyadari sejumlah besar posting di internet mengatakan bahwa ini tidak akan berhasil dan mengapa dan saya benar-benar menghabiskan waktu berhari-hari mencari solusinya beberapa bulan yang lalu, tetapi saya telah menemukan beberapa tips kemarin untuk "mengaktifkan dukungan perintah TRIM" untuk mesin tamu . Saya sudah mencobanya dan "sepertinya" bekerja. Yang ingin saya ketahui adalah di mana tangkapannya atau apakah ini benar-benar berfungsi sebagaimana mestinya.

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

Perintah persis saya melampirkan file disk:

VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" --port 1 --perangkat 0 --perlindungan pada --discard on --medium "C: \ path \ to \ file.vdi" --type hdd

Yang menghasilkan entri ini di file * .vbox mesin:

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

Yang pasti saya tidak akan kehilangan data apa pun drive ini adalah yang kedua terpasang pada mesin. Saya telah membuat tes sederhana seperti menyalin beberapa file ke drive, meninggalkannya, menghidupkan ulang mesin, mematikan mesin, memeriksa apakah ada di sana setelah mem-boot kembali, melihat penggunaan file disk di OS host. Hasilnya adalah:

  • file disk terpasang tanpa opsi - nonrotational dan --discard menjaga ukurannya (dinamis) bahkan setelah menghapus file di OS tamu
  • file disk yang dilampirkan dengan kedua opsi yang disebutkan di atas melepaskan ruang setelah data dihapus

Sekarang, inilah pertanyaan saya:
- apa yang sebenarnya dilakukan opsi --discard? itu tidak dijelaskan dalam manual VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- apakah ini benar-benar meneruskan TRIM ke OS host atau hanya seperti apa?

Krzysztof Szynter
sumber
3
Virtual TRIM digunakan pada mesin virtual yang dihubungkan ke disk virtual untuk kenyamanan virtual ...
Fiasco Labs
Ramhound: Jadi untuk apa opsi kotak centang "Solid-state drive" di submenu penyimpanan? Selain itu, jika ada opsi seperti --discard yang disebutkan dalam manual, maka harus dirinci. Saya sama sekali tidak mengerti maksud Anda dengan mengatakan bahwa "ada alasan mengapa itu tidak dijelaskan". Jika demikian, mengapa itu ada di manual sama sekali?
Krzysztof Szynter
11
Untuk menjawab @Ramhound, blog saya adalah salah satu pos OP yang terdaftar. Saya tidak yakin apa nya alasan itu, tapi bagi saya, saya punya Virtual Machine yang saya butuhkan untuk secara fisik mengecilkan filesize dari disk dialokasikan secara dinamis. Itu adalah disk yang menyimpan data yang dihapus dan saya mencoba untuk mengecilkannya kembali ke ukuran yang lebih kecil - melewati perintah TRIM memungkinkan itu terjadi ... menyusut disk virtual saya dari 12G ke 7G. Kepada OP, saya harap posting saya membantu Anda. Saya tiba di sini dengan melihat lalu lintas masuk di blog saya.
Jayson Rowe
Hanya peringatan bagi siapa saja yang tertarik dengan topik ini. Implementasi pemangkasan pada emulator image disk VirtualBox sangat buggy dan kemungkinan akan crash vm Anda. Ada bug berusia 2 tahun dibuka untuk itu. Dimungkinkan untuk mengaktifkannya tetapi jangan buang waktu untuk mencobanya.
Dominik SMogor
Saya pikir ini adalah bug yang dimaksud Dominik: virtualbox.org/ticket/16450
bobpaul

Jawaban:

19

--discardopsi menentukan bahwa vdigambar akan menyusut dalam menanggapi trimperintah dari OS tamu. Persyaratan berikut harus dipenuhi:

  • format disk harus VDI
  • area yang dibersihkan harus minimal 1MB (ukuran)
  • [mungkin] area yang dibersihkan harus mencakup satu atau lebih blok 1MB (perataan)

Jelas OS tamu harus dikonfigurasi untuk mengeluarkan trimperintah, biasanya itu berarti OS tamu dibuat untuk berpikir bahwa disk adalah SSD. Ext4 mendukung -o discardflag mount; OSX mungkin memerlukan pengaturan tambahan karena secara default hanya SSD yang disediakan oleh Apple yang mengeluarkan perintah ini . Windows seharusnya secara otomatis mendeteksi dan mendukung SSD setidaknya di versi 7 dan 8, saya tidak jelas apakah deteksi terjadi pada saat menginstal atau menjalankan waktu. Driver Linux exFAT (milik Samsung) mendukung perintah discard . Tidak jelas apakah implementasi Microsoft mendukung exFAT yang sama, meskipun sistem file dirancang untuk flash untuk memulai.

Atau ada metode ad hoc untuk mengeluarkan trim, misalnya fstrimperintah Linux , bagian dari util-linuxpaket.

Solusi sebelumnya mengharuskan pengguna untuk menghapus area yang tidak digunakan, mis. Menggunakan zerofreedan memadatkan disk secara eksplisit (saya berasumsi itu hanya mungkin ketika vm sedang offline).

Dima Tisnek
sumber
1
Juga, menggunakan semacam de-duplikasi hal pada btrfs (terutama yang meninju lubang untuk 0 wilayah) dan btrfs balancebenar - benar membantu dengan menciptakan sebanyak mungkin wilayah yang dapat dipangkas.
Mahakuasa
12

Karena ini adalah hasil teratas di Google, izinkan saya mengklarifikasi jawaban lain sedikit, meskipun ini adalah pos lama. Faktanya adalah mungkin untuk membuat TRIM bekerja dalam arti bahwa blok virtual yang tidak terpakai pada sistem file guest dapat memiliki blok fisik yang sesuai dari flash yang ditandai sebagai tidak digunakan untuk pemanfaatan flash yang lebih baik. Potongan-potongan itu bahkan sudah ada di jawaban dan komentar lainnya.

Pertama, tuan rumah harus diatur sehingga ruang kosong adalah TRIM'ed. Anda bisa memasang sistem file dengan -o discard, atau Anda dapat menjalankan fstrim pada sistem file secara teratur melalui cron. Saya lebih suka yang terakhir, karena opsi pertama dapat menyebabkan sistem terkunci ketika menghapus banyak file sekaligus.

Format disk yang digunakan harus ukuran dinamis VDI saat qarma menulis.

Pastikan bahwa nonrotational = "true" discard = "true" diatur dalam file .vbox seperti yang dijelaskan dalam OP.

Kemudian aktifkan TRIM di OS tamu seperti biasa. Di Linux, saya merekomendasikan lagi cron job menjalankan fstrim. Ini mungkin bahkan lebih penting di sini, karena biaya melakukan TRIM pada gambar disk virtual jauh lebih tinggi daripada pada SSD fisik, karena data dipindahkan sekitar untuk membuat gambar lebih kecil.

Sekarang, karena disk image secara teratur dipadatkan, itu hanya akan mengambil ruang aktual yang digunakan, ditambah beberapa overhead ukuran blok 1MB sebagai qarma menulis. Ini lagi berarti ruang kosong akan di-TRIM pada SSD host.

Jacob Larsen
sumber
Sebenarnya saya membunuh beberapa VM saya menggunakan perintah trim.
davidbaumann
@davidbaumann Bagaimana itu bisa terjadi?
DVtan
Sebenarnya, setelah mengaktifkannya, mulai memangkas sekitar 20GB. Tepat pada saat ini, Laptop macet (memiliki beberapa masalah dengan GPU saya hari ini). forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann
Perintah untuk melakukan ini ke disk pertama yang ada (dengan asumsi SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM