বিদ্যমান gz (gzip) ফাইলগুলি কীভাবে RSSyncable এ রূপান্তর করবেন


12

আমি একটি রিপোজিটরি ব্যাক আপ করতে rsync ব্যবহার করছি যার মধ্যে প্রতিদিন অনেকগুলি নতুন জিএসডি ফাইল রয়েছে। আরএসসিএন-এর ব্যাকআপটি তার চেয়ে ধীরে ধীরে এগিয়ে যায় কারণ এই জিজেড ফাইলগুলি জিজিপের --rsyncable বিকল্পের সাথে নির্মিত হয় না (যা জিজেড ফাইলগুলিকে তাদের আকারের উল্লেখযোগ্যভাবে বাড়াতে বা সামঞ্জস্য না করেই আরও অনেক বেশি 'আরএসসিএনএফ-বান্ধব করে তোলে)। এবং আমি তৈরির সময় সমস্যাটি সমাধান করতে পারি না কারণ ফাইলগুলি পাইথন স্ক্রিপ্ট (rdiff-ব্যাকআপ) দ্বারা উত্পাদিত হয় যা পাইথনের gzip মডিউল ব্যবহার করে এবং এটি gzip এর --rsyncable এর সমতুল্য সমর্থন করে না।

সুতরাং আরএসআইএনসি চালানোর আগে আমি উত্স ডেটাতে যে কোনও নতুন জিজেড ফাইল সনাক্ত করতে পারি (যেমন শেষবারের মতো আরএসআইএনসি চালানোর পরে নতুন)। এখন আমি এই ফাইলগুলিকে 'রি-জিজিপ' করতে চাই যাতে সেগুলি আরএসসিঙ্কেবল-ফর্ম্যাটে গিজিপ করা হয়। তারপরে আমি অনুকূলিত উত্স থেকে rsync চালাতে পারি।

আমি মনে করি এর অর্থ প্রতিটি ফাইলটি গানজিপের মাধ্যমে চালানো এবং তারপরে gzip --rsyncable তবে আমি কীভাবে এটি কীভাবে করবেন তা নিশ্চিত নই যাতে ডেটা বা মেটাডেটা হারাতে পারে না। পরামর্শ কৃতজ্ঞভাবে প্রাপ্ত হয়েছে।


8
একমাত্র উপায়টি --rsyncableহওয়া উচিত তবে যদি ফাইলগুলি রানের মধ্যে পরিবর্তিত হয় এবং rsyncপরিবর্তনগুলি প্রেরণের চেষ্টা করে। নতুন ফাইলগুলি আরএসসিঙ্কেবল হয় কিনা তা সেটিকে লক্ষ্য করে না কারণ rsyncযেভাবেই সমস্ত ডেটা প্রেরণ করতে হয়। ফাইলগুলি কি আরএসআইএনসি রানের মধ্যে পরিবর্তন করা হচ্ছে?
টম হান্ট

ভাল যুক্তি. আসলে আমি নিশ্চিত নই, আমি এটি যাচাই করব। আসুন এখনই ধরে নিই যে হ্যাঁ কিছু জিজেড ফাইলের বিষয়বস্তু পরিবর্তন হয়ে যায়।
গোগৌড

আমি মনে করতে পারি সবচেয়ে ভাল জিনিস হ'ল একটি স্ক্রিপ্ট চালানো যা নতুন ফাইলগুলির জন্য পরীক্ষা করে, আন-গিজিপ করে, তারপরে আবার জিপ্স করে --rsyncable
টম হান্ট

আমি সম্মত হই যে ফাইলগুলি পরিবর্তন না হলে এটি কোনও সমস্যা হওয়া উচিত নয়। বিশেষত, গতির জন্য আপনি -aপতাকা ব্যবহারের সময় সংরক্ষণ করে সময়ের ভিত্তিতে চেকসামিং এড়িয়ে যাওয়া নিশ্চিত করুন । এছাড়াও, আমার জিপিপের সংস্করণটিতে কোনও --rsyncableপতাকা নেই, তবে এটি এমন একটি প্রোগ্রাম নিয়ে আসে যা znewসম্ভবত আপনার প্রয়োজনের জন্য ব্যবহার করা যেতে পারে।
ব্যবহারকারী3188445

2
দেখা যাচ্ছে যে টম ভেবেছিল যে, rdiff-ব্যাকআপ দ্বারা নির্মিত gz ফাইলগুলি একবার তৈরি হয়ে যায় এবং তাই ব্যবহার করে --rsyncableকোনও লাভ হয় না। আমি একটি লাইন কোড বা শর্ট স্ক্রিপ্টের জন্য প্রত্যাশা করছিলাম যা নিরাপদে কোনও জিজেড সংরক্ষণাগারটি আনপ্যাক করবে এবং এটি ব্যবহার করে পুনরায় খেলবে --rsyncable। তবে এটি এখন আমার কাছে কেবল একাডেমিক প্রশ্ন।
গোগৌড

উত্তর:


1
#! /bin/bash

set -euo pipefail

##  TOKEN's creation time marks the time since last recompression
TOKEN=.lastRecompression   

if [ -f ${TOKEN} ]
then
    find -name '*.gz' -cnewer "${TOKEN}"
else
    # Process all compressed files if there is no token.
    find -name '*.gz'
fi | while read f
do
    # Do it in two steps
    gunzip < "$f" | gzip --rsyncable > "$f.tmp"

    # Preserve attributes
    cp "$f" "$f.tmp" --attributes-only

    # and rename atomically.
    # set -e ensures that a problem in the previous step 
    # will stop the full script. 
    mv -v "$f.tmp" "$f"
done

# Update the token
touch ${TOKEN}

1
এটি করার মাধ্যমে gunzip | gzip, আপনি জিজেডে ফাইল (এবং এর সাথে দেখা gzip -vNl) হিসাবে সঞ্চিত সঙ্কুচিত নাম এবং সময়টি
হারাচ্ছেন

@ স্টাফেন চেজেলাস: আপনি ঠিক বলেছেন: এই তথ্যটি যদি প্রাসঙ্গিক হয় (এটি আমার পক্ষে কখনও প্রাসঙ্গিক হয়নি) তবে আমরা এটি হারাচ্ছি। সম্ভবত সেরা সমাধানটি হ'ল বন্দুকের জন্য সরাসরি এই পুনঃ-সংক্ষেপণ সমর্থন করার জন্য। এটি অভ্যন্তরীণভাবে সমস্ত মেটাডেটা পাস করতে পারে।
রাউল সালিনাস-মন্টেইগুডো

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