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


13

আমি ডেবিয়ান স্ট্রেচ ব্যবহার করছি। আমার রুট পার্টিশন মাউন্ট করা হয়েছে read-only। আমি যখন প্যাকেজগুলি ইনস্টল বা আপগ্রেড করি কেবল তখনই ( /এপ read-writeহুক ব্যবহার করে) পুনরায় সঞ্চার করা হয় এবং তারপরে পুনরায় পুনঃস্থাপন করা হয় ro

কখনও কখনও প্যাকেজ আপগ্রেড হওয়ার পরে আমি /কেবলমাত্র পঠন-পাঠাতে আবার পুনঃমাউন্ট করতে অক্ষম :

mount -o remount,ro /
mount: / is busy

পুরানো ডেবিয়ান সংস্করণে (হুইজি), আমি মুক্ত ফাইলগুলি তালিকাভুক্ত করতে পারি যা এর সাথে লিঙ্কযুক্ত নয় lsof:

 lsof +L1

বা, আরও নির্দিষ্টভাবে, যে ফাইলগুলি /রো-তে পুনরায় পুনঃনির্মাণ করা থেকে বিরত থাকে :

{ lsof +L1 ; lsof|sed -n '/SYSV/d; /DEL|(path /p;' ; } | grep -Ev '/(dev|home|tmp|var)'

তবে ডেবিয়ান স্ট্রেচে lsof +L1কোনও ফাইলের তালিকা নেই।

আমি কোনো পরিবর্তন দেখছি না +|-Lযে man lsofব্যাখ্যা কেন এটা কাজ বন্ধ করে দেয়।

কেন lsof + L1 লিঙ্কযুক্ত থাকা ফাইলগুলি খোলে না?

আমি কীভাবে সেই ফাইলগুলিকে তালিকাবদ্ধ করতে পারি যা কেবলমাত্র পঠনের জন্য পুনরায় সঞ্চারিত হতে বাধা দেয়?

হালনাগাদ

থামানো যেতে পারে এমন সমস্ত প্রক্রিয়া আমি বন্ধ করে দিয়েছি এবং কেবল আছে initএবং gettyএখনও চলছে, তবে আমি এর পুনঃসমাংশ /করতে পারি না ro


লিঙ্কযুক্ত খোলা ফাইলগুলি কেবলমাত্র বাধা নয়। চেহারার জন্য wঅথবা uমধ্যে FDকলাম lsofআউটপুট, অথবা Fএর আউটপুটে fuser -vm /, উদাহরণস্বরূপ। যদিও আমি আপনাকে একটি সম্পূর্ণ তালিকা দিতে পারি না। আপনি নিডস্টার্ট প্যাকেজটি ইনস্টল করতেও পারেন ।
ফেরেঙ্ক ওয়েগনার

বোকা প্রশ্ন কিন্তু আপনি হিসাবে lsof চালানো হয় root?
কিউই

1
কিউই - হ্যাঁ, আমি lsof কে মূল হিসাবে চালাচ্ছি।
মার্টিন ভেজিটার

1
fuser -m / রুট কি ব্যবহার করছে তা বলে না ?
রুই এফ রিবেইরো

1
@ মার্কাস লিন্সনার - আমি সিস্টেমড ব্যবহার করছি না। আমি init ব্যবহার করছি।
মার্টিন ভেজিটার

উত্তর:


2

আমি কীভাবে সেই ফাইলগুলিকে তালিকাবদ্ধ করতে পারি যা কেবলমাত্র পঠনের জন্য পুনরায় সঞ্চারিত হতে বাধা দেয়?

ক) প্যাকেজে fuserপাওয়া যাবে psmisc; এটি এমন একটি ব্যবহারের fuserক্ষেত্র যেখানে আমি চকচকে দেখি এবং এর চেয়ে বেশি দরকারী lsof

# fuser -v -m / 2>&1 | grep '[Ff]r.e'

এটি ফাইলগুলি পড়ার জন্য (চ) এবং লেখার জন্য (এফ) সমস্ত প্রক্রিয়া দেখায়। যে ফাইলগুলি কেবলমাত্র পঠন করতে পুনরায় সঞ্চারিত হতে বাধা দিতে পারে সেগুলি হ'ল সেগুলি লেখার জন্য খোলা হয়েছে (এফ)।

লেখার জন্য উন্মুক্ত রুট ডিরেক্টরি ফাইলের সাথে চালানো কার্যকর একটি প্রক্রিয়াগুলি হত্যা করুন ie

# for fupid in $(fuser -v -m / 2>&1 | grep Fr.e | awk '{print $2}'); do kill $fupid; done

যে systemdএকটি সতর্কতা সঙ্গে মন্তব্য উপরে । যদি systemdহয় initতাহলে fuserএটি দেখতে পাবেন এবং সেখানে অনান্য কারণের ওপর। সঙ্গে systemdচলমান, এটা করতে পারেন (পুনরায়) প্রসেস তোমার পেছনে, শুরু এমনকি যদি তারা ঠিক শনাক্ত করে থাকেন এবং নিহত fusersystemdপ্রচলিত তুলনায় অনেক বেশি উন্নত sysvinit

খ) বর্ণনায় আপডেটের আপডেটে সিস্টেমটি কেবলমাত্র ... initএবং gettyএখনও চলছে ...

আমি মন্তব্যটি দেখেছি যা বলছে যে সিস্টেমটি ব্যবহার করছে না systemd, এটি ব্যবহার করছে init। প্রসারিত উপর, systemd হয় init । মন্তব্যটি স্পষ্ট করে বলেননি sysvinit, তাই আমি ধরে নিচ্ছি যে প্রশ্নে থাকা সিস্টেমটি সম্ভবত ডিফল্ট প্রসারিতটি systemdব্যবহার করছে init। বা এই পোস্টে হোঁচট খাচ্ছে এমন অন্যান্য ব্যক্তিরা, যারা প্রসারিত ব্যবহার করছেন তারা systemdএই অংশটি দরকারী বলে মনে করেন।

প্রতি ডেবিয়ান উইকি ,

সিস্টেম ইনিশিয়ালাইজেশন প্রক্রিয়া টি ডিমন দ্বারা পরিচালিত হয়। স্কিজে এবং পূর্ববর্তী রিলিজগুলিতে, ডেমনটি সিসভিনিট প্যাকেজ দ্বারা সরবরাহ করা হয় এবং কোনও বিকল্প সমর্থিত হয় না। ইন হুইজি , ডিফল্ট Init ডেমন এখনওsysvinit কিন্তু systemd হল একটি "প্রযুক্তিগত প্রি-ভিউ" পাওয়া যায়। ইন Jessie এবং প্রসারিত , ডিফল্ট Init সিস্টেমsystemd কিন্তু sysvinit করার সুইচিং সমর্থিত।

জেসি থেকে, কেবল সিস্টেমডই সম্পূর্ণরূপে সমর্থিত; sysvinit বেশিরভাগ ক্ষেত্রে সমর্থিত, তবে ডেবিয়ান প্যাকেজগুলির জন্য সিস্টেভিট প্রারম্ভিক স্ক্রিপ্টগুলি সরবরাহ করার প্রয়োজন হয় না। রানিটও প্যাকেজযুক্ত, তবে অন্যদের মতো একই স্তরের পরীক্ষার এবং সমর্থন পায় নি, এবং বর্তমানে পিআইডি 1 হিসাবে সমর্থিত নয়।

systemdদৌড়ানোর সাথে সাথে , মুক্ত করার জন্য কয়েকটি অতিরিক্ত পদক্ষেপ নেওয়া উচিত / যাতে এটি ইস্যু ছাড়াই পুনরুদ্ধার করা যায়।

সম্ভবত এটির system.sliceজন্য systemd-journald.serviceবা systemd-udevd.service(উভয়ের সকেট নির্ভরতা রয়েছে) খোলা ফাইল ধারণ করে । অথবা, যদি NetworkManagerএটি চলমান থাকে তবে এটি রেসপ্যান করতে পারে dhclientযা / var / ... (এবং & / var / এর সর্বদা নিজস্ব ডিভাইস নয়) ইত্যাদিতে ইজারা লিখতে fuserপারে এবং ইত্যাদি খুঁজে পেতে পারে এবং আপনি খুন করে dhclientতবে NetworkManagerঠিক এটিকে আবার শুরু করে।

নৈতিক হ'ল প্রচুর জিনিস স্বয়ংক্রিয় হয় যা 'চায়' / (এবং আরও অনেক কিছু দিয়ে systemd) পারে।

নিশ্চিত হওয়া, এটি যদি সম্ভব হয় তবে systemdরান লেভেল 1 এর সমতুল্য মিলে যায় rescue.target(এবং এটির সাথে runlevel1.targetপ্রতীকী লিঙ্ক rescue.target)।

1) সিস্টেমটি বিচ্ছিন্ন করে শুরু করুন rescue.target

# systemctl isolate rescue.target

এটি আপনাকে মূল পাসওয়ার্ড প্রবেশের অনুরোধ জানাবে; স্ক্রিন নির্দেশাবলী অনুসরণ করুন।

2) উদ্ধার শেল এ, কী চায় / তা সন্ধান করুন।

# systemctl show -p Wants /

সাধারণত, এটি system.slice; যা চায় সবকিছু বন্ধ করুন /। যেমন

# systemctl stop system.slice

3) এই মুহুর্তে, পুনঃসমাংশটি রিপোর্ট করা উচিত নয়mount: / is busy এবং কাজ করা mount -o remount,ro / উচিত । যদি তা না হয় তবে আবার চেক করুন fuser

4) এফডাব্লুআইডাব্লু; আমি এমন সময়ও দেখেছি umountযখন / যদি অন্য ডিভাইসটি অন্য মাউন্টের উপ-ডিরেক্টরিতে মাউন্ট করা থাকে, যেমন নেস্টেড মাউন্টগুলি ব্যর্থ হয়। উদাহরণস্বরূপ, / var / অথবা / boot / অন্য ডিভাইসে থাকলে (এবং মাউন্ট করা) umount /ব্যর্থ হবে । যদিও এখনও এই ক্ষেত্রে কাজ করা উচিত।mount -o remount,ro /

lsblk নেস্টেড মাউন্টগুলি কল্পনা করতে সহায়ক হতে পারে।

কেন lsof + L1 লিঙ্কযুক্ত থাকা ফাইলগুলি খোলে না?

যেহেতু তারা উপলব্ধ নেই (সকেট বা সর্বাধিক FIFOs এবং পাইপ), তারা আর ফাইল খুলছেন না (পিতামাতার প্রক্রিয়াটি ফাইল বর্ণনাকারী বন্ধ করে দিয়েছে), বা তাদের (এখনও) একটি লিঙ্কের গণনা 1 এর চেয়ে বেশি।

man lsof (8) বিস্তারিত ...

+ | -এল [এল]

এই বিকল্পটি ('+') সক্ষম করে বা ('-') অক্ষম করে ('-') ফাইল লিঙ্ক গণনাগুলির তালিকা, যেখানে তারা উপলব্ধ রয়েছে - যেমন, তারা সকেট, বা বেশিরভাগ ফিফও এবং পাইপের জন্য উপলব্ধ নয়।

নিম্নোক্ত সংখ্যা ব্যতীত + এল নির্দিষ্ট করা থাকলে সমস্ত লিঙ্ক গণনা তালিকাভুক্ত করা হবে। যখন -L নির্দিষ্ট করা হয় (ডিফল্ট), কোনও লিঙ্ক গণনা তালিকাভুক্ত হবে না।

যখন + এল এর পরে একটি নম্বর আসে, কেবলমাত্র সেই সংখ্যার চেয়ে কম লিঙ্ক গণনা করা ফাইলগুলি তালিকাভুক্ত করা হবে । (কোনও নম্বর-এল অনুসরণ করতে পারে না)) ফর্মটির একটি নির্দিষ্টকরণ '' + এল 1 '' লিঙ্কযুক্ত খোলা ফাইলগুলি নির্বাচন করবে। ফর্মটির একটি নির্দিষ্টকরণ +aL1 <file_system>নির্দিষ্ট ফাইল সিস্টেমে লিঙ্কযুক্ত মুক্ত ফাইল নির্বাচন করবে।


0

আপনি /procমাউন্ট আছে?

বেশিরভাগ /সময় কেবলমাত্র পঠন-পঠনের জন্য মাউন্ট করা যত্নবান এমন একজন হয়ে উঠতে , আমি কল্পনা করতে পারি যে আপনিও প্রেফকে মাউন্ট না করা পছন্দ করেছেন। lsofখোলা ফাইলগুলি খুঁজে পাওয়ার জন্য কিন্তফের প্রয়োজন ।

প্রক্রিয়া দ্বারা খোলা ফাইলগুলি কর্ফ দ্বারা প্রোফসে প্রতীকী লিঙ্কগুলির মাধ্যমে উন্মুক্ত করা হয়। ডিরেক্টরিতে /proc/<pid>/fdপ্রতিটি ফাইল খোলা থাকার জন্য একটি সিলেমিংক থাকে। সিমলিংকের নাম হ'ল ফাইল বর্ণনাকারী সংখ্যা এবং সিমিলিংক দ্বারা রেফারেন্স করা পথটি ফাইল পথ।

/procইতিমধ্যে মুছে ফেলা খোলা ফাইলগুলির জন্য ঝুঁকির চিহ্নগুলি এখনও রয়ে যায় । এবং ফাইলটির রেফারেন্সযুক্ত পাথের নামটি "(মুছে ফেলা)" দিয়ে শেষ হয়ে যায়।

lsof +L1মূলত কী কী তাড়াতাড়ি ওয়ান-লাইনারের থেকে আলাদা নয়:

stat -c%N /proc/[0-9]*/fd/* | grep deleted

সুতরাং, আপনি সমস্ত ওপেন ফাইলগুলির তালিকা করতে অনুরূপ ওয়ান-লাইনার ব্যবহার করতে পারেন যা রুট ফাইল সিস্টেমটিকে পুনরায় সঞ্চারিত হতে বাধা দিতে পারে (একটি কার্য সরবরাহিত /proc)।

তবে আপনি যদি /procমাউন্ট করে থাকেন / না করে থাকেন তবে আমি কেবলমাত্র অন্য কারনগুলি হ'ল বাগগুলি ... যাইহোক, এফওয়াইআই, আমার বর্তমান দেবিয়ান স্ট্রেচ সিস্টেমে। lsof +L1প্রত্যাশার মতো কাজ করে।

bash# lsb_release -d
Description:    Debian GNU/Linux 9.5 (stretch)

bash# uname -a
Linux bwp-249-8 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) x86_64 GNU/Linux

bash# lsof -v
lsof version information:
    revision: 4.89
    [...]

হ্যাঁ, আমি /procআরোহণ করেছি আমি আপনার যুক্তি অনুসরণ করি না কেন আমার সম্ভবত নেই। যাইহোক, stat -c%N /proc/[0-9]*/fd/* | grep deletedআমাকে কিছুই দেখায় না।
মার্টিন ভেজিটার

0

আমি শুধুমাত্র একবার এই সমস্যার পুনরুত্পাদন, এবং মাত্র ব্যবহার করে এটি মীমাংসিত পারে mountসঙ্গে -n বিকল্প।

ম্যান মাউন্ট উদ্ধৃত :

-n, --no-mtab
      Mount without writing in /etc/mtab.  This is necessary for example when /etc is on a read-only filesystem.

mountপ্রোগ্রাম নিজেই জন্য ফাইল (গুলি) খোলার লেখা root ফাইল-সিস্টেমের আমার কাছে একটি বিশ্বাসযোগ্য ব্যাখ্যা মত রণিত। বিশেষত সর্বোপরি mountলেখেন /etc/mtabএবং /etcপ্রায়শই মূল ফাইল সিস্টেমের অংশ। আমি একবার এটি করার পরেও আমি আবার এটি একই মেশিনে পুনরুত্পাদন করতে পারিনি ...

এটি কি আপনার সমস্যার সমাধান করতে পারে?


না, -nমাউন্ট ব্যবহার করে কোনও পার্থক্য নেই।
মার্টিন ভেজিটার

0

আপনার সিস্টেমে দৃশ্যমানতা ছাড়াই সমস্যাটি ঠিক কী তা আপনাকে জানানো খুব কঠিন। মন্তব্য এবং পূর্ববর্তী উত্তর ভাল শুরু।

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

ডকুমেন্টেশনের লিঙ্কটি এখানে: https://wiki.debian.org/ReadonlyRoot

বড়দের আমি আপনাকে এখানে দিয়ে যাব:

1 - এর অধীনে নির্দিষ্ট অবস্থান রয়েছে / যা অবশ্যই পড়তে হবে। ডকুমেন্টেশনের ভিত্তিতে এটিকে এমন কিছু দেখাচ্ছে:

ডিবিয়ান রো রুট

আপনার স্টোরেজ স্ট্যাক কনফিগারেশনের উপর ভিত্তি করে (ব্লক ডিভাইসগুলি পার্টিশনবিহীন lvm, ইত্যাদি) আপনার ব্লক ডিভাইসগুলি পৃথক হতে পারে তবে মূল ধারণাটি হ'ল আরডাব্লু মাউন্ট করার বিকল্পটি পাওয়ার জন্য আপনার পরবর্তী 4 টি মাউন্ট পয়েন্ট থাকতে হবে 4 4 মাউন্ট পয়েন্টগুলি।

2 - / ইত্যাদিতে বেশ কয়েকটি বিশেষ ফাইল রয়েছে যা আপনার অন্য কোনও পরিবর্তনের জন্য একটি প্রতীকী লিঙ্ক তৈরি করতে বা প্রয়োগ করতে হবে (লিঙ্কযুক্ত নিবন্ধে বিশেষত বিস্তারিত detailed)। আপনার লিনাক্স সার্ভারটি কী অ্যাপ্লিকেশনগুলি চলছে তার ভিত্তিতে এগুলি প্রয়োগ করতে পারে বা নাও পারে। কিছু ফাইল এমনকি আপনার মেশিনে উপস্থিত নাও থাকতে পারে, তবে আমি সমস্ত কিছু ডক্সে অন্তর্ভুক্ত করেছি। মনে রাখবেন, যদি আপনি প্রক্রিয়াটির পিডকে হত্যা করেন তবে আমি এই পরিবর্তনগুলি দৃ strongly়তার সাথে করার সুপারিশ করছি। এখানে ডেবিয়ান উইকির সরাসরি পথ রয়েছে:

  • adjtime
  • init.d / ALSA-utils
  • জন্য / etc / কুরিয়ার / শেয়ারকৃত / সূচক
  • যে কোনও কাপের স্টেট ফাইল, ক্লাসাকনফ, কাপসডি.কনফ, প্রিন্টার্সকনফ সাবস্ক্রিপশনস কনফ
  • /etc/lvm/lvm.conf
  • এমতাব (যা দেখে মনে হচ্ছে আপনি -N পতাকাটি দিয়ে সম্বোধন করার চেষ্টা করেছেন)
  • নেটওয়ার্ক / রান (ifup এবং ifdown দ্বারা ব্যবহৃত হয়, স্কিচ মধ্যে। প্রসারিত প্রযোজ্য হতে পারে না, ymmv)
  • nologin
  • resolv.conf
  • Passwd এবং ছায়া উভয় ফাইল
  • সাম্বা / dhcp.conf
  • স্তন্যপান
  • udev দ্বারা

একবার আপনি উপরের সমস্তটি যাচাই করেছেন এবং নিশ্চিত করেছেন যে তারা উইকির অনুমান অনুসারে চলেছে, পরের জিনিসটি চেক করার জন্য /etc/apt/apt.conf হবে

DPkg {
// Auto re-mounting of a readonly /
Pre-Invoke { "mount -o remount,rw /"; };
Post-Invoke { "test ${NO_APT_REMOUNT:-no} = yes || mount -o remount,ro / || true"; };
}; 

আপনার ত্রুটির উপর ভিত্তি করে ডকুমেন্টেশনের উপর ভিত্তি করে চেক করতে পারেন এমন চূড়ান্ত জিনিসটি নীচে থেকে এসেছে:

"প্যাকেজগুলির আপগ্রেড করার পরে আপনার সমস্যার মুখোমুখি হতে পারে যে মাউন্ট ফাইল সিস্টেমটি কেবলমাত্র আপনাকে" / ব্যস্ত "বলে পুনরায় গণনা করতে অস্বীকার করে। এটি মুছে ফেলা ফাইলগুলির কারণে ঘটে যা তারা এখনও একটি প্রক্রিয়া দ্বারা ব্যবহৃত হয় deleted ডিলিট হওয়া ফাইলগুলি কোন প্রক্রিয়াগুলি ব্যবহার করে তা জানতে প্যাকেজ ডেবিয়ান-গুডি থেকে চেকস্টার্ট (1) সরঞ্জামটি ব্যবহার করুন বা নিম্নলিখিত কমান্ডটি ব্যবহার করুন Often প্রায়শই এগুলি আপগ্রেড করা লাইব্রেরি ব্যবহার করে ডেমন হয় You ফাইলগুলি মুক্তি পেতে তাদের পুনরায় চালু করতে হবে ""

দস্তাবেজে কমান্ড সরবরাহ করা হয়েছে:

{lsof +L1; lsof|sed -n '/SYSV/d; /DEL\|(path /p;'} |grep -Ev '/(dev|home|tmp|var)'

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

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