مجله ایرانیکاسرورآموزش سرور، هاست، وردپرس و شبکه
آموزشی

رفع Read-only File System در Linux؛ آموزش عیب‌یابی و تعمیر

اگر هنگام ساخت، ویرایش یا حذف یک فایل در لینوکس با خطایی شبیه Read-only file system روبه‌رو شده‌اید، معنی آن معمولاً این است که فایل‌سیستمی که مسیر موردنظر روی آن قرار دارد با حالت…

رفع Read-only File System در Linux؛ آموزش عیب‌یابی و تعمیر
خلاصه سریع این آموزش

اگر هنگام ساخت، ویرایش یا حذف یک فایل در لینوکس با خطایی شبیه Read-only file system روبه‌رو شده‌اید، معنی آن معمولاً این است که فایل‌سیستمی که مسیر موردنظر روی آن…

۱۱ دقیقه مطالعه ۰ دیدگاه ۱۳ مهر ۱۴۰۵ آخرین به‌روزرسانی

اگر هنگام ساخت، ویرایش یا حذف یک فایل در لینوکس با خطایی شبیه Read-only file system روبه‌رو شده‌اید، معنی آن معمولاً این است که فایل‌سیستمی که مسیر موردنظر روی آن قرار دارد با حالت فقط‌خواندنی یا ro Mount شده است. این وضعیت گاهی عمداً تنظیم شده، اما در سرورها بیشتر اوقات بعد از خطای فایل‌سیستم، مشکل دیسک، خطای I/O یا یک Mount اشتباه دیده می‌شود.

پاسخ کوتاه: اول با findmnt و لاگ‌های کرنل مشخص کنید فایل‌سیستم واقعاً Read-only شده یا نه. اگر هیچ خطای دیسک یا فایل‌سیستم وجود ندارد، می‌توان آن را با mount -o remount,rw دوباره قابل‌نوشتن کرد. اگر خطاهایی مثل I/O error، EXT4-fs error یا خرابی Journal دیده می‌شود، ابتدا باید فایل‌سیستم را در حالت امن تعمیر کنید؛ صرفاً Remount کردن کافی نیست.

فهرست مطالب

خطای Read-only File System در لینوکس یعنی چه؟

در لینوکس هر پارتیشن یا فایل‌سیستم هنگام استفاده در یک مسیر Mount می‌شود. فایل‌سیستم می‌تواند در یکی از دو حالت اصلی قرار داشته باشد:

  • rw: خواندن و نوشتن مجاز است.
  • ro: فقط خواندن مجاز است و تغییر فایل‌ها امکان‌پذیر نیست.

برای مثال اگر بخواهید داخل یک فایل‌سیستم فقط‌خواندنی فایلی ایجاد کنید، ممکن است این پیام را ببینید:

touch: cannot touch 'test.txt': Read-only file system

این خطا با Permission denied فرق دارد. در خطای Permission معمولاً مجوز کاربر یا مالکیت فایل مشکل دارد، اما در Read-only File System خود فایل‌سیستم اجازه نوشتن نمی‌دهد.

مرحله اول: مشخص کنید کدام فایل‌سیستم Read-only شده است

قبل از اجرای هر دستور تعمیر، باید بفهمید مسیر مشکل‌دار روی کدام پارتیشن قرار دارد.

فرض کنید خطا هنگام نوشتن در مسیر زیر رخ داده است:

/var/www/example

دستور زیر را اجرا کنید:

findmnt -T /var/www/example

خروجی ممکن است چیزی شبیه این باشد:

TARGET SOURCE    FSTYPE OPTIONS
/      /dev/vda1 ext4   ro,relatime

وجود ro در ستون OPTIONS یعنی فایل‌سیستم فقط‌خواندنی است.

اگر مشکل مربوط به روت سرور است، این دستور ساده‌تر است:

findmnt /

برای دیدن همه دیسک‌ها، نوع فایل‌سیستم و UUID آن‌ها نیز می‌توانید اجرا کنید:

lsblk -f

مرحله دوم: قبل از Remount کردن، لاگ‌های کرنل را بررسی کنید

این مهم‌ترین مرحله عیب‌یابی است. در بسیاری از سرورها کرنل وقتی خرابی فایل‌سیستم یا خطای جدی ورودی/خروجی تشخیص دهد، برای جلوگیری از آسیب بیشتر فایل‌سیستم را Read-only می‌کند.

ابتدا اجرا کنید:

dmesg -T | tail -n 100

روی سیستم‌های مبتنی بر systemd می‌توانید لاگ کرنل بوت فعلی را هم ببینید:

journalctl -k -b -p warning..alert

به پیام‌هایی شبیه موارد زیر دقت کنید:

EXT4-fs error
Buffer I/O error
I/O error
Aborting journal
Remounting filesystem read-only
blk_update_request
critical medium error

نکته مهم: اگر خطای I/O، خرابی Journal یا خطای دیسک مشاهده می‌کنید، مستقیم سراغ mount -o remount,rw نروید. ابتدا از داده‌های مهم بکاپ بگیرید و علت خرابی را مشخص کنید.

مرحله سوم: فضای دیسک و Inodeها را نیز بررسی کنید

پرشدن دیسک معمولاً خطای No space left on device ایجاد می‌کند، نه Read-only File System؛ با این حال در زمان عیب‌یابی بهتر است این مورد هم بررسی شود.

df -h

سپس تعداد Inodeهای آزاد را بررسی کنید:

df -i

اگر درصد استفاده در ستون Use% برابر ۱۰۰٪ باشد، ابتدا باید فضای لازم را آزاد کنید.

روش سریع: Remount کردن فایل‌سیستم به حالت Read/Write

اگر لاگ‌ها هیچ خطای جدی نشان نمی‌دهند و می‌دانید فایل‌سیستم به اشتباه با حالت ro Mount شده است، می‌توانید آن را دوباره با حالت قابل‌نوشتن Mount کنید.

برای فایل‌سیستم روت:

sudo mount -o remount,rw /

سپس نتیجه را بررسی کنید:

findmnt -no OPTIONS /

اگر در خروجی rw مشاهده شد، فایل‌سیستم دوباره قابل نوشتن است.

برای یک Mount Point دیگر، مثلاً /data:

sudo mount -o remount,rw /data

هشدار: اگر Remount با خطا شکست خورد یا فایل‌سیستم دوباره سریعاً Read-only شد، دستور را مرتب تکرار نکنید. این رفتار معمولاً نشانه مشکل جدی‌تری در فایل‌سیستم یا Storage است.

بررسی فایل /etc/fstab

فایل /etc/fstab مشخص می‌کند پارتیشن‌ها هنگام بوت با چه تنظیماتی Mount شوند. اگر گزینه ro داخل آن قرار گرفته باشد، فایل‌سیستم ممکن است بعد از هر ریبوت دوباره فقط‌خواندنی شود.

ابتدا یک نسخه پشتیبان بسازید:

sudo cp /etc/fstab /etc/fstab.backup

سپس فایل را مشاهده کنید:

cat /etc/fstab

نمونه‌ای از یک ورودی معمول:

UUID=xxxx-xxxx / ext4 defaults 0 1

اگر در بخش Optionها به‌صورت صریح ro تنظیم شده باشد، باید علت آن را بررسی کنید. تغییر کورکورانه این گزینه توصیه نمی‌شود، چون ممکن است سرور عمداً با Root File System فقط‌خواندنی تنظیم شده باشد.

برای بررسی خطاهای نحوی fstab می‌توانید از دستور زیر استفاده کنید:

sudo findmnt --verify

اگر فایل‌سیستم ext4 است: تعمیر با fsck یا e2fsck

در بسیاری از سرورهای Ubuntu و Debian از فایل‌سیستم ext4 استفاده می‌شود. اگر فایل‌سیستم به‌دلیل خطا Read-only شده باشد، ممکن است نیاز به بررسی و تعمیر داشته باشد.

اول نوع فایل‌سیستم و Device را پیدا کنید:

findmnt /
lsblk -f

ممکن است Device روت چیزی مانند /dev/vda1، /dev/sda2 یا یک Logical Volume باشد.

خیلی مهم: نام پارتیشن را از روی نمونه‌های این مقاله حدس نزنید. دستور تعمیر باید دقیقاً روی Device واقعی سرور خودتان اجرا شود.

برای ext2، ext3 و ext4 ابزار e2fsck استفاده می‌شود. این ابزار را نباید روی فایل‌سیستم فعال و قابل‌نوشتن اجرا کرد.

اگر پارتیشن جداگانه‌ای مانند /data دارید، ابتدا آن را Unmount کنید:

sudo umount /data

بعد، با Device واقعی آن را بررسی کنید:

sudo e2fsck -f /dev/vdb1

گزینه -f باعث می‌شود حتی اگر فایل‌سیستم ظاهراً Clean باشد بررسی انجام شود.

اگر مشکل مربوط به پارتیشن روت / است، نمی‌توانید آن را در یک سیستم در حال استفاده به‌سادگی Unmount کنید. در این حالت باید از یکی از روش‌های زیر استفاده شود:

  • Recovery Mode در سیستم فیزیکی یا ماشین مجازی؛
  • Rescue Mode ارائه‌دهنده VPS؛
  • بوت از Live Linux در سیستم فیزیکی؛
  • اتصال دیسک به یک سیستم دیگر در محیط مجازی.

بعد از ورود به محیط Rescue و اطمینان از Mount نبودن پارتیشن، دستور را روی Device واقعی اجرا کنید.

اگر فایل‌سیستم XFS است چه کنیم؟

برای XFS نباید انتظار داشته باشید دستور عمومی fsck.xfs فایل‌سیستم را تعمیر کند؛ این فرمان عملاً عملیات تعمیر انجام نمی‌دهد. ابزار مخصوص XFS، فرمان xfs_repair است.

اول نوع فایل‌سیستم را چک کنید:

lsblk -f

برای بررسی بدون اعمال تغییر:

sudo xfs_repair -n /dev/vdb1

اگر لازم است تعمیر واقعی انجام شود، فایل‌سیستم باید Unmount باشد:

sudo umount /data
sudo xfs_repair /dev/vdb1

گزینه -L در xfs_repair لاگ XFS را صفر می‌کند و می‌تواند باعث از دست‌رفتن تغییرات متادیتا یا حتی داده شود. این گزینه را فقط به‌عنوان آخرین راه و بعد از تهیه بکاپ یا Snapshot در نظر بگیرید.

اگر فایل‌سیستم Btrfs است

در Btrfs رویکرد تعمیر متفاوت است. ابتدا اطلاعات وضعیت دستگاه‌ها را بررسی کنید:

sudo btrfs device stats /

برای بررسی ساختار فایل‌سیستم، ابزار btrfs check وجود دارد؛ حالت پیش‌فرض آن تغییری روی دیسک ایجاد نمی‌کند:

sudo btrfs check --readonly /dev/nvme0n1p2

هشدار Btrfs: گزینه --repair را برای امتحان کردن اجرا نکنید. مستندات رسمی Btrfs نیز توصیه می‌کند این گزینه فقط با راهنمایی فرد باتجربه و بعد از پذیرش ریسک خرابی بیشتر استفاده شود.

رفع Read-only File System روی VPS

در سرور مجازی، علاوه بر خود سیستم‌عامل باید احتمال مشکل Storage میزبان را هم در نظر گرفت. اگر در dmesg خطاهای مکرر I/O دیده می‌شود، ممکن است مشکل از لایه ذخیره‌سازی زیرساخت باشد و از داخل VPS قابل رفع نباشد.

برای بررسی سریع:

dmesg -T | grep -Ei 'error|ext4|xfs|btrfs|i/o|buffer|nvme|scsi'

اگر فایل‌سیستم روت Read-only شده و نیاز به fsck دارد، بهترین روش استفاده از Rescue Mode یا کنسول مدیریتی سرویس‌دهنده است؛ چون پارتیشن روت در حالت عادی در حال استفاده است.

برای اجرای سرویس‌های لینوکسی روی زیرساخت داخل ایران

اگر برای وب‌سرور، Docker، دیتابیس یا سرویس‌های لینوکسی به VPS نیاز دارید، می‌توانید پلن‌های خرید سرور مجازی ایران ایرانیکاسرور را بررسی کنید. در انتخاب سرور، فضای دیسک، نوع workload و نیاز به Snapshot یا بکاپ را متناسب با سرویس خود در نظر بگیرید.

تماس با پشتیبانی ایرانیکاسرور: 021-91302467

اگر خطا داخل Docker رخ می‌دهد

گاهی سیستم میزبان سالم است اما فقط داخل کانتینر خطای Read-only File System مشاهده می‌شود. در این حالت ممکن است Volume یا Bind Mount عمداً با حالت ro تعریف شده باشد.

Mountهای کانتینر را بررسی کنید:

docker inspect CONTAINER_NAME

در Docker Compose نیز چنین تنظیمی باعث فقط‌خواندنی شدن Volume می‌شود:

volumes:
  - ./data:/app/data:ro

در صورت نیاز به نوشتن و اگر از نظر امنیتی مشکلی ندارد، باید :ro حذف یا به تنظیم مناسب تغییر داده شود.

همچنین اگر گزینه زیر در Compose فعال شده باشد، Root Filesystem کانتینر عمداً فقط‌خواندنی است:

read_only: true

بررسی سلامت دیسک در سرور فیزیکی

اگر سرور فیزیکی دارید و خطاهای I/O مشاهده می‌شود، سلامت دیسک را نیز بررسی کنید. برای دیسک‌های SATA/SAS معمولاً ابزار smartctl کاربرد دارد.

در Ubuntu و Debian:

sudo apt update
sudo apt install smartmontools

سپس برای مثال:

sudo smartctl -a /dev/sda

روی VPS معمولاً اطلاعات SMART دیسک فیزیکی در اختیار ماشین مجازی قرار نمی‌گیرد؛ بنابراین نبود اطلاعات SMART در VPS الزاماً نشانه مشکل نیست.

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

  1. مسیر مشکل‌دار را با findmnt -T بررسی کنید.
  2. نوع فایل‌سیستم را با lsblk -f مشخص کنید.
  3. لاگ‌های dmesg و journalctl را برای خطای I/O یا فایل‌سیستم بخوانید.
  4. اگر اطلاعات مهم دارید، قبل از تعمیر Snapshot یا Backup بگیرید.
  5. اگر هیچ خطای جدی وجود ندارد و Mount اشتباه است، remount,rw انجام دهید.
  6. اگر ext4 خراب است، فایل‌سیستم را در Rescue Mode با e2fsck بررسی کنید.
  7. برای XFS از xfs_repair و برای Btrfs از ابزارهای مخصوص خودش استفاده کنید.
  8. بعد از تعمیر، دوباره لاگ‌ها و قابلیت نوشتن روی فایل‌سیستم را تست کنید.

چطور مطمئن شویم مشکل برطرف شده است؟

ابتدا وضعیت Mount را بررسی کنید:

findmnt -no TARGET,SOURCE,FSTYPE,OPTIONS /

بعد یک فایل موقت بسازید:

sudo touch /tmp/read-write-test
ls -l /tmp/read-write-test
sudo rm /tmp/read-write-test

در مرحله آخر دوباره لاگ‌های کرنل را بررسی کنید تا مطمئن شوید خطای جدیدی ثبت نشده است:

dmesg -T | tail -n 50

Rollback؛ اگر تغییرات مشکل را بدتر کرد چه کنیم؟

اگر فایل /etc/fstab را تغییر داده‌اید و بعد از آن مشکل ایجاد شده، نسخه پشتیبان را برگردانید:

sudo cp /etc/fstab.backup /etc/fstab

اگر فایل‌سیستم بعد از Remount مجدداً Read-only شد، آن را نشانه حل نشدن مشکل بدانید و قبل از هر تعمیر بیشتر، از داده‌ها Snapshot یا Backup تهیه کنید.

در VPSهایی که سیستم‌عامل بوت نمی‌شود، Rescue Mode معمولاً امن‌ترین محیط برای بررسی پارتیشن روت است.

اگر به محیط Rescue یا دستورات فایل‌سیستم آشنا نیستید

اجرای fsck یا ابزارهای تعمیر روی Device اشتباه می‌تواند باعث آسیب به اطلاعات شود. قبل از تعمیر دیسک سرور، از داده‌های مهم نسخه پشتیبان تهیه کنید و در صورت نیاز از سرویس کانفیگ و پشتیبانی فنی سرور استفاده کنید.

تماس با پشتیبانی ایرانیکاسرور: 021-91302467

اشتباه‌های رایج هنگام رفع Read-only File System

  • اجرای فوری fsck روی پارتیشن روت در حال استفاده؛
  • فرض کردن اینکه هر فایل‌سیستم با fsck یکسان تعمیر می‌شود؛
  • استفاده از xfs_repair -L بدون بررسی ریسک از دست‌رفتن داده؛
  • اجرای btrfs check --repair صرفاً برای امتحان؛
  • نادیده گرفتن پیام‌های I/O در dmesg؛
  • تغییر /etc/fstab بدون تهیه نسخه پشتیبان؛
  • اشتباه گرفتن Read-only File System با مشکل Permission یا مالکیت فایل؛
  • Remount مداوم یک فایل‌سیستم خراب بدون رفع علت اصلی.

سؤالات متداول

آیا دستور mount -o remount,rw / همیشه خطای Read-only File System را رفع می‌کند؟

خیر. این دستور فقط زمانی مناسب است که فایل‌سیستم سالم باشد و به اشتباه یا به‌صورت موقت Read-only شده باشد. اگر کرنل به‌دلیل خرابی فایل‌سیستم یا خطای I/O آن را Read-only کرده باشد، باید علت اصلی برطرف شود.

برای ext4 از fsck استفاده کنیم یا e2fsck؟

e2fsck ابزار اختصاصی خانواده ext2/ext3/ext4 است. دستور عمومی fsck نیز بسته به نوع فایل‌سیستم ابزار مناسب را فراخوانی می‌کند. مهم‌تر از نام فرمان این است که فایل‌سیستم هنگام تعمیر فعال و قابل‌نوشتن نباشد.

آیا می‌توان روی پارتیشن روت در حال اجرا fsck زد؟

برای تعمیر عادی فایل‌سیستم روت بهتر است وارد Recovery یا Rescue Mode شوید تا پارتیشن موردنظر در حالت فعال و قابل‌نوشتن نباشد. اجرای تعمیر روی فایل‌سیستم در حال استفاده می‌تواند خطرناک باشد.

اگر فایل‌سیستم XFS باشد چه دستوری باید بزنیم؟

برای XFS ابزار اصلی تعمیر xfs_repair است. دستور fsck.xfs مانند fsck برای ext4 فایل‌سیستم را تعمیر نمی‌کند.

آیا پر بودن دیسک باعث Read-only File System می‌شود؟

پرشدن دیسک معمولاً پیام No space left on device ایجاد می‌کند. با این حال بررسی فضای آزاد و Inodeها جزو مراحل عیب‌یابی است، چون کمبود فضا می‌تواند باعث اختلال سرویس‌ها و مشکلات جانبی شود.

چرا VPS بعد از مدتی دوباره Read-only می‌شود؟

اگر پس از Remount مشکل برمی‌گردد، احتمال خرابی فایل‌سیستم، خطای I/O یا مشکل Storage وجود دارد. لاگ‌های کرنل را بررسی کنید و در صورت مشاهده خطاهای مکرر ذخیره‌سازی، موضوع را با ارائه‌دهنده VPS پیگیری کنید.

جمع‌بندی: برای رفع Read-only File System ابتدا مشخص کنید فایل‌سیستم واقعاً با حالت ro Mount شده یا خیر. بعد لاگ‌های کرنل را بررسی کنید. اگر خطای سخت‌افزاری یا خرابی فایل‌سیستم وجود ندارد، Remount به حالت rw می‌تواند کافی باشد؛ اما در صورت خرابی ext4، XFS یا Btrfs باید ابزار مخصوص همان فایل‌سیستم را در شرایط امن استفاده کنید. در سرورهای مجازی، تکرار خطای I/O می‌تواند به زیرساخت Storage میزبان مربوط باشد.

اشتراک‌گذاری مقاله
گفت‌وگو درباره آموزش

دیدگاه‌ها (۰)

هنوز دیدگاهی ثبت نشده است.

دیدگاه یا سؤال خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *