انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: EnriqueTTE در 24 دی 1401، 01:07 قظ
-
اینجا ینفری رو داریم که میخواسته به لپ تاپش هارد اضافه کنه. لپ تاپش رو دوال بوت ویندوز و دبیان کرده. روی ویندوز که بوده hibernate کرده و پشت لپ تاپ رو باز کرده، هارد رو وصل کرده.
الان دبیانش kernel panic میده :)
چکاری میشه کرد؟؟
(https://forum.ubuntu-ir.org/index.php?action=dlattach;topic=156266.0;attach=54909;image)
-
سلام، این رو نمیدونم ولی شاید مشکل مسیر دهی اشتباه هست
به چند روش میشه پارتیشن هارو به سیستم عامل فهموند! یکیش UUID بذاری، یکی دیگش هم اینه که شبیه به زیر بذاری
/dev/sda*
فک کنم روش های دیگههم بود، به هرحال، اگه شما به روش مسیر دهی مثل همین sda گذاشتید، به احتمال زیاد بعد اضافه کردن هارد جدید قاطی کرده
اینطور که تا الان بر فرض مثال سیستم عامل میرفته روت رو از sda3 بگیره، ولی الان این هارد جدید که خالی هست شده sda و اون هارد قدیمی تبدیل شده به sdb3
برای همین بهتره با یه توزیع زنده بالا بیارید توزیع رو و در پرونده /etc/fstab
نوع مسیر دهی رو به UUID تغییر بدید که این مشکل پیش نیاد
-
دوتا m2 داشته یعنی مسیردهی میشه /dev/nvme0n1p1/ ، هارد دیسک /dev/sda/ میشه، احتمالا بخاطر این نیست.
UUID هارو چک کردم درسته
-
به نظر نمیاد مشکل به خاطر وصل کردن هارد باشه. حداقل من چیزی مربوط به اون توی خطاهای کرنل ندیدم.
با توجه به اینکه fsck اجرا شده (خط اول) و زمانی که از بوت شدن کرنل میگذره، احتمالا خطا مربوط به وقتی هست که initramfs سعی کرده init system (توی این مورد systemd) رو اجرا کنه.
فکر کنم اجرا هم شده. ولی یه جایی، ld-linux-x86-64.so.2 دچار segmentaion fault شده.
ld-linux-x86-64 یه linker هست که کتابخانه مورد نیاز برنامهها رو موقع اجرا توی حافظه اصلی سیستم بارگذاری میکنه، جز libc هست و خلاصه اینکه چیز مهمی هست. اگه برای اون مشکل پیش بیاد، تقریبا هیچی توی سیستم نمیتونه درست کار کنه چون تقریبا همه برنامهها از کتابخانههای اشتراکی استفاده میکنند و تا وقتی این linker کار نکنه، اون برنامهها هم نمیتونند کار کنند.
به یه دلیلی این linker موقع اجرا دچار segfault شده. شاید فایل مربوط اون روی ssd آسیب دیده. شاید هم مشکل مربوط به libc باشه. مطمئن نیستم.
از اونجایی که linker دچار segmentaion fault شده، systemd هم متوقف شده. systemd هم که init sysyem هست. اگه init system متوقف بشه، کرنل panic میکنه و نتیجه میشه همین که اینجا دیدید.
به تازگی اون دبیان رو بروزرسانی نکردند؟
فکر نکنم بتونید از chroot برای تعمیر اون دبیان استفاده کنید. دلیلش هم اینه که تقریبا هیچ کدوم از ابزارهای اون دبیان کار نمیکنند. حتی بعیده بتونید با chroot وارد اون دبیان بشید.
فقط برنامههایی میتونند توی اون دبیان اجرا بشن که به صورت ثابت (static) کامپایل شدند.
تا جایی که من میدونم، هیچ برنامه اینجوری به غیر از خود ld-linux-x86-64.so.2 و ldconfig به طور پیشفرض روی دبیان amd64 موجود نیست.
سیستم رو راهاندازی مجدد کنید، بعد به خط فرمان کرنل عبارت break=init رو اضافه کنید، اگه quiet و splash بود، اونها رو بردارید.
اگه از گراب به عنوان بوتلودر استفاده میشه، میتونید وقتی منوی گراب اومد بالا، برید روی گزینهای که میخواهید بوت کنید، بعد کلید e رو بزنید تا بتونید اون گزینه رو ویرایش کنید.
بعد خطی که با کلمه linux شروع میشه رو پیدا کنید. جلوی اون کلمه، اگه quiet یا splash دیدید، اونها رو بردارید. بعد به آخر اون خط، عبارت break=init رو اضافه کنید.
در نهایت کلیدهای ctrl + x یا f10 رو بزنید تا دبیان بوت بشه.
بعد از یه مدت کوتاه، باید یه recovery shell توی محیط initramfs باز بشه. اونجا این دستورات رو اجرا کنید و ببینید چی میگن
/root/lib64/ld-linux-x86-64.so.2 --version
/root/lib64/ld-linux-x86-64.so.2 --library-path /root/lib/x86_64-linux-gnu:/root/lib /root/bin/ls -l /
/root/lib64/ld-linux-x86-64.so.2 --library-path /root/lib/x86_64-linuz-gnu:/root/lib /root/bin/dpkg-query --root=/root -L init-system-helpers
/root/lib64/ld-linux-x86-64.so.2 --library-path /root/lib/x86_64-linux-gnu:/root/lib /root/bin/systemctl --version
هر دستور رو که اجرا میکنید، عکس بگیرید و بعد برید سراغ دستور بعدی.
بعد از اینکه این دستورات رو اجرا کردید و از خروجی اونها عکس گرفتید، سعی کنید به طور دستی ادامه فرایند بوت رو انجام بدید و ببینید چی میشه.
exec run-init /root /sbin/init </root/dev/console >/root/dev/console 2>&1
-
دانشگاهو بستن و پیش من نیست!!
بهش گفتم اگر بیاد نگاه بندازه
-
گراب رو غیرفعال کرده چجوری واردش بشم؟
مقدار timeout رو صفر کرده
-
فکر کنم اگه موقعِ بوت شیفتو نگه داری، حتا اگه تایماوت صفر باشه بیاره گرابو.
ضمن اینکه همیشه میتونی از یه توزیعِ زنده استفاده کنی.
-
فکر کنم اگه موقعِ بوت شیفتو نگه داری، حتا اگه تایماوت صفر باشه بیاره گرابو.
ضمن اینکه همیشه میتونی از یه توزیعِ زنده استفاده کنی.
سبستم UEFI با شیفت نمیشه گراب رو آورد.
میخوام گراب رو تغییر موقتی بدم، با توزیع زنده چکار کنم؟؟
-
نمیدونم، گفتم شاید بتونی مقدار تایماوتو عوض کنی؟!!
-
کلید escape رو امتحان کنید.
-
کلید escape رو امتحان کنید.
اونم نشد!!
-
/boot/ جدا هست یا نه؟
با یه توزیع زنده سیستم رو بوت کنید، اگه /boot/ جدا نیست، فایلسیستم روت دبیان رو یه جایی مثلا /mnt/ سوار کنید.
بعد محل پیکربندی گراب رو پیدا کنید. اگه روت دبیان روی /mnt/ سوار شده، مسیر اون فایل میشه این:
/mnt/boot/grub/grub.cfg
بعد هر چی set timeout یا set timeout_style هست رو تغییر بدید.
sed -i 's|set timeout=.*|set timeout=-1|g' /mnt/boot/grub/grub.cfg
sed -i 's|set timeout_style=.*|set timeout_style=menu|g' /mnt/boot/grub/grub.cfg
این دوتا دستور به احتمال زیاد باید با دسترسی روت اجرا بشن.
در نهایت فایل رو ذخیره کنید، سیستم رو راهاندازی مجدد کنید و برید توی دبیان که مشکل داره. باید منوی گراب نمایش داده بشه.
بعد اون کارهایی که گفتم رو انجام بدید.
اگه /boot/ جدا هست، نحوه کار تقریبا مثل بالاست. با این تفاوت که مسیر به پیکربندی گراب میشه این: (با این فرض که فایلسیستم مربوط، روی /mnt/ سوار شده)
/mnt/grub/grub.cfg
فقط باید همین مسیر رو توی دستورات تغییر بدید.
-
خب بالاخره از راه دور و با تماس تصویری تونستیم دستورات رو اجرا کنیم و اینم نتیجه.
به ترتیب:
/root/lib64/ld-linux-x86-64.so.2 --version
/root/lib64/ld-linux-x86-64.so.2 --library-path /root/lib/x86_64-linux-gnu:/root/lib /root/bin/ls -l /
/root/lib64/ld-linux-x86-64.so.2 --library-path /root/lib/x86_64-linuz-gnu:/root/lib /root/bin/dpkg-query --root=/root -L init-system-helpers
/root/lib64/ld-linux-x86-64.so.2 --library-path /root/lib/x86_64-linux-gnu:/root/lib /root/bin/systemctl --version
exec run-init /root /sbin/init </root/dev/console >/root/dev/console 2>&1