माउंटेड स्नैपशॉट को अलग करते समय यह काम करेगा, ऐसा लगता है कि यह कई मामलों में बहुत धीमा हो सकता है।
क्या स्नैपशॉट को अलग करने के लिए btrfs की विशिष्ट कार्यक्षमता है? (डॉक्स में मुझे कोई भी नहीं मिला था)
माउंटेड स्नैपशॉट को अलग करते समय यह काम करेगा, ऐसा लगता है कि यह कई मामलों में बहुत धीमा हो सकता है।
क्या स्नैपशॉट को अलग करने के लिए btrfs की विशिष्ट कार्यक्षमता है? (डॉक्स में मुझे कोई भी नहीं मिला था)
जवाबों:
ऐसा लगता है कि आप btrfs सेंड / रिसीव की तलाश में हैं , जो लिनक्स 3.6 में दिखाई देगा। send
आदेश दो स्नैपशॉट के बीच मतभेद की एक लॉग फ़ाइल बनाता है, और receive
आदेश एक फ़ाइल से परिवर्तनों लागू होता है। ध्यान दें कि भेजने / प्राप्त करने के लिए एक कस्टम फ़ाइल प्रारूप का उपयोग किया जाता है, इसलिए फ़ाइल बिल्कुल वैसी नहीं दिखेगी, जैसे, अंतर या टार।
मैं डेबियन स्थिर चला रहा हूं जो कि नहीं है btrfs send
, इसलिए मैंने एक समाधान का उपयोग किया btrfs subvolume find-new
।
यदि आपके पास स्नैपशॉट 1 और स्नैपशॉट 2 है और आप जानना चाहते हैं कि बाद के एक में क्या बदल गया है, स्नैपशॉट 2, क्योंकि स्नैपशॉट 1 बनाया गया था, आप नीचे दी गई स्क्रिप्ट का उपयोग कर सकते हैं
btrfs-diff oldsnapshot/ newsnapshot/
जो समाचारों में परिवर्तित सभी फाइलों को सूचीबद्ध करेगा / oldsnapshot / के बाद से।
#!/bin/bash
usage() { echo $@ >2; echo "Usage: $0 <older-snapshot> <newer-snapshot>" >2; exit 1; }
[ $# -eq 2 ] || usage "Incorrect invocation";
SNAPSHOT_OLD=$1;
SNAPSHOT_NEW=$2;
[ -d $SNAPSHOT_OLD ] || usage "$SNAPSHOT_OLD does not exist";
[ -d $SNAPSHOT_NEW ] || usage "$SNAPSHOT_NEW does not exist";
OLD_TRANSID=`btrfs subvolume find-new "$SNAPSHOT_OLD" 9999999`
OLD_TRANSID=${OLD_TRANSID#transid marker was }
[ -n "$OLD_TRANSID" -a "$OLD_TRANSID" -gt 0 ] || usage "Failed to find generation for $SNAPSHOT_NEW"
btrfs subvolume find-new "$SNAPSHOT_NEW" $OLD_TRANSID | sed '$d' | cut -f17- -d' ' | sort | uniq
समझाने के लिए: स्नैपशॉट की एक विशेष 'पीढ़ी' के बादbtrfs subvolume find-new
बदल गई फाइलें पाता है । यह वर्तमान पीढ़ी की संख्या की भी रिपोर्ट करता है।
उदाहरण के लिए एक सबवोल्यूम केस का दैनिक स्नैपशॉट लें:
mkdir test && cd test
btrfs subvolume create live
date >live/foo1
date >live/bar1
btrfs subvolume snapshot live/ snap1
date >live/foo2 # new file
date >>live/bar1 # modify file
rm live/foo1 # delete file
btrfs subvolume snapshot live/ snap2
date >live/foo3 # new file
mv live/bar{1,2} # rename file
rm live/foo2 # delete file
Snap1 और Snap2 के बीच क्या बदला?
$ btrfs-diff snap1/ snap2/
bar1
foo2
इसलिए हम नई फ़ाइल देख सकते हैं, संशोधित फ़ाइल देख सकते हैं, लेकिन हटाने की सूचना नहीं है । ऐसा इसलिए है क्योंकि कमांड उन फाइलों पर रिपोर्ट करता है जो मौजूद हैं, ऐसा नहीं है जो अब नहीं है।
Snap2 और लाइव सबवोल्यूम के बीच क्या बदलाव आया?
$ btrfs-diff snap2/ live/
foo3
नाम परिवर्तित फ़ाइल की सूचना नहीं है । इसका डेटा नहीं बदला है।
अब क्या होगा अगर हम नामांकित फ़ाइल में डेटा जोड़ते हैं
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
ठीक है, समझ में आता है। लेकिन चलो एक नई फ़ाइल बनाते हैं
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
एह! लाला कहाँ है? । यदि आप कोई अन्य फ़ाइल जोड़ते हैं, तो lala
प्रकट होती है। इसलिए यह व्यवहार थोड़ा अजीब है। शायद यही कारण है कि विकी कहते हैं:
खोज-नए दृष्टिकोण की कुछ गंभीर सीमाएँ हैं और इस प्रकार वास्तव में कुछ भेजने / प्राप्त करने के लिए उपयोग करने योग्य नहीं है।
हालाँकि, विषमता तब होती है जब आप किसी लाइव सबवॉल्म की तुलना किसी पूर्व स्थिति के खिलाफ करते हैं, न कि तब जब आप तुलना कर रहे होते हैं (केवल-पढ़ने के लिए) स्नैपशॉट। तो यह तब भी उपयोगी हो सकता है जब तक आप नष्ट की गई फ़ाइलों की पहचान नहीं करना चाहते।
यह स्नैपशॉट सुविधा उपकरण द्वारा समर्थित है snapper
।
sudo snapper -c config diff 445..446
बेशक यह आपको snapper
अपने स्नैपशॉट के लिए उपयोग करने की आवश्यकता है ।
इस स्नैपशॉट आईडी का उपयोग करके पाया जा सकता है snapper list -a
। दुर्भाग्य से, लेखन के समय स्नैपर ने एक भी विन्यास के लिए सूची स्नैपशॉट का समर्थन नहीं किया, हालांकि ये संख्याएँ सबवूफर नामों से पाई जा सकती हैं।
A
युक्तa
, लिखनेb
इसके स्नैपशॉट में और बाद में वापस करने के लिए बदलa
, फ़ाइल वास्तव में सब पर नहीं बदला।