VirtualBox ve SSD'nin TRIM komut desteği


27

İnternette bunun çok işe yaramadığını ve neden aylar önce çözümleri aramak için günler harcadığımı söyleyen çok sayıda gönderi olduğunun farkındayım ancak dün konuk makineleri için "TRIM komut desteğini etkinleştirme" konusunda bazı ipuçları buldum . Denedim ve çalışmak gibi "görünüyor". Bilmek istediğim şey, mandalın nerede olduğu veya bu gerçekten olması gerektiği gibi çalışıyor.

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

Disk dosyasına ekli komutum:

VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" - port 1 - cihaz 0 - normal olmayan - diskette - orta "C: \ path \ to \ file.vdi" --tipi hdd

Makinenin * .vbox dosyasında bu girdiyi hangi şekilde oluşturdu:

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

Hiçbir veri kaybetmeyeceğimden emin olmak için bu sürücü makineye takılı olan ikinci diskti. Bir dosyayı sürücüye kopyalamak, bırakmak, makineyi yeniden başlatmak, makineyi kapatmak, önyüklemeden sonra orada olup olmadığını kontrol etmek, ana bilgisayar işletim sistemindeki disk dosyası kullanımına bakmak gibi basit bir test yaptım. Sonuçlar:

  • seçeneksiz eklenmiş disk dosyası
  • Yukarıda belirtilen her iki seçeneğe bağlı disk dosyası, veriler silindikten sonra yer açar

Şimdi benim sorularım:
- tam olarak ne - discard seçeneği ne yapıyor? VirtualBox kılavuzunda açıklanmadı ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- gerçekten TRIM'i ana bilgisayar işletim sistemine geçiriyor mu yoksa benziyor mu?


3
Sanal duygu için sanal bir diske arayüzlü sanal bir makinede kullanılan sanal TRIM ...
Fiasco Labs

Ramhound: Peki depolama alt menüsünde "Katı hal sürücüsü" onay kutusu seçeneği ne için? Ayrıca, kılavuzda belirtilen --discard gibi bir seçenek varsa, o zaman ayrıntılı olmalı. "Anlatılmadığı bir neden var" diyen fikrinizi tamamen anlamıyorum. Öyleyse, neden el kitabında yok?
Krzysztof Szynter

11
@Ramhound'a cevap vermek için blogum OP’de listelenen yayınlardan biri. Ben emin kişilerden biriyim onun sebebi, ama benim için, ben fiziksel olarak dinamik olarak ayrılan diskin dosya boyutu küçültmek için gerekli bir Virtual Machine vardı. Silinmiş verileri tutan bir diskti ve daha küçük bir boyuta indirmeye çalışıyordum - TRIM komutunu geçerek bunun gerçekleşmesini sağladı ... sanal diskimi 12G'den 7G'ye çekiyordu. OP'ye gönderimim size yardımcı oldu. Blogumda gelen trafiği görerek buraya geldim.
Jayson Rowe

Sadece konuyla ilgilenen herkes için bir uyarı. VirtualBox disk imaj emülatöründeki kırpma uygulaması son derece hatalı ve büyük olasılıkla vm'nizi çökertecek. Bunun için 2 yaşında bir böcek açıldı. Etkinleştirmek mümkündür, ancak denemek için zaman kaybetmeyin.
Dominik SMogor

Bence Dominik bahsettiği böcek budur: virtualbox.org/ticket/16450
bobpaul

Yanıtlar:


19

--discardseçenekler , konuk işletim sisteminden gelen komuta vdicevaben görüntünün küçültüleceğini belirtir trim. Aşağıdaki gereksinimler karşılanmalıdır:

  • disk formatı VDI olmalıdır
  • temizlenen alan en az 1 MB olmalıdır (boyut)
  • [muhtemelen] temizlenmiş alan bir veya daha fazla 1 MB bloğu kapsamalıdır (hizalama)

Açıkçası, konuk işletim sistemi trimkomut vermek üzere yapılandırılmalıdır , genellikle bu, konuk işletim sisteminin diskin bir SSD olduğunu düşünmesi için yapıldığı anlamına gelir. Ext4 -o discardmount bayrağını destekler ; OSX muhtemelen ek ayarlar gerektirir çünkü varsayılan olarak yalnızca Apple tarafından sağlanan SSD'ler bu komutla verilir . Windows SSD'leri en az 7 ve 8 sürümlerinde otomatik olarak algılayıp desteklemelidir, algılama yükleme veya çalıştırma sırasında gerçekleşir mi bilmiyorum. Linux exFAT sürücüsü (Samsung'un izni ile) atma komutunu destekler . Microsoft exFAT uygulamasının aynı desteği destekleyip desteklemediği açık değildir, ancak dosya sistemi flash ile başlamak için tasarlanmış olsa da.

Alternatif olarak yayınlanacak özel yöntemler vardır trim, örneğin Linux fstrimkomutu, util-linuxpaketin bir parçası .

Daha önceki çözümler, kullanıcının kullanılmayan alanları sıfırlamasını gerektiriyordu, örneğin zerofreediski açık bir şekilde kullanıyor ve sıkıştırıyordu (bunun sadece vm çevrimdışı olduğunda mümkün olduğunu sanıyorum).


1
Ayrıca, btrfs üzerinde bir tür de-çoğaltma işleminin kullanılması (özellikle 0 bölge için delik açan bir tane) ve btrfs balancegerçekten mümkün olduğunca çok sayıda kesilebilir bölge oluşturulmasına yardımcı olur.
Omnifarious

12

Bu Google’daki en iyi sonuç olduğundan, bu eski bir yazı olsa da diğer yanıtları biraz daha netleştireyim. TRIM'in konuk dosya sistemindeki kullanılmayan sanal blokların, flaşın daha iyi kullanılması için kullanılmamış olarak işaretlenmiş karşılık gelen fiziksel bloklara sahip olabileceği anlamında çalışmasını sağlamak mümkündür. Parçalar diğer cevaplarda ve yorumlarda bile mevcut.

İlk olarak, ev sahibi, boş alan TRIM'ed olacak şekilde ayarlanmalıdır. Dosya sistemini -o discard ile bağlayabilir ya da fstrim'i dosya sisteminde düzenli olarak cron aracılığıyla çalıştırabilirsiniz. Sonuncuyu tercih ediyorum, çünkü ilk seçenek bir kerede birçok dosyayı silerken sistemin kilitlenmesine neden olabilir.

Kullanılan disk formatı, qarma'nın yazdığı gibi VDI dinamik boyutu olmalıdır.

Nonrotational = "true" discard = "true" öğesinin OP altında açıklanan .vbox dosyasında ayarlandığından emin olun.

Ardından misafir işletim sisteminde TRIM'i normal şekilde etkinleştirin. Linux'ta yine fstrim ile çalışan bir cron işi öneriyorum. Bu muhtemelen burada daha önemlidir, çünkü sanal disk görüntüsünde TRIM yapmanın maliyeti, görüntünün küçültülmesi için veriler taşındığından, fiziksel SSD'den çok daha yüksektir.

Şimdi, disk görüntüsü düzenli olarak sıkıştırıldığından, yalnızca kullanılan gerçek alanı ve ayrıca qarma'nın yazdığı gibi bazı 1 MB'lık blok büyüklüğünü alacaktır. Bu da, boş alanın ana bilgisayar SSD'sinde TRIM'ed olacağı anlamına gelir.


Aslında trim komutunu kullanarak bazı VM'lerimi öldürdüm.
davidbaumann

@davidbaumann Bu nasıl oldu?
dvtan

Aslında, etkinleştirdikten sonra, yaklaşık 20GB'lik bir kesmeye başladı. Tam olarak şu anda, Dizüstü Bilgisayar çöktü (bugünlerde GPU'mda bazı problemler vardı). forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann

Bunu mevcut ilk diske yapmayı (SATA varsayarsak) VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
komutunu verin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.