`install-grub` tuyên bố rằng tôi có nhiều nhãn partiton và việc nhúng là không thể


19

Tôi đang cố gắng cài đặt GRUB trên máy tính để bàn không khởi động, nhưng tôi gặp phải một số lỗi. Các nguồn khác thảo luận về các lỗi này đã quy cho chúng là thiếu không gian đĩa trống trước phân vùng đầu tiên (tôi có không gian trống cần thiết) hoặc có vấn đề với /boot/grub/grub.cfg(vấn đề vẫn tồn tại ngay cả sau khi tạo lại tệp đó một cách chính xác).

Tôi đã khởi động với USB trực tiếp và cố gắng cài đặt lại GRUB bằng các lệnh sau, nhưng tôi gặp phải một lỗi khiến nó không hoạt động:

$ sudo gắn kết / dev / sda1 / mnt
$ sudo grub-install --root-thư mục = / mnt / dev / sda
Cài đặt cho nền tảng i386-pc.
grub-install: cảnh báo: Cố gắng cài đặt GRUB vào đĩa có nhiều nhãn phân vùng. Điều này chưa được hỗ trợ ..
grub-install: cảnh báo: Không thể nhúng. GRUB chỉ có thể được cài đặt trong thiết lập này bằng cách sử dụng danh sách chặn. Tuy nhiên, danh sách chặn là KHÔNG GIỚI HẠN và việc sử dụng chúng không được khuyến khích ..
grub-install: error: sẽ không tiến hành với danh sách chặn.

Tuy nhiên, /dev/sdadường như được định dạng chính xác để cài đặt grub:

$ sudo fdisk -l / dev / sda

Đĩa / dev / sda: 111,8 GiB, 120034123776 byte, 234441648 ngành
Đơn vị: các lĩnh vực 1 * 512 = 512 byte
Kích thước ngành (logic / vật lý): 512 byte / 512 byte
Kích thước I / O (tối thiểu / tối ưu): 512 byte / 512 byte
Loại đĩa: dos
Định danh đĩa: 0x8d91017b

Khởi động thiết bị Kết thúc mục Kích thước Loại Id
/ 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"

Nó có không gian trống 1 MiB tiêu chuẩn ngay từ đầu và /dev/sda1được định dạng chính xác. Tôi đã thử sử dụng grub-mkconfigđể xây dựng lại tập tin cấu hình:

$ cho f trong Proc sys dev dev / pts; làm sudo mount --bind / $ f / mnt / $ f; làm xong
$ sudo chroot / mnt
# grub-mkconfig -o /boot/grub/grub.cfg
Tạo tập tin cấu hình grub ...
Tìm thấy hình ảnh linux: /boot/vmlinuz-3.19.0-26-generic
Tìm thấy hình ảnh initrd: /boot/initrd.img-3.19.0-26-generic
Tìm thấy hình ảnh linux: /boot/vmlinuz-3.19.0-23-generic
Tìm thấy hình ảnh initrd: /boot/initrd.img-3.19.0-23-generic
Thêm mục nhập menu khởi động cho cấu hình phần sụn EFI
làm xong

Tuy nhiên, tôi vẫn nhận được thông báo lỗi tương tự khi chạy grub-install, cho dù trong hay ngoài chrootmôi trường.

Khởi động USB trực tiếp ở chế độ cũ, tôi cũng gặp lỗi tương tự; sự khác biệt duy nhất là đầu ra của việc chạy grub-mkconfigtrong chrootmôi trường:

# grub-mkconfig -o /boot/grub/grub.cfg
Tạo tập tin cấu hình grub ...
Tìm thấy hình ảnh linux: /boot/vmlinuz-3.19.0-26-generic
Tìm thấy hình ảnh initrd: /boot/initrd.img-3.19.0-26-generic
Tìm thấy hình ảnh linux: /boot/vmlinuz-3.19.0-23-generic
Tìm thấy hình ảnh initrd: /boot/initrd.img-3.19.0-23-generic
Đã tìm thấy memtest86 + hình ảnh: /boot/memtest86+.elf
Đã tìm thấy memtest86 + hình ảnh: /boot/memtest86+.bin
Đã tìm thấy Windows 7 (trình tải) trên / dev / sdc1
làm xong

Làm thế nào tôi có thể cài đặt grub chính xác?

Câu trả lời:


25

Nuke khoảng cách giữa khu vực khởi động và phân vùng đầu tiên.

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

Đó là nếu phân vùng đầu tiên bắt đầu ở sector 2048. Một số bắt đầu sớm hơn, đặc biệt là trên các ổ đĩa được phân vùng bởi Windows. Để chắc chắn, hãy chạy

# fdisk -l /dev/sdX

trước khi bắt đầu và kiểm tra xem phân vùng đầu tiên bắt đầu từ đâu. Sử dụng count=S-1, trong đó S là bắt đầu của phân vùng đầu tiên.


Điều này làm việc cho tôi. Tôi đang cố gắng sử dụng BTRFS dọc theo phân vùng ext4 / boot riêng. Cảm ơn.
Thales Ceolin

Lưu ý rằng điều này sẽ bỏ qua bố cục GPT. Nó có thể phục hồi từ bản sao lưu của nó mặc dù.
CR.

nếu bạn đang sử dụng GPT thì bạn cần xóa PHẦN MỀM BIOS BOOT. Trường hợp đó phụ thuộc vào cách bạn đặt đĩa của bạn. Tôi đặt của tôi sau GPT, giữa khối 34 và 2047, giả sử phân vùng "thực" đầu tiên bắt đầu ở khối 2048. Sửa đổi dòng lệnh đã cho để sử dụng seek=34 count=2014cho tôi.
starfry

hoạt động hoàn hảo !!!! grub nên tự động làm điều đó
brauliobo

1
Vâng, bạn sẽ nghĩ như vậy, @bAFiobo, nhưng GRUB là tổng rác. Tôi thậm chí không sử dụng nó nữa. Những ngày này, tôi sử dụng syslinux cho mbr và systemd-boot cho gpt.
enigmaticPhysicist

3

Người ta có thể tạo một phân vùng mới trong đó bản ghi GPT, sau đó xóa sạch nó bằng cách sử dụng dd. Bằng cách đó, chỉ bản ghi MBR sẽ vẫn còn.

Giả sử thiết bị có vấn đề là /dev/sda:

Tạo phân vùng mới trong 1 MiB ban đầu

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

Sau đó, zero phân vùng vừa tạo

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

Sau đó, xóa phân vùng

$ parted /dev/sda
$ rm 2
$ quit

grub-install Bây giờ nên làm việc như mong đợi.


Vui lòng chỉnh sửa câu trả lời của bạn để chứng minh mã này làm gì và tại sao bạn tin rằng đó là một giải pháp.
Martin Thornton

Đã làm cho tôi. Chỉnh sửa nó cho rõ ràng
Nitz

3

Có một vấn đề tương tự với nhiều nhãn phân vùng, mặc dù tôi khá chắc chắn rằng đó không phải là trường hợp.

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

là những gì tôi đã sử dụng để có được xung quanh này. Xử lý một vấn đề --forcekhông phải là một giải pháp "được đề xuất", nhưng tôi không có vấn đề gì cho đến nay = P


1

Đây là những gì tôi đã làm nó làm cho nó hoạt động trở lại:

Được sử dụng gdiskđể chuyển đổi phân vùng MBR thành GPT, chèn một phân vùng vào khoảng trống (gõ "Phân vùng khởi động BIOS" của EF02), chuyển mục nhập của nó với phân vùng ban đầu của tôi và gắn cờ là khả năng khởi động BIOS kế thừa.

Sau đó chạy

$ sudo gắn kết / dev / sda1 / mnt
$ sudo grub-install --root-thư mục = / mnt / dev / sda

Sau đó nó được cài đặt thành công và tôi có thể khởi động vào ổ đĩa chính của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.