নীচের নির্দেশাবলী CentOS 7 এর সাথে কাজ করার জন্য তৈরি করা হয়েছে তবে এটি সিস্টেমড চলমান যে কোনও ডিস্ট্রোতে সহজেই স্থানান্তরযোগ্য হবে। সমস্ত কমান্ড রুট হিসাবে চালিত হয়।
সিস্টেমটি একটি স্থিতিশীল অবস্থায় রয়েছে তা নিশ্চিত করুন
এটি নিশ্চিত করুন যে অন্য কেউ এটি ব্যবহার করছে না এবং গুরুত্বপূর্ণ কিছু চলছে না। বাইরের সংযোগগুলি যাতে মাঝখানে জিনিসকে ব্যাহত না করে তা নিশ্চিত করার জন্য, httpd বা ftpd এর মতো পরিষেবা সরবরাহকারী ইউনিটগুলি বন্ধ করা সম্ভবত একটি ভাল ধারণা।
systemctl stop httpd
systemctl stop nfs-server
# and so on....
সমস্ত অব্যবহৃত ফাইল সিস্টেম আনমাউন্ট করুন
umount -a
এটি নিজেই মূল লক্ষ্য এবং বিভিন্ন অস্থায়ী / সিস্টেম এফএস এর জন্য 'টার্গেট ব্যস্ত' সতর্কতাগুলি মুদ্রণ করবে। এগুলি মুহুর্তের জন্য উপেক্ষা করা যেতে পারে। গুরুত্বপূর্ণটি হ'ল রুট ফাইল সিস্টেমটি বাদে কোনও অনস্ক্রিয় ফাইল সিস্টেম মাউন্ট করা যায় না। এটি যাচাই করুন:
# mount alone provides the info, but column makes it possible to read
mount | column -t
যদি আপনি দেখতে পান যে কোনও অন-ডিস্ক ফাইল সিস্টেম এখনও মাউন্ট করা আছে, তবে এমন কিছু এখনও চলছে যা হওয়া উচিত নয়। এটি কী ব্যবহার করছে তা পরীক্ষা করুন fuser
:
# if necessary:
yum install psmisc
# then:
fuser -vm <mountpoint>
systemctl stop <whatever>
umount -a
# repeat as required...
অস্থায়ী মূল তৈরি করুন
mkdir /tmp/tmproot
mount -t tmpfs none /tmp/tmproot
mkdir /tmp/tmproot/{proc,sys,dev,run,usr,var,tmp,oldroot}
cp -ax /{bin,etc,mnt,sbin,lib,lib64} /tmp/tmproot/
cp -ax /usr/{bin,sbin,lib,lib64} /tmp/tmproot/usr/
cp -ax /var/{account,empty,lib,local,lock,nis,opt,preserve,run,spool,tmp,yp} /tmp/tmproot/var/
এটি একটি খুব ন্যূনতম রুট সিস্টেম তৈরি করে, যা (অন্যান্য জিনিসের মধ্যে) ম্যানপেজ ভিউ (না /usr/share
), ব্যবহারকারী-স্তরের কাস্টমাইজেশন (না /root
বা /home
) এবং এর বাইরেও ব্রেক করে। এটি ইচ্ছাকৃত, কারণ এটি প্রয়োজনের তুলনায় আর জুরি-র্যাজড রুট সিস্টেমে না থাকার জন্য উত্সাহ দেয়।
এই মুহুর্তে আপনারও নিশ্চিত হওয়া উচিত যে সমস্ত প্রয়োজনীয় সফ্টওয়্যার ইনস্টল করা আছে, কারণ এটি অবশ্যই প্যাকেজ ম্যানেজারকে ভেঙে দেবে। সমস্ত পদক্ষেপের দিকে নজর দিন এবং নিশ্চিত করুন যে আপনার কাছে প্রয়োজনীয় নির্বাহযোগ্য রয়েছে।
মূলটি মূল
mount --make-rprivate / # necessary for pivot_root to work
pivot_root /tmp/tmproot /tmp/tmproot/oldroot
for i in dev proc sys run; do mount --move /oldroot/$i /$i; done
সিস্টেমেড ডিফল্টরূপে (যেমন হিসাবে mount --make-shared
) সাবট্রি ভাগ করে নেওয়ার অনুমতি দেয় এবং এর ফলে pivot_root
ব্যর্থ হয়। সুতরাং, আমরা এটি বিশ্বব্যাপী বন্ধ করে দিয়েছি mount --make-rprivate /
। সিস্টেম এবং অস্থায়ী ফাইল সিস্টেমগুলি নতুন রুটে পাইকারিভাবে সরানো হয়। এটি এটিকে আদৌ কার্যকর করার জন্য প্রয়োজনীয়; সিস্টেমেডের সাথে যোগাযোগের জন্য সকেটগুলি, অন্যান্য জিনিসের মধ্যেই বাস করে /run
এবং তাই চলমান প্রক্রিয়াগুলি এটি বন্ধ করে দেওয়ার কোনও উপায় নেই।
দূরবর্তী অ্যাক্সেস পরিবর্তন থেকে বেঁচে আছে তা নিশ্চিত করুন
systemctl restart sshd
systemctl status sshd
Sshd পুনরায় আরম্ভ করার পরে, অন্য টার্মিনালটি খোলার মাধ্যমে এবং ssh এর মাধ্যমে আবার মেশিনে সংযুক্ত হয়ে আপনি প্রবেশ করতে পারবেন তা নিশ্চিত করুন। যদি আপনি না পারেন তবে এগিয়ে যাওয়ার আগে সমস্যাটি ঠিক করুন।
একবার যাচাই হয়ে গেলে আপনি আবার সংযোগ করতে পারবেন, আপনি বর্তমানে ব্যবহৃত শেলটি থেকে প্রস্থান করুন এবং পুনরায় সংযোগ স্থাপন করুন। এটি বাকী কাঁটাচামচটি sshd
প্রস্থান করার অনুমতি দেয় এবং এটি নিশ্চিত করে যে নতুনটি ধরে নেই /oldroot
।
এখনও পুরানো শিকড় ব্যবহার করে সবকিছু বন্ধ করুন
fuser -vm /oldroot
এটি পুরানো রুট ডিরেক্টরিতে থাকা প্রক্রিয়াগুলির তালিকা মুদ্রণ করবে। আমার সিস্টেমে এটি দেখতে এমন দেখাচ্ছে:
USER PID ACCESS COMMAND
/oldroot: root kernel mount /oldroot
root 1 ...e. systemd
root 549 ...e. systemd-journal
root 563 ...e. lvmetad
root 581 f..e. systemd-udevd
root 700 F..e. auditd
root 723 ...e. NetworkManager
root 727 ...e. irqbalance
root 730 F..e. tuned
root 736 ...e. smartd
root 737 F..e. rsyslogd
root 741 ...e. abrtd
chrony 742 ...e. chronyd
root 743 ...e. abrt-watch-log
libstoragemgmt 745 ...e. lsmd
root 746 ...e. systemd-logind
dbus 747 ...e. dbus-daemon
root 753 ..ce. atd
root 754 ...e. crond
root 770 ...e. agetty
polkitd 782 ...e. polkitd
root 1682 F.ce. master
postfix 1714 ..ce. qmgr
postfix 12658 ..ce. pickup
আনমাউন্ট করার আগে আপনাকে এই প্রক্রিয়াগুলির প্রত্যেকটির সাথে ডিল করতে হবে /oldroot
। নিষ্ঠুর শক্তি পদ্ধতির kill $PID
প্রতিটি জন্য কেবল , কিন্তু এটি জিনিসগুলি ভাঙ্গতে পারে। আরও মৃদুভাবে এটি করতে:
systemctl | grep running
এটি চলমান পরিষেবাদির একটি তালিকা তৈরি করে। আপনার এগুলি হোল্ডিং প্রক্রিয়াগুলির তালিকার সাথে সম্পর্কিত করতে সক্ষম হওয়া উচিত /oldroot
, তারপরে systemctl restart
তাদের প্রতিটিটির জন্য জারি করুন। কিছু পরিষেবা অস্থায়ী মূলের মধ্যে আসতে অস্বীকার করবে এবং একটি ব্যর্থ অবস্থায় প্রবেশ করবে; এগুলি মুহুর্তের জন্য সত্যিই কিছু যায় আসে না।
আপনি যে আকারটি নতুন আকারে পরিবর্তন করতে চান তা যদি একটি এলভিএম ড্রাইভ হয় তবে আপনার তৈরি অন্যান্য তালিকাগুলি না দেখালেও আপনাকে চলমান কিছু পরিষেবা পুনরায় চালু করতেও পারে fuser -vm /oldroot
। যদি আপনি দেখতে পান যে আপনি ধাপ 7 এর অধীনে একটি এলভিএম ড্রাইভের আকার পরিবর্তন করতে অক্ষম, চেষ্টা করুন systemctl restart systemd-udevd
।
কিছু প্রক্রিয়া সহজ মাধ্যমে মোকাবেলা করা যাবে না systemctl restart
। আমার জন্য এগুলি অন্তর্ভুক্ত রয়েছে auditd
(যা দিয়ে হত্যা করা পছন্দ করে না systemctl
, এবং কেবল একটি চেয়েছিল kill -15
)। এগুলি স্বতন্ত্রভাবে মোকাবেলা করা যেতে পারে।
আপনি যে শেষ প্রক্রিয়াটি দেখতে পাবেন তা সাধারণত systemd
নিজেই। এই জন্য, চালান systemctl daemon-reexec
।
আপনার কাজ শেষ হয়ে গেলে, টেবিলটি দেখতে এমন হওয়া উচিত:
USER PID ACCESS COMMAND
/oldroot: root kernel mount /oldroot
পুরানো রুট আনমাউন্ট করুন
umount /oldroot
এই মুহুর্তে, আপনার প্রয়োজন মতো ম্যানিপুলেশনগুলি পরিচালনা করতে পারেন। মূল প্রশ্নটির জন্য একটি সরল resize2fs
প্রার্থনা প্রয়োজন , তবে আপনি এখানে যা চান তা করতে পারেন; অন্য একটি ব্যবহারের ক্ষেত্রে মূল ফাইল সিস্টেমটি একটি সাধারণ পার্টিশন থেকে LVM / RAID / যা কিছুতেই স্থানান্তর করা হয়।
মূলটিকে পিভট করুন
mount <blockdev> /oldroot
mount --make-rprivate / # again
pivot_root /oldroot /oldroot/tmp/tmproot
for i in dev proc sys run; do mount --move /tmp/tmproot/$i /$i; done
এটি চতুর্থ ধাপের সরল বিপরীত।
অস্থায়ী মূলের নিষ্পত্তি করুন
5 এবং 6 ধাপ পুনরায় পুনরুদ্ধার করুন, /tmp/tmproot
স্থানে ব্যবহার না করে /oldroot
। তারপর:
umount /tmp/tmproot
rmdir /tmp/tmproot
যেহেতু এটি একটি টিএমপিএফস, এই মুহুর্তে অস্থায়ী মূলটি ইথারের মধ্যে দ্রবীভূত হয়, আর কখনও দেখা যায় না।
জিনিসগুলিকে তাদের জায়গায় ফিরিয়ে দিন
আবার ফাইল সিস্টেমগুলি:
mount -a
এই মুহুর্তে, আপনার কাছে আপডেট করা উচিত /etc/fstab
এবং grub.cfg
কোন সমন্বয় অনুযায়ী সুযোগ ধাপ 7 সময় তৈরি।
যে কোনও ব্যর্থ পরিষেবা পুনরায় চালু করুন:
systemctl | grep failed
systemctl restart <whatever>
ভাগ করা সাবট্রিজগুলিকে আবার অনুমতি দিন:
mount --make-rshared /
বন্ধ হওয়া পরিষেবা ইউনিটগুলি শুরু করুন - আপনি এই একক কমান্ডটি ব্যবহার করতে পারেন:
systemctl isolate default.target
এবং তুমি করে ফেলেছ.
অ্যান্ড্রু উডকে অনেক ধন্যবাদ, যারা এই বিএইচইএল 4 এ বিবর্তন করেছিলেন এবং স্টিভ, যিনি আমাকে পূর্বের লিঙ্কটি সরবরাহ করেছিলেন।