টার প্রগতি বার ব্যবহার করে এবং বহু-ভলিউম পরিচালনা করে ling


4

আমি একাধিক বাহ্যিক ড্রাইভে একটি বড় এলভিএম ভলিউমের একটি টার তৈরি করার চেষ্টা করছি। সেই অংশটি সমাধান হয়ে গেছে। এখন, কারণ এটি দীর্ঘ প্রক্রিয়া, আমি একটি অগ্রগতি বার চাই। এখানে দুর্দান্ত নিবন্ধগুলি থেকে, আমি কাছে পেয়েছি।

বিষয়টি হ'ল প্রথম ভলিউম পূরণের পরে পিভি বারটি প্রস্থান করে। ডিসি অদলবদল হওয়ার পরে পিভি আপডেট করা চালিয়ে যেতে চাই। এটির কাছে কীভাবে যোগাযোগ করা যায় সে সম্পর্কে কারও কি ধারণা আছে?

আমি যা চেষ্টা করেছি তা এখানে। আমি মনে করি সমস্যাটি কোডের শেষ লাইনে রয়েছে। আমি নিশ্চিত নই যে এই কৌশলটি আসলে বহু-ভলিউমের সাথে কাজ করবে।

কোড এক্সটব্যাকআপ.শ:

#!/bin/sh

changedisk()
{
# This routine is called when tar runs out of disk space
# It simply waits for operator to change and mount disks
# then updates the file handle with a new volume number.
echo "Change disks now!" 
read -p "Press <enter> when new disk is mounted. ..." NULL
echo ""

# Update the file name with the new volume number
name=`expr $TAR_ARCHIVE : '\(.*\)-.*'`
echo ${name:-$TAR_ARCHIVE}-Vol$TAR_VOLUME.tar >&$TAR_FD
}

###########
## MAIN  ##
###########

# Test for recursive call to change disks
if [ "$1" = 'changedisk' ]; then 
        changedisk
        exit 0;
fi

# If this is initial call, set SIZE to calculate bytes in source    
SIZE=`du -sb *Folder_Name* | cut -f 1`

# Now TAR it, using Multi-volume option and pipe through PV for progress bar
tar -cM -F 'sh ExtBackup.sh changedisk' *Folder_Name* | \
pv -s ${SIZE} > LVMBackup-$(date +%m-%d-%y)-Vol1.tar

উত্তর:


1

ঠিক আছে, tar -Fআসলে কি করে তা বুঝতে আমার কিছুটা সময় লেগেছিল (এটি কি কোথাও ডকুমেন্টেড আছে? আমি কেবল উত্সটি পড়ে শেষ করেছি), তবে আমি মনে করি আমি আপনার জন্য খুব ভাল সমাধান নিয়ে এসেছি।

যেহেতু pvএকটি নির্দিষ্ট অগ্রগতি ইতিমধ্যে হয়ে গেছে তা ভেবে সমর্থন করে না, তাই আমার এটির অনুরূপ একটি সরঞ্জাম bar(সেই নামে ডিবায় পাওয়া যায়, বা এর ঘৃণ্য হোমপেজটি ) দিয়ে প্রতিস্থাপন করা দরকার ।

আমি যে সমাধানটি পেয়েছি barতা প্রবাহের ডাকে ইনজেকশন দেওয়ার জন্য নামযুক্ত পাইপ (ফিফো) এর মাধ্যমে সমস্ত অতিরিক্ত খণ্ডের ডেটা পাস করে । একটি নতুন লাইনে প্রতিটি ভলিউমের অগ্রগতি বার মুদ্রণ এড়াতে, আমি প্রতিটি ভলিউমের পরে কার্সারটিকে ব্যাক আপ সরিয়ে নিতে 'tput' ব্যবহার করি।

আপনার কোডে, আপনি changedisk()নিম্নলিখিতটির সাথে শেষ লাইনটি প্রতিস্থাপন করবেন । (ব্রেভিটির জন্য এটি কিছুটা হ্যাকি; ধারণাটি একবার পেয়ে গেলে এটি কাস্টমাইজ করুন)

tput cuu1 >&2 # clear previous progress bar
(cat somefifo | bar -ns \
    --size "$SIZE" \
    --completed $(((${TAR_VOLUME}-1)*${VOLSIZE})) \
    > ${name:-$TAR_ARCHIVE}-Vol$TAR_VOLUME.tar) &
echo somefifo >&$TAR_FD

এবং pvআপনার স্ক্রিপ্টের শেষ লাইনে আমন্ত্রণটি প্রতিস্থাপন করুন bar -ns --size ${SIZE}

এটি কাজ করার জন্য আপনাকে exportসাইজের সংজ্ঞার সামনে রাখতে হবে এবং অবশ্যই mkfifo somefifoকিছু সময় আগে সম্পাদন করা হয়েছে। আপনি যে ফিফোর অনুমতি বিটগুলিও সুরক্ষিত করেছেন তা নিশ্চিত করুন। mktempপরিবর্তে নিরাপদে একটি অস্থায়ী পাইপ তৈরির জন্য আপনি ব্যবহারটি বিবেচনা করতেও পারেন । আপনার দৃশ্যের উপর নির্ভর করে, আমার ধারণা।

আমি একটি এখনও অপরিবর্তিত ভেরিয়েবল ব্যবহার করেছি $VOLSIZEযা আপনার ভলিউমের আকারে বাইটে প্রসারিত হওয়া উচিত। এটি আপনার সেটআপে কীভাবে নির্ধারিত হয় তা আমি নিশ্চিত নই। পূর্ববর্তী সমস্ত ভলিউম আকারের সংখ্যামূলক যোগফলের উপর নজর রাখার মতো আপনাকে এখানে আরও কিছু বিস্তৃত করতে হবে।

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