स्नैपशॉट को साझा करने वाले डेटा को संरक्षित करने वाले विभिन्न माध्यमों में फाइलट्रॉफ़्ट को क्लोन कैसे करें


9

मैंने btrfs raid क्षमताओं को आज़माने का फैसला किया है। मैं के साथ एक btrfs की स्थापना की

sudo mkfs.btrfs -m raid10 -d raid10 /dev/sda9 /dev/sdb9 /dev/sdc9 /dev/sdd9

अब मैं अपने मौजूदा btrfs विभाजन को क्लोन करना चाहता हूं, (जो linux-raid के शीर्ष पर बैठता है)। एक साधारण का उपयोग नहीं किया जा सकता है cp -a, क्योंकि 40 से अधिक स्नैपशॉट-आधारित बैकअप हैं (जो मैं संरक्षित करना चाहता हूं), और मैं बस उन सभी भंडारण को ओवरफिल कर दूंगा जिन्हें मैं कई बार स्पेयर कर सकता हूं।

अब तक मैं दो विकल्प देख सकता हूं:

partclone.btrfs -s /path/to/original/fs -o /dev/sda9 -b

और मुझे लगता है मुझे भी इसकी आवश्यकता होगी btrfs balance start /dev/sda9

तथा

करते हैं: वृद्धिशील प्रतिलिपि के cp -aरूप में ज्यादा के रूप में भंडारण में फिट बैठता है, और फिर bedupडी-डुप्लिकेट फ़ाइलों, और लूप का उपयोग करें।

पसंदीदा (अर्थात सर्वोत्तम अभ्यास) विधि क्या है? मैं पहले वाले को बहुत पसंद करूंगा; इसमें बहुत कम समय लगना चाहिए। या हो सकता है कि इस प्रक्रिया में से किसी में भी कुछ बुराई "गट्टा" छिपी हो (इस तथ्य के साथ कि पाठ्यक्रम में प्रयोगात्मक है)


पहला सवाल बस सवाल से बाहर है; हालांकि अद्भुत उपकरण partclone.btrfsहै, यह स्पष्ट रूप से मल्टी-डिवाइस फ़ाइल सिस्टम का समर्थन नहीं करता है। :-(

जवाबों:


7

मैंने 2 साल पहले इसी तरह का सवाल पूछा था।

हालाँकि मेरे मामले में, मैं केवल raid0 पर एक उपकरण की प्रतिलिपि बनाने की योजना बना रहा था।

मुझे आखिरकार एक समाधान मिल गया । उस समय आप raid0 से raid10 में परिवर्तित नहीं हो सकते थे, लेकिन ऐसा लगता है कि कर्नेल 3.3 के बाद से, अब आप कर सकते हैं। ताकि समाधान अंत में आपके लिए काम कर सके।

उस दृष्टिकोण के साथ एक समस्या यह है कि यह फसीड को कॉपी करता है। जिसका अर्थ है कि आप FS और उसकी प्रतिलिपि दोनों को एक ही मशीन पर माउंट नहीं कर सकते। उस समय, fsuidFS को बदलने के लिए कोई उपकरण नहीं था , लेकिन यह अब बदल सकता है।

मूल डिवाइस के ऊपर एक कॉपी-ऑन-राइट लेयर जोड़ने का विचार है ताकि इसे लिखा जा सके, लेकिन कोई भी संशोधन कहीं और किया जाता है जिसे आप बाद में छोड़ सकते हैं। इसका मतलब है कि आपको अतिरिक्त भंडारण स्थान की आवश्यकता है (उदाहरण के लिए बाहरी ड्राइव पर)।

फिर उस COW को माउंट करें FS मूल के बजाय, FS प्रति के लिए उपकरण जोड़ें और गाय का उपकरण हटा दें।

कॉपी-ऑन-राइट के लिए, आप डिवाइस मैपर का उपयोग कर सकते हैं।

लेखन क्षेत्र पर डिस्पोजेबल कॉपी के लिए, यहां मैं एक लूप डिवाइस का उपयोग करता हूं।

मान लीजिए कि आप क्लोन करने के लिए चाहते हैं मान लीजिए /dev/sdaपर /dev/sd[bcde]:

गाय वापस स्टोर बनाएँ:

truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store

अब मूल FS को अनमाउंट करें यदि माउंट किया गया है और modprobe -r btrfsयह सुनिश्चित करने के लिए कि यह हस्तक्षेप करने वाला नहीं है और इसे अपने डिवाइस स्कैन को भूल जाएं।

फिर गाय का उपकरण बनाएं:

echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed

अब /dev/mapper/cowedकी तरह है /dev/sda, सिवाय इसके कि कुछ भी यह करने के लिए लिखा में खत्म हो जाएगा /dev/loop0और /dev/sdaअछूता हो जाएगा।

अब, आप इसे माउंट कर सकते हैं:

mount /dev/mapper/cowed /mnt

अन्य उपकरणों को जोड़ें:

btrfs dev add /dev/sd[bcde] /mnt

और पुराने को हटा दें:

btrfs dev del /dev/mapper/cowed /mnt

जब वह खत्म हो जाता है, तो आप शटडाउन और अनप्लग कर सकते हैं या आसानी से बना सकते हैं /dev/sdaक्योंकि यह अन्य लोगों की तरह ही समान है, btrfsफिर भी इसके साथ गड़बड़ हो सकती है।

अब, अगर मैं सही तरीके से समझूं, तो आपने हाल ही में btrfs-prog प्राप्त कर लिया है, आपको ऐसा करने में सक्षम होना चाहिए:

btrfs balance start -d convert=raid10 /mnt

Raid10 में परिवर्तित करने के लिए। सिद्धांत रूप में, यह सुनिश्चित करना चाहिए कि हर डेटा चंक को कम से कम 2 डिस्क पर कॉपी किया गया है।

मैं दृढ़ता से अनुशंसा करूंगा कि आप लूप उपकरणों पर एक डमी btrfs पर परीक्षण करें, क्योंकि यह सब मेमोरी से है और मुझे यह गलत लग सकता है (उदाहरण के लिए मेरे संपादन से पहले मेरा प्रारंभिक उत्तर देखें)।

ध्यान दें कि कर्नेल 3.6 के बाद से, btrfs औजार zfs में थोड़ा सा भेजते हैं / प्राप्त करते हैं। यह आपके लिए एक विकल्प हो सकता है।


शानदार जवाब, धन्यवाद। मैं इसका परीक्षण करूंगा। अब मैं भेजने / प्राप्त करने के साथ प्रयोग कर रहा हूं।
एडम रिक्ज़ोस्की

@ स्टीफन चेज़लस गैमन लिंक मर चुके हैं (शायद हमेशा के लिए)। क्या आप अपना उत्तर समायोजित कर सकते हैं?
जोनास स्टीन

4

स्टीफन का विचार btrfs बिलिन टूल्स के माध्यम से किया जा सकता है (यही कारण है कि यह अच्छा है): पुराने btrfs के माध्यम से एक बीज डिवाइस बनाएं btrfstune -S 1 /dev/device, उपकरणों को जोड़ें, बीज डिवाइस को हटाएं, करें btrfs balance start। बीज डिवाइस एक रीड-ओनली डिवाइस है जो रीड-रिलेटेबल फाइल सिस्टम का हिस्सा हो सकता है।


1

मैंने बीजारोपण का उपयोग करने के लिए @ इग्निस के सुझाव का पालन करने की कोशिश की, लेकिन इसके साथ समस्या थी; बीज डिवाइस को निकालने की कोशिश करते समय सिस्टम में एक त्रुटि थी और मैं इसे दूर नहीं कर सका। तब मैंने पाया कि अब (btrfs-progs v3.19-64- g19a806f, शायद पहले नहीं) कमांड है:

  btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>

जो मेरे मौजूदा btrfs फाइलसिस्टम (जो कि LVM लॉजिकल वॉल्यूम में था) को एक नए विभाजन पर एक डोडल बनाकर क्लोनिंग करता है। ध्यान दें कि मई 2015 तक यह RAID5 / 6 प्रोफाइल के लिए काम नहीं करता है - पूरी जानकारी के लिए मैन पेज देखें।


1
btrfs replace startबैकअप-उद्देश्यों के लिए कभी भी उपयोग न करें !! यह आपके डिवाइस ट्री को दूषित कर देता है और ड्राइव को अनमाउंट कर देता है! त्रुटियों से उबरना मेरे लिए असंभव था, इसलिए मैंने dd -tool के साथ किसी अन्य ब्लॉक डिवाइस से एक छवि प्रतिलिपि को पुनर्स्थापित किया । केवल btrfs replaceअंतिम ड्राइव माइग्रेशन के लिए उपयोग करें ।
कर्मस

0

विकल्प 1 - डेटा कॉपी फिर UUID को बदलें

यह सुनिश्चित करें कि स्रोत विभाजन अनमाउंट किया गया है और इसे स्वचालित नहीं किया जाएगा।

या तो dd(धीमा, गूंगा) या का उपयोग करेंpartclone.btrfs -b -s /dev/src -o /dev/target

btrfstune -uयूयूआईडी को कॉपी के बाद और माउंट करने से पहले बदलने के लिए उपयोग करें ।

डाटा नुकसान की चेतावनी : क्या नहीं करने के लिए (ऑटो) की कोशिश माउंट या तो मूल या कॉपी तक UUID बदल गया है


विकल्प 2 - btrfs-clone

मैंने व्यक्तिगत रूप से कोशिश नहीं की है btrfs-clone, लेकिन यह एक मौजूदा बीटीआरएफएस फाइल सिस्टम को एक नए से क्लोन करने के लिए रखता है, क्रम में प्रत्येक सबवोल्यूम को क्लोन करता है।

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