বিআরটিএফসের কি স্ন্যাপশট তুলনা করার একটি কার্যকর উপায় আছে?


21

যদিও মাউন্ট করা বিভিন্ন স্ন্যাপশটগুলি বিভিন্ন কাজ করে, মনে হয় এটি বেশিরভাগ ক্ষেত্রে মারাত্মকভাবে ধীর হতে পারে।

আলাদা আলাদা স্ন্যাপশটগুলির জন্য কি বিটিআরএফস নির্দিষ্ট কার্যকারিতা রয়েছে? (আমি ডক্সে কোনওটি খুঁজে পেতে অক্ষম ছিলাম)


কোন ব্লকটি পরিবর্তন হয়েছে এবং কীভাবে এটি সন্ধান করা সম্ভব হতে পারে, আপনি যদি পরে প্রকৃতপক্ষে ফাইল-সিস্টেমগুলি (ডিরেক্টরিগুলি) তুলনা করতে চান তবে আপনার কেসটি বিবেচনা করা উচিত later উদাহরণস্বরূপ, আপনার যদি ফাইল Aধারণ করে থাকে তবে এর স্ন্যাপশটে aলিখুন bএবং পরে এটিকে আবার পরিবর্তন করুন a, ফাইলটি আসলেই কোনও পরিবর্তন হয়নি।
ক্রিশ্চিয়ান সিউপিতু

দেখে মনে হচ্ছে এটি উত্স কোড পুনর্বিবেশন নিয়ন্ত্রণের সাথে সম্পূর্ণরূপে সমান হবে যেখানে আমি কিছু মিস করছি না যদি না এই ধরণের জিনিসটি সর্বদা করা হয়।
ক্যাটসকুল

বিটিআরএফএস ফাইল সিস্টেমে আরএসসিএনসি জাতীয় কিছু চালানোর অতিরিক্ত সমস্যা হ'ল, নোয়াটিম মাউন্ট অপশনটি ব্যবহার না করা হলে, সমস্ত ফাইলগুলি পরিবর্তিত হয়েছে কিনা তা পরীক্ষা করার জন্য তাদের কার্যকরভাবে সংশোধন করতে পারে এবং পরবর্তী কোনও স্ন্যাপশট এমনকি যদি কোনও ফাইল পরিবর্তিত না হয় তবে বড় হবে । আলোচনার জন্য lwn.net/Articles/499293 দেখুন ।
লুকা সিটি

উত্তর:


11

মনে হচ্ছে আপনি বিটিআরএফ প্রেরণ / গ্রহণের সন্ধান করছেন যা লিনাক্স ৩.6 এ প্রদর্শিত হবে। sendকমান্ড দুই স্ন্যাপশট মধ্যে পার্থক্য একটি লগ ফাইল তৈরি করে, এবং receiveকমান্ড একটি ফাইল থেকে পরিবর্তন প্রয়োগ করা হয়। নোট করুন যে প্রেরণ / গ্রহণ একটি কাস্টম ফাইল ফর্ম্যাট ব্যবহার করে, সুতরাং ফাইলটি ঠিক দেখতে, বলার মতো, আলাদা বা তার মতো দেখায় না।


নিস! ঠিক এটাই আমি খুঁজছিলাম।
ক্যাটসকুল

2
উদাহরণস্বরূপ অ্যাপ্লিকেশন যা এই আউটপুটটিকে বিশ্লেষণ করে দেখুন: github.com/sysnux/btrfs-snapshots-diff (আমার দ্বারা নয়)
এট রিগ

10

আমি ডেবিয়ান স্থিতিশীল যা চালাচ্ছি না btrfs send, তাই আমি ব্যবহার করে একটি সমাধানের দিকে চেয়েছিলাম btrfs subvolume find-new

আপনার যদি স্ন্যাপশট 1 এবং স্ন্যাপশট 2 থাকে এবং আপনি পরবর্তীগুলির মধ্যে কী পরিবর্তন হয়েছে তা জানতে চান স্ন্যাপশট 2, যেহেতু স্ন্যাপশট 1 তৈরি করা হয়েছিল আপনি নীচের স্ক্রিপ্টটি ব্যবহার করতে পারেন যা সরবরাহ করে

btrfs-diff oldsnapshot/ newsnapshot/

যা নিউজেনাপশটে / ওল্ডস্ন্যাপশট / থেকে পরিবর্তিত সমস্ত ফাইলের তালিকা প্রদর্শন করবে।

#!/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 ফাইলগুলি পরিবর্তিত হয়েছে finds এটি বর্তমান প্রজন্মের সংখ্যাও জানায়।

আদেশ সহকারে

যেমন একটি সাবভলিউম মামলার দৈনিক স্ন্যাপশট নিন:

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

স্ন্যাপ 1 এবং স্ন্যাপ 2 এর মধ্যে কী পরিবর্তন হয়েছে?

$ btrfs-diff snap1/ snap2/
bar1
foo2

সুতরাং আমরা নতুন ফাইলটি দেখতে পাচ্ছি, পরিবর্তিত ফাইলটি দেখতে পাব, তবে মোছার খবরটি পাওয়া যায় না । এর কারণ হ'ল কমান্ডটি ফাইলগুলিতে উপস্থিত রয়েছে যা এখন নেই not

স্ন্যাপ 2 এবং লাইভ সাবভলিউমের মধ্যে কী পরিবর্তন হয়েছিল?

$ btrfs-diff snap2/ live/
foo3

নাম পরিবর্তিত ফাইল রিপোর্ট করা হয় না । এর ডেটা পরিবর্তন হয়নি।

এখন যদি আমরা নাম পরিবর্তিত ফাইলে ডেটা যুক্ত করি

date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3

ঠিক আছে, বুদ্ধিমান। তবে আসুন একটি নতুন ফাইল তৈরি করা যাক

date >live/lala
btrfs-diff snap2/ live/
bar2
foo3

অঁ্যা! লালা কোথায়? । আপনি যদি অন্য কোনও ফাইল যুক্ত করেন তবে lalaউপস্থিত হয়। সুতরাং এই আচরণটি কিছুটা বিজোড়। উইকি সম্ভবত যা বলে:

সন্ধান-নতুন পদ্ধতির কিছু মারাত্মক সীমাবদ্ধতা রয়েছে এবং এটি প্রেরণ / গ্রহণের মতো কোনও কিছুর জন্য সত্যই ব্যবহারযোগ্য নয়।

যাইহোক, পূর্ববর্তী অবস্থার তুলনায় আপনি যখন কোনও লাইভ সাবভলিউম তুলনা করেন, তখন অদ্ভুততা আসে যখন আপনি কেবল (কেবল পঠনযোগ্য) স্ন্যাপশটের তুলনা করেন না। সুতরাং আপনি মুছে ফেলা ফাইলগুলি সনাক্ত করতে না চাইলে এটি এখনও কার্যকর হতে পারে।


ওহে, আমি আপনার সরঞ্জামটি কিছুটা বাড়িয়েছি। এই সরঞ্জামটি স্ন্যাপশটে ঘটে যাওয়া সমস্ত পরিবর্তনের একটি স্ট্রিম আপনাকে দেখিয়ে দেবে (এটি পৃথক লিঙ্কগুলিও নির্বাচন করতে পারে) github.com/talwrii/btrlog
Att

1

এটি স্ন্যাপশট সুবিধার্থে সরঞ্জাম দ্বারা সমর্থিত snapper

sudo snapper -c config diff 445..446

অবশ্যই এটি snapperআপনার স্ন্যাপশটের জন্য ব্যবহার করা প্রয়োজন ।

এই স্ন্যাপশট আইডিগুলি ব্যবহার করে পাওয়া যাবে snapper list -a। দুর্ভাগ্যক্রমে স্নাপার লেখার সময় কোনও একক কনফিগারেশনের জন্য তালিকা স্ন্যাপশটগুলিকে সমর্থন করে না, যদিও এই সংখ্যাগুলি সাবভলিউমের নাম থেকে পাওয়া যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.