بازنصب سرور و کار با حالت rescue؛ نجات داده‌ها وقتی دسترسی را از دست دادید

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

۷ دقیقه به‌روزرسانی ۷ شهریور ۱۴۰۵

حالت rescue چیست و چه زمانی به آن نیاز دارید؟

وقتی سرور شما از دسترس خارج می‌شود و حتی از طریق SSH هم نمی‌توانید وارد شوید، اولین راه‌حلی که باید به ذهن‌تان برسد، حالت rescue است. این حالت یک محیط موقت و اضطراری است که به شما اجازه می‌دهد بدون نیاز به بوت شدن سیستم‌عامل اصلی، به فایل‌سیستم سرور دسترسی پیدا کنید. در این حالت، سرور با یک هسته و محیط مینیمال (معمولاً مبتنی بر لینوکس) بوت می‌شود و شما می‌توانید عملیات تعمیر، بازنصب یا بازیابی داده را انجام دهید.

شایع‌ترین دلایلی که به حالت rescue نیاز پیدا می‌کنید عبارتند از:

  • فراموش کردن رمز عبور root و عدم دسترسی به SSH
  • خرابی فایل‌های کانفیگ مانند /etc/fstab که باعث توقف بوت می‌شود
  • حمله بدافزار یا تغییر دسترسی‌های فایل‌سیستم
  • نیاز به بازنصب کامل سیستم‌عامل بدون از دست دادن داده‌های مهم
  • آپدیت ناموفق هسته که سیستم را از بوت انداخته است

در این مقاله، قدم‌به‌قدم یاد می‌گیرید که چگونه از حالت rescue برای بازنصب سرور و نجات داده‌های خود استفاده کنید. این راهنما برای توزیع‌های مبتنی بر Debian/Ubuntu و CentOS/Rocky Linux نوشته شده است، اما اصول کلی آن برای هر سیستم‌عامل لینوکسی یکسان است.

ورود به حالت rescue؛ از کجا شروع کنیم؟

ورود به حالت rescue معمولاً از طریق پنل مدیریتی ارائه‌دهنده هاستینگ یا دیتاسنتر انجام می‌شود. در سرورنت، این گزینه در بخش مدیریت سرور شما در دسترس است، اما مراحل کلی در اکثر پنل‌ها مشابه است:

  1. وارد پنل مدیریتی شوید و سرور موردنظر را انتخاب کنید.
  2. گزینه «Rescue Mode» یا «Boot in Rescue» را پیدا کنید.
  3. یک سیستم‌عامل موقت (معمولاً یک توزیع سبک لینوکس) را انتخاب کنید.
  4. یک رمز عبور موقت برای دسترسی به محیط rescue تعیین کنید.
  5. سرور را ریبوت کنید. سیستم به‌جای بوت عادی، وارد محیط rescue می‌شود.

بعد از چند دقیقه، اطلاعات اتصال (آدرس IP، پورت SSH و رمز عبور) در پنل نمایش داده می‌شود. معمولاً پورت SSH در حالت rescue با حالت عادی متفاوت است (مثلاً پورت 22 به 2222 تغییر می‌کند).

اتصال به محیط rescue

برای اتصال، از ترمینال محلی خود دستور زیر را اجرا کنید:

ssh root@YOUR_SERVER_IP -p 2222

اگر از کلید SSH استفاده می‌کنید، ممکن است لازم باشد مسیر کلید را مشخص کنید:

ssh -i ~/.ssh/id_rsa root@YOUR_SERVER_IP -p 2222

بعد از ورود، شما در یک محیط مینیمال هستید که فایل‌سیستم اصلی سرور شما معمولاً به‌صورت خودکار mount نشده است. برای دسترسی به داده‌ها، باید پارتیشن‌ها را شناسایی و mount کنید.

شناسایی و mount کردن پارتیشن‌ها

اولین قدم، پیدا کردن پارتیشن‌های دیسک است. از دستور lsblk یا fdisk -l استفاده کنید:

lsblk

خروجی معمولاً چیزی شبیه این است:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk
├─sda1   8:1    0  512M  0 part
├─sda2   8:2    0   39G  0 part
└─sda3   8:3    0    2G  0 part [SWAP]

در این مثال، sda2 پارتیشن اصلی سیستم (root) است. حالا آن را mount کنید:

mkdir -p /mnt/rescue
mount /dev/sda2 /mnt/rescue

اگر سیستم شما از LVM استفاده می‌کند (که در بسیاری از سرورهای مدرن رایج است)، باید مراحل بیشتری انجام دهید:

vgscan
vgchange -ay
ls /dev/mapper/

سپس پارتیشن منطقی را mount کنید:

mount /dev/mapper/ubuntu--vg-root /mnt/rescue

خطای رایج: mount ناموفق

اگر هنگام mount با خطای wrong fs type مواجه شدید، احتمالاً فایل‌سیستم پارتیشن را اشتباه تشخیص داده‌اید. با دستور blkid نوع فایل‌سیستم را بررسی کنید:

blkid /dev/sda2

خروجی چیزی مثل TYPE="ext4" خواهد بود. سپس با گزینه صریح mount کنید:

mount -t ext4 /dev/sda2 /mnt/rescue

بازنصب سرور با حفظ داده‌ها

یکی از مهم‌ترین کاربردهای حالت rescue، بازنصب سیستم‌عامل بدون از دست دادن داده‌های حیاتی است. دو سناریو داریم: بازنصب کامل (که داده‌ها پاک می‌شوند) و بازنصب تعمیری (که فقط فایل‌های سیستمی بازنصب می‌شوند). در حالت rescue، شما معمولاً گزینه بازنصب کامل را از پنل انتخاب می‌کنید، اما قبل از آن باید داده‌های مهم را بکاپ بگیرید.

بکاپ گرفتن از داده‌های مهم

بعد از mount کردن پارتیشن اصلی، می‌توانید فایل‌های مهم را به یک مقصد خارجی منتقل کنید. مثلاً برای بکاپ از دایرکتوری /var/www (محتوای وب‌سایت):

tar -czf /mnt/rescue/backup/www-backup.tar.gz -C /mnt/rescue var/www

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

cp -a /mnt/rescue/var/lib/mysql /mnt/rescue/backup/mysql-backup

سپس فایل بکاپ را با scp به سیستم محلی خود منتقل کنید:

scp -P 2222 root@YOUR_SERVER_IP:/mnt/rescue/backup/www-backup.tar.gz .

بازنصب سیستم‌عامل

بعد از اطمینان از بکاپ‌گیری، از پنل مدیریتی گزینه «Reinstall» یا «OS Reinstall» را انتخاب کنید. سیستم‌عامل جدید را انتخاب کنید و منتظر بمانید تا فرآیند تمام شود. بعد از اتمام، سرور با سیستم‌عامل تمیز بوت می‌شود و شما می‌توانید داده‌های بکاپ‌گرفته را بازیابی کنید.

نکته مهم: اگر فقط یک پارتیشن دارید و می‌خواهید داده‌ها را حفظ کنید، بازنصب کامل را انجام ندهید. در عوض، سعی کنید مشکل را به‌صورت تعمیری حل کنید (بخش بعدی).

تعمیر سیستم بدون بازنصب کامل

در بسیاری از موارد، نیازی به بازنصب کامل نیست و می‌توانید مشکل را از داخل حالت rescue حل کنید. این روش سریع‌تر است و داده‌های شما دست‌نخورده باقی می‌مانند.

رفع مشکل رمز عبور root

اگر رمز عبور root را فراموش کرده‌اید، بعد از mount کردن پارتیشن اصلی، فایل‌سیستم را chroot کنید:

mount --bind /dev /mnt/rescue/dev
mount --bind /proc /mnt/rescue/proc
mount --bind /sys /mnt/rescue/sys
chroot /mnt/rescue /bin/bash

حالا در محیط chroot هستید و می‌توانید رمز عبور را تغییر دهید:

passwd root

بعد از تغییر رمز، از chroot خارج شوید و سرور را ریبوت کنید:

exit
umount -R /mnt/rescue
reboot

تعمیر فایل fstab خراب

اگر سیستم به دلیل خطا در /etc/fstab بوت نمی‌شود، فایل را ویرایش کنید:

nano /mnt/rescue/etc/fstab

خطوط مربوط به پارتیشن‌های mount شده را بررسی کنید. یک اشتباه رایج، استفاده از شناسه (UUID) اشتباه است. برای پیدا کردن UUID صحیح:

blkid

سپس UUID صحیح را در فایل fstab جایگزین کنید. بعد از ذخیره تغییرات، سرور را ریبوت کنید.

بازنصب گراب (GRUB)

اگر بعد از آپدیت هسته یا تغییر پارتیشن‌بندی، سیستم با خطای GRUB مواجه شد، باید بوت‌لودر را بازنصب کنید. در محیط chroot:

grub-install /dev/sda
update-grub

برای سیستم‌های UEFI، مسیر متفاوت است:

grub-install --target=x86_64-efi --efi-directory=/boot/efi
update-grub

عیب‌یابی مشکلات رایج در حالت rescue

در این بخش به چند مشکل متداول که کاربران هنگام کار با حالت rescue با آن مواجه می‌شوند اشاره می‌کنیم.

مشکل: دسترسی به شبکه در حالت rescue

گاهی اوقات در حالت rescue، شبکه به‌صورت خودکار فعال نمی‌شود. اگر نیاز به دانلود بسته یا انتقال فایل دارید، شبکه را به‌صورت دستی فعال کنید:

ip link set eth0 up
dhclient eth0

یا اگر IP ثابت دارید:

ip addr add YOUR_IP/24 dev eth0
ip route add default via YOUR_GATEWAY

مشکل: فضای کافی برای بکاپ وجود ندارد

اگر پارتیشن اصلی تقریباً پر است و فضای کافی برای بکاپ ندارید، می‌توانید از فشرده‌سازی استفاده کنید یا فایل‌ها را به‌صورت مستقیم با rsync به سیستم راه دور منتقل کنید:

rsync -avz -e "ssh -p 2222" /mnt/rescue/var/www/ user@backup-server:/backup/www/

مشکل: فایل‌سیستم خراب است

اگر هنگام mount با خطای Input/output error مواجه شدید، فایل‌سیستم را بررسی و تعمیر کنید:

fsck -y /dev/sda2

این دستور ممکن است چند دقیقه طول بکشد. بعد از اتمام، دوباره mount کنید.

بازیابی داده‌ها بعد از بازنصب

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

scp www-backup.tar.gz root@YOUR_SERVER_IP:/tmp/

سپس در سرور، فایل را از حالت فشرده خارج کنید:

tar -xzf /tmp/www-backup.tar.gz -C /var/www/

برای دیتابیس، فایل‌های کپی‌شده را به مسیر اصلی برگردانید و سرویس MySQL را ریستارت کنید:

systemctl restart mysql

جمع‌بندی و نکات نهایی

حالت rescue یک ابزار حیاتی برای هر مدیر سروری است. با تسلط بر این تکنیک‌ها، می‌توانید در شرایط بحرانی خونسردی خود را حفظ کنید و داده‌های خود را نجات دهید. چند نکته پایانی:

  • همیشه از داده‌های مهم بکاپ منظم خارج از سرور بگیرید. حالت rescue آخرین راه‌حل است، نه جایگزین بکاپ.
  • قبل از هر تغییر بزرگ (آپدیت هسته، تغییر پارتیشن‌بندی)، از پنل مدیریتی اسنپ‌شات (Snapshot) بگیرید.
  • مستندات حالت rescue در پنل سرورنت را مطالعه کنید؛ ممکن است ویژگی‌های خاصی مانند mount خودکار پارتیشن‌ها در محیط rescue وجود داشته باشد.
  • تمرین کنید! یک سرور آزمایشی را عمداً خراب کنید و سعی کنید با حالت rescue آن را تعمیر کنید. این تجربه در شرایط واقعی بسیار ارزشمند خواهد بود.

با این راهنما، شما آماده‌اید تا هر بحرانی را در سرور خود مدیریت کنید. اگر سوالی دارید، بخش نظرات در دسترس شماست.

آیا این مطلب برایتان مفید بود؟