কীভাবে / var / lib / dpkg / স্থিতি পুনরায় তৈরি করবেন?


10

আমি চারপাশে কিছু ফাইল মুছে ফেলেছি /var/lib/dpkg/, যথা:

/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*

আমি বুঝেছি ডেবিয়ান ইনস্টলড প্যাকেজগুলির কিছু তথ্য রাখতে এই ফাইলগুলি ব্যবহার করে। এখন আমি যখন করি তখন আমি apt-get updateনিম্নলিখিত ত্রুটিটি পাই:

Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open 
(2: No such file or directory)
E: The package lists or status file could not be parsed or opened.

আমি যেমন এফএইচএস বুঝতে পারি , তে অবস্থিত ফাইলগুলি /varসিস্টেম-সমালোচনামূলক হওয়ার কথা নয়। রেটার এগুলিতে অস্থায়ী ফাইল, লগ, ক্যাশে এবং অনুরূপ হওয়া উচিত।

মুছে ফেলা ফাইলগুলি পুনরায় তৈরি করার কোনও উপায় আছে কি?


1
ব্রিয়ামের উত্তর আপনাকে স্ট্যাটাস ফাইলটি ফিরিয়ে আনবে; তবে আপনি যে জিনিসগুলির নীচে মুছে ফেলেছেন /var/lib/dpkg/infoসেটিও বেশ গুরুত্বপূর্ণ। আপনি এফএইচএসকে ভুল বুঝেছেন এবং এএফএইইকে কেবল পুনরুদ্ধারের পাথগুলি হ'ল (ক) ব্যাকআপ থেকে পুনরুদ্ধার করা বা (খ) পুনরায় ইনস্টল।
ডারোবার্ট

উত্তর:


13

আপনি যদি ফাইল সিস্টেম হায়ারার্কি স্ট্যান্ডার্ডে বর্ণিত / var এর উদ্দেশ্যটি লক্ষ্য করেন তবে এটিতে বলা হয়েছে:

/varপরিবর্তনশীল ডেটা ফাইল রয়েছে। এর মধ্যে রয়েছে স্পুল ডিরেক্টরি এবং ফাইল, প্রশাসনিক এবং লগিং ডেটা এবং ক্ষণস্থায়ী এবং অস্থায়ী ফাইল।

মনে রাখবেন যে "ক্ষণস্থায়ী এবং অস্থায়ী" ফাইলগুলি এর মধ্যে থাকা জিনিসগুলির মধ্যে একটি are এটিতে "স্পুল ডিরেক্টরি এবং ফাইলগুলি" এবং "প্রশাসনিক এবং লগিং ডেটা" রয়েছে। আপনি সমালোচনামূলক "প্রশাসনিক ডেটা" মুছে ফেলেছেন।

এটি কেন /varবিদ্যমান তা ব্যাখ্যা করতে চলেছে:

/var/usrকেবলমাত্র পঠনযোগ্য মাউন্ট করা সম্ভব করার জন্য এখানে নির্দিষ্ট করা হয়েছে । /usrসিস্টেম অপারেশন চলাকালীন যা যা একবারে লেখা হয়েছিল (যা ইনস্টলেশন ও সফ্টওয়্যার রক্ষণাবেক্ষণের বিপরীতে) অবশ্যই এতে থাকা উচিত /var

এটি মূল বিষয় /var: এটিতে থাকা ডেটাগুলি পরিবর্তিত হয়, এর বিপরীতে /usr(আপনি কেবল যখন সফ্টওয়্যার যুক্ত / অপসারণ / আপডেট করার সময় পরিবর্তন হয়)।

আরও বিভাগগুলি বিভিন্ন উপ-ডিরেক্টরি ব্যাখ্যা করে /var; উদাহরণস্বরূপ, /var/lib(যেখানে আপনি ফাইলগুলি বাস করার জন্য মুছেছিলেন) "অ্যাপ্লিকেশন বা সিস্টেমের সাথে সম্পর্কিত রাষ্ট্রীয় তথ্য" ধারণ করে, "প্রোগ্রামগুলি চলাকালীন সংশোধনকারী ডেটা এবং এটি একটি নির্দিষ্ট হোস্টের সাথে সম্পর্কিত" হিসাবে সংজ্ঞায়িত হয়েছে।

নির্দিষ্ট ফাইলটি কী তা জেনে আপনার সত্যই ফাইল মুছে ফেলা উচিত নয়। আপনি যে ফাইলগুলি মুছে ফেলা, যদি না আপনি এই ফাইলগুলি একটি ব্যাকআপ আছে, আমি শুধু একটি ব্যাকআপ নিতে হয় কিছু করার বাকি মনে /home, /etcইত্যাদি এবং পুনরায় ইনস্টল করুন। আপনি এটি না করা পর্যন্ত আপনি dpkg(এবং এপিটি ইত্যাদি) ব্যবহার করতে পারবেন না । তা ছাড়া, সিস্টেমটির কাজ চালিয়ে যাওয়া উচিত।


আমি কি অন্য মেশিন থেকে ফাইলগুলি অনুলিপি করতে পারি, না সেগুলি মেশিন-নির্দিষ্ট?
মার্টিন ভেজিটার

1
এই বিশেষ মেশিনে কোন প্যাকেজ ইনস্টল করা হয়েছে তা @ মার্টিনভেস্টার স্থিতির তালিকা রয়েছে। আপনি ঠিক একই প্যাকেজ রাজ্যগুলির সাথে কোনও মেশিন থেকে এটি অনুলিপি করতে পারেন (কেবল ইনস্টল করা হয়নি, তবে সরানো হয়েছে তবে ভালভাবে পরিষ্কারও করা হয়নি)। apt-get updateপুনর্নির্মাণ উপলব্ধ হবে, আমি বিশ্বাস করি। প্রতিটি ইনস্টল করা প্যাকেজ থেকে তথ্য / স্টাফ আসে, তবে এটি ইতিহাসকেও
প্রতিবিম্বিত করে

বর্তমান ডকুমেন্টেশনগুলি " /var/libরাজ্যের তথ্য ঘোষণা করে programs প্রোগ্রামগুলি চলার সাথে সাথে ক্রমাগত ডেটা সংশোধন করে, যেমন, ডাটাবেসগুলি, প্যাকেজিং সিস্টেম মেটাডেটা ইত্যাদি" "
মিক্কো রেন্টালাইনেন

8

আপনি /var/lib/dpkg/statusকেবল একটি কমান্ড চালানোর অর্থে "পুনরায় তৈরি" করতে পারবেন না এবং ফাইলটি যাদুতে উপস্থিত হবে। না। আপনাকে ফাইলটির একটি ব্যাকআপ ব্যবহার করতে হবে এবং কখনই /var/libডিরেক্টরিটির মোছার জিনিসটি মুছে ফেলা শিখবেন না :

sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status

এটি আপনাকে আগের দিনের প্যাকেজ স্থিতি দেবে। প্রার্থনা শুরু করুন এটি অন্য কিছু ভাঙ্গেনি।


আরও দেখুন /var/backups, সেখানে একাধিক অনুলিপি রয়েছে।
ডারোবার্ট

@ ব্রাইয়াম - আমার স্ট্যাটাস-পুরানো নেই, বা আমার / ভার / ব্যাকআপগুলিতে কিছুই নেই। আমি কি অন্য মেশিন থেকে ফাইলগুলি অনুলিপি করতে পারি, না সেগুলি মেশিন-নির্দিষ্ট?
মার্টিন ভেজিটার

1
@ মার্টিনভেস্টার না, এটি কাজ করবে না। আপনার জন্য দ্রুততম উপায় হ'ল আপনার গুরুত্বপূর্ণ ফাইলগুলির ব্যাকআপ নেওয়া এবং সিস্টেমটি পুনরায় ইনস্টল করা। বিটিডাব্লু, এমনকি না /var/backups/dpkg.status.0?
ব্রায়াম

8

এগুলিতে অবস্থিত ফাইলগুলি /varসিস্টেম-সমালোচনামূলক। উদাহরণস্বরূপ, /var/mailবা /var/spool/mailব্যবহারকারীর ইমেল রয়েছে; আপনি আপনার প্রতিবেশীর মেলবক্সে আগুন জ্বালানোর চেয়ে আর এটিকে মুছবেন না। এটি কেবলমাত্র নির্দিষ্ট সাব-ডাইরেক্টরিগুলিতে /varথাকা ফাইলগুলির মধ্যে এমন ফাইল থাকে যা কম বেশি ট্রানজিটরি বা ফাইল থাকে: লগ ইন ফাইল /var/log, ক্যাশে যা সাধারণত পুনরায় তৈরি করা যায় /var/cache, অস্থায়ী ফাইল (যা আপনি ব্যবহারের সময় মুছবেন না!) /var/tmp

ইন ডেটা /var/libযথেষ্ট সমালোচনা হতে পারে। উদাহরণস্বরূপ, মাইএসকিউএল সাধারণত এটির ডেটাবেসগুলি /var/lib/mysqlডিফল্টরূপে সংরক্ষণের জন্য কনফিগার করা হয়: আপনি যদি এটি মুছে ফেলেন তবে আপনি আপনার ডাটাবেসগুলি মুছবেন। Dpkg নিজস্ব ডাটাবেস /var/libপাশাপাশি রাখে ; /var/lib/dpkg/statusএক।

/var/lib/dpkg/statusইনস্টল প্যাকেজ সম্পর্কে তথ্য রয়েছে। যদি আপনি এটি মুছে ফেলে থাকেন তবে আপনার এটি ব্যাকআপ থেকে পুনরুদ্ধার করা উচিত। যদি আপনার ব্যাকআপ সম্পূর্ণরূপে আপ টু ডেট না হয় তবে সাম্প্রতিক প্যাকেজ ম্যানিপুলেশনের নীচে /var/log/aptএবং ভিতরে লগগুলি পরীক্ষা করুন /var/log/dpkg.logdpkgকাজ করার আগে আপনাকে সেই ফাইলটি তৈরি করতে হবে।

/var/lib/dpkg/availableইন্টারনেট থেকে ডাউনলোড করা ডেটা থেকে তৈরি। apt-get updateএটি পুনর্নির্মাণ করা উচিত।

/var/lib/dpkg/infoডেবিয়ান প্যাকেজগুলির সাথে পাঠানো ফাইল রয়েছে। আপনি প্যাকেজগুলি পুনরায় ইনস্টল করে এই ফাইলগুলি পুনরুদ্ধার করতে পারেন। অবশ্যই, আপনার জন্য ইনস্টল করা প্যাকেজগুলির একটি তালিকা প্রয়োজন need যদি আপনি পুনরুদ্ধার করেন /var/lib/dpkg/statusতবে আপনি সেখান থেকে প্যাকেজগুলির তালিকাটি বের করতে পারেন।

apt-get install --reinstall $(</var/lib/dpkg/status sed -n 's/^Package://p')

যদি আপনি হারিয়ে ফেলে থাকেন /var/lib/dpkg/statusতবে আপনি খালি ফাইল তৈরি করে এটি পুনরায় তৈরি করতে সক্ষম হবেন, তারপরে apt-get install --reinstallপ্যাকেজগুলির তালিকায় চলে। প্যাকেজগুলির তালিকাটিও সংরক্ষণ করা যায় এমন একটি জায়গা হ'ল /var/lib/apt/extended_statesকমপক্ষে আপনি যদি কেবল প্যাকেজ ইনস্টল করতে এপিটি ব্যবহার করেন ( dpkgসরাসরি বিপরীতে ) - /var/lib/dpkg/statusউপরের কমান্ডটির পরিবর্তে সেই ফাইলটি ব্যবহার করুন । যদি আপনি এটিও মুছে ফেলে থাকেন তবে আপনি এটি দিয়ে প্যাকেজগুলির আনুমানিক তালিকাটি পুনর্নির্মাণ করতে পারেন $(cd /usr/share/doc && ls), কারণ বেশিরভাগ প্যাকেজগুলি এন্ট্রি তৈরি করে /usr/share/doc। কিছু ব্যতিক্রম সম্ভবত আছে।

এই সিস্টেমে প্যাকেজ পরিচালনা সম্পর্কে কোনও সহায়তার জন্য জিজ্ঞাসা করবেন না। সিস্টেম-সমালোচনামূলক ফাইলগুলি মুছে ফেলা থেকে পুনরুদ্ধার করা কোনও সঠিক বিজ্ঞান নয়। আপনি যদি ব্যাকআপগুলি থেকে পুনরুদ্ধার করতে না পারেন, আপনার যত তাড়াতাড়ি সম্ভব একটি নতুন, পরিষ্কার সিস্টেম ইনস্টল করা উচিত।


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

5

/var/lib/dpkg/availableকার্যক্ষম তথ্য থেকে recreated করা যেতে পারে। dselectআপডেটটি ব্যবহার করে এবং চয়ন করে এটি করতে আমাদের সবচেয়ে সহজ উপায় । আমি আশা করি এটি কেবলমাত্র তখনই কার্যকর হবে যদি আপনি নিজের আপডেট পদ্ধতি হিসাবে পছন্দ করেন। এর মতো dselectকরে মনে হচ্ছে :

/bin/bash /usr/lib/dpkg/methods/apt/update /var/lib/dpkg apt apt

দ্রষ্টব্য যদিও ডেবিয়ান স্যাজার্জ হওয়ার পরে জিনিসগুলি পরিবর্তিত হতে পারে।

/var/lib/dpkg/statusপ্রতিটি প্যাকেজ ডিরেক্টরিতে ডিরেক্টরি অন্তর্ভুক্ত করা প্রয়োজন যে সত্য উপর ভিত্তি করে পুনরায় তৈরি কৌশল আছে /usr/share/docHttp://linuxmafia.com/faq/Debian/package-database-rebuild.html এ পোস্টটি দেখুন । একটি স্ক্রিপ্ট উপস্থাপন করা হয়েছে যা ইনস্টল করা প্যাকেজগুলির একটি তালিকা তৈরি করতে / usr / share / নথি একটি ফিল্টার তালিকা ব্যবহার করে, সেগুলি পুনরায় ইনস্টল করে।


1

আমি মনে করি আপনি প্রথমবার ইনস্টল করেছেন কি না তা ধরে নিয়ে আপনি খালি ফাইলটি পুনরায় তৈরি করতে পারেন এবং তারপরে অ্যাপ্লিকেশন দীর্ঘ তালিকা ইনস্টল করতে পারেন।

আমার কাছে একটি প্রাচীন স্ক্রিপ্ট রয়েছে যা মূলত এটি ক্ষুদ্রতম প্যাকেজগুলির মধ্যে যা অ্যাপটি-গেট চালাতে পারে from এটি ব্যবহার করার সময় আমি কয়েক ডজন অ-ঘোষিত নির্ভরতার রিপোর্টিং শেষ করেছি।

আপনি ইনস্টল করা সমস্ত কিছু যদি না জানেন তবে সিস্টেমটি পুনরায় ইনস্টল করুন।


0

লিনাক্স মিন্টে 17 আমি একই ধরণের শোনানো সমস্যার মুখোমুখি হয়েছি। আমি ফাইলগুলি ডিলেট করার ক্ষেত্রে জেলিয়াস ছিলাম এবং নিজেকে খুঁজে পেলাম যেখানে "প্রশাসন -> আপগ্রেড ম্যানেজার" ঠিক খুশি লাগেনি .......

আমার পক্ষে যে সমাধানটি কাজ করেছিল তা হ'ল ত্রুটি বার্তা অনুযায়ী "dpkg" নামে একটি ডিরেক্টরি তৈরি করা এবং এটিতে "স্ট্যাটাস" নামে একটি খালি ফাইল তৈরি করা হয়েছিল।

আমি তখন আপডেট ম্যানেজার দৌড়ে।

এটি আমার সম্পর্কে কাজ করেছে :-)


0

আপনার যদি 'রোআউট' ব্যতীত অন্য ব্যবহারকারীর অ্যাকাউন্ট থাকে তবে আপনি তাদের মধ্যে একটির কাছ থেকে অ্যাপ-গুন ডিস-আপগ্রেড চেষ্টা করতে পারেন। অ্যাপটি সংরক্ষণাগারগুলি ডাউনলোড করে তবে / var / তে কিছু অনুপস্থিত ডিরেক্টরি থাকায় সেগুলি ইনস্টল করতে স্টল করবে। ডিরেক্টরিগুলি প্রদর্শিত হবে। এগুলি তৈরি করুন এবং নতুনভাবে অ্যাপ্লিকেশন পান এগুলি তৈরি করতে ব্যর্থ হলে বিকল্প অ্যাকাউন্ট লগ থেকে মূলে ফিরে যায় এবং সেখান থেকে ডায়ার তৈরি করে আবার অ্যাপ্লিকেশন চালান। লোগ্রোটেট কনফিগারেশন সম্পর্কে আপনাকে জিজ্ঞাসা করা হবে এবং অন্য কয়েকটি কনফিগারেশনগুলি টাইপ করুন Y n প্রসেস হওয়া অবধি প্রযোজ্য তারপরে পুনরায় বুট করুন যখন অ্যাপ্লিকেশন ডিস্ট-আপগ্রেড শেষ হবে। সবকিছু এখন স্বাভাবিক অবস্থায় ফিরে আসা উচিত।


0

দেরি করার জন্য দুঃখিত. ব্রিয়াম, ডায়ারগুলি এবং ফাইলগুলি ম্যানুয়ালি পুনরায় তৈরি করুন এবং তারপরে পুনরায় আপডেট করুন ( mkdirএবং touchপ্রদর্শিত ত্রুটির দ্বারা প্রয়োজনীয় হিসাবে) এবং ব্যবহার করুন dpkg --configure -a

আপনার সিস্টেমটি ঠিকঠাক চলবে, তবে এটি দূষিত না হয়েছে তা নিশ্চিত করার জন্য এটি পুনরায় ইনস্টল করা গুরুত্বপূর্ণ; পূর্ববর্তীটি কেবল পুনরায় ইনস্টল করার সময় নির্ধারণের জন্য ... এবং /var/lib/*ফাইলগুলি মুছে ফেলার যত্ন নেওয়া take


-2

আপনি যদি রাস্পবেরি পাই 3 কিনে থাকেন এবং আপনি সমস্যার মুখোমুখি হয়ে থাকেন এবং ত্রুটিটি পেয়ে থাকেন "ফাইল / ভার্ / lib / dpkg / স্থিতি পার্সড বা খোলা যায়নি" এটি আমার পক্ষে কাজ করেছে:

"/ Var / lib / dpkg / status" ফাইলটি কীভাবে পুনরায় তৈরি করা যায়? কেবল এটি একটি অযৌক্তিক ফাইল নয়, এটি আপনার রাস্পবিয়ান ওএস-এ ইনস্টল করা প্যাকেজগুলি সম্পর্কে কিছু তথ্য রাখে এমন একটি গুরুত্বপূর্ণ ফাইল, সুতরাং এখানে আমি কীভাবে পুনরায় তৈরি করেছি তা এখানে রয়েছে :

  1. আপনার রাস্পবিয়ান সিস্টেমের মধ্যে একটি উইজেট সম্পাদন করুন:

    wget http://www.doglabscs.com/recover1.sh
    
  2. কিছু অনুমতি দিন:

    chmod 777 recover1.sh
    
  3. আপনার সিস্টেমে ডকুমেন্টেশন ফোল্ডারটি বিশ্লেষণ করুন এবং স্থিতি ফাইলটি পুনরায় তৈরি করুন:

    ./recover1.sh
    
  4. একবার হয়ে গেলে ফাইল ডাউনলোড করুন এবং সাবধানে পড়ুন। ফাইলটিতে বর্ণিত পদক্ষেপগুলি অনুসরণ করুন:

    wget http://www.doglabscs.com/recover2.txt
    cat recover2.txt
    

ওহে! লিঙ্ক হিসাবে না বরং আপনার উত্তরগুলির অংশ হিসাবে কোডটি পোস্ট করুন।
ধাগ

সতর্কতা: এটি ইতিমধ্যে ঠিক আছে কিনা পরীক্ষা না করেই recover1.shআপনার বর্তমানটিকে নষ্ট করে দেবে /var/lib/dpkg/status। তারপরে এটি কিছুটা কার্যকরী সংস্করণ পুনর্নির্মাণের চেষ্টা করার জন্য মিশ্র ব্যাগের কৌশলগুলি কার্যকর করবে। উপরের স্ক্রিপ্টটি কখনও চালাবেন না যতক্ষণ না আপনি ফাইল / var / lib / dpkg / স্থিতি পুরোপুরি অনুপস্থিত। অন্যথায় strings /var/lib/dpkg/statusদূষিত ফাইলটি পুনর্নির্মাণের আরও ভাল উপায় হতে পারে।
মিক্কো রেন্টালাইনেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.