लिनक्स, SSD, BTRFS और ट्रिम


4

मैं एक SSD (4803 नेट के साथ तोशिबा Q300) पर स्थापित BTRFS फाइल सिस्टम के साथ लिनक्स सिस्टम (जेंटू पर आधारित) चला रहा हूं। मेरी /etc/fstabतरह दिखता है:

UUID=14cb9b65-... swap           swap    defaults,noatime, 0       0                                                                                                                                                                                                                           
UUID=cd7d93b3-... /              btrfs   defaults,cache,compress=lzo,subvol=@ 0       1                                                                                                                                                                                          
UUID=cd7d93b3-... /home          btrfs   defaults,noatime,space_cache,compress=lzo,subvol=@home 0       2                                                                                                                                                                                      
UUID=cd7d93b3-... /Data          btrfs   defaults,noatime,space_cache,compress=lzo,subvol=@Data 0       2                                                                                                                                                                                     
UUID=cd7d93b3-... /mnt/rootfs    btrfs   defaults,noatime,space_cache,compress=lzo 0       0                                                                                                                                                                                                   
tmpfs             /tmp           tmpfs   defaults,noatime,mode=1777 0       0                                                                                                                                                                                                                   tmpfs             /proc          proc    defaults                   0       0                                                                                                                                                                                                              
tmpfs             /var/log       tmpfs   defaults,noatime,rw,mode=1777 0    0
tmpfs             /var/tmp       tmpfs   defaults,noatime,rw,mode=1777 0    0                                                                                                                                                                                                              
tmpfs             /var/run        tmpfs   defaults,noatime             0    0 
tmpfs             /var/spool      tmpfs   defaults,noatime             0    0 
tmpfs             /var/lock       tmpfs   defaults,noatime             0    0 
tmpfs             /var/cache      tmpfs   defaults,noatime             0    0
tmpfs             /run            tmpfs   defaults,noatime             0    0
sysfs             /sys            sysfs   defaults                     0    0
tmpfs             /dev/shm        tmpfs   defaults                     0    0
devpts            /dev/pts        devpts  gid=5,mode=620               0    0
devtmpfs          /dev            devtmpfs gid=5,mode=620              0    0

इससे पहले, मैं XFS फ़ाइल सिस्टम के साथ 240GB शुद्ध के साथ एक इंटेल SSD था। जब मैंने fstrim -v /उस XFS सिस्टम के लिए क्रियान्वित किया , जो मैंने दैनिक किया, तो मुझे इसके बजाय संदेश प्राप्त हुए:

8 गीगाबाइट छंटनी की।

अब, 480GByte Toshiba SSD के शीर्ष स्तर पर, मेरे पास कई सबवोल्यूम हैं जैसे:

# btrfs subvolume list /mnt/rootfs
ID 264 gen 273 top level 5 path @_original_install
ID 265 gen 152 top level 5 path @home_install_ok
ID 266 gen 270 top level 5 path @_snapshot_install_ok             
ID 267 gen 28504 top level 5 path @       
ID 275 gen 28504 top level 5 path @home
ID 276 gen 26900 top level 5 path @Data
ID 607 gen 245 top level 5 path @_snapshot_home_20160330
ID 628 gen 3837 top level 5 path @_root_snapshot_20160402

और जब मैं fstrimकमांड शुरू करता हूं, मुझे यह परिणाम प्राप्त होता है:

*****************************************
# fstrim -v /mnt/rootfs/@
  177,3 GiB (190331097088 Bytes) getrimmt
*****************************************

मेरे पुराने XFS पर 240 GB SSD स्वरूपित 8 या 10 के बजाय ट्रिम किए गए स्थान 177 GiB की मात्रा क्यों है?

मेरे 480GB Toshiba SSD को पहले ट्रिम के बाद फिर से ट्रिम करने के बाद, परिणाम लगभग समान है, 172 GiB को अब ट्रिम किया गया। तो: fstrimBTRFS के लिए काम नहीं करता है ?

और, क्या आप एक (बहुत) अच्छे ट्यूटोरियल / वेबसाइट या समान को जानते हैं, जो BTRFS को समझाता है कि कैसे सबवोल्यूम काम करता है, मेटा डेटा के बारे में क्या है?

नवीनतम btrfs-progs पर अधिक infos (मैं संस्करण 4.4.1 का उपयोग करता हूं) बेहतर है। यदि जर्मन में, यह बहुत अच्छा होगा, ...

और, क्या यह ट्रिमिंग के दौरान या अक्सर ट्रिमिंग करते समय एसएसडी के लिए हानिकारक है?


मैं तोशिबा Q300 खरीदने पर विचार कर रहा हूं, लेकिन अमेज़ॅन ने इसे बहुत खराब समीक्षा दी है, यह कहकर कि यह कुछ महीनों के बाद खराब हो गई है। कब से तुम्हारा है?
गेरीमिया

जवाबों:


2

BTRFS विकी FAQ से:

क्या SSD के लिए Btrfs को अनुकूलित किया गया है?

SSD ड्राइव के लिए कुछ अनुकूलन हैं, और -s sdd के साथ बढ़ते हुए आप उन्हें सक्षम कर सकते हैं। 2.6.31-rc1 के अनुसार, यह माउंट विकल्प सक्षम होगा यदि Btrfs गैर-घूर्णन भंडारण का पता लगाने में सक्षम है। SSD भविष्य के भंडारण का एक बड़ा हिस्सा होने जा रहा है, और Btrfs डेवलपर्स इसके लिए भारी ट्यूनिंग की योजना बनाते हैं। ध्यान दें कि -o ssd TRIM / त्याग को सक्षम नहीं करेगा

मैं देख रहा हूं कि आप साथ नहीं बढ़ रहे हैं -o ssd। शायद आपका btrfs-progsSSD के रूप में पता नहीं लगा रहा है। (यह जांचता है कि /sys/block/sdX/queue/rotationalक्या 0. है)

" -o ssdशायद TRIM / त्यागने में सक्षम नहीं होगा" क्योंकि अत्यधिक ओवरराइट एसएसडी ड्राइव को तेजी से पहनते हैं।

fstrimमैनपेज का कहना है:

चल रहा है fstrimअक्सर, या यहाँ तक का उपयोग कर mount -o discard[जो स्थायी रूप से पर ट्रिम बदल जाता है], नकारात्मक खराब गुणवत्ता वाले एसएसडी उपकरणों के जीवनकाल को प्रभावित कर सकता। अधिकांश डेस्कटॉप और सर्वर सिस्टम के लिए सप्ताह में एक बार पर्याप्त ट्रिमिंग आवृत्ति होती है। ध्यान दें कि सभी डिवाइस एक कतारबद्ध ट्रिम का समर्थन नहीं करते हैं, इसलिए प्रत्येक ट्रिम आदेश उस समय डिस्क का उपयोग करने के लिए जो कुछ भी हो सकता है, उस पर एक प्रदर्शन जुर्माना लगाता है।

इसके अलावा, BTRFS के CoW (कॉपी-ऑन-राइट) SSDs के लिए फायदेमंद है, अनावश्यक ओवरराइट को कम करता है, इसलिए TRIM वास्तव में BTRFS के साथ आवश्यक नहीं है। SSDs पर गैर-CoW फाइल सिस्टम को TRIM चालू करने की आवश्यकता है

मेरे पुराने XFS पर 240 GB SSD स्वरूपित 8 या 10 के बजाय ट्रिम किए गए स्थान 177 GiB की मात्रा क्यों है?

शायद यह संबंधित ssd_spreadनहीं है कि आप किस स्थान पर बड़े, कम-खंडित मुक्त स्थान पर होंगे:

ssd_spread माउंट -o ssd_spread नए आवंटन के लिए डिस्क के एक बड़े अप्रयुक्त क्षेत्र को खोजने के बारे में अधिक सख्त है, जो समय के साथ मुक्त स्थान को अधिक विखंडित करता है। यह कम खर्चीले SSD उपकरणों पर अक्सर तेज होता है।

चूंकि आपका तोशिबा Q300 लोअर-एंड SSD है, इसलिए आपको ssd_spreadमाउंट विकल्प को चालू करना चाहिए ।

क्या फ्रस्ट्रिम BTRFS के लिए काम नहीं करता है?

ऐसा होता है। BTRFS माउंट विकल्प पृष्ठ कहते हैं, "आप चला सकते हैं fstrimआदेश समय-समय पर।"

और, क्या आप एक (बहुत) अच्छे ट्यूटोरियल / वेबसाइट या समान को जानते हैं, जो BTRFS को समझाता है कि कैसे सबवोल्यूम काम करता है, मेटा डेटा के बारे में क्या है?

यह सबसे अच्छा BTRFS संसाधन है: https://btrfs.wiki.kernel.org/

Btrfs-subvolume मैनपेज अच्छी है। तो Sysadmin गाइड की सबवॉल्म्स सेक्शन हैbtrfsQuota.pyस्नैपशॉट / सबवोल्यूम और मेटाडेटा आकारों को समझने के लिए एक साफ-सुथरी स्क्रिप्ट है।

नवीनतम btrfs-progs पर अधिक infos (मैं संस्करण 4.4.1 का उपयोग करता हूं) बेहतर है।

नवीनतम संस्करण 4.5.3 है

यदि जर्मन में, यह बहुत अच्छा होगा, ...

मैं btrbkस्वचालित रूप से बैकअप और स्नैपशॉट करने के लिए BTRFS का लाभ उठाने के लिए पर्ल स्क्रिप्ट की अत्यधिक अनुशंसा करता हूं । यह वास्तव में BTRFS की शक्ति को प्रदर्शित करता है। लेखक, एक्सल बर्री , ज्यूरिख, स्विटज़रलैंड से है, और, एक जर्मन पहले नाम के आधार पर, वह संभवतः जर्मन को भी जानता है; शायद वह आपको कुछ जर्मन BTRFS संसाधनों की ओर इशारा कर सके।

इसके अलावा, WorldCat पर एक खोज करते हुए, इस पुस्तक में BTRFS का उल्लेख है, लेकिन यह कुछ हद तक पुराना है (2011):


btrbkअल्पाइन लिनक्स में उपलब्ध है, इसलिए इसे आसानी से एक lxcया dockerकंटेनर में चलाया जा सकता है यदि आपके लिनक्स वितरण में उपलब्ध नहीं है: pkgs.alpinelinux.org/…
स्टुअर्ट कार्डॉल

@ स्टुअर्ट इसमें एक btrbkस्लैकवेयर पैकेज बनाने के लिए एक स्लैकबुइल्ड्स स्क्रिप्ट भी है।
गेरमीया

0

एक गैर घूर्णी ड्राइव पर अपने ssd को सेट करने के लिए udev का उपयोग करें।

10-ssd.rules (या जो भी) /etet/udev/rules.d/ नामक फ़ाइल को संपादित / जोड़ें और इसी तरह की एक पंक्ति डालें

ACTION == "जोड़ें | परिवर्तन", KERNEL == "sd [az]", ATTR {कतार / घूर्णी} == "0", ATTR {कतार / अनुसूचक} = "mq- समय सीमा" (यह मेरे लिए ioscheduler निर्धारित करता है) ssd to mq-deadline, आपकी इच्छा कुछ इस तरह दिखाई देगी

कार्य == "जोड़ें | परिवर्तन", KERNEL == "sda", ATTR {कतार / घूर्णी} == "0" (जहाँ sda आपका ssd है, idk यदि आप UIDS का उपयोग कर सकते हैं, तो सही सेटिंग्स के लिए मैनुअल की जाँच करें, आप </a> ATTR {queue / अनुसूचक} = "mq-deadline" जोड़ सकते हैं, भले ही आपका कर्नेल इसका समर्थन करता है क्योंकि यह sds और mq के लिए तेज़ है और सामान्य ioschedulers अब प्रति डिवाइस चयन करने योग्य हैं)

मैं fstab में rw, lazytime, compress = zstd, ssd, space_cache = v2 जैसी कुछ चीजों का उपयोग करूँगा, जाहिर है कि आपके सबवोल्यूम कॉन्फिगरेशन के लिए एडजस्ट करना होगा।

यदि सब कुछ एक रिबूट के बाद काम करता है, तो उसे बिल्ली / sys / block / sda / queue / rotational और mq-deadline के लिए cat / sys / block / sda / कतार / अनुसूचक के लिए 0 कहना चाहिए।

उसके बाद फ्रस्ट्रिम -वा को ड्राइव पर काम करना चाहिए। आपको हर समय डिस्चार्ज जारी नहीं करना चाहिए, इसलिए एक सिस्टम टाइमर को जोड़ना बेहतर होता है जो इतनी बार फ्रस्ट्रिम चलाता है।

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