প্যাকেজ আপগ্রেড হওয়ার পরে কেবল পঠনযোগ্য ফাইল-সিস্টেমকে পুনরায় মাউন্ট করতে অক্ষম


10

আমার ডেবিয়ান সিস্টেমে আমার /পৃথক বিভাজন রয়েছে এবং মাউন্ট রয়েছে read-only। কেবল /home/, /var/এবং /tmp/লিখনযোগ্য। আমি একটি Pre-Invokeএবং তৈরি করেছি Post-Invoke apt hook, যাতে এটি aptস্বয়ংক্রিয়ভাবে লেখার জন্য সিস্টেমটিকে পুনরায় গণনা করতে পারে, যখন প্যাকেজগুলি ইনস্টল করা হয় বা আপগ্রেড হয়, এবং এটি read-onlyশেষ হয়ে গেলে পুনরায় মাউন্ট করে :

DPkg::Pre-Invoke  {"mount -o remount,rw / ;};
DPkg::Post-Invoke {"mount -o remount    / ;};

এই সম্পূর্ণ সেটআপটি একটি ব্যতিক্রমের সাথে ভালভাবে কাজ করে। কখনও কখনও ইনস্টলেশন / আপগ্রেড প্রক্রিয়া চলাকালীন কিছু পরিষেবা পুনরায় চালু করা বা আমার /মাউন্ট করা হয় যখন শর্ট উইন্ডোতে নতুন ফাইলগুলি খোলার প্রয়োজন হয় read-write, এই ফাইলগুলি writeঅনুমতি নিয়ে খোলা হয় । ইনস্টলেশন / আপগ্রেড সম্পন্ন হওয়ার পরে, আমার Post-Invokeহুক ত্রুটিটি ফিরে আসে কারণ এটি /পুনরায় পুনঃনির্মাণ করতে পারে না read-only

এই সমস্যা সমাধানের কিছু উপায় আছে? এটি খুব বিরক্তিকর, কারণ এই পরিস্থিতিতে আমার অবশ্যই সার্ভারটি পুনরায় চালু করতে হবে, যা অবাস্তব is

সম্পাদনা

নীচে আমার সর্বশেষ প্যাকেজ আপগ্রেডের একটি লগ রয়েছে যার ফলে বর্ণিত ত্রুটি হয়েছে:

root@alpha# apt-get upgrade 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  base-files curl libc-bin libc6 libcurl3 libcurl3-gnutls libmysqlclient18 libssl1.0.0 locales multiarch-support mysql-client mysql-client-5.5 mysql-common
  nscd openssl tzdata wget whois
18 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 18.7 MB of archives.
After this operation, 264 kB of additional disk space will be used.
Do you want to continue [Y/n]? 
Fetched 18.7 MB in 0s (33.2 MB/s) 
Preconfiguring packages ...
(Reading database ... 20532 files and directories currently installed.)
Preparing to replace base-files 7.1wheezy3 (using .../base-files_7.1wheezy4_amd64.deb) ...
Unpacking replacement base-files ...
Processing triggers for man-db ...
Processing triggers for install-info ...
Setting up base-files (7.1wheezy4) ...
Installing new version of config file /etc/debian_version ...
(Reading database ... 20532 files and directories currently installed.)
Preparing to replace libc-bin 2.13-38 (using .../libc-bin_2.13-38+deb7u1_amd64.deb) ...
Unpacking replacement libc-bin ...
Processing triggers for man-db ...
Setting up libc-bin (2.13-38+deb7u1) ...
(Reading database ... 20532 files and directories currently installed.)
Preparing to replace libc6:amd64 2.13-38 (using .../libc6_2.13-38+deb7u1_amd64.deb) ...
Unpacking replacement libc6:amd64 ...
Setting up libc6:amd64 (2.13-38+deb7u1) ...
(Reading database ... 20532 files and directories currently installed.)
Preparing to replace libssl1.0.0:amd64 1.0.1e-2+deb7u1 (using .../libssl1.0.0_1.0.1e-2+deb7u4_amd64.deb) ...
Unpacking replacement libssl1.0.0:amd64 ...
Preparing to replace curl 7.26.0-1+wheezy7 (using .../curl_7.26.0-1+wheezy8_amd64.deb) ...
Unpacking replacement curl ...
Preparing to replace libcurl3:amd64 7.26.0-1+wheezy7 (using .../libcurl3_7.26.0-1+wheezy8_amd64.deb) ...
Unpacking replacement libcurl3:amd64 ...
Preparing to replace libcurl3-gnutls:amd64 7.26.0-1+wheezy7 (using .../libcurl3-gnutls_7.26.0-1+wheezy8_amd64.deb) ...
Unpacking replacement libcurl3-gnutls:amd64 ...
Preparing to replace mysql-common 5.5.33+dfsg-0+wheezy1 (using .../mysql-common_5.5.35+dfsg-0+wheezy1_all.deb) ...
Unpacking replacement mysql-common ...
Preparing to replace libmysqlclient18:amd64 5.5.33+dfsg-0+wheezy1 (using .../libmysqlclient18_5.5.35+dfsg-0+wheezy1_amd64.deb) ...
Unpacking replacement libmysqlclient18:amd64 ...
Preparing to replace multiarch-support 2.13-38 (using .../multiarch-support_2.13-38+deb7u1_amd64.deb) ...
Unpacking replacement multiarch-support ...
Processing triggers for man-db ...
Setting up multiarch-support (2.13-38+deb7u1) ...
(Reading database ... 20532 files and directories currently installed.)
Preparing to replace tzdata 2013h-0wheezy1 (using .../tzdata_2013i-0wheezy1_all.deb) ...
Unpacking replacement tzdata ...
Setting up tzdata (2013i-0wheezy1) ...

Current default time zone: 'Europe/London'
Local time is now:      Sat Feb 15 11:35:41 CET 2014.
Universal Time is now:  Sat Feb 15 11:35:41 UTC 2014.
Run 'dpkg-reconfigure tzdata' if you wish to change it.

(Reading database ... 20511 files and directories currently installed.)
Preparing to replace wget 1.13.4-3 (using .../wget_1.13.4-3+deb7u1_amd64.deb) ...
Unpacking replacement wget ...
Preparing to replace locales 2.13-38 (using .../locales_2.13-38+deb7u1_all.deb) ...
Unpacking replacement locales ...
Preparing to replace whois 5.0.23 (using .../whois_5.1.1~deb7u1_amd64.deb) ...
Unpacking replacement whois ...
Preparing to replace mysql-client 5.5.33+dfsg-0+wheezy1 (using .../mysql-client_5.5.35+dfsg-0+wheezy1_all.deb) ...
Unpacking replacement mysql-client ...
Preparing to replace mysql-client-5.5 5.5.33+dfsg-0+wheezy1 (using .../mysql-client-5.5_5.5.35+dfsg-0+wheezy1_amd64.deb) ...
Unpacking replacement mysql-client-5.5 ...
Preparing to replace nscd 2.13-38 (using .../nscd_2.13-38+deb7u1_amd64.deb) ...
[ ok ] Stopping Name Service Cache Daemon: nscd.
Unpacking replacement nscd ...
Preparing to replace openssl 1.0.1e-2+deb7u1 (using .../openssl_1.0.1e-2+deb7u4_amd64.deb) ...
Unpacking replacement openssl ...
Processing triggers for install-info ...
Processing triggers for man-db ...
Setting up libssl1.0.0:amd64 (1.0.1e-2+deb7u4) ...
Setting up libcurl3:amd64 (7.26.0-1+wheezy8) ...
Setting up curl (7.26.0-1+wheezy8) ...
Setting up libcurl3-gnutls:amd64 (7.26.0-1+wheezy8) ...
Setting up mysql-common (5.5.35+dfsg-0+wheezy1) ...
Setting up libmysqlclient18:amd64 (5.5.35+dfsg-0+wheezy1) ...
Setting up wget (1.13.4-3+deb7u1) ...
Setting up locales (2.13-38+deb7u1) ...
Generating locales (this might take a while)...
  en_DK.UTF-8... done
  en_US.UTF-8... done
Generation complete.
Setting up whois (5.1.1~deb7u1) ...
Setting up mysql-client-5.5 (5.5.35+dfsg-0+wheezy1) ...
Setting up mysql-client (5.5.35+dfsg-0+wheezy1) ...
Setting up nscd (2.13-38+deb7u1) ...
[ ok ] Starting Name Service Cache Daemon: nscd.
Setting up openssl (1.0.1e-2+deb7u4) ...
mount: / is busy

গত লাইন ( mount: / is busy), কার্যক্ষম দ্বারা ফিরে যখন পুনরারোহণ বের করার চেষ্টা ত্রুটি /ফিরে read-only

হালনাগাদ:

নির্দেশিত আদেশটি Graemeকোনও ফাইল প্রদর্শন করে না:

# lsof / | awk 'NR==1 || $4~/[0-9][uw]/'
COMMAND     PID       USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME

আপনি কি ফাইলগুলি খোলা থেকে রোধ করার জন্য read-write, বা পুনঃমাউন্ট করতে সক্ষম হয়ে সার্ভারটি পুনরায় বুট করা থেকে roবা ব্লকিং প্যাকেজগুলি সন্ধান এবং পরিবর্তন করার কোনও উপায় অনুসন্ধান করছেন? না হয় সমাধান হিসাবে গ্রহণযোগ্য হবে?
অ্যান্থন

আদর্শভাবে, আমি প্রথমে ফাইলগুলি খুলতে বাধা দিতে চাই rw। তবে যে কোনও সমাধান আমাকে roপুনঃসূচনা না করে পুনঃমাউন্ট করতে সক্ষম করবে তাও ভাল।
মার্টিন ভেজিটার

আপত্তিজনক পরিষেবাগুলি বন্ধ করুন, পুনরায় মাউন্ট করুন, তাদের আবার শুরু করবেন?
frostschutz

@ মার্টিন আপনার কাছে ইতিমধ্যে আপত্তিজনক পরিষেবাদিগুলির একটি সংক্ষিপ্তসার রয়েছে? আপনার উপস্থাপিত সেটআপটি আমি পছন্দ করি এবং এটি একটি ভিএম-তে চেষ্টা করব, তবে এটা জেনে ভালো লাগবে যে আপনি নিজের সিস্টেমে অ-ডিফল্ট কিছু চালাচ্ছেন না যা আমার পরীক্ষাগুলিকে কেবল আংশিকভাবে প্রাসঙ্গিক করে তুলবে।
অ্যান্থন

@ অ্যান্থন আমি জানি না যে আপত্তিজনক পরিষেবাগুলি কী। তবে স্পষ্টতার জন্য উপরে আমার EDIT দেখুন। আমার সার্ভারটিও একটি ভিএম। এটি একটি সর্বনিম্ন ইনস্টলেশন যা কেবলমাত্র কয়েকটি পরিষেবা চালু রয়েছে।
মার্টিন ভেজিটার

উত্তর:


2

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

https://sites.google.com/site/linuxpendrive/rorootfs

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

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


1

এর একটি যথাযথ উত্তরের নিকটবর্তী হওয়ার জন্য আমাদের দেখতে হবে কোন ফাইলগুলির ফলে mount: / is busyত্রুটি ঘটছে । আপনি এটি দিয়ে এটি করতে পারেন:

lsof / | awk 'NR==1 || $4~/[0-9][uw]/'

ওপির অন্যান্য প্রশ্নের আমার উত্তর দেখুন - lsof: ফাইলগুলি পঠন-লিখন হিসাবে খোলা দেখান - এতে সতর্কতার জন্য। এটি হতে পারে যে কোনও কিছু দেখার জন্য আপনাকে এটিকে একটি পৃথক স্ক্রিপ্টে এবং স্ক্রিপ্টটি অ্যাপ্ট হুকের মধ্যে রেখে দেওয়া দরকার।

আমার সন্দেহ হ'ল /etcপরিষেবাগুলি চালু হয়ে যাওয়ার পরে ফাইলগুলি খোলা থাকে। কিছু প্রোগ্রাম / ডেমন গতিযুক্ত তাদের কনফিগারেশন আপডেট করে। NetworkManagerএবং cupsdদুটি উদাহরণ। আপডেটগুলি cupsযা সৃষ্টি cupsdনতুন প্রিন্টার জন্য স্ক্যান করার একটি উল্টোদিকে (dpkg কনফিগারেশন স্ক্রিপ্ট) ভাল হতে পারে কি আপনার সমস্যাটি সৃষ্টি করছে। আমি আপনাকে সুপারিশ করছি যে আপনি /etcএকটি লিখনযোগ্য ফাইল সিস্টেম রাখুন, যদিও এটি আপনার সমস্যার উত্স না হয়।

আরেকটি সম্ভাবনা হ'ল আপনি যখন রিমাউন্টটি করার চেষ্টা করবেন তখন ফাইল সিস্টেম বাফারটি ডিস্কে ফ্লাশ হওয়ার প্রক্রিয়াধীন রয়েছে। আমি নিশ্চিত নই যে mountআইওটি সম্পূর্ণ না হওয়া পর্যন্ত এটি ব্লক করা হবে কিনা বা ব্যর্থ হয়ে ডিস্কটি ব্যর্থ হওয়া এবং রিপোর্ট করা ব্যয়বহুল। প্রথমটি সম্ভবত আরও বেশি মনে হয় তবে আমি syncআউটপুটে কোনও কল দেখতে পাই না strace(যদিও সম্ভবত mountসিস্টেম কলটি এটি করে)। যাইহোক, উপরোক্ত কিছু না দেখায়, syncতবে এটি পুনঃমাউন্টের আগে একটি কাজ করতে পারে lsofযেমন:

DPkg::Post-Invoke { "sync; mount -o remount /"; };

এটা অদ্ভুত. আপনার lsofকমান্ড কোনও ফাইল
তালিকাবদ্ধ

1
আকর্ষণীয়, অন্য একটি বিষয় মেমরি ম্যাপযুক্ত ফাইলগুলি অনুলিপি-অনুলিপি হতে পারে। এটি কীভাবে মাউন্টকে প্রভাবিত করে আমি জানি না, এবং আমি নিশ্চিত নই lsofএবং এমনকি এটিও দেখাই। আপনি কি lsofআপনার হুক দিয়ে চালানোর চেষ্টা করেছিলেন ? কেমন syncকাপড়?
গ্রামীণ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.