محمد نصیری
هکر کلاه سفید ، کارشناس امنیت اطلاعات و ارتباطات

کاملترین آموزش دستور mount و umount در پارتیشن لینوکس + 15 مثال

زمانیکه شما یک هارد دیسک را به سیستم متصل می کنید ، احتمالا از ابزارهایی مثل fdisk یا parted برای ایجاد کردن پارتیشن ها استفاده می کنید. زمانیکه شما یک پارتیشن را ایجاد می کنید با استفاده از دستور mkfs فایل سیستم مربوط به پارتیشن ایجاد شده را ext2 ، ext3 یا ext4 قرار می دهید ، قبلا در خصوص نحوه استفاده از دستور fdisk و همچنین استفاده از دستور mkfs در توسینسو صحبت کرده ایم.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

زمانیکه شما یک پارتیشن را ایجاد می کنید تا زمانیکه پارتیشن مورد نظر را به یک directory یا mount point در سیستم متصل یا mount نکنید قادر به استفاده کردن از آن پارتیشن نخواهید بود. اینکار با استفاده از دستوری به نام mount در سیستم عامل لینوکس استفاده می شود. در این سری مطلب قصد داریم برای شما در قالب 15 مثال کاربردی دستورات mount و umount در لینوکس را آموزش بدهیم و هر چیزی که در خصوص این دستورات مورد نیاز است را توضیح بدهیم ، قبل از شروع به کار به روش استفاده از دستور mount که در پایین عنوان شده است دقت کنید :


mount -t type device destination_dir

mount کردن CDROM در لینوکس

فایل دستگاه یا device file ها برای CD در دایرکتوری dev/ قرار دارد. برای مثال یک دستگاه CD-ROM به شکل زیر Mount می شود :

# mount -t iso9660 -o ro /dev/cdrom /mnt


در مثال بالا آرگومان های o- ro به این معناست که cdrom بایستی بصورت فقط خواندنی یا read only معرفی یا mount شود. همیشه مطمئن شوید که دایرکتوری مقصد یا destination directory که در مثال بالا بصورت mnt/ مشاهده می کنید قبل از اجرا کردن دستور وجود داشته باشد.

دیدن همه mount های لینوکس

بعد از اینکه شما دستور mount کردن یک پارتیشن یا فایل سیستم را اجرا کردید ، می توانید برای اطمینان از عملکرد درست دستور ، دستور mount را بدون هیچ آرگومانی اجرا کنید تا همه mount های ایجاد شده روی سیستم عامل به شما نمایش داده شود.

در مثال پایین بعد از mount کردن درایو USB بر روی سیستم خروجی دستور mount به شکل زیر خواهد بود. همانطور که در نتیجه دستور پایین مشاهده می کنید ، دستگاه USB ما در مسیر media//myusb// در حالت mount قرار گرفته است ، در اینجا ما USB Device را بصورت dev//sdb// می شناسیم ، به آخرین خط نتیجه دستور دقت کنید موردی که اشاره کردیم را خواهید دید :

# mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda6 on /mydata type ext2 (rw)
/dev/sda7 on /backup type vfat (rw)
gvfs-fuse-daemon on /home/bala/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=bala)
/dev/sdb on /media/myusb type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks)


به غیر از دستور بالا می توانید با استفاده از دستور df بدون آرگومان هم تمامی mount point های سیستم عامل را مشاهده کنید :

# df
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda5      195069136 128345036  56958520  70% /
udev             2008336         4   2008332   1% /dev
tmpfs             806244       928    805316   1% /run
none                5120         0      5120   0% /run/lock
none             2015604       228   2015376   1% /run/shm
/dev/sda6       17729076    176200  16657596   2% /mydata
/dev/sda7       11707200    573312  11133888   5% /backup
/dev/sdb         3910656   2807160   1103496  72% /media/myusb

mount کردن همه File System های etc/fstab/

فایل سیستم هایی که درون فایل etc//fstab// لیست شده است در زمان بوت سیستم mount می شوند. بعد از بوت شدن سیستم عامل مدیر سیستم ممکن است به هر دلیلی برخی از این mount point ها را به دلایل مختلف unmount کند. اگر می خواهید تمامی فایل سیستم های موجود در فایل fstab بصورت خودکار mount شوند با استفاده از دستور mount با سویچ a- می توانید اینکار را انجام دهید ، به مثال زیر دقت کنید ، محتویات فایل fstab ابتدا به شما نمایش داده شده است و سپس با استفاده از دستور mount -a همه فایل سیستم های موجود در این فایل را می توانیم mount کنیم :

# cat /etc/fstab محتویات فایل     
#
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda5 during installation
/dev/sda5 /               ext4    errors=remount-ro 0       1
# /mydata was on /dev/sda6 during installation
/dev/sda6 /mydata         ext2    defaults        0       2
# /backup was on /dev/sda7 during installation
/dev/sda7 /backup         vfat    defaults        0       3


اجرای دستور mount با آرگومان a- باعث mount شدن تمام موجودیت های فایل etc//fstab// می شود :

# mount -a

# mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda6 on /mydata type ext2 (rw)
/dev/sda7 on /backup type vfat (rw)
gvfs-fuse-daemon on /home/bala/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=bala)


همان آرگومان a- با استفاده از دستور umount باعث unmount شدن همه فایل سیستم ها و پارتیشن هایی می شود که در etc//mtab// وجود دارند ، دقت کنید همانطور که در مثال زیر مشاهده می کنید دستور مورد نظر Unmount نیست بلکه Umount است :

# umount -a
umount: /run/shm: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /run: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /dev: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))


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

mount کردن یک File System مشخص از etc/fstab/

زمانیکه شما فقط اسم یک دایرکتوری را برای mount کردن ارسال می کنید ، دستور به دنبال موجودیت ها یا mount point entries می گردد ، اگر پیدا نشد جستجو برای پیدا کردن دستگاه مورد نظر در فایل etc//fstab// ادامه پیدا می کند و دایرکتوری مورد نظر mount می شود به دستور زیر نگاه کنید :

# mount | grep /mydata

# cat /etc/fstab | grep mydata
##########/mydata was on /dev/sda6 during installation##########
 /dev/sda6 /mydata         ext2    defaults        0       2


همانطور که در بالا مشاهده می کنید ، دایرکتوری mydata// یک mountpoint نیست اما در فایل etc//fstab// وجود دارد. ( دستور grep برای جستجو استفاده می شود )

# mount /mydata

# mount | grep /mydata
/dev/sda6 on /mydata type ext2 (rw)


اگر مجددا دستور mount را به همان شکل قبلی مطابق روش زیر mount کنید خطایی به شکل زیر دریافت خواهید کرد :

# mount /mydata
mount: /dev/sda6 already mounted or /mydata busy
mount: according to mtab, /dev/sda6 is already mounted on /mydata


در اینجا شما می توانید به جای اسم دایرکتوری اسم دستگاه یا device name را نیز رد کنید که از فایل fstab خوانده شود :

# mount /dev/sda6


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

مشاهده پارتیشن های mount شده از یک نوع

شما امکان این هرا دارید که که فقط یک نوع از فایل سیستم های خاص را با استفاده از آرگومان l- دستور mount لیست کنید و فقط برای اینکار کافیست که آرگومان t- که type یا نوع فایل سیستم را مشخص می کند به دستور معرفی کنید ، به مثال زیر دقت کنید:

# mount -l -t ext2
/dev/sda6 on /mydata type ext2 (rw)

# mount -l -t ext4
/dev/sda5 on / type ext4 (rw,errors=remount-ro)


همانطور که در مثال بالا مشاهده می کنید تنها پارتیشنی که بر روی این سیستم از فایل سیستم ext2 استفاده می کنید dev//sda6// و تنها فایل سیستمی که از فایل سیستم ext4 استفده می کند dev//sda5// است که با استفاده از دستور بالا آنها را مشاهده کردیم.

mount کردن فلاپی دیسک

شاید بگویید که فلاپی دیسک دیگر استفاده نمی شود اما متاسفانه خواه یا ناخواه مواردی وجود دارد که هنوز از فلاپی دیسک ها در کشور استفاده می شود. فایل دستگاه یا device file مربوط به فلاپی دیسک در دایرکتوری dev// قرار دارد و شما با استفاده از دستور زیر می توانید آن را mount کنید :

# mount /dev/fd0 /mnt
# cd /mnt


بعد از اینکه فرآیند mount شدن به درستی انجام شد ، شما می توانید به محتویات فلاپی دیسک دسترسی پیدا کنید ، زمانیکه کارتان با آن تمام شد ، با استفاده از دستور umount قبل از اینکه فلاپی را از دستگاه جدا کنید ، دستگاه را unmount کنید.

# umount /mnt


در ادامه موارد استفاده بیشتری در خصوص دستورات mount را با هم مرور خواهیم کرد.

Bind کردن mount point ها به یک دایرکتوری جدید

یک mount point می تواند به یک دایرکتوری جدید bind یا چسبانده شود. با این روش شما می توانید به محتویات یک فایل سیستم از بیش از دو محل بصورت همزمان دسترسی پیدا کنید. اینکار چیزی شبیه به ایجاد کردن shortcut برای دسترسی به یک برنامه در محل های مختلف است ، شما می توانید مشابه مثال زیر با استفاده از آرگومان B- و معرفی کردن دایرکتوری قدیمی و دایرکتوری جدید اینکار را انجام دهید :

# mount -B /mydata /mnt

همانطور که در مثال بالا مشاهده می کنید عملیات Binding به درستی انجام شد و شما می توانید با استفاده از روش زیر از درست انجام شدن عملیات bind دایرکتوری قدیمی به دایرکتوری جدید اطمینان حاصل کنید ، به دستور زیر دقت کنید :

# mount | grep /mydata
/dev/sda6 on /mydata type ext2 (rw)
/mydata on /mnt type none (rw,bind)

همانطور که در نتیجه دستور بالا مشاهده می کنید عملیات bind به درستی انجام شده است. بنابراین زمانیکه شما تغییری در یک فایل سیستم در یک محل ایجاد می کنید تغییراتی که ایجاد می کنید را در تمامی mount point های آن فایل سیستم مشاهده خواهید کرد ، به مثال زیر توجه کنید ، ما دو دایرکتوری dir1 و dir2 را در دایرکتوری mydata ایجاد کردیم اما همان موارد در دایرکتوری mnt نیز ایجاد شده اند :

# cd /mydata
# ls
test
# mkdir dir1
# mkdir dir2
# ls
test    dir1    dir2
# cd /mnt
# ls
test    dir1    dir2

دسترسی به محتویات از mount point جدید

Mount این امکان را به شما می دهد که به محتویات یک mount point از محل جدید نیز دسترسی داشته باشید. اینکار چندان سخت نیست و فقط کافیست که mounted tree ( ساختار درختی mount ) را به جای دیگری انتقال دهیم. در مثال پایین ما یک mount point به نام mydata// داریم که به وسیبه آرگومان M- با استفاده از mnt// قابل دسترس خواهد بود :

# mount -M /mydata /mnt/

بعد از اینکه دستور بالا به درستی انجام شد شما دیگر قادر به استفاده کردن از mount point قدیمی نخواهید بود زیرا به محل جدیدی منتقل شده است ، با استفاده از دستور زیر می توانید از درستی عملکرد دستور بالا مطمئن شوید :

# mount | grep /mydata
# mount | grep /mnt
/dev/sda6 on /mnt type ext2 (rw)

mount کردن بدون وارد کردن چیزی در فایل etc/mtab/

زمانیکه شما etc// را بصورت فقط خواندنی mount می کنید فایل etc//mtab// و موجودیت های آن نمی توانند توسط دستور mount تغییر پیدا کنند. به هر حال برای اطمینان شما می توانید از آرگومان n- در دستور mount استفاده کنید و مطمئن شوید که هیچ اطلاعاتی در mtab نوشته نخواهد شد ، به مثال زیر توجه کنید :

# mount -n /dev/sda6 /mydata

همانطور که در نتیجه دستور زیر نیز مشاهده می کنید هیچ موجودیتی از mydata// در خروجی دستور mount نمایش داده نشده است همانطور که در داخل فایل etc//mtab// نیز موجودیتی ثبت نشده است :

# mount | grep /mydata
# cat /etc/mtab | grep /mydata

اما شما می توانید با استفاده از دستور زیر به محتویات دایرکتوری mount شده mydata// دسترسی پیدا کنید :

# cd /mydata
# ls
dir1  dir2  test

هنوز کارمان در ITPRO با دستورات mount تمام نشده است و این داستان ادامه دارد ... 

mount کردن File System ها بصورت فقط خواندنی

برای mount کردن پارتیشن ها بصورت فقط خواندنی یا read only می توانید از آرگومان r- به شکل زیر استفاده کنید :

# mount /dev/sda6 /mydata -r
# mount  | grep /mydata
/dev/sda6 on /mydata type ext4 (ro)

فایل سیستم های Ext3 و ext4 همچنان به شما اجازه نوشتن اطلاعات ( برخی اطلاعات خاص ) بر روی فایل سیستم را با استفاده از دستور بالا می دهند ، در اصطلاح فنی در این حالت می گوییم فایل سیستم در صورتیکه کثیف یا dirty باشد امکان نوشتن اطلاعات ( برخی اطلاعات خاص ) را بر روی خودش می دهد. برای اینکه این اطلاعات خاص نیز اجازه نوشته شدن بر روی فایل سیستم را نداشته باشند بایستی از آرگومان و سویچ های ro و noload به شکل زیر استفاده کنیم :

# mount /dev/sda6 /mydata -t ext4 -o ro -o noload
# mount | grep /mydata
/dev/sda6 on /mydata type ext4 (ro,noload)

برای اینکه یک پارتیشن را بصورت خواندنی ، نوشتنی یا Read and Write بتوانیم استفاده کنیم کافیست از سویچ w- یا o- rw استفاده کنیم ، البته بصورت پیشفرض فایل سیستم به همین شکل mount می شود.

remount کردن یا mount کردن مجدد  FS های mount شده

برخی اوقات پیش می آید که شما یک فایل سیستم را قبلا بصورت فقط خواندنی mount کرده باشید و بخواهید که مجددا این فایل سیستم را بصورت خواندنی و نوشتنی mount کنید ، برای اینکار یا شما باید ابتدا فایل سیستم را unmount کنید و سپس مجددا mount کنید یا اینکه با استفاده از روش زیر فایل سیستمی که در حال حاضر mount شده است را remount کنید اما اینبار با سویچ های خواندنی و نوشتنی ، فرض کنید که mydata// قبلا mount شده است و شما می خواهید آن را بصورت خواندنی و نوشتنی مجددا mount کنید ، دستور مورد نظر به شکل زیر خواهد بود :

# mount | grep /mydata
/dev/sda6 on /mydata type ext4 (ro,noload)
# mount -o remount,rw /mydata
# mount | grep /mydata
/dev/sda6 on /mydata type ext4 (rw)

mount کردن یک فایل ISO به یک دایرکتوری

خیلی وقت ها پیش می آید که شما می خواهید از محتویات یک فایل ISO استفاده کنید ، در سیستم عامل ویندوز بایستی از نرم افزارهای جانبی استفاده می کردید و یک سری CD-ROM مجازی ایجاد می کردید و فایل مورد نظر را در آنجا mount می کردید اما در سیستم عامل لینوکس شما می توانید براحتی با استفاده از دستور زیر فایل ISO مورد نظر را در دایرکتوری تعریف شده mount کنید :

# mount –t iso9660 –o loop pdf_collections.iso /mnt
# cd /mnt
# ls
perl/    php/    mysql/

در مثال بالا فایل محتویات ISO ای به نام pdf__collection در دایرکتوری mnt از این به بعد قابل مشاهده خواهد بود. هنوز کارمان با mount و unmount تمام نشده است و در ادامه در خصوص دستورات unmount بیشتر صحبت خواهیم کرد . ITP

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

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

# umount /mydata  /backup
# mount | grep /mydata
# mount | grep /backup

در دستور بالا بصورت همزمان دایرکتوری های mydata// و backup// همزمان Unmount خواهند شد.

مثال چهاردهم : آموزش Lazy Unmount کردن یک فایل سیستم

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

# umount /mydata –l

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

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

# umount -f /mnt

اگر دستور مورد نظر کار نکردن شما می توانید مانند مرحله قبلی از lazy unmount استفاده کنید. شما می توانید از طریق دستور زیر متوجه شوید که چه process هایی در حال استفاده از mountpoint مورد نظر هستند ، دستور ps به شکل زیر به شما خروجی ها را نمایش می دهد که در خصوص process هایی هستند که در حال استفاده از mount point ای به نام mydata هستند :

# ps ajx | grep /mydata
 2540  3037  3037  2468 pts/2     3037 D+       0   0:00 cp -r /home/geekstuff/ProjectData/ /mydata

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

# fuser -cu /mydata
/mydata:              3087(root)

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


محمد نصیری
محمد نصیری

هکر کلاه سفید ، کارشناس امنیت اطلاعات و ارتباطات

هکر کلاه سفید ، کارشناس امنیت اطلاعات و ارتباطات و کشف جرائم رایانه ای ، بیش از 12 هزار ساعت سابقه تدریس در بیش از 40 سازمان دولتی ، خصوصی و نظامی ، علاقه مند به یادگیری بیشتر و عاشق محیط زیست ، عضو کوچکی از مجموعه توسینسو

07 فروردین 1394 این مطلب را ارسال کرده

نظرات