দাবি অস্বীকার: আমি কখনই zvols ব্যবহার করি নি, তাই স্বাভাবিক ফাইল সিস্টেম বা স্ন্যাপশটের তুলনায় এগুলি প্রতিরূপে অন্যরকম কিনা তা আমি বলতে পারি না। আমি ধরে নিলাম এগুলি কিন্তু এটির জন্য আমার শব্দটি গ্রহণ করবেন না।
আপনার প্রশ্নটি আসলে একাধিক প্রশ্ন, আমি তাদের আলাদাভাবে উত্তর দেওয়ার চেষ্টা করি:
দূরবর্তী অবস্থানে সম্পূর্ণ পুলটি কীভাবে প্রতিলিপি / মিরর করা যায়
আপনাকে টাস্কটি দুটি ভাগে বিভক্ত করতে হবে: প্রথমত, প্রাথমিক প্রতিলিপিটি সম্পূর্ণ করতে হবে, তারপরে ইনক্রিমেন্টাল প্রতিরক্ষা সম্ভব হয়, যতক্ষণ না আপনি আপনার প্রতিরূপ স্ন্যাপশটগুলিতে গোলযোগ না করেন । বর্ধিত প্রতিরূপ সক্ষম করতে, আপনাকে সর্বশেষ প্রতিলিপি স্ন্যাপশট সংরক্ষণ করতে হবে, এর আগে সমস্ত কিছু মুছতে পারে। আপনি যদি পূর্বের স্ন্যাপশটটি মুছে ফেলেন, zfs recv
তবে অভিযোগটি প্রতিবেদনটি বাতিল এবং বাতিল করতে হবে। এই ক্ষেত্রে আপনাকে আবারও শুরু করতে হবে, তাই এটি না করার চেষ্টা করুন।
আপনার যদি কেবল সঠিক বিকল্পের প্রয়োজন হয় তবে সেগুলি হ'ল:
zfs send
:
-R
: প্রদত্ত পুল বা ডেটাসেটের অধীনে সমস্ত কিছু প্রেরণ করুন (পুনরাবৃত্ত প্রতিরূপ, সব সময় প্রয়োজন, অন্তর্ভুক্ত -p
)। এছাড়াও, গ্রহণ করার সময়, সমস্ত মোছা উত্স স্ন্যাপশটগুলি গন্তব্যে মুছে ফেলা হয়।
-I
: সর্বশেষ প্রতিরূপ স্ন্যাপশট এবং বর্তমান প্রতিলিপি স্ন্যাপশটের মধ্যে সমস্ত মধ্যবর্তী স্ন্যাপশট অন্তর্ভুক্ত করুন (কেবলমাত্র ইনক্রিমেন্টাল প্রেরণের সাথে প্রয়োজনীয়)
zfs recv
:
-F
: উত্সে মুছে ফেলা বিদ্যমান ডেটাসেটগুলি মোছা সহ লক্ষ্য পুলটি প্রসারিত করুন
-d
: উত্স পুলের নামটি ফেলে দিন এবং এটি গন্তব্য পুলের নামের সাথে প্রতিস্থাপন করুন (বাকী ফাইল সিস্টেমের পাথগুলি সংরক্ষণ করা হবে, এবং প্রয়োজনে এটিও তৈরি করা হয়েছে)
-u
: গন্তব্যে ফাইল সিস্টেম মাউন্ট করবেন না
আপনি যদি একটি সম্পূর্ণ উদাহরণ পছন্দ করেন তবে এখানে একটি ছোট স্ক্রিপ্ট রয়েছে:
#!/bin/sh
# Setup/variables:
# Each snapshot name must be unique, timestamp is a good choice.
# You can also use Solaris date, but I don't know the correct syntax.
snapshot_string=DO_NOT_DELETE_remote_replication_
timestamp=$(/usr/gnu/bin/date '+%Y%m%d%H%M%S')
source_pool=tank
destination_pool=tank
new_snap="$source_pool"@"$snapshot_string""$timestamp"
destination_host=remotehostname
# Initial send:
# Create first recursive snapshot of the whole pool.
zfs snapshot -r "$new_snap"
# Initial replication via SSH.
zfs send -R "$new_snap" | ssh "$destination_host" zfs recv -Fdu "$destination_pool"
# Incremental sends:
# Get old snapshot name.
old_snap=$(zfs list -H -o name -t snapshot -r "$source_pool" | grep "$source_pool"@"$snapshot_string" | tail --lines=1)
# Create new recursive snapshot of the whole pool.
zfs snapshot -r "$new_snap"
# Incremental replication via SSH.
zfs send -R -I "$old_snap" "$new_snap" | ssh "$destination_host" zfs recv -Fdu "$destination_pool"
# Delete older snaps on the local source (grep -v inverts the selection)
delete_from=$(zfs list -H -o name -t snapshot -r "$source_pool" | grep "$snapshot_string" | grep -v "$timestamp")
for snap in $delete_from; do
zfs destroy "$snap"
done
এসএসএইচের চেয়ে দ্রুত কিছু ব্যবহার করুন
আপনার যদি পর্যাপ্ত সুরক্ষিত সংযোগ থাকে, উদাহরণস্বরূপ আইপিএসেক বা ওপেনভিপিএন টানেল এবং একটি পৃথক ভিএলএএন যা কেবল প্রেরক এবং রিসিভারের মধ্যে বিদ্যমান, আপনি এসএসএইচ থেকে এমবিফারের মতো এনক্রিপ্ট করা বিকল্পগুলিতে এখানে বর্ণিত হিসাবে স্যুইচ করতে পারেন , বা আপনি দুর্বল / কোনও এনক্রিপশন সহ এসএসএইচ ব্যবহার করতে পারেন এবং অক্ষম সংকোচনের, যা এখানে বিস্তারিত । এসএসএইচকে আরও দ্রুত হতে চাওয়া সম্পর্কেও একটি ওয়েবসাইট ছিল, তবে দুর্ভাগ্যক্রমে আমি ইউআরএলটি মনে করি না - আমি এটি পরে খুঁজে পেলে এটি সম্পাদনা করব।
খুব বড় ডেটাসেট এবং ধীর সংযোগের জন্য, এটি হার্ড ডিস্কের মাধ্যমে প্রথম সংক্রমণে কার্যকর হতে পারে (জুরিপুল সংরক্ষণ করতে এনক্রিপ্টড ডিস্ক ব্যবহার করুন এবং এটি কুরিয়ার, মেল বা ব্যক্তিগতভাবে সিলড প্যাকেজে সঞ্চারিত করুন)। প্রেরণ / পুনর্নির্মাণের জন্য ট্রান্সমিশনের পদ্ধতিটি যেমন গুরুত্বপূর্ণ না, আপনি ডিস্কে সমস্ত কিছু পাইপ করতে পারেন, পুলটি রফতানি করতে পারেন, ডিস্কটিকে তার গন্তব্যে প্রেরণ করতে পারেন, পুলটি আমদানি করতে পারেন এবং তারপরে এসএসএইচের মাধ্যমে সমস্ত বর্ধিত প্রেরণ প্রেরণ করতে পারেন।
বিশৃঙ্খলাযুক্ত স্ন্যাপশটগুলির সাথে সমস্যা
আগেই বলা হয়েছে, আপনি যদি আপনার অনুলিপি স্ন্যাপশটগুলি মুছুন / পরিবর্তন করেন তবে আপনি ত্রুটি বার্তাটি পাবেন
cannot send 'pool/fs@name': not an earlier snapshot from the same fs
যার অর্থ হয় আপনার আদেশটি ভুল ছিল বা আপনি একটি বেমানান অবস্থায় রয়েছেন যেখানে আপনাকে অবশ্যই স্ন্যাপশটগুলি সরিয়ে পুরোপুরি শুরু করতে হবে।
এর বেশ কয়েকটি নেতিবাচক প্রভাব রয়েছে:
- নতুন প্রতিলিপি স্ন্যাপশটটি সফলভাবে স্থানান্তর না করা পর্যন্ত আপনি কোনও প্রতিলিপি স্ন্যাপশট মুছতে পারবেন না। এই অনুলিপি স্ন্যাপশটগুলিতে অন্য সমস্ত (পুরানো) স্ন্যাপশটগুলির স্থিতি অন্তর্ভুক্ত থাকায়, মুছে ফেলা ফাইল এবং স্ন্যাপশটের খালি স্থানটি কেবলমাত্র যদি পুনর্নির্মাণটি শেষ হয় তবে পুনরুদ্ধার করা হবে। এটি আপনার পুলে অস্থায়ী বা স্থায়ী স্থানের সমস্যা তৈরি করতে পারে যা আপনি কেবল সম্পূর্ণ প্রতিলিপি প্রক্রিয়া পুনরায় চালু বা সমাপ্ত করেই ঠিক করতে পারেন।
- আপনার কাছে অনেকগুলি অতিরিক্ত স্ন্যাপশট থাকবে, যা তালিকার আদেশটি ধীর করে দেয় (ওরাকল সোলারিস 11 বাদে, যেখানে এটি স্থির করা হয়েছিল)।
- আপনার স্ক্রিপ্টগুলি বাদ দিয়ে (দুর্ঘটনাজনিত) অপসারণের বিরুদ্ধে স্ন্যাপশটগুলি রক্ষা করতে হবে।
এই সমস্যাগুলির একটি সম্ভাব্য সমাধান রয়েছে, তবে আমি নিজে চেষ্টা করে দেখিনি। আপনি ব্যবহার করতে পারেন zfs bookmark
, এই কাজের জন্য বিশেষভাবে তৈরি ওপেনসোলারিস / ইলুমাসের একটি নতুন বৈশিষ্ট্য। এটি আপনাকে স্ন্যাপশট পরিচালনা থেকে মুক্ত করবে। একমাত্র ক্ষতিটি হ'ল বর্তমানে, এটি কেবল একক ডেটাসেটের জন্য কাজ করে, পুনরাবৃত্তির সাথে নয়। আপনাকে আপনার সমস্ত পুরানো এবং নতুন ডেটাসেটের একটি তালিকা সংরক্ষণ করতে হবে এবং তারপরে লুপ, বুকমার্কিং, প্রেরণ এবং গ্রহণ করা এবং তারপরে তালিকাটি আপডেট করতে হবে (বা যদি আপনি পছন্দ করেন তবে ছোট ডাটাবেস)।
আপনি যদি বুকমার্কের রুটটি চেষ্টা করেন তবে তা আপনার পক্ষে কীভাবে কার্যকর হয়েছিল তা শুনতে আগ্রহী!
zfs send -R ...
? যদি আপনি এর মাধ্যমে আউটপুটটি পাইপ করেন তবে আপনি কীssh
দিয়ে পালানো অক্ষর অক্ষম করেছিলেনzfs send -R ... | ssh -e none ...
?