ฉันจะเรียกใช้บูตโหลดเดอร์ใหม่ได้อย่างไร?


150

วิ่งsudo apt-get -f installบอกว่าThe link /vmlinuz.old is a damaged linkและ:

you may need to re-run your boot loader[grub]

นี่คือผลลัพธ์เต็มรูปแบบ:

user@chrubuntu:~$ sudo apt-get -f install
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.13.0-32 linux-headers-3.13.0-32-generic
  linux-image-3.13.0-32-generic linux-image-extra-3.13.0-32-generic
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
user@chrubuntu:~$ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-3.13.0-32 linux-headers-3.13.0-32-generic
  linux-image-3.13.0-32-generic linux-image-extra-3.13.0-32-generic
0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
After this operation, 270 MB disk space will be freed.
Do you want to continue? [Y/n] y
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = "en
en",
    LC_ALL = (unset),
    LC_TIME = "en",
    LC_MONETARY = "en",
    LC_ADDRESS = "en",
    LC_TELEPHONE = "en",
    LC_NAME = "en",
    LC_MEASUREMENT = "en",
    LC_IDENTIFICATION = "en",
    LC_NUMERIC = "en",
    LC_PAPER = "en",
    LANG = (unset)
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory
(Reading database ... 232120 files and directories currently installed.)
Removing linux-headers-3.13.0-32-generic (3.13.0-32.57) ...
Removing linux-headers-3.13.0-32 (3.13.0-32.57) ...
Removing linux-image-extra-3.13.0-32-generic (3.13.0-32.57) ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.13.0-32-generic /boot/vmlinuz-3.13.0-32-generic
update-initramfs: Deleting /boot/initrd.img-3.13.0-32-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.13.0-32-generic /boot/vmlinuz-3.13.0-32-generic
The link /initrd.img.old is a damaged link
Removing symbolic link initrd.img.old 
 you may need to re-run your boot loader[grub]
Removing linux-image-3.13.0-32-generic (3.13.0-32.57) ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.13.0-32-generic /boot/vmlinuz-3.13.0-32-generic
update-initramfs: Deleting /boot/initrd.img-3.13.0-32-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.13.0-32-generic /boot/vmlinuz-3.13.0-32-generic
The link /vmlinuz.old is a damaged link
Removing symbolic link vmlinuz.old 
 you may need to re-run your boot loader[grub]
user@chrubuntu:~$

ฉันจะเรียกใช้บูตโหลดเดอร์ใหม่ได้อย่างไร?


2
ฉันได้รับปัญหาเดียวกันเมื่อฉันใช้apt-get autoremoveแต่เป็น Eliah Kagan กล่าวว่าในด้วงคำตอบของเขาดูเหมือนว่าจะทำงานได้ดีในการรีบูต
มาร์ค Mikofski

คำตอบ:


189

ตามคำตอบ womble ของการเสียหาย / vmlinuz และ /initrd.img เชื่อมโยงสัญลักษณ์หลังจากถอนการติดตั้ง Kernel (บนเซิร์ฟเวอร์ Fault ) คุณไม่ต้องทำอะไรในสถานการณ์เช่นนี้เมื่อบูตของคุณด้วง / GRUB2 ซึ่งมันเป็นที่นี่

สำหรับบูตโหลดเดอร์ตัวอื่น ๆ (อย่างน้อยLILO ) บางครั้งมันก็ / เห็นได้ชัดว่าจำเป็นต้องเรียกใช้การกำหนดค่าของบูตโหลดเดอร์ด้วยตนเอง

หากคุณไม่ต้องการบอก GRUB ให้ตรวจสอบเมล็ดที่มีอยู่และอัปเดตการกำหนดค่าการทำงานsudo update-grubจะทำเช่นนั้น และไม่มีอันตรายใด ๆ ในการทำงาน แต่ไม่จำเป็นในกรณีนี้


โอเคฉันขับไล่พวกเขาไปเจ้า
TevinYoungz

3
@TevinYoungz ไม่เป็นไร sudo update-grubไม่ควรทำอันตรายใด ๆ
Eliah Kagan

5
คำว่า "บางครั้ง" เป็นการพูดที่น้อยไป
Simon Richter

9
ในความคิดที่ว่าข้อผิดพลาดคู่นี้และการแก้ไขสามารถรับรางวัลสำหรับข้อผิดพลาดการออกแบบที่โง่ที่สุด: มีคำสั่ง grub ที่ชื่อupdate-grubแทนที่จะgrub-updateเป็นตรรกะและล้มเหลวในการระบุการแก้ไข (คำสั่ง) ที่ทำงานใน 99.99% ของกรณี
sorin

@ โซรินฉันสงสัยว่ามีรายงานข้อผิดพลาดอะไรบ้าง
Mateusz Konieczny

31

ข้อผิดพลาดเป็นบิตแปลกในกรณีของด้วง

เมื่อ apt ติดตั้ง kernel-version ใหม่มันจะย้าย / vmlinuz และ /initrd.img ไปที่ /vmlinuz.old และ /initrd.img.old (ซึ่งจะยังคงชี้ไปที่เคอร์เนลที่ใช้งานอยู่ในปัจจุบันอีกครั้งสังเกตว่านามสกุล. old ซึ่งแตกต่างจากเรื่องราวที่ลิงก์ใน "ลิงก์ที่เสียหายหลังจากถอนการติดตั้งเคอร์เนล") และสร้างไฟล์ใหม่สองไฟล์ / vmlinuz /initrd.img

เมื่อคุณเรียกใช้apt-get autoremove(ข้อความที่ไม่ได้ถูกสร้างขึ้นโดยapt-get -f install) มันจะลบเคอร์เนลที่ใช้งานก่อนหน้านี้ (คุณรีบูตหลังจากติดตั้งก่อนที่จะเรียกใช้ autoremove ใช่ไหม?) ซึ่งทำให้ลิงค์ไม่ถูกต้อง

เมื่อลบเคอร์เนลเสร็จแล้ว autoremove เองจะเรียกใช้ update-grub:

run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.13.0-32-generic /boot/vmlinuz-3.13.0-32-generic

ดังนั้น:

The link /vmlinuz.old is a damaged link
Removing symbolic link vmlinuz.old 
 you may need to re-run your boot loader[grub]

ดังนั้นระบบตอบกลับอัตโนมัติจะทำ:

  1. ลบเคอร์เนลเก่า
  2. เรียกใช้ update-grub
  3. update-grub จะลบไฟล์. old ที่เชื่อมโยงกับไฟล์ที่ถูกลบ

ไม่มีอะไรต้องกังวล :-)

ความนับถือ.


2
จะทำอย่างไรถ้าคุณไม่รีบูตหลังจากอัปเกรดครั้งสุดท้าย แล้วไง? ฉันไม่รีบูท นั่นคือสำหรับ newbs
Evan Carroll

2
ไม่มีวิธีที่จะทำให้เคอร์เนลใหม่เข้าสู่หน่วยความจำจนกว่าคุณจะรีบูต
simpleuser

นอกจากนี้ควรทราบว่าคุณได้/vmlinuz&& /initrd.imgเชื่อมโยงไปยังพื้นที่เคอร์เนล (ปกติ / บูต) ก่อนที่คุณจะรีบูต ในฐานะที่เป็นคำตอบคำตอบ - ลิงก์ที่เสียหายของไฟล์ ".old" นั้นไม่ต้องกังวลอะไร โหวต ^
bshea

12

$ sudo update-grub

และถ้าคุณต้องการลบ / ล้างแพ็คเกจเก่าคุณสามารถทำได้

$ dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge


หากคุณมีภาพ 3.X เพียงอย่างเดียวคุณจะลบทุกอย่างใช่ไหม?
HarkályGergő

ในทางเทคนิคคำสั่งแรกของคุณตอบคำถาม ไม่มีเหตุผลที่จะเพิ่มเพิ่มเติมเกี่ยวกับการบำรุงรักษา pkg
bshea
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.