زمانیکه شما یک هارد دیسک را به سیستم متصل می کنید ، احتمالا از ابزارهایی مثل fdisk یا parted برای ایجاد کردن پارتیشن ها استفاده می کنید. زمانیکه شما یک پارتیشن را ایجاد می کنید با استفاده از دستور mkfs فایل سیستم مربوط به پارتیشن ایجاد شده را ext2 ، ext3 یا ext4 قرار می دهید ، قبلا در خصوص نحوه استفاده از دستور fdisk و همچنین استفاده از دستور mkfs در توسینسو صحبت کرده ایم.
زمانیکه شما یک پارتیشن را ایجاد می کنید تا زمانیکه پارتیشن مورد نظر را به یک directory یا mount point در سیستم متصل یا mount نکنید قادر به استفاده کردن از آن پارتیشن نخواهید بود. اینکار با استفاده از دستوری به نام mount در سیستم عامل لینوکس استفاده می شود. در این سری مطلب قصد داریم برای شما در قالب 15 مثال کاربردی دستورات mount و umount در لینوکس را آموزش بدهیم و هر چیزی که در خصوص این دستورات مورد نیاز است را توضیح بدهیم ، قبل از شروع به کار به روش استفاده از دستور mount که در پایین عنوان شده است دقت کنید :
mount -t type device destination_dir
فایل دستگاه یا 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 کردن درایو 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
فایل سیستم هایی که درون فایل 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 کردن ارسال می کنید ، دستور به دنبال موجودیت ها یا 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// بسیار شبیه هستند.
شما امکان این هرا دارید که که فقط یک نوع از فایل سیستم های خاص را با استفاده از آرگومان 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// است که با استفاده از دستور بالا آنها را مشاهده کردیم.
شاید بگویید که فلاپی دیسک دیگر استفاده نمی شود اما متاسفانه خواه یا ناخواه مواردی وجود دارد که هنوز از فلاپی دیسک ها در کشور استفاده می شود. فایل دستگاه یا device file مربوط به فلاپی دیسک در دایرکتوری dev// قرار دارد و شما با استفاده از دستور زیر می توانید آن را mount کنید :
# mount /dev/fd0 /mnt # cd /mnt
بعد از اینکه فرآیند mount شدن به درستی انجام شد ، شما می توانید به محتویات فلاپی دیسک دسترسی پیدا کنید ، زمانیکه کارتان با آن تمام شد ، با استفاده از دستور umount قبل از اینکه فلاپی را از دستگاه جدا کنید ، دستگاه را unmount کنید.
# umount /mnt
در ادامه موارد استفاده بیشتری در خصوص دستورات mount را با هم مرور خواهیم کرد.
یک 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 این امکان را به شما می دهد که به محتویات یک 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)
زمانیکه شما 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 کردن پارتیشن ها بصورت فقط خواندنی یا 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 می شود.
برخی اوقات پیش می آید که شما یک فایل سیستم را قبلا بصورت فقط خواندنی 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)
خیلی وقت ها پیش می آید که شما می خواهید از محتویات یک فایل 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
دستور Umount در لینوکس به شما اجازه می دهد که در بتوانید در یک لحظه چندین mount point را Unmount کنید به مثال زیر توجه کنید :
# umount /mydata /backup # mount | grep /mydata # mount | grep /backup
در دستور بالا بصورت همزمان دایرکتوری های mydata// و backup// همزمان Unmount خواهند شد.
برخی اوقات پیش می آید که شما در حال کپی کردن یا کپی گرفتن از محتویات یک پارتیشن هستید و می خواهید پارتیشن مربوطه را unmount کنید اما نمی خواهید فرآیند کپی کردن شما دچار مشکل شود ، در چنین شرایطی دستور umount به شما گزینه ای را ارائه می کند که به lazy unmount معروف است. زمانیکه شما یک پارتیشن یا یک فایل سیستم را lazy unmount می کنید تا زمانیکه فرآیند در حال کار که در اینجا کپی کردن است تمام نشود عملیات unmount انجام نخواهد شد. شما می توانید با استفاده از آرگومان l- در دستور umount اینکار را مشابه دستور زیر انجام دهید و خیالتان از بابت کپی شده فایل های در حال کپی راحت باشد :
# umount /mydata –l
برخی اوقات بعد از اینکه شما دستور 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 را به درستی انجام دهید ، امیدوارم مورد توجه شما عزیزان قرار گرفته باشد.در دوره آموزش لینوکس اسنشیالز شما با مقدمات کار با دستورات حوزه پارتیشن بندی و مدیریت دیسک ها آشنا می شوید.
بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات
محمد نصیری هستم ، بنیانگذار انجمن تخصصی فناوری اطلاعات ایران و مجموعه توسینسو ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 80 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر و ناظر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود