لود نشدن سیستم عامل های لینوکسی دلایل زیادی میتواند داشته باشد، یکی از اصلیترین دلایل مشکل لود نشدن سیستم عامل خطاهای کرنل پنیک (kernel panic) هستند. این خطاها در سطح سیستم عامل هستند و مفهوم کلی آنها این است که نمیتوان سیستم عامل را به راحتی ریکاوری کرد برای مثال در سیستم عاملهای ویندوزی blue screen جزو خطاهای کرنل پنیک است. در سیستم عاملهای لینوکسی نیز خطاهایی مبنی بر دستکاری یا خراب شدن فایل تنظیمات بوت لودر جزو این دسته هستند. امروزه GRUB بعنوان یکی از اصلیترین بوت لودرهای سیستم عاملهای لینوکسی است. اگر فایل تنظیمات بوت لودر GRUB مشکل پیدا کند نمیتواند کنترل سیستم را به کرنل لینوکس انتقال دهد بنابراین سیستم عامل لود نمیشود.
در مواقعی که خطاهایی در سمت کرنل برای لود نشدن سیستم عامل وجود دارد از طریق نصب کرنل با rescue mode میتوان این مشکل را برطرف کرد. میتوان یک کرنل جدید از طریق rescue mode سیستم عامل را اجرا و مشکلات لود نشدن آن را برطرف نمود.
نکته: به صورت کلی خطاهایی که باعث لود نشدن سیستم عامل میشوند اگر مربوط به mount نشدن یک درایور نباشند جزو خطاهای سمت kernel هستند.
در زیر دو نمونه از خطاهای کرنل پنیک را مشاهده میکنید.
نصب کرنل از طریق rescue mode
برای نصب کرنل با rescue mode ابتدا باید با استفاده از یک DVD یا فایل ISO وارد rescue mode شوید. برای استفاده از DVD نیاز به حضور فیزیکی است بنابراین چون معمولاً سرورها در دیتاسنتر قرار دارند و حضور فیزیکی و قرار دادن DVD داخل درایو سرور سخت است، در اینجا ما روش استفاده از فایل ISO را توضیح میدهیم. در صورتی که دسترسی به سرور دارید و میتوانید DVD را در آن قرار دهید نیازی به انجام این مرحله نیست. برای این مورد مراحل زیر را انجام دهید:
1- Attach کردن فایل ISO
ابتدا ترتیب boot را تغییر دهید و مطمئن شوید که بوت از طریق ISO image انجام میشود. اگر سیستم عامل روی ماشین مجازی نصب است، پلتفرمهای مجازیسازی مختلف روشهای مشابهی برای استفاده از ISO image برای بوت شدن سیستم دارند. اگر سرویس سرور مجازی یا VPS دارید که از مارال هاست تهیه نمودهاید از طریق این لینک یک تیکت ارسال نمائید تا واحد پشتیبانی فایل ISO را روی سرویستان Attach کنند.
2- بوت کردن سیستم
سیستم را از روی ISO image بوت نمائید. در اینجا ما سیستم عامل CentOS 7 را بوت کردهایم. بعد از بوت شدن در صفحهای که باز میشود مانند صفحه زیر Troubleshooting option را که در انتهای صفحه قرار دارد انتخاب نمائید.
بعد از انتخاب Troubleshooting در صفحه جدید Rescue a CentOS Linux system را انتخاب نمائید.
در صفحه بعدی enter را بزنید به مرحله بعدی برود، زمانی که از شما پرسیده میشود آیا تمایل دارید که برای یافتن installation به حالت Rescue بروید، Continue را انتخاب کنید:
اگر تشخیص install با خطا مواجه شد، سعی کنید Skip کنید و ذخیرهسازی را بصورت دستی پیدا و mount کنید. اگر rescue mode بتواند installation صحیح را تشخیص دهد، پیامی مانند تصویر زیر دریافت میکنید:
ما قصد وارد شدن به root environment را نداریم پس از این مرحله میگذریم و گام chroot را Skip میکنیم.
3- نصب kernel
در پایان این مرحله نصب کرنل با rescue mode انجام میشود.
توجه داشته باشید باید kernel مناسب با سیستم عاملی که نصب هست را مجدداً نصب نمائید. توجه داشته باشید کرنلی که نصب میکنید باید با ورژن سیستم عاملتان که قبلاً نصب کردهاید مشابه باشد. با استفاده از دستور rpm کرنل را برای روت و در /mnt/sysimage نصب میکنیم.
cd /mnt/install/repo/Packages
rpm -ivh --root=/mnt/sysimage kernel-3.10.0-514.el7.x86_64
مرحله بعد ایجاد فایل پیکربندی Grub با نام Grub2 است. سپس با استفاده از کامند chroot دایرکتوری روت را به /mnt/sysimage تغییر دهید. اکنون میتوانید فایل پیکربندی grub2 را برای نصب kernel جدیدتان ایجاد نمائید:
chroot /mnt/sysimage
grub2-mkconfig -o /boot/grub2/grub.cfg
در مسیر /boot چک کنید که فایل کرنل جدید موجود باشد:
ls -lrt /boot/vmlinuz-*
خروجی این دستور شبیه کدهای زیر است:
-rwxr-xr-x. 1 root root 5392080 Nov 22 2016 /boot/vmlinuz-3.10.0-514.el7.x86_64
-rwxr-xr-x. 1 root root 5392080 Oct 1 12:44 /boot/vmlinuz-0-rescue-4bd23218ddab41e587bdd39ae2cfc09a
همچنین از وجود menuentry کرنل در مسیر /boot/grub2/grub.cfg مطمئن شوید:
cat /boot/grub2/grub.cfg
خروجی این دستور این محتوای یک فایل شبیه زیر است:
.....
menuentry 'CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-514.el7.x86_64-advanced-7efe94a2-10ec-40e4-8d89-a52faf13535e' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' f88bd588-6f4d-4050-bd3f-443cf2049ee7
else
search --no-floppy --fs-uuid --set=root f88bd588-6f4d-4050-bd3f-443cf2049ee7
fi
linux16 /vmlinuz-3.10.0-514.el7.x86_64 root=/dev/mapper/cl-root ro crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet LANG=en_US.UTF-8
initrd16 /initramfs-3.10.0-514.el7.x86_64.img
}
.....
فایل /.autorelabel را ایجاد نمائید تا لیبل فایل سیستمها را تغییر دهد یا اصطلاحاً relabel the filesystems .
touch /.autorelabel
در ریبوت بعدی مشکل برطرف و نصب کرنل با rescue mode تمام شده است
در صورتی که سرور مجازی شما نزد مارال هاست قرار دارد از طریق این لینک درخواست خود را برای رفع مشکل ارسال نمائید.