diskutil eject: Mac Terminal से ड्राइव कैसे Eject करें

diskutil से किसी भी Mac ड्राइव को Terminal से eject करें — जिसमें eject न होने वाले volume को force-unmount करना और lsof से यह ढूँढना शामिल है कि उसे कौन रोके हुए है।

Finder बताता है कि ड्राइव इस्तेमाल में है। यह नहीं बताता कि उसे इस्तेमाल कौन कर रहा है या इसके बारे में क्या किया जाए। Terminal दोनों बता देता है।

झटपट जवाब: ड्राइव को Terminal से eject करने के लिए diskutil eject /Volumes/YourDriveName चलाएँ। अगर यह नाकाम हो, तो यह देखने के लिए कि ejection को कौन रोक रहा है sudo lsof /Volumes/YourDriveName इस्तेमाल करें, बाधक प्रोसेस को रोकने के लिए kill <PID>, फिर दोबारा eject करें। आख़िरी उपाय के तौर पर, diskutil unmountDisk force /dev/diskN ड्राइव को ज़बरन हटा देता है, लेकिन ऐसा सिर्फ़ तब करें जब कोई चीज़ सक्रिय रूप से न लिख रही हो।

अगर आप command line के साथ सहज हैं, तो macOS पर ज़िद्दी ड्राइव ejections को संभालने का सबसे ताक़तवर तरीक़ा Terminal है। और अगर आप अभी इसके साथ सहज नहीं हैं, तो ये commands शुरुआत करने के लिए अच्छी जगह हैं।

diskutil eject से बुनियादी ejection

Mac Terminal से external ड्राइव eject करने का सबसे सीधा तरीक़ा:

diskutil eject /Volumes/YourDriveName

YourDriveName की जगह अपने ड्राइव का असली नाम डालें — ठीक वैसे ही जैसे वह Finder में दिखता है। अगर नाम में spaces हैं, तो उसे quotes में लपेटें:

diskutil eject "/Volumes/My Drive"

यह वही करता है जो Finder में eject बटन पर क्लिक करना। अगर काम बन जाए, तो ड्राइव साफ़-सुथरे ढंग से unmount हो जाता है और बात ख़त्म। अगर नाकाम हो, तो आपको Finder के मुक़ाबले कहीं ज़्यादा जानकारी देने वाला error message मिलता है।

आप eject किए बिना भी unmount कर सकते हैं (ड्राइव Disk Utility में दिखता रहता है पर mounted नहीं रहता):

diskutil unmount /Volumes/YourDriveName

यह फ़र्क़ multi-partition ड्राइव के लिए मायने रखता है। unmount एक volume हटाता है। eject physical device और उसके सभी volumes को एक साथ हटा देता है।

diskutil list से अपने ड्राइव का identifier ढूँढना

ज़्यादा एडवांस्ड commands इस्तेमाल करने से पहले, आपको अपने ड्राइव का identifier चाहिए। सभी जुड़े हुए disks की सूची बनाएँ:

diskutil list

output हर disk और उसके partitions को दिखाता है। आपका external ड्राइव कुछ इस तरह होगा जैसे disk4 या disk5। internal ड्राइव आम तौर पर disk0 और disk1 होते हैं।

सिर्फ़ external ड्राइव का ज़्यादा पढ़ने लायक़ ब्यौरा पाने के लिए:

diskutil list external

एक बार जब आपको disk identifier पता चल जाए, तो आप volume नाम के बजाय /dev/ path इस्तेमाल करके भी eject कर सकते हैं:

diskutil eject /dev/disk4

यह तब काम का है जब volume के नाम में असामान्य characters हों या जब volume mounted न हो पर disk अब भी जुड़ा हो।

सभी external ड्राइव को एक साथ कैसे eject करें

अगर आपको एक ही command में हर external ड्राइव eject करना हो, तो दो तरीक़े हैं।

diskutil से सभी external disks को ढूँढना और eject करना:

diskutil list external | grep -o 'disk[0-9]*$' | while read disk; do diskutil eject "/dev/$disk"; done

या Terminal से AppleScript इस्तेमाल करना, जो वही करता है जो Finder करता है:

osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'

AppleScript वाला तरीक़ा सिर्फ़ उन्हीं disks को eject करता है जिन्हें Finder ejectable मानता है — यह आपके startup disk और network volumes को छोड़ देता है, जो आम तौर पर आप यही चाहते हैं।

diskutil eject नाकाम होने पर force unmount करना

अगर सामान्य eject किसी error के साथ नाकाम हो जैसे “couldn’t unmount disk,” तो उसे ज़बरदस्ती करें:

diskutil unmount force /Volumes/YourDriveName

या किसी ख़ास disk के सभी volumes को एक साथ unmount करें:

diskutil unmountDisk force /dev/disk4

force unmount macOS को कहता है कि volume को इस्तेमाल कौन कर रहा है, इसकी परवाह किए बिना उसे छोड़ दे। यह ड्राइव को physically निकालने से ज़्यादा नियंत्रित है — सिस्टम अब भी caches flush करता है और प्रोसेस को सूचित करता है — लेकिन यह प्रोसेस के files साफ़-सुथरे ढंग से बंद करने का इंतज़ार नहीं करता।

force unmount तब इस्तेमाल करें जब आपको पता हो कि कोई ज़रूरी चीज़ लिखी नहीं जा रही। यह Disk Utility से force-eject करने का command-line समकक्ष है। किसी ऐसे ड्राइव पर इसे इस्तेमाल करने से पहले जो सक्रिय रूप से इस्तेमाल में था, हमारी गाइड force eject कब सुरक्षित है और कब जोखिम भरा देखें।

lsof से यह ढूँढना कि ejection को कौन रोक रहा है

यही वह command है जो ejection की समस्याओं के लिए Terminal को बेशक़ीमती बना देता है:

lsof /Volumes/YourDriveName

lsof का मतलब है “list open files.” यह हर उस प्रोसेस को दिखाता है जिसकी उस volume पर कोई file खुली है — प्रोसेस का नाम, प्रोसेस ID (PID), उसे चलाने वाला user, और कौन सी file खुली है। (lsof के flags और pattern पर एक केंद्रित चर्चा के लिए, हमारी Mac यूज़र्स के लिए lsof command गाइड देखें।)

पूरे नतीजों के लिए (सिस्टम प्रोसेस समेत), इसे sudo के साथ चलाएँ:

sudo lsof /Volumes/YourDriveName

sudo के बिना, आपको सिर्फ़ अपने user account के मालिकाना वाले प्रोसेस दिखते हैं। Spotlight के mds या Time Machine के backupd जैसे सिस्टम प्रोसेस नहीं दिखेंगे। sudo के साथ, आपको वह सब कुछ दिखता है जो असल में ड्राइव को खुला रोके हुए है।

lsof की output पढ़ना

output कुछ इस तरह दिखती है:

COMMAND   PID   USER   FD   TYPE   DEVICE   SIZE/OFF   NODE   NAME
mds       123   root   12r  REG    1,8      4096       789    /Volumes/MyDrive/.Spotlight-V100/...
Finder    456   aaron  15r  DIR    1,8      1024       2      /Volumes/MyDrive
Dropbox   789   aaron  8u   REG    1,8      8192       345    /Volumes/MyDrive/Projects/.dropbox

सबसे ज़्यादा मायने रखने वाले columns:

  • COMMAND: प्रोसेस का नाम — यह आपको बताता है कि ejection को कौन रोक रहा है।
  • PID: प्रोसेस ID — ज़रूरत पड़ने पर आप इसी से प्रोसेस को kill करेंगे।
  • FD: file descriptor और access mode। r का मतलब read, w का मतलब write, u का मतलब read/write। अगर आपको w या u दिखे, तो कोई चीज़ सक्रिय रूप से ड्राइव पर लिख रही है, और force-eject करना जोखिम भरा है।
  • NAME: वह ख़ास file जिसे access किया जा रहा है — यह अक्सर ठीक-ठीक ज़ाहिर कर देती है कि प्रोसेस वहाँ क्यों है।

आम जिम्मेदार: mds (Spotlight indexing), backupd (Time Machine), Dropbox, Google Drive, और ख़ुद Finder। निशाने पर लगने वाले समाधानों के लिए हमारी विस्तृत चर्चाएँ देखें — Spotlight का ejection रोकना और iCloud/Dropbox का ड्राइव ejection रोकना

blocking प्रोसेस को kill करना

एक बार जब आपको किसी blocking प्रोसेस का PID पता चल जाए, तो उसे शालीनता से बंद करें:

kill 789

यह एक graceful termination signal भेजता है। प्रोसेस को files बंद करने और सफ़ाई करने का मौक़ा मिलता है। उसे निकलने के लिए कुछ सेकंड दें, फिर दोबारा eject करके देखें।

अगर वह graceful kill पर जवाब न दे:

kill -9 789

यह तुरंत बंद करवा देता है। प्रोसेस को सफ़ाई का मौक़ा नहीं मिलता। इसे आख़िरी उपाय के तौर पर इस्तेमाल करें — ख़ासकर सिस्टम प्रोसेस के लिए।

किसी ख़ास volume का इस्तेमाल करने वाले सभी प्रोसेस को एक command में kill करने के लिए:

sudo lsof -t /Volumes/YourDriveName | xargs kill

-t flag lsof से सिर्फ़ PIDs निकलवाता है, और xargs उन्हें kill को सौंप देता है। सावधान रहें: यह ड्राइव इस्तेमाल कर रहे हर प्रोसेस को kill कर देता है, उन्हें भी जो किसी ज़रूरी काम के बीच में हो सकते हैं।

पूरा समस्या-समाधान वर्कफ़्लो

eject न होने वाले ड्राइव के लिए पूरा क्रम यहाँ है:

# Step 1: Try normal eject
diskutil eject /Volumes/YourDriveName

# Step 2: If that fails, see what's blocking
sudo lsof /Volumes/YourDriveName

# Step 3: Kill the offending process (replace PID with actual number)
kill 12345

# Step 4: Try ejecting again
diskutil eject /Volumes/YourDriveName

# Step 5: If still stuck, force unmount
diskutil unmountDisk force /dev/disk4

ज़्यादातर समस्याएँ Step 3 पर ही हल हो जाती हैं। बाधक को पहचानें, उसे kill करें, साफ़-सुथरे ढंग से eject करें।

काम के diagnostic रूपांतर

जाँचें कि कहीं ख़ास तौर पर Spotlight ही तो आपका ड्राइव नहीं रोके हुए:

lsof /Volumes/YourDriveName | grep mds

ejection रोकने वाले सिर्फ़ अनोखे प्रोसेस नामों की सूची बनाएँ (कोई दोहराई गई लाइन नहीं):

lsof /Volumes/YourDriveName | awk '{print $1}' | sort -u

real-time disk I/O देखें ताकि पता चले कि कोई चीज़ सक्रिय रूप से लिख तो नहीं रही:

sudo fs_usage -f diskio | grep YourDriveName

यह लगातार चलता रहता है और हर disk operation को जैसे ही वह होता है, दिखाता जाता है। रोकने के लिए Control-C दबाएँ। इसे तब इस्तेमाल करें जब lsof कोई प्रोसेस दिखाए लेकिन आप पक्के न हों कि वह सक्रिय रूप से लिख रहा है या बस कोई पुराना handle पकड़े हुए है।

जब Terminal अपनी क़ीमत से ज़्यादा मेहनत माँगने लगे

ये commands ताक़तवर हैं, और एक बार जब आप इन्हें कुछ बार इस्तेमाल कर लेते हैं, तो ये अपने-आप होने लगती हैं। लेकिन अपने काम से हटकर Terminal window पर जाने की एक असली क़ीमत होती है — diagnostic commands चलाना, तकनीकी output पढ़ना-समझना, यह तय करना कि कौन सा PID kill करना सुरक्षित है।

Ejecta ऊपर बताई गई हर चीज़ अपने-आप कर देता है। यह आपके ड्राइव पर नज़र रखता है, हर blocking प्रोसेस को पहचानता है, और हर एक को बंद करने के लिए आपको एक-क्लिक बटन देता है। वही जानकारी जो आपको sudo lsof से मिलती, सीधे आपकी menu bar में visually पेश की हुई — न कोई command याद रखनी, न कोई output पढ़नी।

$9.99 में, आपको एक ऐसा tool मिलता है जो इस पूरे बहु-चरणीय Terminal वर्कफ़्लो को एक ही क्लिक से बदल देता है। अगर आप इस समस्या से महीने में एक बार से ज़्यादा जूझते हैं, तो यह पहले ही हफ़्ते में बची हुई खीझ से अपनी क़ीमत वसूल कर देता है। Ejecta को 7 दिन मुफ़्त आज़माएँ — कोई Terminal ज़रूरी नहीं।

अगर आप हर बार Terminal इस्तेमाल नहीं करना चाहते, तो Ejecta आपको ठीक-ठीक दिखाता है कि कौन सा process आपके drive को रोक रहा है — और सीधे आपके menu bar से एक क्लिक में उसे बंद कर देता है।

अभी खरीदें — $9.99