শেষ [এন] জেডএফএস স্ন্যাপশটগুলি বাদে কীভাবে সমস্ত মুছবেন?


24

আমি বর্তমানে আমার জেডএফএস-ভিত্তিক এনএএস রাত্রে এবং সাপ্তাহিক স্ন্যাপশট করছি, এমন একটি প্রক্রিয়া যা আমার গাধা কয়েকবার বাঁচিয়েছে। তবে, স্ন্যাপশটটি তৈরি করার সময় স্বয়ংক্রিয়ভাবে (ক্রোন থেকে), পুরানো স্ন্যাপশটগুলি মোছা এখনও একটি ম্যানুয়াল কাজ। স্পষ্টতই একটি ঝুঁকি আছে যে আমি যদি একটি বাসের সাথে ধাক্কা খাই, বা ম্যানুয়াল টাস্কটি সম্পন্ন না করে, NAS ডিস্কের স্থান ছাড়িয়ে যাবে।

কারও কাছে তাদের জেডএফএস সিস্টেমে সঞ্চিত স্ন্যাপশটের সংখ্যা পরিচালনা করতে ব্যবহার করার মতো কোনও ভাল উপায় / স্ক্রিপ্ট রয়েছে? আদর্শভাবে, আমি একটি স্ক্রিপ্ট চাই যা প্রদত্ত জেডএফএস ফাইল সিস্টেমের জন্য সমস্ত স্ন্যাপশটের মাধ্যমে পুনরাবৃত্তি করে এবং সেই ফাইল সিস্টেমের জন্য শেষ এন স্ন্যাপশটগুলি বাদ দিয়ে সমস্ত মুছতে পারে ।

যেমন আমি দুটি ফাইল সিস্টেম পেয়েছি, একটি কল tankএবং আরেকটি কল sastank। স্ন্যাপশটগুলির তৈরির তারিখের সাথে নাম দেওয়া হয়েছে: sastank@AutoD-2011-12-13যাতে একটি সাধারণ sortআদেশ তাদের ক্রম অনুসারে তালিকা করে থাকে। আমি সর্বশেষ 2 সপ্তাহের মূল্যবান দৈনিক স্ন্যাপশটগুলি চালু রাখতে চাইছি tank, তবে কেবল গত দুই দিনের স্ন্যাপশট চালু রয়েছে sastank

উত্তর:


35

আপনি এই মত কিছু সহজ পেতে পারেন

zfs list -t snapshot -o name | grep ^tank@Auto | tac | tail -n +16 | xargs -n 1 zfs destroy -r
  • সহ স্ন্যাপশটের তালিকা (কেবল নাম) আউটপুট করুন zfs list -t snaphot -o name
  • ফিল্টার করুন যা কেবল তার tank@Autoসাথে মেলেgrep ^tank@Auto
  • এর সাথে তালিকাকে বিপরীত করুন (পূর্বে পুরানো থেকে সর্বাধিক নতুন অনুসারে সাজানো) এর সাথে tac
  • আউটপুটটিকে 16 তমতম ফলাফলের সাথে সীমাবদ্ধ করুন এবং এর সাথে অনুসরণ করুন tail -n +16
  • তারপর সাথে ধ্বংস xargs -n 1 zfs destroy -vr

বিপরীত ক্রমে স্ন্যাপশট মুছে ফেলা অনুমান করা আরও কার্যকর।

বা সৃষ্টির বিপরীত ক্রম অনুসারে বাছাই করুন

zfs list -t snapshot -o name -S creation | grep ^tank@Auto | tail -n +16 | xargs -n 1 zfs destroy -vr

এটি দিয়ে পরীক্ষা করুন ...|xargs -n 1 echo


1
আমি মনে করি কমান্ডের sort -rআগে sedএটির প্রয়োজন needs sedপ্রথম 15 লাইন ছাড়িয়ে তালিকার নীচের অংশটিকে আউটপুট বলে মনে হচ্ছে, যা ডিফল্ট সাজানোর ক্ষেত্রে সবচেয়ে সাম্প্রতিক। তালিকাটি উল্টানো মানে আমি নীচে সবচেয়ে পুরানো স্ন্যাপশট পাই।
growse

1
তিনি বলেছিলেন যে "বিপরীত ক্রমে স্ন্যাপশটগুলি মুছে ফেলা অনুমিতভাবে আরও দক্ষ", এইভাবে সাজানোর আদেশ।
tgunr

19

নাম দ্বারা নয়, তৈরি তারিখের ভিত্তিতে সর্বাধিক সাম্প্রতিক স্ন্যাপশট পাওয়ার আরও সাধারণ কেস।

zfs list -H -t snapshot -o name -S creation | head -1

একটি নির্দিষ্ট ফাইল সিস্টেমের নাম স্কোপ করা হয়েছে TestOne

zfs list -H -t snapshot -o name -S creation -d1 TestOne | head -1

-H: কোনও শিরোনাম নেই যাতে প্রথম লাইনটি স্ন্যাপশটের নাম

-t snapshot: স্ন্যাপশটগুলি তালিকাভুক্ত করুন (তালিকায় পুল এবং ভলিউমের মতো অন্যান্য জিনিসের তালিকা থাকতে পারে)

-o name: স্ন্যাপশটের নাম সম্পত্তি প্রদর্শন করুন।

-S creation: Sমূলধনটি সৃষ্টির সময়ের উপর ভিত্তি করে সাজানো সাজানোকে বোঝায় । এটি সর্বশেষতম স্ন্যাপশটটিকে প্রথম লাইন হিসাবে রাখে।

-d1 TestOne: বলে যে বাচ্চারা অন্তর্ভুক্ত করে, যা বিভ্রান্তিকর বলে মনে হয় তবে এটি হ'ল কারণ যতক্ষণ না এই আদেশের বিষয়ে, টেস্টঅন এর স্ন্যাপশটগুলি শিশু। এটি টেস্টওনে যেমন ভলিউমের স্ন্যাপশট তালিকাভুক্ত করবে নাTestOne/SubVol@someSnapshot

| head -1: পাইপের দিকে যেতে এবং কেবল প্রথম লাইনে ফিরে আসে।


1
জন্য ধন্যবাদ -d1। এটাই ছিল "প্রদত্ত ডেটাসেটের জন্য সমস্ত স্ন্যাপশট কীভাবে পাব?"
জোনাথন রাইনহার্ট

8

এটি সম্পূর্ণরূপে প্রশ্নের উত্তর দেয় না, তবে ভুলে যাবেন না যে আপনি বিভিন্ন স্ন্যাপশট মুছতে পারেন।

zfs zpool1 / ডাটাসেট @ 20160918% 20161107 নষ্ট করে

"20160918" থেকে "20161107" সহ সমস্ত স্ন্যাপশট ধ্বংস করবে। উভয় প্রান্তটি ফাঁকা ছেড়ে যেতে পারে, যার অর্থ "প্রাচীনতম" বা "সর্বাধিক"। সুতরাং আপনি এমন কিছু রান্না করতে পারেন যা "এন" এর পরে "...% n" নষ্ট করে দেয় ..

একটি পুরানো প্রশ্ন পুনরুত্থিত দুঃখিত।


এটি কবজির মতো কাজ করে এবং গৃহীত উত্তরের চেয়ে 100 গুণ দ্রুত!
নিলওয়াং

5

গ্রোস আমার জন্য ওপেন ইন্ডিয়ানাতে কাজ করে না। Xargs- এর জন্য এটি বুঝতে পারে না।

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

এখানে এমন কোড যা শেষ স্ন্যাপশটগুলি বাদে সমস্ত মুছবে।

লাইভ করতে 'ইকো' সরান।

RETENTION=5
FS=tank1/test
SNAPNAME=daily-

zfs list -t snapshot -o name | grep ^$FS@${SNAPNAME} |  sed -n -e :a -e '1,${RETENTION}!{P;N;D;};N;ba' | xargs -n 1 echo zfs destroy -r

সূত্র: http://sed.sourceforge.net/sed1line.txt


2
আপভোট করুন কারণ যে কেউ যেহেতু সেড ব্যবহার করতে পারে এটি এর প্রাপ্য।

2
সাম্প্রতিকতম একটি সফ্টওয়্যার আপডেটের পরে, সেড স্ট্রিংটি আমার জন্য কাজ করা বন্ধ করে দিয়েছে এবং এটি সমস্ত স্ন্যাপশট মুছতে শুরু করেছে! খারাপ খারাপ! ভাগ্যক্রমে প্রোডাকশন সার্ভারটি পুরানো ছিল এবং নিরাপদে ছিল। আমি এখন sed -n -e: a -e '1, $ ET RETENTION}! {P; N; D; N; N; ba'
ড্যান

আমি এর আগে কাউকে এসইডি কখনও দেখিনি।
জেসন

3

আমি কিছু বাশ-ফু দিয়ে এটি সমাধান করতে পারি।

 zfs list -t snapshot -o name | grep ^tank@AutoD- | sort -r | wc -l | xargs -n 1 expr -$NUM_TO_KEEP + | tr -d '\n' | xargs -0 -i bash -c "zfs list -t snapshot -o name | grep ^tank@AutoD- | sort -r | tail -n{} | sort |xargs -t -n 1 zfs destroy -r"

কি দারুন. এটা খুব ভুল মনে হচ্ছে।


1

সোলারিসে মাথার জন্য পথ প্রয়োজন তবে অন্য ডিস্ট্রোসের পথ ছাড়াই কাজ করা উচিত।

retention=14
dataset=vmstorage-17/824

zfs list -rt snap -H -o name ${dataset} | \
/usr/gnu/bin/head -n -${retention} | xargs -n 1 zfs destroy -r
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.