मैंने 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 में थोड़ा सा भेजते हैं / प्राप्त करते हैं। यह आपके लिए एक विकल्प हो सकता है।