دستور fsck مخفف File System Check، به منظور بازسازی سیستم فایلهای آسیب دیده در گنو/لینوکس مورد استفاده قرار میگیرد.
شکل کلی دستور:
# fsck [options]
قبل از اینکه با دستور و گزینههای آن آشنا شویم بهترِه از نحوهی عملکرد و کار دستور آگاه باشیم.
کل فضای دیسک به بلوکهای متعدد تقسیم شده است، بلوکها دو هدف کلی دارند:
۱. بیشتر بلوکها نام دیگر فایلهای دادهای کاربر را ذخیره میکنند.
۲. بعضی بلوکها در هر فایل سیستم، فراداده (metadata) فایل سیستم را ذخیره میکنند.
بهترین تعریف برای فرادادهها این است که ساختار فایل سیستم را توصیف و شرح میدهند، که رایجترین ساختار فرادادهها، نماگره (Inode)، بلوک فوق العاده (Super Block) و دایرکتوریها هستند. فضای ابتدایی هر پارتیشن شامل بلوک فوق العاده (Super Block) و لیست نماگره (Inode List) میباشد.
حال به بررسی آنها میپردازیم:
بلوک فوق العاده (Super Block): فضای ابتدایی هر پارتیشن هستند که به عنوان شناسنامه هر پارتیشن شناخته میشوند و حاوی اطلاعات:
- نوع فایل سیستم
- اندازه
- وضعیت
- اطلاعاتی در مورد ساختارهای فراداده دیگر
که اگر هر کدام از این اطلاعات به هر نحوی از بین برود، دادههای شما از بین میروند. به همین دلیل لینوکس نسخه های متعدد از این اطلاعات را نگه میدارد. این اطلاعات را میتوانید در خروجی دستور df ببینید.
لیست نماگره (Inode List): شامل اطلاعاتی در مورد فایلهای هر پارتیشن میباشد که این اطلاعات:
- نام فایل
- مالک
- گروه
- اندازه
- تاریخ ایجاد
میباشد. بهطور کلی هر تغییراتی که کاربر روی فایلها انجام میدهد در لیست نماگره ذخیره میشود. که این اطلاعات را میتوانید در دستور ls همراه با گزینهی اختیاری l-
ببنید.
دستور fsck با بهرهگیری از این اطلاعات و مقایسهی دادههای موجود در پارتیشن اقدام به بازیابی فایلها میکند و اگر با دادهای برخورد کند که در لیست نماگره نباشد در مسیری به نام lost+found که در پارتیشن ریشه هست، قرار میدهد. همهی فایلهای بازیابی شده بر اساس شمارهی نماگرهشان در این مسیر قرار میگیرند و نام فایل تنها شامل یک رشته عددی است که همان شمارهی نماگره منحصر به فرد هر فایل در پارتیشن است.
نکته: قبل از شروع به کار با دستور fsck، سیستم فایل را جدا (unmount) کنید. این کار باعث می شود که دادهها و فایلهای موجود در پارتیشن تغییر پیدا نکند و اطلاعات لیست نماگره و بلوک فوق العاده با اطلاعات موجود یکسان باشد.
هشدار: در صورت عدم جداسازی (unmount)، اطلاعات سیستم فایل شما از دست خواهد رفت.
نکته: امکان دارد هنگام جداسازی با پیغام شلوغ بودن (busy) برخورد کنید، که این نشاندهنده این است که پارتیشن مورد نظر در حال حاضر در حالت استفاده است. برای اینکه متوجه بشویم که آیا یک پارتیشن در حالت شلوغ هست یا نه، همچنین متوجه بشویم که کدام کاربر وکدام فرآیند با آن رابطه دارد میتوانیم از دستور lsof استفاده کنیم.
مثال:
lsof /dev/sda5
خروجی آن:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME totem 4227 masoud 23r REG 8,5 36139721 9322 /media/User/Program/Mazhabi/Sound/01 Quran sound/TARTIL/Shateri/MP3/012- Yusuf.mp3
که در اینجا Totem Movie Player توسط کاربر masoud در حال استفاده است، شما میتوانید با دستور kill و PID آن، که در اینجا ۴۲۲۷ است آن را متوقف کنید:
kill 4227
برای شروع، یک لیست از پارتیشنها میگیریم (برای اینکار من از دو دستور استفاده میکنم):
sudo parted /dev/sda 'print'
خروجی:
Number Start End Size Type File system Flags 1 9728B 47.2GB 47.2GB primary ntfs boot 2 47.2GB 1000GB 953GB extended lba 5 47.2GB 142GB 94.4GB logical ntfs 13 142GB 222GB 80.0GB logical ext4 15 222GB 232GB 9998MB logical ext4 14 232GB 236GB 3845MB logical linux-swap(v1) 6 236GB 330GB 94.4GB logical ntfs 7 330GB 425GB 94.4GB logical ntfs 8 425GB 519GB 94.4GB logical ntfs 9 519GB 605GB 86.0GB logical ntfs 10 605GB 708GB 103GB logical ntfs 11 708GB 802GB 94.4GB logical ntfs 12 802GB 1000GB 198GB logical ntfs
و یا دستور:
sudo fdisk -l
خروجی:
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 224 heads, 19 sectors/track, 459004 cylinders, total 1953525168 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: 0xbc22845e Device Boot Start End Blocks Id System /dev/sda1 * 19 92159423 46079702+ 7 HPFS/NTFS/exFAT /dev/sda2 92159441 1953516767 930678663+ f W95 Ext'd (LBA) /dev/sda5 92159443 276478271 92159414+ 7 HPFS/NTFS/exFAT /dev/sda6 460797139 645115967 92159414+ 7 HPFS/NTFS/exFAT /dev/sda7 645115987 829434815 92159414+ 7 HPFS/NTFS/exFAT /dev/sda8 829434835 1013753663 92159414+ 7 HPFS/NTFS/exFAT /dev/sda9 1013753683 1181695423 83970870+ 7 HPFS/NTFS/exFAT /dev/sda10 1181695443 1382391359 100347958+ 7 HPFS/NTFS/exFAT /dev/sda11 1382391379 1566710207 92159414+ 7 HPFS/NTFS/exFAT /dev/sda12 1566710227 1953516767 193403270+ 7 HPFS/NTFS/exFAT /dev/sda13 277503987 433754495 78125254+ 83 Linux /dev/sda14 453285888 460795903 3755008 82 Linux swap / Solaris /dev/sda15 433756160 453283839 9763840 83 Linux Partition table entries are not in disk order Disk /dev/sdb: 320.1 GB, 320072933376 bytes 222 heads, 30 sectors/track, 93865 cylinders, total 625142448 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: 0x3fb13fb0 Device Boot Start End Blocks Id System /dev/sdb1 * 6660 625134239 312563790 f W95 Ext'd (LBA) /dev/sdb5 6690 123909299 61951305 7 HPFS/NTFS/exFAT /dev/sdb6 123909330 246786299 61438485 7 HPFS/NTFS/exFAT /dev/sdb7 246786330 369663299 61438485 7 HPFS/NTFS/exFAT /dev/sdb8 369663330 472060799 51198735 7 HPFS/NTFS/exFAT /dev/sdb9 472060830 625134239 76536705 7 HPFS/NTFS/exFAT
شروع کار را با یک مثال آغاز میکنم:
fsck /dev/sda15
پس از انجام این کار، شما مقداری برگشتی خواهید دید که میتواند یکی از این موارد باشد:
- 0: هیچ خطایی رخ نداده است و عملیات بررسی سیستم فایل موفق بوده است.
- 1: خطاهای سیستم فایل اصلاح شدهاند.
- 2: سیستم باید reboot شود.
- 4: خطاهای سیستم فایل اصلاح نشدهاند.
- 8: خطای عملیاتی رخ داده است.
- 16: طریقه استفاده و یا خطای دستوری است.
- 32: اجرای fsck با درخواست کاربر (سیگنال Ctrl+C) خاتمه یافت.
- 128: در کتابخانههای به اشتراک گذاشته شده خطا وجود دارد.
نکته: خروجی بالا برای بررسی موفق/ناموفق بودن نمایش داده میشود.
گزینه های اختیاری:
-A
: با این گزینه اختیاری میتوانید تمام پارتیشنها را بررسی کنید:
fsck -A
t-
: با این گزینه اختیاری میتوانید یک نوع سیستم فایل را مشخص کنید و این دستور فقط برای آن نوع انجام شود:
fsck -A -t ext3
و با نوشتهی no میتوان یک نوع خاص را نادیده گرفت:
fsck -A -t noext3
دستور بالا به این صورت گفته میشود: تمام پارتیشنها را بررسی کن به غیر از آنهایی که دارای نوع ext3 هستند.
y-
یا yes
: این گزینهی اختیاری برای رفع مشکلات بهوجود آمده به صورت خودکار صورت میگیرد.
نکته: بهترِ است این گزینهی اختیاری همیشه استفاده شود.
نکته: در حین انجام بررسی، در صورت روبهرو شدن با مشکل، پیغامی برای شما نمایش داده میشود مبنی بر اینکه آیا مایل هستید برای رفع آن اقدام شود؟ که با وارد کردن گزینهی اختیاری y- این تاییدیه را به دستور fsck دادهایم.
مثال:
fsck -A -t ext3 -y
R-
: باعث صرفنظر کردن از سیستم فایل ریشه (root) میشود.
نکته: در حالتی که از گزینهی اختیاری A-
استفاده میکنید حتما از این گزینهی اختیاری استفاده کنید.
مثال:
fsck -AR -t ext3 -y
V-
: با این گزینهی اختیاری درصد پیشرفت را در خروجی نمایش میدهد:
fsck -ARV -t ext3 -y
M-
: این گزینهی اختیاری باعث میشود که پارتیشنهای وصل (mount) را نادیده بگیرد و دستور را برای آنها اجرا نکند.
نکته: بهتر است این گزینهی اختیاری همیشه مورد استفاده قرار بگیرد.
مثال:
fsck -ARVM -t ext3 -y
دستور بالا به این صورت خوانده میشود: تمام سیستم فایلهایی که نوعشان ext3 هستند به غیر از سیستم فایل ریشه و تمام سیستم فایلهایی که متصل هستند را بازسازی کن، و من با تعمیر آنها موافق هستم و در آخر من را از روند اجرا مطلع کن و در صفحه نمایش نمایان کن.