پارتیشن بندی یکی از مفاهیم پایه ای در مدیریت سیستم های لینوکسی است. چه در حال نصب یک لینوکس باشید, چه مدیر سرور باشید و بخواهید یک هارد جدید به سرور اضافه کنید, حتما باید با مفاهیم filesystem, partition, disk, mount آشنا باشید چون بالاخره روزی با این مفاهیم روبه رو خواهید شد.
در این پست به صورت عملی با fdisk کار میکنیم و یاد میگیریم که چطور یک دیسک را شناسایی کنیم, جدول پارتیشن آن را ببینیم و یک پارتیشن جدید با حجم دلخواه ایجاد کنیم.
در صورت نداشتن تجربه کافی در پارتیشن بندی و کار با دیسک ها ممکن است, استفاده از دستوراتی که در ادامه توضیح میدیم, باعث از دست رفتن اطلاعات هارد شما شود . پیشنهاد میشود در صورت امکان از ماشین مجازی استفاده کنید که ریسک را به حداقل برسانید و با خیال راحت کار کنید.
قبل از ورود به مبحث fdisk, بهتر است اول کمی با پارتیشن ها آشنا شویم
یک دیسک فیزیکی میتواند به چند بخش تقسیم شود و مثلا ما به دیسک بگیم مثلا یک عکس توی کدوم قسمت دیسک ذخیره بشود . به این بخش ها partition میگویند. یعنی قسمت بندی یک دیسک فیزیکی.
برای مثال ممکن است یک دیسک به شکل زیر قسمت بندی شده باشد
Disk
|
|---/dev/sda
|---|
|----/dev/sda1
|----/dev/sda2
|----/dev/sda3البته ممکن است برای بعضی از سیستم ها /dev/sdb باشد که یعنی دیسک دوم
خیلی ها تصور میکنند این سه مفهموم یک معنی را میدهند ما اگر بخواهیم به طور خلاصه بگیم:
Disk وسیله ذخیره سازی فیزیکی مانند HDD یا SSD که ما توی مثال قبلی دیدیم که
/dev/sda/ یا dev/sdb یا اگر فلش مموری یا هارد های دیگر هم اضافه کنید به همین ترتیب /dev/sdc و غیره اضافه میشوند.
Partition قسمتی از دیسک است که میتوانیم جدا کنیم و توی هربخش میتوانیم دیتاهای مختلفی کپی کنیم یا ذخیره کنیم
Filesystem
سیستمی است که مشخص میکند اطلاعات چگونه روی یک پارتیشن ذخیره و مدیریت شود و فرمت های مختلفی مجود دارد مانند
ext4 btrfs xfs fat32 و...
بعدا هنگام کار با mkfs و mount بهتر این مفاهیم رو درک خواهیم کرد.
fdisk یکی از ابزارهای قدیمی و پرکاربرد لینوکس برای مدیریت جدول پارتیشن دیسکها است.
با استفاده از آن میتوانیم کارهایی مانند موارد زیر را انجام دهیم:
برای کار با fdisk نیاز به sudo داریم یا میتونید با استفاده از sudo su وارد root شوید
برای این آموزش فرض میکنیم یک دیسک آزمایشی به سیستم اضافه کردهایم.
بهترین روش برای تمرین، استفاده از یک ماشین مجازی مانند VirtualBox است.
فرض کنید دیسک جدید ما این نام را دارد:
/dev/sdb
نام dev/sdb فقط یک مثال است. روی سیستم شما ممکن است دیسک موردنظر
dev/sda
dev/nvme0n1 یا نام دیگری داشته باشد.
هرگز فقط به این دلیل که در این آموزش dev/sdb نوشته شده، همان مسیر را روی سیستم خود اجرا نکنید.
قبل از هر کاری باید بدانیم چه دیسکها و پارتیشنهایی در سیستم وجود دارند.
یکی از بهترین ابزارها برای این کار lsblk است:
lsblkممکن است خروجی چیزی شبیه این باشد:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 50G 0 part /
└─sda2 8:2 0 50G 0 part /home
sdb 8:16 0 5G 0 disk
در اینجا میبینیم که:
sda → 100GB disk
sdb → 5GB diskو دیسک sdb هیچ پارتیشنی ندارد.
پس در این مثال، دیسک آزمایشی ما:
/dev/sdbاست
مرحله دوم: مشاهده اطلاعات دیسک با fdisk
حالا میتوانیم اطلاعات دیسک را با fdisk بررسی کنیم.
برای این کار:
sudo fdisk -lدستور -l به fdisk میگوید اطلاعات جدول پارتیشنها را نمایش دهد.
اگر بخواهیم فقط یک دیسک مشخص را بررسی کنیم:
sudo fdisk -l /dev/sdbممکن است برای یک دیسک خالی خروجی مشابه زیر ببینیم:
Disk /dev/sdb: 5 GiB, ...
Disk model: ...
Units: sectors of 1 * 512 = 512 bytes
Disklabel type: gpt
Disk identifier: ...
Device Start End Sectors Size Typeاگر دیسک هنوز جدول پارتیشن نداشته باشد، اطلاعات متفاوتی مشاهده خواهیم کرد.
مرحله سوم: ورود به محیط fdisk
حالا میخواهیم وارد محیط تعاملی fdisk شویم.
sudo fdisk /dev/sdbپس از اجرای دستور، معمولاً محیطی شبیه این خواهیم داشت:
Welcome to fdisk (util-linux ...).
Command (m for help):از اینجا به بعد، دستورهایی که وارد میکنیم مربوط به خود fdisk هستند، نه Shell.
برای مثال:
Command (m for help): mدستور m؛ نمایش راهنما
اگر فراموش کردید چه دستورهایی در fdisk وجود دارند، کافی است:
m
را وارد کنید.
خروجی معمولاً فهرستی از دستورات موجود را نمایش میدهد.
برخی از مهمترین دستورها عبارتاند از:
- m Help
- p Print the partition table
- n Add a new partition
- d Delete a partition
- t Change a partition type
- w Write table to disk and exit
- q Quit without saving changesدر ادامه با مهمترین آنها کار میکنیم.
دستور p؛ مشاهده جدول پارتیشن
با وارد کردن:
p
میتوانیم جدول پارتیشن فعلی را مشاهده کنیم.
اگر دیسک خالی باشد، احتمالاً هیچ پارتیشنی در جدول وجود ندارد.
این دستور یکی از مهمترین دستورهای fdisk است و بهتر است قبل و بعد از تغییرات از آن استفاده کنیم.
ساخت یک پارتیشن جدید با n
حالا میخواهیم یک پارتیشن جدید ایجاد کنیم.
دستور:
n
برای ساخت یک پارتیشن جدید استفاده میشود.
بعد از اجرای آن، fdisk چند سؤال از ما میپرسد.
برای مثال:
Command (m for help): nممکن است ابتدا نوع پارتیشن پرسیده شود:
Partition type
p primary
e extendedدر جدولهای پارتیشن مدرن مانند GPT، روند و گزینهها ممکن است متفاوت باشد. بنابراین نباید خروجی را دقیقاً در همه سیستمها یکسان فرض کنیم.
در ادامه معمولاً fdisk درباره شماره پارتیشن و محدوده آن سؤال میکند.
مثلاً:
Partition number (1-4, default 1):اگر میخواهیم اولین پارتیشن باشد، میتوانیم مقدار پیشفرض را قبول کنیم و فقط Enter بزنیم.
تعیین اندازه پارتیشن
در مرحله بعد fdisk از ما درباره اولین و آخرین سکتور پارتیشن سؤال میکند.
برای مثال:
First sector (..., default ...):
Last sector (..., default ...):اگر بخواهیم از مقدار پیشفرض استفاده کنیم، میتوانیم Enter بزنیم.
همچنین میتوانیم اندازه را به شکل مشخص وارد کنیم.
مثلاً:
+2G
یعنی پارتیشنی با اندازه تقریبی ۲ گیگابایت ایجاد شود.
بنابراین میتوانیم مثلاً یک پارتیشن ۲ گیگابایتی بسازیم و فضای باقیمانده دیسک را برای استفادههای بعدی نگه داریم.
آیا پارتیشن ساخته شده است؟
بعد از ساخت پارتیشن، هنوز تغییرات را روی دیسک نهایی نکردهایم.
میتوانیم با:
p
جدول فعلی را ببینیم.
برای مثال:
Device Start End Sectors Size Type
/dev/sdb1 ... ... ... 2G Linux filesystemدر این مرحله fdisk تغییرات را در محیط کاری خود نگه داشته است.
اما هنوز باید تصمیم بگیریم که آنها را روی دیسک بنویسیم یا نه.
دستور w؛ ذخیره تغییرات
اگر مطمئن هستیم تغییراتی که ایجاد کردهایم درست هستند، از:
w
استفاده میکنیم.
w مخفف Write است و تغییرات جدول پارتیشن را روی دیسک مینویسد.
بعد از اجرای آن، fdisk خارج میشود.
هشدار: بعد از اجرای w تغییرات واقعاً روی جدول پارتیشن نوشته میشوند. بنابراین قبل از آن حتماً نام دیسک و جدول پارتیشن را بررسی کنید.
دستور q؛ خروج بدون ذخیره
اگر متوجه شدیم اشتباهی انجام دادهایم یا فقط میخواهیم تمرین کنیم و تغییرات را ذخیره نکنیم، میتوانیم از:
q
استفاده کنیم.
q یعنی:
Quit
و بدون نوشتن تغییرات روی دیسک از fdisk خارج میشود.
این دستور هنگام تمرین بسیار مفید است.
بررسی پارتیشن ساختهشده
بعد از خروج از fdisk دوباره lsblk را اجرا میکنیم:
lsblk
حالا ممکن است خروجی شبیه این باشد:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 50G 0 part /
└─sda2 8:2 0 50G 0 part /home
sdb 8:16 0 5G 0 disk
└─sdb1 8:17 0 2G 0 partاکنون داریم:
/dev/sdb
└── /dev/sdb1یعنی روی دیسک sdb یک پارتیشن ایجاد کردهایم.
پارتیشنبندی با فرمت کردن فرق دارد
یک نکته بسیار مهم:
ساخت پارتیشن به معنی ساخت Filesystem نیست.
تا اینجا فقط یک پارتیشن ساختهایم.
اگر بخواهیم از آن برای ذخیره فایلها استفاده کنیم، معمولاً باید روی آن یک filesystem ایجاد کنیم.
مثلاً برای ext4:
sudo mkfs.ext4 /dev/sdb1پس:
fdisk
↓
Partition
↓
mkfs.ext4
↓
Filesystemاین دو مرحله را نباید با یکدیگر اشتباه گرفت.
هشدار: اجرای mkfs روی پارتیشن اشتباه میتواند اطلاعات آن پارتیشن را از بین ببرد.
Mount کردن پارتیشن
بعد از ساخت filesystem، میتوانیم آن را به یک مسیر در سیستم متصل یا Mount کنیم.
ابتدا یک دایرکتوری ایجاد میکنیم:
sudo mkdir /mnt/testسپس پارتیشن را Mount میکنیم:
sudo mount /dev/sdb1 /mnt/testحالا میتوانیم وضعیت آن را با lsblk بررسی کنیم:
lsblkممکن است چیزی شبیه این ببینیم:
sdb
└─sdb1 2G part /mnt/testیعنی /dev/sdb1 در مسیر /mnt/test در دسترس است.
یک سناریوی کامل
بیایید تمام مسیر را یکبار خلاصه کنیم.
فرض میکنیم یک دیسک آزمایشی داریم:
/dev/sdb
lsblkfdisksudo fdisk /dev/sdbm
p
n
سپس اندازه و سایر گزینهها را تعیین میکنیم.
p
w
lsblk
filesystemبرای مثال:
sudo mkfs.ext4 /dev/sdb1mount pointsudo mkdir /mnt/testMount کردنsudo mount /dev/sdb1 /mnt/testدر نهایت پارتیشن ما آماده استفاده است.
جدول دستورات مهم fdisk
دستور
کاربرد
m
نمایش راهنما
p
نمایش جدول پارتیشن
n
ایجاد پارتیشن جدید
d
حذف پارتیشن
t
تغییر نوع پارتیشن
w
ذخیره تغییرات و خروج
q
خروج بدون ذخیره
g
ایجاد جدول پارتیشن GPT
o
ایجاد جدول پارتیشن MBR/DOS
دستورات موجود ممکن است بسته به نسخه fdisk و نوع جدول پارتیشن متفاوت باشند.
MBR و GPT چیستند؟
در این آموزش بیشتر روی خود fdisk تمرکز کردیم، اما هنگام کار با پارتیشنها احتمالاً با دو اصطلاح مهم روبهرو میشوید:
MBR
GPT
این دو، روشهایی برای سازماندهی جدول پارتیشن دیسک هستند.
GPT استاندارد جدیدتری است و در سیستمهای مدرن بسیار رایج است، در حالی که MBR یک استاندارد قدیمیتر است که هنوز در بعضی سیستمها و سناریوها دیده میشود.
در سیستمهای امروزی، مخصوصاً سیستمهایی که با UEFI کار میکنند، آشنایی با GPT و پارتیشن EFI اهمیت زیادی دارد.
این موضوع خودش بحث مفصلتری است و بهتر است در یک آموزش جداگانه بررسی شود.
چند نکته مهم قبل از استفاده از fdisk
همیشه اول lsblk را اجرا کنید
قبل از کار با دیسک، ابتدا مشخص کنید کدام دیسک موردنظر شماست:
lsblk
روی دیسک سیستمعامل با احتیاط کار کنید
اگر لینوکس روی /dev/sda نصب شده است، اجرای اشتباه دستورات روی آن میتواند سیستمعامل یا اطلاعات شما را تحت تأثیر قرار دهد.
نام دیسک را حدس نزنید
اینکه در یک آموزش /dev/sdb استفاده شده به این معنی نیست که دیسک شما هم /dev/sdb است.
قبل از w دوباره بررسی کنید
قبل از ذخیره تغییرات:
p
را اجرا کنید و جدول پارتیشن را با دقت بررسی کنید.
روی اطلاعات مهم آزمایش نکنید
برای یادگیری، یک ماشین مجازی و یک دیسک مجازی بهترین گزینه هستند.
جمعبندی
fdisk یکی از ابزارهای مهم برای مدیریت پارتیشنها در لینوکس است. با وجود اینکه ظاهر آن در ابتدا ممکن است کمی ترسناک به نظر برسد، منطق اصلی آن ساده است.
در این آموزش یاد گرفتیم:
Disk و Partition چه تفاوتی دارند.
Filesystem چیست.
چگونه دیسکهای سیستم را با lsblk پیدا کنیم.
چگونه اطلاعات دیسک را با fdisk -l ببینیم.
چگونه وارد محیط fdisk شویم.
چگونه جدول پارتیشن را مشاهده کنیم.
چگونه یک پارتیشن جدید ایجاد کنیم.
چگونه تغییرات را با w ذخیره کنیم.
چگونه با q بدون ذخیره خارج شویم.
چرا پارتیشنبندی با فرمت کردن تفاوت دارد.
چگونه یک پارتیشن را با ext4 فرمت و سپس Mount کنیم.
اگر تازه وارد دنیای مدیریت سیستمهای لینوکسی شدهاید، پیشنهاد میکنم این مراحل را بهجای حفظ کردن، در یک ماشین مجازی انجام دهید. کار کردن واقعی با دیسک و مشاهده نتیجه دستورات، درک شما از Linux Storage را بسیار بهتر میکند.
در ادامه این مسیر میتوان سراغ موضوعات پیشرفتهتری مانند GPT و MBR، پارتیشن EFI، ابزار parted، فایل /etc/fstab و در نهایت LVM رفت.