ابزار کاربر

ابزار سایت


terminal:u:how_to_use_the_umount_command

دستور umount ( خارج کردن دایرکتوری از mount )

unmount کردن همه فایل سیستم های موجود در etc/fstab/

دستور umount یک دایرکتوری را از حالت mount خارج میکند که در اصطلاح آن را unmount میکند. شکل استفاده از آن ساده بود و فرمت کلی زیر را دارد:

umount <mount_point>

دقت کنید همانطور که در مثال زیر مشاهده میکنید دستور مورد نظر unmount نیست بلکه umount است

umount -a

برخی از فایل سیستم ها به دلیل busy بودن یا در حال استفاده بودن قابل unmount شدن نیستند. به این موضوع هم توجه کنید که محتویات فایل هایی که در فایل etc/mtab/ و proc/mounts/ قرار دارند شبیه به هم هستند.

unmount کردن بیشتر از یک mount point در یک لحظه

دستور umount در لینوکس به شما اجازه میدهد که بتوانید در یک لحظه چندین mount point را unmount کنید به مثال زیر توجه کنید:

umount /mydata /backup

در دستور فوق بطور همزمان دایرکتوری mydata/ و backup/ همزمان unmount خواهند شد

Lazy Unmount کردن در یک فایل سیستم

برخی اوقات پیش میآید که شما در حال کپی کردن یا کپی گرفتن از محتویات یک پارتیشن هستید و میخواهید پارتیشن مربوطه را unmount کنید اما نمیخواهید فرآیند کپی کردن شما دچار مشکل شود در چنین شرایطی unmount به شما گزینه ای را ارائه میکند که به Lazy Unmount معروف است. زمانیکه شما یک پارتیشن یا یک فایل سیتم را Lazy Unmount میکنید تا زمانیکه فرآیند در حال کار که در اینجا کپی کردن است تمام نشود عملیات unmount انجام نخواهد شد شما میتوانید با استفاده از آرگومان l- در دستور umount این کار را مشابه دستور زیر انجام دهید و خیالتان از بابت کپی شدن فایل های در حال کپی راحت باشد:

umount -l /mydata

اجبار unmount شدن یک فایل سیستم

برخی اوقات بعد از اینکه شما دستور umount را وارد میکنید ممکن است دستگاه یا پارتیشن مورد نظر در حال کار باشد و به شما پیام داده شود که دستگاه busy است و در حال حاضر نمیتوان آن را unmount کرد اما شما میتوانید در چنین موارد با استفاده از آرگومان f- در دستور umount فرایند unmount شدن را force یا اجبار کنید که در این صورت دستگاه بلافاصله unmount خواهد شد به مثال زیر دقت کنید:

umount -f /mnt

اگر دستور مورد نظر کار نکرد شما میتوانید مانند مثال قبلی از Lazy Unmount استفاده کنید شما میتوانید از طریق دستور متوجه شوید که چه پردازش هایی در حال استفاده از mount point مورد نظر هستند ps به همراه grep به شکل زیر به شما خروجی ها را نمایش میدهد که در خصوص پردازش هایی هستند که در حال استفاده از mount pointی به نام mydata/ میباشند:

ps ajx|grep /mydata

با استفاده از دستورfuser به شکل زیر هم میتوانید متوجه شوید که در حال حاضر کدام پردازش دایرکتوری را برای انجام کار نگه داشته است:

fuser -cu /mydata

خروجی دستور بالا

/mydata:             5430(phoenix)

همانطور که در خروجی فوق مشاهده میکنید نام کاربری به همراه نام پردازش مورد نظر به شما نمایش داده میشود نام کاربری در واقع مالک پردازش مورد نظر است و شما میتوانید با kill کردن پردازش مورد نظر عملیات unmount را به درستی انجام دهید.

رفع مشکلات Unmount

عمل Unmount عکس mount است و اتصال میان نقطه اتصال و پارتیشن یا دایرکتوری را قطع میکند. چندین دلیل وجود دارد که یک mount point نتواند قطع شود. یکی از آنها مشغول بودن پارتیشن یا دایرکتوری است یعنی کاربری مثلا با دستور cd وارد آن نقطه اتصال شده و امکان قطع اتصال وجود ندارد و یا اینکه فرآیند یا کاربری در حال استفاده از فایلی درون آن نقطه اتصال هستند. یعنی یک فایل open یا باز وجود دارد که در حال استفاده شدن توسط دیگران است. بطور کلی شما نمیتوانید یک نقطه اتصال را بخاطر مشغول بودن یا باز بودن فایلی در آن دایرکتوری قطع یا Unmount کنید دو دستور lsof و دستورfuser دستورهایی هستندکه میتوانید توسط آنها بررسی کنید که کدام فرآیندها و کاربران در حال استفاده چه فایل هایی هستند که باعث عدم عمل Unmount شده است. سیستم فایل ها در زمان خاموش شدن بصورت خودکار Unmount میشوند که پس از اینکه تمام فرآیندهای غیر سیستمی خاتمه یافتند اینکار انجام میشود و دوباره موقع boot شدن بصورت خودکار mount خواهند شد یکی از خطاهایی که ممکن است در هنگام Unmount کردن رخ دهد خطای زیر است:

umount /dev/sdb1
umount: /run/media/phoenix/EXT-HARD: target is busy.

خطای بالا به این معنی است که نقطه اتصالی به نام EXT-HARD اشغال است. یک علت خطای busy به خاطر این است که شاید کاربری در دایرکتوری /run/media/phoenix/EXT-HARD قرار دارد یعنی دایرکتوری جاری برای آن کاربر دایرکتوری /run/media/phoenix/EXT-HARD است. میتوانید از دستور pwd برای فهمیدن دایرکتوری جاری استفاده کنید. دلیل دیگر آن این است که کاربر با فرآیندی در حال استفاده از یک فایل که درون این دایرکتوری وجود دارد هستند دستور lsof برای فهرست کردن فایل های باز استفاده میشود.

طریقه استفاده از دستور lsof برای Unmount کردن

فرض کنید سیستم فایل بر روی دایرکتوری mnt/hdd/ اتصال داده شده است و میخواهید این نقطه اتصال را قطع کنید ولی با مشکل busy بودن مواجه میشوید. برای فهرست کردن لیستی از فرایندهای مرتبط با دایرکتوری mnt/hdd/ از دستور lsof بصورت زیر استفاده میکنیم.

lsof /mnt/hdd/

خروجی دستور بالا

COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF  NODE NAME
bash    31010 phoenix  cwd    DIR   8,17     4096 20323 /mnt/hdd/software
bash    31145 phoenix  cwd    DIR   8,17     4096 20323 /mnt/hdd/software
more    31370 phoenix  cwd    DIR   8,17     4096 20323 /mnt/hdd/software
more    31370 phoenix    3r   REG   8,17       70  3983 /mnt/hdd/software/test.txt
lsof    31379 phoenix  cwd    DIR   8,17     4096 20323 /mnt/hdd/software
lsof    31380 phoenix  cwd    DIR   8,17     4096 20323 /mnt/hdd/software

پس از بدست آوردن شماره pid هر یک از فرایندها باید آنها را با دستور kill از بین ببریم. فرمت کلی برای اینکار بصورت زیر است.

kill -l5

نکته ای که درباره خروجی دستور بالا خط سوم و چهارم است که دستور more را نشان میدهند این است که ستون fd در سومین خط بیانگر این است که دایرکتوری جاری یا cwd آن دایرکتوری mnt/hdd/software/ است و این به این معنی است که دستور more در حال اجرا شدن و خواندن یک فایل در دایرکتوری mnt/hdd/software/ است و فایلی که دستور more در حال خواندن آن است test.txt نام دارد در ستون fd از خط چهارم 3r بیانگر خواندن فایل توسط دستور more است. به هر حال باید با دستور lsof شماره pid ها بدست بیاورید و سپس با دستور kill آن فرایندها را از بین ببرید و در آخر با دستور umount دایرکتوری را Unmount کنید

terminal/u/how_to_use_the_umount_command.txt · آخرین ویرایش: 2018/12/27 17:32 توسط phoenix

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki