कैसे एक btrfs फाइल सिस्टम की प्रतिलिपि बनाएँ


17

एक btrfs फाइलसिस्टम की सामग्री की पूरी प्रतिलिपि कैसे बना सकते हैं ? द्वारा पूरी कॉपी मैं न केवल मतलब मौजूदा डेटा , लेकिन यह भी विभिन्न सबवॉल्यूम उनके साथ फोटो एक ही सामग्री के साथ ब्लॉक की प्रतिलिपि नहीं: आदर्श उनकी गाय संरचनाओं (यानी संरक्षण,।

ऐसा लगता है कि एक ब्लॉक-स्तरीय प्रतिलिपि (जैसे कि dd) एक अच्छा विचार नहीं है, क्योंकि यह यूयूआईडी को डुप्लिकेट करता है, और इसे आसानी से बदलने का कोई तरीका नहीं है , जाहिरा तौर पर।

जवाबों:


4

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

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

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

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

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


विकल्प 2 - btrfs-clone

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


1
पूर्णता के लिए, इसे 2015 के दौरान btrfs-progs के विकल्प के रूप में जोड़ा गया था: github.com/kdave/btrfs-progs/commit/…
goncalopp

16

मुझे आज (2016-05-06) के अनुसार कोई भी तैयार समाधान नहीं मिला है, लेकिन कॉपी-ऑन-राइट हैंडलिंग सहित मेरे उद्देश्यों के लिए समस्या का समाधान किया गया है। "क्लोन" /sourceकरने के लिए कदम /targetहैं:

  1. सबवॉल्यूम द्वारा आदेश दिया की एक सूची प्राप्त ogen: btrfs subvolume list -qu --sort ogen /source। छंटनी शायद यह गारंटी देने के लिए पर्याप्त है कि स्नैपशॉट या सबवोल्यूम जो पहले वाले पर निर्भर होते हैं उन्हें पहले संभाला जाता है। कॉपी-ऑन-राइट से निपटने के लिए यह महत्वपूर्ण है, क्योंकि हमें आधार वॉल्यूम को पहले स्थानांतरित करना होगा।

  2. सभी उपखंडों को केवल पढ़ने के लिए उपयोग करें btrfs property set -ts /source/some-volume ro true

  3. अब, ऊपर की ओर से शुरू होने वाली सूची से प्रत्येक सबवोल्यूम के लिए, निम्नलिखित करें:

    1. यदि वॉल्यूम में पैरेंट UUID नहीं है (जैसा कि प्रदर्शित -) या पैरेंट UUID सूची में मौजूद नहीं है, तो चलाएं:btrfs send /source/some/volume | btrfs receive /target/some/

    2. यदि वॉल्यूम में कोई मूल UUID है जो अभी भी मौजूद है, तो हमें इसे पहले से ही स्थानांतरित कर देना चाहिए था --sort ogenऔर हम इसका उपयोग डेटा दोहराव से बचने के लिए आधार के रूप में कर सकते हैं। इसलिए, सूची में मूल UUID का मार्ग खोजें और चलाएं: btrfs send -p /source/parent/volume/ -c /source/parent/volume/ /source/some/volume/ | btrfs receive /target/some/(btrfs शायद -pतर्क को स्वचालित रूप से अनुमान लगाएगा , लेकिन मैं स्पष्ट होना पसंद करता हूं)।

    3. उपरोक्त आदेशों में से एक को चलाने के बाद लक्ष्य और स्रोत को फिर से पढ़ें-लिखें btrfs property set -ts /source/some/volume ro false; btrfs property set -ts /target/some/volume ro false:। यदि स्रोत पहले से ही पढ़ा गया है, तो इस चरण को छोड़ दिया जा सकता है।

यह कई मामलों को संभालना चाहिए। चेतावनियां:

  1. सबवॉल्म्स / स्नैपशॉट्स को घोंसले बनाते समय ऑर्डर करने के संबंध में कुछ जटिलताएं हो सकती हैं।

  2. पूरी प्रक्रिया स्पष्ट रूप से स्क्रिप्टेड होने पर अधिक मजेदार है।

  3. btrfs sendएकाधिक क्लोन स्रोत ( -c) तर्कों को स्वीकार करता है। यह न केवल माता-पिता के वॉल्यूम पथ को निर्दिष्ट करने के लिए फायदेमंद हो सकता है, बल्कि किसी भी पूर्वजों या बस किसी भी पहले भेजे गए संस्करणों से भी। यहां कोई फर्क नहीं पड़ा, लेकिन यह हो सकता है - सिर्फ एक अनुमान - कुछ मामलों में डेटा दोहराव से बचने में मदद करें।

  4. मैं अनिश्चित हूं कि अगर स्नैपशॉट या सबवोल्यूम पर किसी भी मेटा जानकारी को रास्ते में खो दिया जाता है, लेकिन अधिकांश उपयोग के मामलों के लिए दिलचस्प चीजों को संरक्षित किया जाना चाहिए।

पूरी प्रक्रिया ने मुझे dfएक 10 जीबी छवि के साथ 800 जीबी फाइल सिस्टम को स्थानांतरित करने में मदद की (तदनुसार ) 10 जीबी छवि के साथ 3.8 जीबी का उपयोग किया। बिना ट्रांसफर किए -pऔर -cलगभग 190 जीबी का उपयोग किया होगा, इसलिए डेटा दोहराव से वास्तव में बचा गया था।


अच्छा जवाब दिया, धन्यवाद। क्या आप ogenइसका मतलब बता सकते हैं ?
16

@ ड्रेमफायर सबवोल्यूम ogenकी "मूल पीढ़ी" है। मुझे यह स्वीकार करना होगा कि मैं मतभेदों को पूरी तरह से नहीं समझता हूं या क्या (गैर-मूल) पीढ़ी का उपयोग करना सही होगा, लेकिन मान लें कि कुछ परीक्षण ने संकेत दिया कि यह बेहतर काम किया (दोहराव से बचा गया)। जब सबवूलेशन पर आधारित स्नैपशॉट बनाते समय जेनरेशन अपडेटेड लगता है, तो ogen नहीं। मुझे कुछ निष्कर्षों के बारे में सुनने में दिलचस्पी होगी। IRC या Btrfs मेलिंग सूची पर जाँच करना शायद सबसे अच्छा है।
थॉमस लूजट

2
मैंने अभी @ThomasLuzat का एल्गोरिथ्म लिया, इसके चारों ओर कुछ फ़ुल (त्रुटि जाँच आदि) जोड़े और इसे यहाँ रखा: github.com/jernst/btrfs-copy-filesystem/blob/master/… । इसने मेरी समस्या को एक भ्रष्ट डिस्क से दूर करने के लिए काम किया, और इसकी कोई गारंटी नहीं है कि यह किसी और के लिए काम करेगा। लेकिन मैं इसे यहाँ पोस्ट कर रहा हूँ वैसे भी कोई भी इसे कोड करने के लिए स्क्रैच के अलावा कहीं से शुरू करना चाहता है। वर्तमान में एक नए यूबीओएस तरीकों पर निर्भर करता है लेकिन पोर्ट के लिए आसान होना चाहिए।
जोहान्स अर्न्स्ट

6

मैंने एक अजगर उपकरण बनाया है जो ऐसा कर सकता है। मैंने ऐसा इसलिए किया क्योंकि मैंने @Thomas Luzat के दृष्टिकोण को अपने और @Johannes अर्न्स्ट के कार्यान्वयन में प्रयोग करने की कोशिश की, और प्रयुक्त स्थान क्लोनिंग प्रक्रिया में 20GB से 40GB तक दोगुना हो गया। मुझे लगा कि कुछ अधिक कुशल की जरूरत है।

इस सामान्य फ़ाइल सिस्टम इतिहास पर विचार करें:

current ---------------------------------\
             |       |        |          |
           snap4   snap3    snap2      snap1

थॉमस के एल्गोरिथ्म के साथ, "वर्तमान" को पहले क्लोन किया जाएगा, और सभी स्नैपशॉट्स ("वर्तमान" के पूर्व राज्यों के स्नैपशॉट्स) क्लोन स्रोत / माता-पिता के रूप में "वर्तमान" का उपयोग करेंगे। जाहिर है, यह स्नैप 4 पर स्नैप 3 को आधार बनाने के लिए बेहतर होगा, स्नैप 3 पर स्नैप 2, आदि।

और यह सिर्फ आईसबर्ग टिप है; एक जटिल इतिहास के साथ एक btrfs फाइल सिस्टम में "सर्वश्रेष्ठ" क्लोन स्रोत (अंतरिक्ष बचत के संदर्भ में) एक गैर-तुच्छ समस्या है। मैं इस समस्या को हल करने के लिए 3 अन्य रणनीतियों के साथ आया हूं, जो अंतरिक्ष को अधिक कुशलता से उपयोग करने के लिए लगता है। एक वास्तव में स्रोत के थोड़ा नीचे क्लोन आकार में हुई है।

यदि आप रुचि रखते हैं तो आप जीथूब पेज पर विवरण पढ़ सकते हैं ।



2

के साथ btrfs-send, जो मैंने आखिरी बार देखा था, अभी भी प्रायोगिक पैच थे जो कि btrfs मेलिंग सूची पर घूम रहे थे।


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