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?
sumber
Jawaban:
--discard
opsi menentukan bahwavdi
gambar akan menyusut dalam menanggapitrim
perintah dari OS tamu. Persyaratan berikut harus dipenuhi:Jelas OS tamu harus dikonfigurasi untuk mengeluarkan
trim
perintah, biasanya itu berarti OS tamu dibuat untuk berpikir bahwa disk adalah SSD. Ext4 mendukung-o discard
flag 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
, misalnyafstrim
perintah Linux , bagian dariutil-linux
paket.Solusi sebelumnya mengharuskan pengguna untuk menghapus area yang tidak digunakan, mis. Menggunakan
zerofree
dan memadatkan disk secara eksplisit (saya berasumsi itu hanya mungkin ketika vm sedang offline).sumber
btrfs balance
benar - benar membantu dengan menciptakan sebanyak mungkin wilayah yang dapat dipangkas.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.
sumber
VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on