انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

اكتشاف وحل مشاكل بطء إدخال/إخراج القرص

اكتشاف وحل مشاكل بطء I/O القرص على خوادم Linux باستخدام iotop وiostat وتقنيات التحسين.

وقت القراءة: 14 دقيقة استكشاف الأخطاء وإصلاحها
قرصI/Oiotopiostatأداءlinuxتخزين

جدول المحتويات

مقدمة

بطء إدخال/إخراج القرص مشكلة شائعة تؤثر بشكل كبير على أداء الخادم. تتباطأ استعلامات قاعدة البيانات، وتتوقف تطبيقات الويب عن الاستجابة، ويبدو النظام بطيئاً بشكل عام. يغطي هذا الدليل كيفية اكتشاف وحل مشاكل بطء I/O القرص.

الأعراض

علامات نموذجية لبطء I/O القرص:

  • تتوقف الأوامر لفترة طويلة (خاصة ls وfind وقراءة/كتابة الملفات)
  • استعلامات قاعدة البيانات أبطأ بكثير من المعتاد
  • قيمة wa (انتظار I/O) مرتفعة في top أو htop
  • أخطاء انتهاء المهلة في سجلات التطبيقات

الخطوة 1: فحص انتظار I/O

hljs bash
# فحص انتظار I/O باستخدام top
top
# انظر إلى عمود 'wa' — فوق 5% يشير إلى مشكلة

# حالة I/O الفورية مع vmstat
vmstat 1 10

# إحصائيات القرص مع iostat
iostat -x 1 5
# %util فوق 80% يعني أن القرص مشبع

الخطوة 2: أي عملية تستخدم القرص؟

hljs bash
# مراقبة I/O القرص في الوقت الفعلي مع iotop
sudo apt install iotop -y
sudo iotop -o

# I/O لكل عملية مع pidstat
sudo apt install sysstat -y
pidstat -d 1 5

الخطوة 3: اختبار أداء القرص

hljs bash
# اختبار كتابة بسيط
dd if=/dev/zero of=/tmp/test_write bs=1M count=1024 oflag=direct

# اختبار شامل مع fio
sudo apt install fio -y
fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread \
    --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 \
    --group_reporting --filename=/tmp/fio_test

rm /tmp/fio_test /tmp/test_write

الخطوة 4: فحص صحة القرص

hljs bash
# حالة SMART
sudo apt install smartmontools -y
sudo smartctl -a /dev/sda

# أخطاء القرص
dmesg | grep -i -E '(error|fail|bad|ata|scsi|disk)'

إذا كان Reallocated_Sector_Ct أو Pending_Sector_Count أكبر من 0، فالقرص على وشك الفشل. قم بالنسخ الاحتياطي فوراً.

الخطوة 5: تحسين نظام الملفات

hljs bash
# استخدام القرص
df -h

# تنظيف السجلات
sudo journalctl --vacuum-size=500M

# إضافة noatime إلى /etc/fstab
# UUID=xxx / ext4 defaults,noatime 0 1

# جدولة I/O لـ SSD
echo 'none' | sudo tee /sys/block/sda/queue/scheduler

الخطوة 6: استخدام tmpfs لتقليل I/O

hljs bash
# tmpfs لـ /tmp
echo 'tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=2G 0 0' | sudo tee -a /etc/fstab
sudo mount -a

الخلاصة

لحل مشاكل بطء I/O القرص، حدد أولاً باستخدام iotop وiostat أي عملية تضغط على القرص، ثم تحقق من صحة القرص باستخدام SMART. يمكن لتحسينات نظام الملفات (noatime، جدولة I/O) واستخدام tmpfs تحسين الأداء بشكل كبير. في حالة الأعطال المادية للقرص، قم بالنسخ الاحتياطي فوراً واتصل بـ دعم REXE.