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

کاملترین آموزش پارتیشن بندی لینوکس و کار با File System

در این مقاله قصد داریم به شما در خصوص ابزارهای مختلف مدیریت فایل سیستم در لینوکس و همچنین روش پارتیشن بندی و فرمت کردن هارد دیسک در سیستم عامل لینوکس صحبت کنیم و بصورت گام به گام به شما نحوه مدیریت فضاهای دیسک در لینوکس را آموزش بدهیم.

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

آموزش ابزار fdisk

ابزار fdisk یک ابزار مدیریت فایل سیستم در لینوکس است که بصورت خط فرمانی یا command line ای کاربرد دارد و طبیعتا همانطور که حدس می زنید مشابه آن را در سیستم عامل ویندوز که کپی برداری از این محصول بود قبلا مشاهده کرده اید.

با استفاده از این ابزار شما می توانید فضای هارد دیسک خود را به قسمت هایی به نام پارتیشن طبقه بندی کنید ، پارتیشن قسمت هایی از فضای خالی هارد دیسک شما هستند که پشت سر هم قرار دارند و به شما اجازه ایجاد کردن File System در آنها داده می شود.

به فرآیند تقسیم کردن فضاهای خالی روی دیسک در اصطلاح partitioning یا پارتیشن بندی گفته می شود. برای مشاهده کردن هارد دیسک های موجود بر روی سیستم و ساختار قالب بندی آنها می توانید از دستور fdisk با سویچ l- استفاده کنید ، به مثال زیر دقت کنید :

root@itpro-debian:/# fdisk –l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    40136703    20067328   83  Linux
/dev/sda2        40138750    41940991      901121    5  Extended
/dev/sda5        40138752    41940991      901120   82  Linux swap / Solaris

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdc doesn't contain a valid partition table

دستور fdisk با سویچ l- به شما لیست تمامی هارد دیسک هایی که به سیستم شما متصل شده اند را نمایش می دهد و همچنین پارتیشن ها و اطلاعاتی در خصوص آنها را نیز نمایش می دهد. خروجی قسمت اول دستور بالا که بصورت جدول می توانیم از آن یاد کنیم به شکل زیر قابل تشریح است :

  1. قسمت Device به شما اسم پارتیشن های لینوکس را نمایش می دهد.
  2. قسمت Boot به شما Active Partition را نمایش می دهد ( دارا بوندن علامت ستاره یا * به معنی bootable بودن پارتیشن است )
  3. قسمت Start و End به شما شماره سیلندری که پارتیشن مورد نظر از آنجا شروع و به آنجا ختم می شود را نشان می دهد
  4. قسمت Block به شما اندازه پارتیشن در بلوک های 1024 بایتی را نمایش می دهد
  5. قسمت Id و System به شما نوع پارتیشن را نشان می دهند ، Id بصورت کد هگزادسیمال و System توضیحات آن است

برای استفاده از ابزار fdisk برای مدیریت کردن یک دیسک کافیست دستور fdisk را اجرا و آرگومان لازم را برای پارتیشن یا هارد دیسک مورد نظر اعمال و آن را اجرا کنیم ، برای مثال دستور fdisk //dev//sdb به شکل زیر اجرا خواهد شد ، البته دقت کنید که من حرف m را برای دریافت لیست آرگومان های دستور fdisk وارد کرده ام :

root@itpro-debian:/# fdisk /dev/sda

Command (m for help): m
Command action
	a   toggle a bootable flag
	b   edit bsd disklabel
	c   toggle the dos compatibility flag
	d   delete a partition
	l   list known partition types
	m   print this menu
	n   add a new partition create a new empty DOS partition table
	p   print the partition table
	q   quit without saving changes
	s   create a new empty Sun disklabel
	t   change a partition's system id
	u   change display/entry units
	v   verify the partition table
	w   write table to disk and exit
	x   extra functionality (experts only)

همانطور که در خروجی دستور بالا به همراه حرف m مشاهده می کنید لیستی از پارامترهای دستور fdisk را مشاهده می کنید که هر کدام برای انجام عملیات بر روی هارد دیسک انتخاب شده استفاده می شوند ، دقت کنید با توجه به خروجی m شما می توانید پیکربندی های مورد نیاز بر روی هارد دیسک مورد نظرتان را انجام دهید ، سعی می کنیم در آموزش های بعدی در خصوص ایجاد کردن پارتیشن ها با استفاده از fdisk توضیحاتی را ارائه کنیم.

mkfs ، mkfs.ext2 و mkfs.ext3

دستور mkfs در لینوکس می تواند برای فرمت کردن یک پارتیشن مورد استفاده قرار بگیرد. دستور mkfs به شما این اجازه را می دهد که یک پارتیشن لینوکسی را به File System متفاوتی فرمت کنید. دستور mkfs دستور نسبتا هوشمندی است ، در صورتیکه شما این دستور را برای فرمت کردن پارتیشنی که در حال حاضر دارای فایل سیستم ext3 است اجرا کنید

بصورت خودکار این دستور فایل سیستم جدید را ext3 در نظر می گیرد و دستور mkfs.ext3 را اجرا می کند. با استفاده از دستورات زیر ابتدا ما یک پارتیشن در لینوکس با استفاده از دستور fdisk ایجاد می کنیم و سپس آن را با استفاده از دستور mkfs فرمت و پارتیشن بندی می کنیم :

root@itpro-debian:/# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xdb98527c.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): 
Using default value 41943039

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
root@itpro-debian:/# 

با استفاده از دستور بالا ما توانستیم یک پارتیشن به نام dev//sdb1//ایجاد کنیم. بعد از ایجاد کردن پارتیشن مورد نظر ما می توانیم با استفاده از دستور mkfs فایل سیستم مورد نظرمان را بر روی پارتیشن مورد نظر قرار بدهیم ، به مثال زیر توجه کنید که ما sdb1 را با فایل سیستم ext3 فرمت می کنیم :

root@itpro-debian:/# mkfs -t ext3 /dev/sdb1
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242624 blocks
262131 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

root@itpro-debian:/# 

فایل سیستم بصورت خودکار هر 180 روز یکبار یا بعد از هر 20 بار mount شدن توسط سیستم عامل بررسی و چک می شود ، شما می توانید این موارد را تغییر دهید اما معمولا پیشنهاد نمی شود ، در حال حاضر شما پارتیشنی با عنوان dev//sdb1// با فایل سیستم ext3 ایجاد کرده اید

که اگر مجددا از دستور fdiks –l استفاده کنید در نتیجه دستور پارتیشن ایجاد شده که بصورت primary هم بوده است نمایش داده می شود ، در خصوص دستور بالا سویچ t- برای تعریف کردن type یا نوع فایل سیستم است که در حال حاضر ext3 در نظر گرفته شده است. البته برای تعریف فایل سیستم های مختلف در موارد مختلف دستورات متفاوتی استفاده می شوند که به شرح زیر می باشند :

  1. دستور mkfs.ext2 : برای فرمت کردن پارتیشن با فایل سیستم ext2 استفاده می شود
  2. دستور mkfs.ext3 : برای فرمت کردن پارتیشن با فایل سیستم ext3 استفاده می شود
  3. دستور mkfs.msdos : برای فرمت کردن پارتیشن با فایل سیستم VFAT مایکروسافت استفاده می شود ، این دستور مشابه دیگری به شکل mkfs.vfat و mkfs.dosfs نیز دارد که همگی یک کار را انجام می دهند
  4. دستور mkswap : برای فرمت کردن پارتیشن های فایل سیستم swap سیستم عامل استفاده می شود.

آموزش دستور fsck

با استفاده از دستور fsck شما می توانید فایل سیستم تعیین شده را تجزیه و تحلیل و مشکلات مربوط به آن را شناسایی و در نهایت مشکلات مربوطه را در صورت نیاز تعمیر کنید. برای مثال اگر شما برای دسترسی یا کار کردن با فایل های موجود در دایرکتوری home1/ مشکل داشته باشید و نتوانید توسط سیستم عامل به آنها دسترسی پیدا کنید ابتدا بررسی می کنید که دایرکتوری مورد نظر در کدام پارتیشن قرار گرفته است

که در این مثال فایل سیستم در پارتیشن dev/sdb1/ قرار گرفته است ، سپس دستور fsck را اجرا می کنید و این دستور بصورت خودکار فایل سیستم را بررسی و مشکلات مربوط به آن را تعمیر می کند. ، فقط به این موضوع بسیار دقت کنید که اگر می خواهید هیچ اطلاعاتی در این فرآیند تخریب نشود حتما و حتما ابتدا پارتیشن مورد نظر را unmount کنید و سپس عملیات repair را انجام دهید به مثال زیر دقت کنید ، ابتدا با استفاده از دستور df فضای خالی و وضعیت File System های موجود روی سیستم را مشاهده می کنیم :


root@itpro-debian:/# df -h
Filesystem                                              Size  Used Avail Use% Mounted on
rootfs                                                   19G  3.9G   15G  22% /
udev                                                     10M     0   10M   0% /dev
tmpfs                                                   201M  680K  200M   1% /run
/dev/disk/by-uuid/e6ed1cc1-d422-4737-b4db-0c51ffc27878   19G  3.9G   15G  22% /
tmpfs                                                   5.0M     0  5.0M   0% /run/lock
tmpfs                                                   578M  224K  578M   1% /run/shm
root@itpro-debian:/# 

سپس با استفاده از دستور زیر dev/sdb1/ را unmount می کنیم ، دقت کنید دستور زیر unmount نیست بلکه umount است :


root@itpro-debian:/# umount /dev/sdb1

و در نهایت با استفاده از دستور زیر فرآیند Repair کردن فایل سیستم را انجام می دهیم :

root@itpro-debian:/# fsck -t ext3 /dev/sdb1
fsck from util-linux 2.20.1
e2fsck 1.42.5 (29-Jul-2012)
/dev/sdb1: clean, 11/1310720 files, 126322/5242624 blocks
root@itpro-debian:/# 

دستور fsck به شما امکانات و قابلیت های مختلف و مهمی را ارائه می دهد که از مهمترین آنها می توانیم به موارد زیر اشاره کنیم :

  1. پارامتر a- = بصورت خودکار همه مشکلات فایل سیستم را بدون پرسیدن سئوال تعمیر می کند
  2. پارامتر r- = در هر مرحله از تعمیر فایل سیستم در خصوص مواردی که قرار است تعمیر شود سئوال پرسیده می شود

fstab چیست و چه می کند؟

در سیستم عامل لینوکس در شاخه etc/ فایلی به نام fstab وجود دارد که کلیه جدوال و تنظیمات فایل سیستم لینوکس در آن نگهداری می شود. به عنوان کسی که با فایل سیستم های لینوکس تا به حال آشنا شده اید بایستی بدانید که ساختار این فایل به چه شکل است و چگونه از این فایل به همراه دستور mount در لینوکس استفاده می شود.

زمانیکه شما با ساختار فایل fstab آشنا شدید می توانید محتویات آن را نیز ویرایش کنید و آن را بر طبق نیاز خودتان تغییر بدهید. fstab فایلی است که تمامی اطلاعات مربوط به پارتیشن ها و دستگاه های ذخیره سازی روی کامپیوتر شما را در خود جای داده است ، این فایل همانطور که گفتیم در مسیر etc/ قرار دارد و مسیر کامل دستیابی به آن etc/fstab/ است . fstab اطلاعات مهمی از جمله اینکه پارتیشن ها و دستگاه های ذخیره سازی موجود روی سیستم در کجا و چگونه باید mount شوند را در خود جای داده است.

اگر شما نمی توانید به پارتیشن ویندوزی خود از طریق لینوکس دست پیدا کنید و یا نمی توانید به عنوان یک کاربر عادی اطلاعاتی بر روی فلاپی دیسک یا CD رایت کنید و یا نمی توانید CD خود را به سیستم mount کنید یا در استفاده کردن از CD-RW خود مشکل دارید به احتمال زیاد مشکل شما از تنظیمات نادرست و یا به مشکل خوردن فایل fstab است.

بنابراین معمولا شما با تعمیر کردن فایل fstab می توانید مشکلات مربوط به mount کردن در سیستم عامل لینوکس را برطرف کنید. fstab یک فایل متنی است که براحتی شما می توانید آن را با استفاده از هر ویرایشگر متنی ویرایش و تغییر بدهید. البته توجه کنید که برای ویرایش کردن فایل fstab باید دسترسی root داشته باشید بنابراین باید با کاربر root ابتدا به سیستم login کنید یا با استفاده از دستور su در حالت فعلی دستورات را با کاربر root اجرا کنید.

نمونه ای از فایل fstab تنظیمات فایل سیستم لینوکس

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=e6ed1cc1-d422-4737-b4db-0c51ffc27878 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=784156f9-1178-4473-9a8f-cfb0d90ad67f none            swap    sw              0       0
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

معرفی فیلد های مختلف موجود در فایل fstab

  1. Device : مشخص کننده دستگاهی است که قرار است mount شود. شما می توانید device file یا Label را در این فیلد تعریف کنید. در صورت mount شدن device ها شما می توانید اطلاعات مرتبط با آن را از فایل etc//mtab// بدست بیاورید.
  2. Mount Point : دایرکتوری که در زیرمجموعه فایل سیستم root قرار می گیرد و فایل سیستم به آن mount می شود.
  3. Filesystem Format : نوع فایل سیستم را مشخص می کند ( ext2 ، ext3 ، ext4 ، iso9660 و ... )
  4. Mount Options : تنظیمات مختلف یا Option های mount را مشخص می کند ( در مطلب بعدی اشاره خواهد شد)
  5. Dump Value : دامپ یا Dump یک ابزار Backup به حساب می آید. مقادیری که در این قسمت می تواند قرار بگیرد معمولا عدد 1 یا 0 هستند. Dump با استفاده از این مقادیر متوجه می شود که آیا باید از فایل سیستم Backup تهیه کند یا خیر ، اگر Value به صورت 0 باشد از فایل سیستم Backup گرفته نمی شود و اگر Value برابر 1 باشد از فایل سیستم Backup گرفته می شود.
  6. Filesystem Check Order : همانطور که در مطلب قبلی عنوان کردیم از ابزار fsck به عنوان ابزاری برای تعمیر و درست کردن فایل سیستم در لینوکس استفاده می شود ، Value یا مقادری که در این قسمت تعریف شده است تعیین کنند این این است که آیا ابزار fsck می خواهید در هنگام boot process فایل سیستم را تعمیر کند یا خیر ، اگر مقدار 0 باشد یعنی فایل سیستم بررسی نخواهد شد.

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

بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

محمد نصیری هستم ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 50 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم و مقیم کشور ترکیه هستم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.

نظرات