लिनक्स पर संपूर्ण SSD विभाजन को TRIM / DISCARD कैसे करें?


28

/dev/sda3SSD ड्राइव पर मेरे विभाजन में कोई फ़ाइल सिस्टम नहीं है, लेकिन इसमें कचरा है। मैं पूरे विभाजन पर एक TRIM / DISCARD ऑपरेशन कैसे करूँ?


7
मुझे लगता है कि बिंदु यह है कि वह किसी भी डेटा को लिखना नहीं चाहता है, वह चाहता है कि एसएसडी फ्लैश ब्लॉक को मिटा दे, लेकिन इसे खाली छोड़ दें ताकि यह लिखने के लिए उपलब्ध हो, जिसे एसएसडी ड्राइव को ताज़ा करने के रूप में जाना जाता है।
क्रिस थॉम्पसन


@ जो: आपका एटीए सिक्योर इरेज़ लिंक भी परिच्छेदों का उल्लेख नहीं करता है। मैं पूरी ड्राइव को मिटाना नहीं चाहता, सिर्फ एक विभाजन। और मैं गलती से पूरी ड्राइव को मिटाना नहीं चाहता।
१५:०२ पर

11
@ डॉक: कचरा डेटा के साथ विभाजन को भरना पीटीएस के इरादे के बिल्कुल विपरीत है: यह एसएसडी को बताएगा कि विभाजन पूरी तरह से उपयोग में है। यह SSD के प्रदर्शन और जीवन-काल को कम करेगा।
ब्लैक

जवाबों:


40

यदि आपके उपयोग-लिनेक्स का संस्करण पर्याप्त नया है (सितंबर 2012), तो वास्तव में एक उद्देश्य-निर्मित उपकरण है blkdiscard, जो ऐसा करने का सबसे अच्छा तरीका है:

sudo blkdiscard /dev/sda3

लेकिन अगर आपको पुराने लिनक्स डिस्ट्रो संस्करणों के लिए संगतता की आवश्यकता है, तो पढ़ें ... ऐसे मामले हैं जहां hdparm/ wiper.shएक वॉल्यूम को छूने से इनकार करते हैं क्योंकि यह विभाजन नहीं है, इसलिए हमें इससे परे कुछ चाहिए।

मेरे द्वारा पाया गया सबसे समर्थित तरीका इस तथ्य का लाभ उठाना है कि जब वे सक्षम होते हैं, तो लिनक्स स्वैप वॉल्यूम DISCARD का समर्थन करता है। अंत में wipefs है, इसलिए वॉल्यूम को बाद में स्वैप के रूप में मान्यता नहीं दी गई है।

D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D

यह डिवाइस के अधिकांश हिस्से पर DISCARD जारी करता है।


1
धन्यवाद, के बारे में पता नहीं था blkdiscard। खतरनाक कमांड ... :)
फ्रॉस्ट्सचुट्ज़

क्यूं कर? मैंने इसे केवल मैनुअल में देखा:WARNING: All data in the discarded region on the device will be lost!
MrCalvin

9

मुझे पता है कि यह सवाल बहुत पुराना है, लेकिन ...

ऐसा करने का सबसे सरल तरीका यह है कि विभाजन पर एक ext4 फाइलसिस्टम बनाया जाए, जिसके हालिया संस्करण के साथ विभाजन हो mkfs.ext4। इस उपकरण की पहली बात TRIM पूरे विभाजन है। एक बार जब आप ऐसा कर लेते हैं, तो आप उस डेटा को अधिलेखित कर सकते हैं जो आपके द्वारा बनाई गई किसी भी फाइल सिस्टम के साथ है।

(मैंने उदाहरण के लिए, एसडी कार्ड पर एक नया vfat विभाजन बनाने के लिए ऐसा किया है।)


टिप के लिए धन्यवाद! ट्राइ करने के बाद FYI करें, खाली ext4 फाइल सिस्टम के लिए मेटाडेटा के साथ कुछ ब्लॉक लिखते हैं, इसलिए विभाजन का कुछ प्रतिशत अप्रमाणित रहता है।
पीटी

4
@ आप पत्रिका का आकार और mkfs.ext4 -J size=4 -N1 /dev/my/device
इनोड की

2
@AryehLeibTaurog का उपयोग -E lazy_journal_initकरने की तुलना में थोड़ा कम लिखने में परिणाम प्रतीत होता -J size=4है। (एक भौतिक SSD के बजाय विरल फ़ाइल का उपयोग करने के प्रयोगों के आधार पर और duयह सत्यापित करने के लिए कि कितना लिखा गया था।)
kasperd

दिलचस्प परिणामों के साथ एक चतुर प्रयोग @kasperd! धन्यवाद।
आर्येह लीब तौआरोग

8

hdparm --trim- सेक्टर-रेंज निम्न स्तर है, यह सीधे SSD से बात करने वाला है, इसलिए फाइल सिस्टम पर कोई निर्भरता नहीं है। Wiper.sh क्या करता है फाइलसिस्टम विशिष्ट प्रोग्रामों का उपयोग मुक्त (फाइलसिस्टम) क्षेत्रों को (हार्डवेयर) SSD क्षेत्रों में मैप करने के लिए करते हैं, वे उन को ट्रिम करने के लिए hdparm का उपयोग करते हैं।

प्रश्न का उत्तर देते हुए, आप उस विभाजन को ट्रिम करने के लिए hdparm का उपयोग कर सकते हैं, लेकिन आपको बहुत सावधान रहना चाहिए । इसे करने का तरीका विभाजन द्वारा उपयोग की जाने वाली सेक्टर रेंज प्राप्त करना है, फिर उस सेक्टर रेंज पर HDparm का उपयोग करें। संभवतः आपको कई सेक्टर रेंज पास करने की आवश्यकता होगी, क्योंकि प्रत्येक श्रेणी के लिए -trim-सेक्टर-रेंज अधिकतम 65535 सेक्टर हो सकते हैं।

fdisk -l आपको विभाजन की शुरुआत और आकार बता सकता है। Fdisk द्वारा उपयोग की जाने वाली इकाइयों पर और अपने SSD के सेक्टर आकार पर ध्यान दें।

उदाहरण (मेरा SSD):

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    39070079    19534016   83  Linux

इस विभाजन से पहले की जगह को छोड़ने के लिए, मैं 2047 (512 बाइट आकार, अपने SSD पर) सेक्टर 1 से शुरू कर सकता है hdparm --trim-sector-ranges 1:2047। मैं सेक्टर 0 से शुरू नहीं कर सकता, क्योंकि यह एमबीआर है (यह कैसे GPT के लिए जाता है)।

विभाजन द्वारा उपयोग किए जाने वाले स्थान को छोड़ने के लिए, मैं करूँगा hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...। यह स्क्रिप्टेड हो सकता है लेकिन मैं अब एक लिखने वाला नहीं हूं।

सिर्फ यह सुनिश्चित करने के लिए: मैं यहां कुछ भी गारंटी नहीं दे रहा हूं, मेरे पास गलत तरीके से काम करने वाले सेक्टर हो सकते हैं, प्रभावी रूप से -trim- सेक्टर-रेंज का उपयोग करने से पहले सब कुछ का बैकअप लें।

नोट : यदि आप पहले विभाजन से पहले "खाली" स्थान को ट्रिम करते हैं, जैसे मैंने दिखाया, तो रिबूट करने से पहले GRUB (या जो भी बूट लोडर आप उपयोग करते हैं) को पुनर्स्थापित करना सुनिश्चित करें, क्योंकि GRUB इसका पहला भाग "अप्रयुक्त" सेक्टरों पर रखता है। । अन्य बूटलोडर्स नहीं जानते, लेकिन मुझे लगता है कि यह मामला हो सकता है, इसलिए ध्यान रखें।


7
wiper.shfstrimजिसके द्वारा अधिक सुरक्षित है, लेकिन इस विशिष्ट उपयोग के लिए blkdiscardदोनों की धड़कन है। 2013 में, मैन्युअल रूप से कंप्यूटिंग रेंज को जोखिम में डालने की आवश्यकता नहीं है।
गेब्रियल

6

आप wiper.shhdparm पैकेज के साथ शामिल स्क्रिप्ट पर एक नज़र डाल सकते हैं । यह --trim-sector-rangesएक विभाजन पर सभी खाली क्षेत्रों TRIM को HDparm कमांड का उपयोग करता है , कम से कम अगर इसमें ext3 / 4 फाइल सिस्टम शामिल है। यह सुनिश्चित नहीं है कि अगर यह बिना विभाजन के काम करता है, लेकिन आप हमेशा इसे ext4 के साथ अस्थायी रूप से प्रारूपित कर सकते हैं।


इसे ext4 के साथ फ़ॉर्मेट करना और फिर रनिंग wiper.shकरना ext4 मेटाडेटा को छोड़कर लगभग सभी विभाजन को ट्रिम कर देगा। लेकिन मैं पूरा विभाजन ट्रिम करना चाहूंगा।
अंक

2
@ प्रयास: मेरा सुझाव है कि आप wiper.sh के कोड को देखें और यह पता लगाने की कोशिश करें कि यह ट्रिम रेंज को कैसे घटाता है। तब आप मैन्युअल रूप से पूरे विभाजन के लिए ट्रैप रेंज को hdparm भेज सकते थे।
जैप एल्डरिंग

4

blkdiscardविभाजन पर काम कर सकते हैं, न केवल पूरे ड्राइव पर। मैंने इसे फ़ेडोरा 20 पर सफलतापूर्वक परीक्षण किया। मैंने इसके स्रोतों की जाँच की blkdiscard- यह एक बहुत ही सरल कार्यक्रम है जो विभाजन के बारे में कुछ नहीं जानता है। मुझे लगता है कि कर्नेल अनुवाद करता है।

बहुत सावधान रहें, blkdiscardकोई प्रश्न नहीं पूछता है और कोई प्रगति जानकारी नहीं दिखाता है।

यदि ब्लेकडिस्कर्ड उपलब्ध नहीं है, तो इस स्क्रिप्ट का उपयोग करें और इसके आउटपुट को hdparm को खिलाएं। पहला तर्क ट्रिम करने के लिए सेक्टरों की संख्या है, दूसरा ट्रिम करने वाला पहला सेक्टर है।

#! /bin/sh
# List ranges for hdparm --trim-sector-ranges-stdin
: ${MAXSECT=65535}
test $# = 2 || { echo "Usage: trimlist sectors offset" >&2; exit 1; }
sectors=$1
pos=$2
while test $sectors -gt 0; do
    if test $sectors -gt $MAXSECT; then
            size=$MAXSECT
    else
            size=$sectors
    fi
    echo $pos:$size
    sectors=$(($sectors-$size))
    pos=$(($pos+$size))
done

-1

यहां एक दिलचस्प लेख है जो SSD की अंतर्निहित सुरक्षित मिटा सुविधा को लागू करने के लिए HDDErase का उपयोग करने के बारे में बात करता है, जो आपको चाहिए जो आपको चाहिए:

http://www.windowsitpro.com/article/file-systems/q-how-can-i-reset-a-solid-state-disk-ssd-to-a-fully-erased-clean-state-


आपके उत्तर के लिए धन्यवाद, लेकिन यह काम नहीं करता है, क्योंकि 1) यह पूरे ड्राइव को मिटा देता है 2) इसके लिए माइक्रोसॉफ्ट विंडोज की आवश्यकता होती है, और मैं लिनक्स समाधान की तलाश कर रहा था।
अंक

2
ध्यान दें कि यह मूल रूप से वही है जो blkdiscard --secureकरता है।
ntninja
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.