`install-grub 'อ้างว่าฉันมีฉลากหลายอันและการฝังเป็นไปไม่ได้


19

ฉันกำลังพยายามติดตั้ง GRUB บนคอมพิวเตอร์เดสก์ท็อปที่ไม่ใช่การบูต แต่ฉันพบข้อผิดพลาดหลายประการ แหล่งข้อมูลอื่นที่กล่าวถึงข้อผิดพลาดเหล่านี้ได้กำหนดให้พวกเขาขาดพื้นที่ว่างในดิสก์ก่อนพาร์ติชันแรก (ฉันมีพื้นที่ว่างที่จำเป็น) หรือมีปัญหา/boot/grub/grub.cfg(ปัญหายังคงอยู่แม้จะสร้างไฟล์นั้นอย่างถูกต้องแล้วก็ตาม)

ฉันบูตด้วย USB สดและพยายามติดตั้ง GRUB ใหม่โดยใช้คำสั่งต่อไปนี้ แต่ฉันพบข้อผิดพลาดที่ทำให้ไม่สามารถทำงานได้:

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda
การติดตั้งสำหรับแพลตฟอร์ม i386-pc
คำเตือนการติดตั้ง grub-install: ความพยายามในการติดตั้ง GRUB ลงในดิสก์ที่มีหลายพาร์ติชั่นเลเบล ยังไม่รองรับ ..
grub-install: warning: ไม่สามารถทำการฝังได้ ด้วงสามารถติดตั้งได้ในการตั้งค่านี้โดยใช้รายการบล็อก อย่างไรก็ตามบล็อกลิสต์นั้นไม่น่าเชื่อถือและการใช้งานนั้นไม่ได้รับการสนับสนุน ..
grub-install: error: จะไม่ดำเนินการกับรายการบล็อก

อย่างไรก็ตาม/dev/sdaดูเหมือนว่าจะมีรูปแบบที่ถูกต้องสำหรับการติดตั้งด้วง:

$ sudo fdisk -l / dev / sda

ดิสก์ / dev / sda: 111.8 GiB, 120034123776 ไบต์, 234441648 ภาค
หน่วย: ส่วนของ 1 * 512 = 512 ไบต์
ขนาดเซกเตอร์ (ตรรกะ / กายภาพ): 512 ไบต์ / 512 ไบต์
ขนาด I / O (ต่ำสุด / เหมาะสมที่สุด): 512 ไบต์ / 512 ไบต์
ประเภท Disklabel: dos
ตัวระบุดิสก์: 0x8d91017b

การเริ่มต้นการบูตอุปกรณ์ประเภทขนาดรหัสภาคส่วนท้าย
/ dev / sda1 * 2048 234440703 234438656 111.8G 83 Linux

$ blkid / dev / sda1
/ dev / sda1: UUID = "84e9ff65-c4ba-42eb-8a6d-ebc703fae1f7" TYPE = "ext4" PARTUUID = "8d91017b-01"

มีพื้นที่ว่าง 1 MiB มาตรฐานในตอนเริ่มต้นและ/dev/sda1มีการจัดรูปแบบอย่างถูกต้อง ฉันได้ลองใช้grub-mkconfigเพื่อสร้างไฟล์ปรับแต่งใหม่:

$ สำหรับ f ใน proc sys dev dev / pts; ทำ sudo mount - ผูก / $ f / mnt / $ f; เสร็จแล้ว
$ sudo chroot / mnt
# grub-mkconfig -o /boot/grub/grub.cfg
กำลังสร้างไฟล์การกำหนดค่าด้วง ...
พบภาพของ linux: /boot/vmlinuz-3.19.0-26-generic
พบภาพ initrd: /boot/initrd.img-3.19.0-26-generic
พบภาพของลินุกซ์: / boot / vmlinuz-3.19.0-23-generic
พบภาพ initrd: /boot/initrd.img-3.19.0-23-generic
การเพิ่มรายการเมนูบูตสำหรับการกำหนดค่าเฟิร์มแวร์ของ EFI
เสร็จแล้ว

อย่างไรก็ตามฉันยังคงได้รับข้อความแสดงข้อผิดพลาดเดียวกันเมื่อทำงานgrub-installไม่ว่าจะเข้าหรือออกจากchrootสภาพแวดล้อม

การบูต Live USB ในโหมดดั้งเดิมฉันได้รับข้อผิดพลาดเดียวกัน ข้อแตกต่างคือผลลัพธ์ของการทำงานgrub-mkconfigในchrootสภาพแวดล้อม:

# grub-mkconfig -o /boot/grub/grub.cfg
กำลังสร้างไฟล์การกำหนดค่าด้วง ...
พบภาพของ linux: /boot/vmlinuz-3.19.0-26-generic
พบภาพ initrd: /boot/initrd.img-3.19.0-26-generic
พบภาพของลินุกซ์: / boot / vmlinuz-3.19.0-23-generic
พบภาพ initrd: /boot/initrd.img-3.19.0-23-generic
พบ memtest86 + ภาพ: /boot/memtest86+.elf
พบ memtest86 + ภาพ: /boot/memtest86+.bin
พบ Windows 7 (ตัวโหลด) บน / dev / sdc1
เสร็จแล้ว

ฉันจะติดตั้งด้วงได้อย่างไร

คำตอบ:


25

Nuke ช่องว่างระหว่างบูตเซกเตอร์และพาร์ติชันแรก

# dd if=/dev/zero of=/dev/sdX seek=1 count=2047

สำหรับพาร์ติชันแรกนั้นเริ่มต้นที่เซกเตอร์ 2048 บางอันเริ่มต้นก่อนหน้านี้โดยเฉพาะอย่างยิ่งในไดรฟ์ที่แบ่งพาร์ติชันโดย Windows เพื่อความแน่ใจให้เรียกใช้

# fdisk -l /dev/sdX

ก่อนที่จะเริ่มต้นและตรวจสอบเพื่อดูว่าพาร์ทิชันแรกเริ่ม ใช้count=S-1โดยที่ S คือจุดเริ่มต้นของพาร์ติชันแรก


สิ่งนี้ใช้ได้สำหรับฉัน ฉันพยายามใช้ BTRFS ตามพาร์ติชั่น ext4 / boot แยกต่างหาก ขอบคุณ
Thales Ceolin

โปรดทราบว่านี่จะทำให้รูปแบบ GPT เป็นขยะ เป็นไปได้ที่จะกู้คืนจากการสำรองข้อมูล
ซีอาร์

หากคุณกำลังใช้ GPT คุณจำเป็นต้องล้าง BIOS BOOT PARTITION ขึ้นอยู่กับว่าคุณวางดิสก์ไว้อย่างไร ฉันวางระเบิดหลังจาก GPT ระหว่างบล็อก 34 และ 2047 โดยสมมติว่าพาร์ติชัน "ของจริง" แรกเริ่มต้นที่บล็อก 2048 การแก้ไขบรรทัดคำสั่งที่กำหนดเพื่อใช้seek=34 count=2014งานได้สำหรับฉัน
starfry

ทำงานได้อย่างสมบูรณ์แบบ !!!! ด้วงควรทำโดยอัตโนมัติแม้ว่า
brauliobo

1
ใช่คุณคิดอย่างนั้น @brauliobo แต่ GRUB เป็นขยะทั้งหมด ฉันไม่ได้ใช้มันอีกแล้ว วันนี้ฉันใช้ syslinux สำหรับ mbr และ systemd-boot สำหรับ gpt
ปริศนานักฟิสิกส์

3

หนึ่งสามารถสร้างพาร์ทิชันใหม่ที่บันทึก GPT ddเป็นแล้วเช็ดโดยใช้ ด้วยวิธีนี้จะมีเพียงระเบียน MBR เท่านั้น

สมมติว่าอุปกรณ์มีปัญหาคือ/dev/sda:

สร้างพาร์ติชันใหม่ใน 1 MiB เริ่มต้น

$ parted /dev/sda
$ mkpart primary ext4 0MiB 1MiB
$ quit

จากนั้นให้สร้างพาร์ติชันใหม่เป็นศูนย์

$ dd if=/dev/zero of=/dev/sda2

จากนั้นลบพาร์ติชัน

$ parted /dev/sda
$ rm 2
$ quit

grub-install ควรทำงานตามที่คาดไว้


โปรดแก้ไขคำตอบของคุณเพื่อพิสูจน์ว่ารหัสนี้ทำอะไรและทำไมคุณถึงเชื่อว่ามันเป็นทางออก
Martin Thornton

ทำงานให้ฉัน แก้ไขเพื่อความชัดเจน
Nitz

3

มีปัญหาที่คล้ายกันกับป้ายชื่อพาร์ติชันหลาย ๆ ตัวถึงแม้ว่าฉันค่อนข้างแน่ใจว่าไม่ใช่ในกรณีนี้

sudo grub-install target=i386-pc /dev/sda --force

คือสิ่งที่ฉันเคยได้รับรอบนี้ การตรึงบน a --forceไม่ใช่วิธีแก้ปัญหา "แนะนำ" แต่ฉันไม่มีปัญหาจนถึงตอนนี้ = P


1

นี่คือสิ่งที่ฉันทำที่ทำให้มันทำงานอีกครั้ง:

มือสอง gdiskในการแปลงพาร์ติชัน MBR เป็น GPT แทรกพาร์ติชันลงในพื้นที่ว่าง (ประเภท EF02 "BIOS Boot partition") ย้ายรายการด้วยพาร์ติชั่นดั้งเดิมของฉันและตั้งค่าสถานะเป็น BIOS ดั้งเดิมที่สามารถบู๊ตได้

จากนั้นก็วิ่ง

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda

ติดตั้งสำเร็จแล้วและฉันสามารถบูตไปที่ไดรฟ์หลักได้

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