मल्टी डिवाइस BTRFS फाइल सिस्टम विभिन्न आकार की डिस्क के साथ


14

मेरे पास एक मौजूदा BTRFS फाइलसिस्टम है जो एक 500GB डिस्क से बना है और मैंने अपने होम सर्वर की स्टोरेज क्षमता बढ़ाने के लिए सिर्फ 2TB डिस्क खरीदी है और मैं मौजूदा फाइल सिस्टम में नई डिस्क जोड़ना चाहता हूं। मैंने जो पढ़ा है, उससे ऐसा लगता है कि कोई भी BTRFS सेटअप अलग-अलग आकार की डिस्क को बिना बड़ी और छोटी डिस्क के आकार में अंतर किए बिना संभाल सकता है, लेकिन मैं BTRFS के लिए नया हूं और मुझे कुछ याद आ गया होगा, तो क्या कोई सेटअप है कि मुझे अंतरिक्ष बर्बाद कर के बिना एक फाइलसिस्टम में दो डिस्क को संयोजित करने की अनुमति दे सकता है?


आप अंतर्निहित डिस्क को कैसे संभाल रहे हैं? LVM के साथ?
एंडी स्मिथ

@Andy, हैंडल एलवीएम / RAID शैली में एक से अधिक डिस्क Btrfs, जाँच इस
वनऑफऑन

वाह ... मेरी बुर। इसके लिए चीयर्स ;-)
एंडी स्मिथ

जवाबों:


4

Btrfs डेटा और मेटाडेटा के लिए अलग-अलग छापे स्तर का उपयोग कर सकते हैं:

डिफ़ॉल्ट (यहां तक ​​कि एक डिस्क के लिए) मेटाडेटा (निर्देशिका आदि) के लिए raid1 और डेटा के लिए raid0 है।

यदि आपने इसे नहीं बदला है, तो संभावना है कि आपको दूसरी डिस्क जोड़ने और पुनः संतुलन चलाने में कोई समस्या नहीं होगी। क्योंकि केवल मेटाडेटा को दोनों डिस्क में कॉपी किया जाएगा (आप अपना मेटाडेटा आकार देख सकते हैं btrfs filesystem df /)। बस इस बात का ध्यान रखें कि यदि आपका कोई भी डिस्क आपको ढीला डेटा नहीं देता है।

क्योंकि 2tb डिस्क sooooooooo 500g की तुलना में बहुत बड़ी है, यह शायद आपको बेहतर बाधाओं देगा यदि आप नया जोड़ते हैं और फिर पुराने को हटा देते हैं (एक विशिष्ट ड्राइव विफल होने की संभावना दोनों ड्राइव के ऑड्स की तुलना में बहुत कम है नाकाम रहने)।

यदि आप बाद में और अधिक आकार ड्राइव के साथ एक RAID सरणी होने की योजना बनाते हैं, तो आप डेटा और मेटाडाटा दोनों के लिए raid1 के साथ नई ड्राइव पर फाइल सिस्टम को फिर से बनाना चाहते हैं और फिर सब कुछ कॉपी कर सकते हैं। फिर बाद में जब आपके पास अधिक पैसा हो तो दूसरा 2tb ड्राइव खरीदें।

ps: एक सिंगल ड्राइव पर raid1 का उपयोग करने का मतलब है कि डेटा दो स्थानों पर उस एक ड्राइव (भ्रष्टाचार से बचाने के लिए) में संग्रहीत किया जाएगा और आपके स्टोरेज स्पेस को कम कर देगा (यह मेटाडेटा के लिए वास्तव में अच्छा विचार है)।

ps: गंभीरता से, मेटाडाटा के लिए raid1 का उपयोग नहीं करने के लिए परीक्षा हो। psss: एक बहुत अच्छा मौका है कि btrfs गतिशील रूप से छापे स्तर को बदलने की क्षमता हासिल करेगा।


व्यक्तिगत रूप से मैं अपने btrfs fs / arrays / what-do-i-call-को फिर से बनाने की योजना बना रहा हूं, जैसे ही btrfs में raid5 और raid6 समर्थन है।
आर्थर उल्फल्ड्ट

12

यह निर्भर करता है कि आप मल्टी-डिवाइस Btrfs फाइल सिस्टम के डेटा ब्लॉक के लिए किस प्रोफ़ाइल का उपयोग करते हैं।

  • जब आप RAID0 (डेटा ब्लॉक के लिए डिफ़ॉल्ट) का उपयोग करते हैं, तो प्रत्येक डिस्क केवल सरणी में सबसे छोटी डिस्क की क्षमता तक भरी जा सकती है।

  • जब आप डेटा ब्लॉक के लिए "सिंगल" प्रोफाइल का उपयोग करते हैं, तो प्रत्येक डिस्क को पूर्ण क्षमता तक भर दिया जाएगा। जैसेmkfs.btrfs -d single /dev/sda /dev/sdb

मेरे पास 2TB और 3TB डिस्क के साथ एक फ़ाइल सर्वर है। यह USB फ्लैश ड्राइव से Ubuntu 12.10 को बूट करता है। पहले मैंने -d singleविकल्प के बिना Btrfs फाइल सिस्टम बनाया :

mkfs.btrfs /dev/sda /dev/sdb

इसका परिणाम यह था कि मैं केवल 4TB (3.45 बाइनरी टीबी फ़ाइल डेटा) के बारे में संग्रहीत कर सकता था।

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 3.22TB
 devid    2 size 2.73TB used 1.82TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data, RAID0: total=3.45TB, used=3.22TB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=264.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.29GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  3.3T  241G  94% /mnt/btrfs1

used 1.82TB3TB ड्राइव के लिए ध्यान दें ।

फिर मैंने RAID0 से डेटा ब्लॉक को "सिंगल" प्रोफाइल में बदलने के लिए "बैलेंस" कमांड का उपयोग किया:

btrfs balance start -dconvert=single /mnt/btrfs1

4TB डेटा को संतुलित करने में बहुत लंबा समय (लगभग 30 घंटे) लगा। लेकिन इसके पूरा होने के बाद, मैं पूर्ण 5TB (4.36 बाइनरी टीबी फ़ाइल डेटा) का उपयोग कर सकता था।

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 4.34TB
 devid    2 size 2.73TB used 2.73TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data: total=4.36TB, used=4.34TB
System, RAID1: total=40.00MB, used=500.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.01GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  4.4T   27G 100% /mnt/btrfs1

2

मैंने उबंटू में btrfs के साथ कई उपकरणों का उपयोग किया है, और यह ठीक काम किया है। ध्यान रखें कि btrfs वास्तव में मानक RAID स्तरों को लागू नहीं करता है। यह वैकल्पिक स्ट्रिपिंग और मिररिंग को लागू करता है, लेकिन सच नहीं RAID।


1

Btrfs में विभिन्न आकार के साथ ड्राइव को संयोजित करना संभव है।
लेकिन वर्तमान में btrfs ने ENOSPC (डिवाइस पर कोई स्थान नहीं छोड़ा है) को बहुत अच्छी तरह से नियंत्रित नहीं करता है।

उदाहरण के लिए, मैंने एक RAID0 (धारीदार) सरणी में 3 ड्राइव स्थापित किए हैं। 1x500GB, 1x250GB, 1x160GB।
आप मान लेंगे कि आपके पास 800-900GB के बीच डिस्क स्थान होगा।

यह वह है जो df -hदिखाता है:
/ dev / sdf 848G 615G 234G 73% / मीडिया / btrfs

लेकिन मैं सरणी पर कोई और डेटा संग्रहीत करने में सक्षम नहीं हूं। (कोई जगह नहीं बची)

btrfs filesystem df /media/btrfsमुझे यह दिखाता है:
डेटा: कुल = 612.51GB, प्रयुक्त = 612.51GB
मेटाडेटा: कुल = 1.62GB, प्रयुक्त = 990.73MB
सिस्टम: कुल = 12.00MB, प्रयुक्त = 48.00KB

यहां तक ​​कि असंतुलन से भी मदद नहीं मिली।

एक मेलिंग सूची में मैंने इस कॉलकुलेशन को देखा: सरणी
में सबसे छोटी ड्राइव * ड्राइव की संख्या का आकार
(हालांकि मेरे पास कुछ और स्थान है: 160GB * 3 = 480GB के बजाय 612GB)

तो विकास की वर्तमान स्थिति में संभावनाएं हैं कि आप उन सभी स्थानों का उपयोग नहीं कर पाएंगे, जहां btrfs एक सरणी में विभिन्न आकारों का समर्थन करते हैं।

मैं 2.6.35-22-जेनरिक कर्नेल के साथ उबंटू 10.10 का उपयोग कर रहा हूं।


मुझे नहीं लगता कि यह कभी भी आपका समर्थन करेगा, कम से कम जब तक यह प्रति फ़ाइल / प्रति निर्देशिका के आधार पर अलग-अलग छापे स्तर का समर्थन करता है। Raid0 (धारी) के लिए, सभी 3 उपकरणों पर प्रत्येक फ़ाइल के बराबर आकार के हिस्सों को रखने के लिए btrfs की आवश्यकता होती है। यह कैसे कर सकता है कि अगर यह आपको एक डिवाइस के सभी 500GB का उपयोग करने की अनुमति देता है? यदि "raid0" के बजाय आपने "सिंगल" का उपयोग किया है (यह सुनिश्चित नहीं है कि यह विकल्प तब उपलब्ध था जब आप पोस्ट किए गए थे), तो btrfs कहीं भी फ़ाइलों को डुप्लिकेट करने का प्रयास नहीं करता है और आपको सभी डिवाइसों पर सभी स्थान का उपयोग करने देगा। लेकिन छापे के स्तर के लिए, इसका कोई मतलब नहीं है: आप छापे स्तर की परिभाषा का उल्लंघन करने की कोशिश कर रहे हैं।
बोबापुल

कोई बात नहीं, मैं गलत हूं। btrfs raid0 / 1 केवल अन्य डिवाइसों के लिए स्ट्राइप्स / मिरर, सभी डिवाइस नहीं, इसलिए 1TB + 500GB + 500GB बिलकुल साथ ही 1TB + 1TB raid0 और raid1 (कम से कम लिनक्स 3.0 के रूप में) के लिए काम करता है। लिनक्स 3.0 से पहले, इसमें आपके द्वारा वर्णित समस्या थी।
बोबापुल

1

अद्यतन: लिनक्स 3.0 जारी होने से पहले नीचे उत्तर लिखा गया था। लिनक्स 3.0 में अर्ध-राउंड-रॉबिन पैच शामिल है।

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

इस पर सुधार करने के लिए पाइपलाइन में एक अर्ध-राउंड-रॉबिन पैच है। यदि आप 500GB और 2TB डिस्क रखते हैं, तो निश्चित रूप से, सभी उपकरणों को अलग-अलग जोड़ देना अभी भी असंभव है। पैच 1 x 1TB + 2 x 500GB जैसी स्थितियों के लिए अधिक लक्षित है, जहां प्रत्येक छोटी डिस्क को अन्य छोटी डिस्क के बजाय बड़ी डिस्क के साथ दर्पण / पट्टी करना पसंद करना चाहिए।

आपकी स्थिति में, मैं सिर्फ आपके डेटा ( mkfs.btrfs -d single) के लिए "सिंगल" मोड का उपयोग करूंगा । चंक्स को उस मोड में जोड़ा नहीं गया है, इसलिए मुझे लगता है कि विभिन्न आकारों के उपकरणों के साथ कोई समस्या नहीं होगी। मैंने हालांकि इसका परीक्षण नहीं किया है।


0

यह समस्या केवल गोचर्स पृष्ठ से btrfs-raid1 सेटअप पर लागू होती है :

  • आवंटन राउंड-रॉबिन के आधार पर किया जाता है। यदि आपके पास बेमेल ड्राइव (भिन्न आकार के वॉल्यूम) से बने वॉल्यूम पर एक छापे की रणनीति है, तो आपकी सबसे बड़ी ड्राइव पर बहुत सारी जगह खाली छोड़ने के दौरान आपकी छोटी मात्रा भर सकती है। आप सत्यापित कर सकते हैं कि यह एक मुद्दा है अगर 'df' और 'btrfs फाइल सिस्टम df [माउंटपॉइंट] के बीच कोई विसंगति है, और यदि बाद वाला आदेश यह भी दिखाता है कि "डेटा" लाइन पर "कुल" और "उपयोग" समान हैं । एक असंतुलन इस समस्या को कम कर सकता है। (2.6.33)
    • यदि आपका वॉल्यूम इस तरीके से नहीं भरता है, तो एक असंतुलन एक ENOSPC ("डिवाइस पर छोड़ दिया गया कोई त्रुटि नहीं") उफ़ का कारण बन सकता है। इस गतिरोध को हल करने के लिए आपको अपेक्षाकृत बड़ी फ़ाइल को हटाना पड़ सकता है, फिर एक असंतुलन सफल होगा। (2.6.33)
    • समय की विस्तारित अवधि के लिए रिबैलेंसिंग बहुत तीव्र CPU उपयोग का कारण बन सकता है। (2.6.34 और 2.6.35)

आपको खुद को दोहराने के लिए क्षमा करें, लेकिन मैं नया उपकरण जोड़ने वाला हूं और मुझे सुनिश्चित करने की आवश्यकता है। RAID0 के बारे में सभी स्रोतों ने जांच की कि डिस्क एक ही आकार की होनी चाहिए (उदाहरण के लिए freebsd geom doc: "RAID0 स्ट्राइप में प्रत्येक डिस्क एक ही आकार की होनी चाहिए, क्योंकि I / O अनुरोध पढ़ने या लिखने के लिए interleaved हैं) समानांतर में कई डिस्क। ")। क्या आप पुष्टि कर सकते हैं कि यह Btrfs के साथ काम करता है?
fokenrute

मुझे क्षमा करें, मेरे पास मल्टी-डिवाइस btrfs नहीं है, जिसकी मैं पुष्टि नहीं कर सकता, हालाँकि मैं कुछ भी नहीं कह सकता कि raid0 + btrfs के लिए समान डिवाइस आकार होने के बारे में कुछ भी कहे, हालाँकि यदि आपके पास पर्याप्त समय है, तो नई डिस्क को विभाजित करें 1 टीबी / 1 टीबी, विभाजन में से एक के लिए पुरानी डिस्क को बैकअप करें, खाली 1 टीबी को संलग्न करें, अगर यह काम करता है 2 डी पैरेन्ड।
OneOfOne 1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.