সংরক্ষণাগারের আকার হ্রাস করার সময় ফাইলটি সংরক্ষণাগারভুক্ত করবেন?


6

দ্বিধা: আমার একটি 10 ​​গিগাবাইট সংরক্ষণাগার এবং একটি 20 জিবি হার্ডড্রাইভ রয়েছে। আমি যখন ফাইলটি আনজিপ / আনর্কাইভ করতে যাই তখন হার্ডড্রাইভ পূরণ হয় এবং প্রক্রিয়া ব্যর্থ হয়।

প্রশ্ন: উবুন্টু সার্ভারে 12.04 / লিনাক্সের এমন কোনও উপায় আছে যা আমি সংরক্ষণাগারের আকার হ্রাস করার সময় কোনও ফাইল আনআরক্রাইভ করতে পারি?


আপনি এইভাবে কোনও বিদ্যমান ফাইলের আকার পরিবর্তন করতে পারবেন না। সংরক্ষণাগারটির আকার পরিবর্তন করার জন্য সংরক্ষণাগারটির সামগ্রীগুলি অপসারণ করা দরকার যা ইতিমধ্যে 10 জিবি ডেটা বেশি প্রয়োজন। আপনার সার্ভারে আপনার ওভারাল স্টোরেজটি বাড়ানো দরকার, 10 গিগাবাইট হ'ল সংকুচিত আকারের আকার, এর পরে সম্ভবত এটি সম্ভবত 30-40% বেশি।
রামহাউন্ড

আপনি কি ইতিবাচক যে কোনও সংরক্ষণাগার থেকে ফাইলগুলি মুছে ফেলার জন্য তাদের প্রথমে আর্কাইভ করা দরকার?
ইথান উইলিস

2
আপনি প্রতিটি ফাইল এক এক করে বের করতে পারবেন, তারপরে সংরক্ষণাগারটির মধ্যে ফাইলটি মুছুন। সুতরাং আমি কি সংগ্রহের আকার বাড়িয়ে তুলছি প্রশ্নের বাইরে?
রামহাউন্ড

এটা প্রশ্নের বাইরে। এবং আপনি যা বলেছিলেন তা হ'ল ঠিক এমন ধরণের সমাধান যা আমি সন্ধান করছি। একটাই প্রশ্ন, কীভাবে? (ম্যানুয়ালি এটি না করে)
ইথান উইলিস

আপনি যা চান তা কীভাবে করতে হয় তা একমাত্র উপায় আমি হাতে পেয়েছি। আপনি কি নিশ্চিত যে সঙ্কুচিত ডেটা এমনকি সিস্টেমে ফিট করতে পারে। আপনি আরও বেশি সম্ভবত 14-15 জিবি এর ডেটা কমপ্রেস দেখছেন সম্ভাব্য প্লাস বৃহত্তম ফাইলের সংকুচিত ডেটা। গণিতটি ঠিক বোঝায় না।
রামহাউন্ড

উত্তর:


6

এখানে আরও একটি সমাধান দেওয়া হল। এটি আপনাকে সংরক্ষণাগার থেকে পৃথক ফাইলগুলি বের করতে এবং এর আকার হ্রাস করতে দেবে না, তবে আপনি যাওয়ার সাথে সাথে সংরক্ষণাগারটির আকার হ্রাস করে সমস্ত ফাইল বের করতে দেয়:

#!/bin/sh

# $1, the first paramter, is the .tar.gz file to unarchive

(
    size=$(wc -c $1)
    offset=0
    bs=4096
    while [[ $size > $offset ]]; do
        dd if=$1 bs=$bs count=1 skip=$offset status=none
        fallocate -p -o $offset -l $bs $1
        offset=$(( $offset + $bs ))
    done
) | tar xz

উদাহরণস্বরূপ একটি ফাইলে এটি সংরক্ষণ করুন এবং এই untar_and_destroy.shহিসাবে চালিত করুন:

untar_and_destroy.sh whatever.tar.gz

এটি যা করে তা হ'ল .tar.gzফাইলটির একটি অংশকে টার্ন দেওয়া, লিনাক্সকে ফাইলের সেই অংশটি কমিয়ে আনতে বলা এবং তারপরে পরবর্তী অংশের জন্য পুনরাবৃত্তি করা। আপনি যখন কাজটি সম্পন্ন করবেন, ls -lতখন .tar.gzফাইলগুলি আগের মতোই আকারের বলে duদেবে , তবে তার আকারটি 0 হিসাবে প্রতিবেদন করবে This এটি কারণ .tar.gzএকটি বিচ্ছুরিত ফাইল তৈরি করা হয়েছে, আগের দৈর্ঘ্যের সাথে তবে সমস্ত 0 এর মতো নয় যা ডিস্কে সংরক্ষণ করা প্রয়োজন।

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


আমি এই ধরনের উত্তরটি খুঁজছিলাম। যদি সংরক্ষণাগারটিকে দূষিত না করা সম্ভব হয় তবে আরও ভাল হতে পারে তবে আমি মনে করি যে এটি আমার সীমাবদ্ধতার সাথে সম্ভবত সম্ভাবনাও নাও হতে পারে।
ইথান উইলিস

আপনার count=1ডিডিতে বিকল্পের প্রয়োজন , অন্যথায় এটি লুপের প্রথম পুনরাবৃত্তিতে পুরো ফাইলটি আউটপুট দেয়, যা কমান্ডটি চালানোর সময় ডিস্কের স্থান মুক্ত করে না। এছাড়াও, আমি ভিন্নভাবে প্রকাশ করবে tar xfz -করার tar xz
জুপ্পেন

@ জোপ্পেন ভাল পয়েন্টগুলি, আমি এগুলি সম্পাদনা করেছি
উইংজেডসবারমারিনার

2

আমি এটি করতে পারে এমন কোনও সরঞ্জাম সম্পর্কে জানি না এবং আমি মনে করি না যে কোনও সাধারণ সংরক্ষণাগার ফর্ম্যাট এটি সমর্থন করে।

আপনার সমস্যার একটি সম্ভাব্য সমাধান হ'ল আর্কাইভটি অন্য কোনও মেশিনে রাখা এবং আপনি যে মেশিনে এটি সঙ্কুচিত করতে চান তার হাতে নল দেওয়া। উদাহরণস্বরূপ, আপনি সংরক্ষণাগার সহ মেশিনে এই কমান্ডটি চালাতে পারেন:

cat archive.tar.gz | ssh YOUR_SERVER tar xfz -

সংরক্ষণাগারটি tarসার্ভারে চলমান প্রক্রিয়াতে প্রবাহিত হবে , যা আর্কাইভটিকে সার্ভারে উপস্থিত থাকার প্রয়োজন ছাড়াই এটিকে সঙ্কুচিত করবে।


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

সুতরাং সম্ভবত কোনও সংরক্ষণাগার বিন্যাস যা আর্কাইভের দ্বিতীয় অনুলিপি তৈরি না করেই সংরক্ষণাগার থেকে ফাইলগুলি সরিয়ে ফেলার অনুমতি দেয়?
ইথান উইলিস

আপনি এই কাজটি করতে পারার একমাত্র উপায় হ'ল আর্কাইভের শেষে থেকে ফাইলগুলি বের করে নেওয়া এবং তারপরে সংরক্ষণাগারের দৈর্ঘ্য সঙ্কুচিত করা। আপনি এটি করতে tarফর্ম্যাটটি হ্যাক করতে পারেন , তবে এটি সঙ্কুচিত হওয়ার পরে নয়। এমনকি কেবল নিজের ফাইলগুলি না করে এই পরিস্থিতিতে একটি সংরক্ষণাগার ব্যবহার করা সত্যিকার অর্থে খুব বেশি বোঝা যায় না।
উইজেডসবারমারিনার

2

যদিও এটি আপনার প্রাথমিক স্টোরেজটি প্রসারিত করা অযৌক্তিক হতে পারে, সম্ভবত আপনি কোনও বাহ্যিক স্টোরেজ ডিভাইসে ফাইলের সামগ্রীগুলি বের করতে পারেন।

বিকল্পভাবে, সংরক্ষণাগারে ফাইলগুলির একটি তালিকা তৈরি করুন, তারপরে একটি স্ক্রিপ্ট লিখুন যা এর মধ্যে কয়েকটি বের করে। এই ফাইলগুলিকে মেঘে সরান, এক্সট্র্যাক্ট, লাথার, ধুয়ে ফেলা, পুনরাবৃত্তি করতে অন্য ব্যাচটি নির্বাচন করুন।

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


আপনি যে দ্বিতীয় সমাধানটি দিচ্ছেন সেটি আমি যা খুঁজছি তার বেশি। তবে এটি মেঘ এবং পিছনে সরানো অবৈধ। এটি জায়গায় করা দরকার।
ইথান উইলিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.