VirtualBox और SSD के TRIM कमांड सपोर्ट


27

मुझे इंटरनेट पर बड़ी संख्या में पोस्टों के बारे में पता है कि यह काम नहीं करेगा और क्यों और मैं वास्तव में महीनों पहले समाधान की तलाश में दिन बिताता हूं, लेकिन मैंने कल कुछ सुझाव पाए हैं कि कैसे अतिथि मशीनों के लिए "TRIM कमांड समर्थन को सक्षम करें"। । मैंने इसे आजमाया है और "यह दिखता है" काम कर रहा है। मैं जानना चाहूंगा कि पकड़ कहां है या यह वास्तव में काम कर रहा है जैसा कि इसे करना चाहिए।

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

डिस्क फ़ाइल संलग्न मेरा सटीक आदेश:

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

किसने इस प्रविष्टि को मशीन की * .vbox फ़ाइल में जेनरेट किया:

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

यह सुनिश्चित करने के लिए कि मैं कोई भी डेटा नहीं खोऊंगा यह ड्राइव मशीन से जुड़ी दूसरी थी। मैंने ड्राइव पर कुछ फ़ाइल कॉपी करने, मशीन को फिर से शुरू करने, मशीन को बंद करने, वापस बूट करने के बाद अगर वहाँ है, तो होस्ट ओएस में डिस्क फ़ाइल के उपयोग को देखते हुए सरल परीक्षण किया है। परिणाम हैं:

  • विकल्प के बिना संलग्न डिस्क फ़ाइल - गनोट्रेशनल और - डिस्कार्ड अतिथि ओएस में फ़ाइलों को हटाने के बाद भी इसका (गतिशील) आकार रखता है
  • डेटा के डिलीट होने के बाद ऊपर बताए गए दोनों विकल्पों से जुड़ी डिस्क फाइल स्पेस को छोड़ देती है

अब यहाँ मेरे सवाल हैं:
- वास्तव में क्या करता है - डिस्कार्ड विकल्प क्या है? यह वर्चुअलबॉक्स मैनुअल ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach ) में वर्णित नहीं है
- क्या यह वास्तव में मेजबान ओएस के लिए नीचे TRIM गुजर रहा है या यह सिर्फ जैसा दिखता है?


3
वर्चुअल TRIM वर्चुअल वर्चुअल डिस्क के लिए वर्चुअल मशीन में इंटरफेरेंस के लिए इस्तेमाल किया जाता है ...
Fiasco Labs

रामहाउंड: तो भंडारण सबमेनू में "सॉलिड-स्टेट ड्राइव" चेकबॉक्स विकल्प क्या है? इसके अलावा, अगर मैनुअल में उल्लिखित --discard जैसा कोई विकल्प है, तो उसे विस्तृत होना चाहिए। मुझे यह कहते हुए आपकी बात पूरी तरह से नहीं आती कि "ऐसा कारण है कि इसका वर्णन नहीं किया गया है"। यदि हां, तो यह मैनुअल में क्यों है?
Krzysztof Szynter

11
@Ramhound का जवाब देने के लिए मेरा ब्लॉग ओपी द्वारा सूचीबद्ध पोस्ट में से एक है। मुझे यकीन नहीं है कि उसका कारण क्या था, लेकिन मेरे लिए, मेरे पास एक वर्चुअल मशीन थी जिसे मुझे गतिशील रूप से आवंटित डिस्क की फ़ाइलों को भौतिक रूप से सिकोड़ने की आवश्यकता थी। यह एक ऐसी डिस्क थी जिसमें डेटा रखा गया था जिसे हटा दिया गया था और मैं इसे एक छोटे आकार में वापस सिकोड़ने की कोशिश कर रहा था - TRIM कमांड को पास करने से यह संभव हो गया ... मेरी वर्चुअल डिस्क को 12G से 7G तक सिकोड़ना। ओपी से, मुझे आशा है कि मेरी पोस्ट ने आपकी मदद की। अपने ब्लॉग पर आने वाले ट्रैफ़िक को देखकर मैं यहाँ आया।
जैसन रोवे

विषय में रुचि रखने वाले किसी के लिए सिर्फ एक चेतावनी। वर्चुअलबॉक्स डिस्क छवि एमुलेटर पर ट्रिमिंग कार्यान्वयन अत्यंत छोटी गाड़ी है और संभवतः आपके vm को क्रैश कर देगा। इसके लिए एक 2 साल पुराना बग खोला गया है। इसे सक्षम करना संभव है लेकिन इसे आज़माने में समय बर्बाद न करें।
डोमिनिक स्मोगोर

मुझे लगता है कि यह बग डोमिनिक का जिक्र है: virtualbox.org/ticket/16450
bobpaul

जवाबों:


19

--discardविकल्प निर्दिष्ट करते हैं कि अतिथि OS से कमांड के vdiजवाब में छवि सिकुड़ जाएगी trim। निम्नलिखित आवश्यकताओं को पूरा किया जाना चाहिए:

  • डिस्क प्रारूप VDI होना चाहिए
  • साफ क्षेत्र कम से कम 1 एमबी (आकार) होना चाहिए
  • [संभवतया] साफ किया गया क्षेत्र एक या अधिक १ एमबी ब्लॉक (संरेखण) को कवर करना चाहिए

स्पष्ट रूप से अतिथि ओएस को trimकमांड जारी करने के लिए कॉन्फ़िगर किया जाना चाहिए , आमतौर पर इसका मतलब है कि अतिथि ओएस डिस्क को एक एसएसडी है। Ext4 -o discardमाउंट फ्लैग का समर्थन करता है ; OSX को संभवतः अतिरिक्त सेटिंग्स की आवश्यकता होती है क्योंकि डिफ़ॉल्ट रूप से केवल Apple द्वारा आपूर्ति की जाने वाली SSD द्वारा यह कमांड जारी की जाती है । विंडोज़ को स्वतः ही SSD के कम से कम 7 और 8 संस्करणों का पता लगाने और उसका समर्थन करने की आवश्यकता है, यदि इंस्टॉलेशन या रन टाइम पर यह पता चलता है कि मैं स्पष्ट नहीं हूं। लिनक्स एक्सफ़ैट ड्राइवर (सैमसंग का शिष्टाचार) कमांड को त्यागने का समर्थन करता है । यह स्पष्ट नहीं है कि एक्सफ़ैट का Microsoft कार्यान्वयन समान रूप से समर्थन करता है, भले ही फ़ाइल सिस्टम को फ्लैश के साथ शुरू करने के लिए डिज़ाइन किया गया था।

वैकल्पिक रूप से जारी करने के लिए तदर्थ तरीके हैं trim, जैसे लिनक्स fstrimकमांड, util-linuxपैकेज का हिस्सा ।

पहले के समाधानों में उपयोगकर्ता को अप्रयुक्त क्षेत्रों को शून्य करने की आवश्यकता होती है, उदाहरण के zerofreeलिए डिस्क का स्पष्ट रूप से उपयोग करना और कॉम्पैक्ट करना (मैं मान रहा हूं कि यह तभी संभव है जब vm ऑफ़लाइन हो)।


1
इसके अलावा, btrfs (विशेष रूप से एक जो 0 क्षेत्रों के लिए छिद्रों को बाहर निकालता है) पर किसी प्रकार की डी-डुप्लिकेट चीज़ का उपयोग करके और btrfs balanceवास्तव में यथासंभव कई ट्रिमेबल क्षेत्र बनाने में मदद करता है।
सर्वव्यापी

12

चूंकि यह Google पर शीर्ष परिणाम है, इसलिए मैं अन्य उत्तरों को थोड़ा स्पष्ट करता हूं, भले ही यह एक पुराना पद है। वास्तव में टीआरआईएम को इस अर्थ में काम करना संभव है कि अतिथि फाइल सिस्टम पर अप्रयुक्त आभासी ब्लॉकों में फ्लैश के संबंधित भौतिक ब्लॉक हो सकते हैं जो फ्लैश के बेहतर उपयोग के लिए अप्रयुक्त हैं। टुकड़े पहले से ही अन्य उत्तरों और टिप्पणियों में मौजूद हैं।

सबसे पहले, मेजबान की स्थापना की जानी चाहिए ताकि मुक्त स्थान TRIM'ed हो। आप या तो त्याग के साथ फाइलसिस्टम को माउंट कर सकते हैं, या आप क्रोन के माध्यम से नियमित रूप से फाइलसिस्टम पर फ्रस्ट्रिम चला सकते हैं। मैं बाद वाला पसंद करता हूं, क्योंकि पहला विकल्प एक समय में कई फ़ाइलों को हटाने पर सिस्टम लॉकिंग को जन्म दे सकता है।

क्यूरम लिखते ही डिस्क प्रारूप का उपयोग VDI गतिशील आकार होना चाहिए।

सुनिश्चित करें कि nonrotational = "true" त्याग = "true" को .vbox फ़ाइल में OP के तहत वर्णित के रूप में सेट किया गया है।

फिर सामान्य रूप में अतिथि OS में TRIM सक्षम करें। लिनक्स में, मैं फिर से फ्रॉस्टिम चलाने वाली क्रॉन जॉब की सलाह देता हूं। यह शायद यहां और भी महत्वपूर्ण है, क्योंकि वर्चुअल डिस्क छवि पर TRIM करने की लागत एक भौतिक SSD की तुलना में बहुत अधिक है, क्योंकि छवि को छोटा करने के लिए डेटा को चारों ओर ले जाया जाता है।

अब, चूंकि डिस्क छवि नियमित रूप से कॉम्पैक्ट की जाती है, यह केवल उपयोग किए जाने वाले वास्तविक स्थान को ही लेगी, साथ ही कुछ 1MB ब्लॉक साइज ओवरहेड भी जैसा कि वर्मा लिखते हैं। इसका फिर से मतलब है कि मेजबान एसएसडी पर मुक्त स्थान TRIM'ed होगा।


वास्तव में मैंने ट्रिम कमांड का उपयोग करके अपने कुछ वीएम को मार दिया।
दाविदबाउमन

@davidbaumann कैसे हुआ?
dvtan

दरअसल, इसे सक्षम करने के बाद, यह लगभग 20GB ट्रिम करना शुरू कर दिया। इस क्षण में, लैपटॉप दुर्घटनाग्रस्त हो गया (इन दिनों मेरे GPU के साथ कुछ समस्याएं थीं)। forum.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann

मौजूदा पहली डिस्क (SATA को संभालने) के लिए ऐसा करने की VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
आज्ञा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.