কোন প্রক্রিয়া কোনও ডিভাইসকে আনমাউন্ট করা আটকাচ্ছে তা আমি কীভাবে জানতে পারি?


58

কখনও কখনও, আমি একটি আন-মাউন্ট করা চাই USB ডিভাইস সঙ্গে umount /run/media/theDrive, কিন্তু আমি একটি পেতে drive is busyত্রুটি।

কোন প্রক্রিয়া বা প্রোগ্রামগুলি ডিভাইসে অ্যাক্সেস করছে তা আমি কীভাবে জানতে পারি?


1
: একই প্রশ্ন আরো upvotes / এখানে উপর উত্তর stackoverflow.com/questions/624154/...
ট্রেভর বয়েড স্মিথ

উত্তর:


57

ব্যবহার করুন lsof | grep /media/whateverকি মাউন্ট ব্যবহার করছে খুঁজে বের করতে।

এছাড়াও, umount -lপরিষ্কার করার সময় ড্রাইভটি ব্যবহার করা থেকে নতুন প্রক্রিয়াগুলি রোধ করতে (অলস অমাউন্ট) বিবেচনা করুন ।


24
fuser -mv /path/to/mountpointএকটি মাইপয়েন্ট পয়েন্ট ব্যবহার করে প্রক্রিয়াগুলি সন্ধানের জন্য আরও পঠনযোগ্য বিকল্প হতে পারে।
রিকার্ডো মুরি

@ রিকার্ডোমুরি lsof | grepআমার জন্য আরও ভাল কাজ করে। fuser -mvঅসম্পৃক্ত প্রক্রিয়াগুলি কেবল 80+ ডাম্প করে। আমি মাউন্ট বাইন্ডেড ডিরেক্টরি ব্যবহার করছি।
রিকি বয়েস

1
umount -lবিপজ্জনক । পরিবর্তে উপরে mount -o bind একটি মোড 000খালি ডিরেক্টরি, এবং মাধ্যমে পরিষ্কার lsof +f -- /dev/device
টম হেল

35

বেশিরভাগ সময়, ব্যবহারের সেরা কমান্ডটি হ'ল lsof (" l i s t o Pen f iles")।

lsof +f -- /media/usb0

যেখানে /media/usb0ইউএসবি ড্রাইভের মাউন্ট পয়েন্ট বা আনমাউন্ট করার জন্য অন্যান্য ফাইল সিস্টেম রয়েছে। +f --lsof কে পরবর্তী যুক্তিটিকে মাউন্ট পয়েন্ট হিসাবে বিবেচনা করতে বলে; এটি সাধারণত, তবে সবসময় নয়, নিজেরাই পরিচালনা করে, যাতে এটি কার্যকর হয় lsof /media/usb0। এটি খোলা ফাইলগুলি (এমনকি লিঙ্কযুক্তগুলিও), মেমরি ম্যাপযুক্ত ফাইলগুলি, বর্তমান ডিরেক্টরিগুলি এবং আরও কিছু অস্পষ্ট ব্যবহারের সন্ধান করে। অন্যান্য ব্যবহারকারীর প্রক্রিয়া সম্পর্কে তথ্য পেতে আপনাকে কমান্ডটি রুট হিসাবে চালনা করতে হবে (এবং আমি মনে করি যে সেখানে এমন কোনও সংযোগ রয়েছে যেখানে lsofরুট হিসাবে চালাতে হবে)।

এমন ব্যবহার রয়েছে যেগুলি lsof খুঁজে পাবেন না; এগুলি অপসারণযোগ্য মিডিয়াতে অস্বাভাবিক। তারা সহ:

  • মাউন্ট পয়েন্টস: মাউন্ট পয়েন্ট /fooহলে আপনি আনমাউন্ট করতে পারবেন না /foo/bar
  • মাউন্ট ডিভাইস: আপনি আন-মাউন্ট করা না পারেন, /fooযদি /foo/barএকটি মাউন্ট ব্লক ডিভাইস বা লুপ-র উপরে মাউন্ট নিয়মিত ফাইল বা যদি এটি একটি Linux বেঁধে উৎস মাউন্ট।
  • এনএফএস রফতানি: lsof সনাক্ত করবে না যে কোনও কার্নেল এনএফএস সার্ভার দ্বারা একটি গাছ রফতানি করা হয়েছে।

আরেকটি কমান্ড যা চিমটিতে পরিবেশন করতে পারে তা হ'ল ফুসার, যা কেবলমাত্র ডিভাইসে খোলা ফাইলগুলি সহ প্রসেসের পিআইডি তালিকাবদ্ধ করে:

fuser -m /media/usb0

8

আপনি lsofপিটারের মতো বলে ব্যবহার করতে পারেন , বা আপনি যদি নিশ্চিত হন যে আপনি কেবল এই সমস্ত জিনিস হত্যা করতে এবং এটি আনমাউন্ট করতে চান তবে আপনি সম্ভবত এর মতো কিছু করতে পারেন:

fuser -Mk /mnt/path
umount /mnt/path

1
আপনি যদি এটি করতে যাচ্ছেন তবে -Mসুরক্ষার জন্য ব্যবহারটি দেখুন।
টম হেল

@ টমহেল আপনি কমান্ডটি -Mপ্রয়োগ করা উচিত তা পরিষ্কার করতে চাইতে পারেন ।
এইচএসমালে

1
fuser: -M, --ismountpoint Request will be fulfilled only if NAME specifies a mountpoint. This is an invaluable seatbelt which prevents you from killing the machine if NAME happens to not be a filesystem.
টম হেল

6

ফাইল খুলুন

খোলা ফাইল সহ প্রক্রিয়াগুলি হ'ল স্বাভাবিক অপরাধী। তাদের প্রদর্শন করুন:

lsof +f -- <mountpoint or device>

এর /dev/<device>পরিবর্তে ব্যবহার করার একটি সুবিধা রয়েছে /mountpoint: এর পরে একটি মাউন্টপয়েন্ট অদৃশ্য হয়ে যাবে umount -l, বা এটি কোনও আচ্ছাদিত মাউন্ট দ্বারা আড়াল হতে পারে।

fuserএছাড়াও ব্যবহার করা যেতে পারে, তবে আমার মনে lsofআরও কার্যকর আউটপুট রয়েছে। তবে fuserএটি কার্যকর যখন আপনার নাটকগুলির জন্য প্রক্রিয়াগুলি হত্যার বিষয়টি আসে যাতে আপনি আপনার জীবন নিয়ে যেতে পারেন।

ফাইলগুলি তালিকাভুক্ত করুন <mountpoint>(উপরের ক্যাভিয়েট দেখুন):

fuser -vmM <mountpoint>

লেখার জন্য খোলা ফাইলগুলির সাথে কেবলমাত্র প্রক্রিয়াগুলি ইন্টারেক্টিভভাবে হত্যা করুন:

fuser -vmMkiw <mountpoint>

কেবল পঠনযোগ্য ( mount -o remount,ro <mountpoint>) পুনরায় মাউন্ট করার পরে , অবশিষ্ট সমস্ত প্রক্রিয়াটি মেরে ফেলা নিরাপদ (র):

fuser -vmMk <mountpoint>

Mountpoints

অপরাধী নিজেই কর্নেল হতে পারে। আপনি যে ফাইল সিস্টেমে চেষ্টা করছেন সেটি মাউন্ট করা অন্য একটি ফাইল সিস্টেম umountশোকের কারণ ঘটবে। পরিক্ষা কর:

mount | grep <mountpoint>/

লুপব্যাক মাউন্টগুলির জন্য ( ধন্যবাদ স্টিফেন কিট ), এর ফলাফলও দেখুন :

losetup -la

নামবিহীন ইনোডস (লিনাক্স)

বেনামে আইওডগুলি তৈরি করতে পারে:

  • অস্থায়ী ফাইল ( openসহ O_TMPFILE)
  • ঘড়ি inotify
  • [Eventfd]
  • [Eventpoll]
  • [Timerfd]

এই পোকেমন অধিকাংশ অধরা ধরনের হয়, এবং প্রদর্শিত lsof'র TYPEহিসাবে কলাম a_inode(যেখানে অনথিভুক্ত হয় lsofman পৃষ্ঠা )।

এগুলি উপস্থিত হবে না lsof +f -- /dev/<device>, সুতরাং আপনার প্রয়োজন হবে:

lsof | grep a_inode

বেনামে আইওনড ধারণ করে হত্যা করার প্রক্রিয়াগুলির জন্য দেখুন: বর্তমান ইনোটিফাই ঘড়ির তালিকা করুন (পথের নাম, পিআইডি)

inotify ঘড়ি (লিনাক্স)

এই মন্তব্যটি ব্যাখ্যা করে যে কেন আনমাউন্টটি রোধ করা inotify উচিত নয় , তবে এই নোটটি এমন পরিস্থিতিতে বর্ণনা করে যা এটি করবে :

কোনও আনমাউন্ট vx_softcnt_flush()কলটিতে ঝুলতে পারে । হ্যাং ঘটে কারণ ইনোটাইফাই ওয়াচগুলি i_countপরিবর্তনশীল বৃদ্ধি করে এবং v_os_hold valueইনোটাইফাই প্রহরী হোল্ডটি প্রকাশ না হওয়া পর্যন্ত কারণটিকে উন্নত রাখার কারণ করে ।


আর একটি রয়েছে, লুপব্যাক মাউন্টগুলি: আপনি যদি কোনও ফাইল সিস্টেম মাউন্ট করেন, তবে লুপব্যাক মাউন্ট ব্যবহার করে সেই ফাইল সিস্টেমে একটি ফাইল মাউন্ট করুন, আপনি প্রথম ফাইল সিস্টেম আনমাউন্ট করতে সক্ষম হবেন না, তবে কিছুই প্রদর্শিত হবে না lsof
স্টিফেন কিট

চিয়ার্স। যোগ করা হয়েছে Mountpointsঅধ্যায়।
টম হেল

5

আপনি যদি জিনোম ব্যবহার করেন, নটিলাসের মাধ্যমে আনমাউন্টিং কোনও বার্তা প্রদর্শন করবে যা জানায় যে কোন প্রক্রিয়াটি এখনও ড্রাইভটি ব্যবহার করছে এবং যে ফাইলটি এটি ব্যবহার করছে।

বিকল্প পাঠ


1

(কমপক্ষে) ওপেনবিএসডি এর জন্য:

$ fstat /mnt/mountpoint

উদাহরণস্বরূপ ( যেমনটি অন্যথায় কেবল আমাদের নিজস্ব প্রক্রিয়াগুলি দেখতে doasপারা যায় fstatতেমনি মূল হিসাবে নির্বাহ করতে ব্যবহার করা ):

$ doas fstat /usr/ports
USER     CMD          PID   FD MOUNT        INUM MODE         R/W    SZ|DV NAME
_pbuild  make       15172   wd /usr/ports  3923598  drwxrwxr-x     r     1536 /usr/ports/
_pbuild  make       40034   wd /usr/ports  3923598  drwxrwxr-x     r     1536 /usr/ports/

এই ক্ষেত্রে, /usr/portsব্যবহারকারী _pbuildএই দুটি makeপ্রক্রিয়া চালানো শেষ না করা পর্যন্ত আমি আনমাউন্ট করতে সক্ষম হব না ।


-2

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


2
এই উত্তরটি অসম্পূর্ণ বা ভুল। আমি নিশ্চিত না যে এটি কোনটি অস্পষ্ট।
21:56
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.