Làm cách nào để biết grub được cài đặt trên thiết bị?


37

Làm thế nào tôi có thể biết nếu grub được cài đặt trên đĩa và nếu đó là cài đặt nào thì nó có (đáng chú ý, nó có gì cho tham số gốc)

Tôi cần kiểm tra nhiều đĩa trong mảng RAID1 phần mềm để đảm bảo cả hai đĩa đã được cài đặt, với các grub trên mỗi đĩa có giá trị gốc thích hợp.


3
Bạn có thể xem xét để chấp nhận câu trả lời mới dưới đây? kể từ khi câu trả lời được chấp nhận đã lỗi thời
rubo77

@ rubo77, câu trả lời của tôi là đúng vào thời điểm đó, khi grub0,9x hoặc thấp hơn được sử dụng phổ biến và rất lâu trước khi nó được đổi tên thành grub-legacy. Nếu điều này làm phiền bạn, tôi khuyên bạn nên hỏi một câu hỏi mới cụ thể grub2. cách khác, tiến hành một chiến dịch sửa chữa mọi câu hỏi và câu trả lời đã trở nên lỗi thời thông qua thời gian.
cas

3
Không xúc phạm. Tôi nghĩ SO là một nền tảng kiến ​​thức và có nghĩa là sẽ thay đổi theo thời gian. Một khi câu trả lời lỗi thời nên được cập nhật.
rubo77

Câu trả lời:


28

CẬP NHẬT:

Câu trả lời này là từ năm 2009 và áp dụng cho di sản grub, không phải grub2.

Bạn có thể sử dụng fileđể xác định GRUB trong MBR. ví dụ

# file -s /dev/sda
/dev/sda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3
, stage2 address 0x2000, stage2 segment 0x200; partition 1:
ID=0xfd, starthead 1, startsector 63, 1044162 sectors; partition
2: ID=0x82, starthead 0, startsector 1044225, 1028160 sectors;
partition 3: ID=0xfd, starthead 0, startsector 2072385,
1951447680 sectors, code offset 0x48

Thông root=số không được lưu trữ trong MBR, được lưu trữ trong menu.lsttệp GRUB được lưu trữ trên một hệ thống tệp (thường là trong thư mục / boot / grub của thư mục gốc fs hoặc thư mục grub của hệ thống tập tin / boot - nhưng không phải lúc nào cũng vậy, nó có thể là bất cứ nơi nào).

Bạn sẽ phải phân tích đầu ra của tệp ở trên, xác định đĩa / phân vùng nào menu.lsttệp được bật, gắn kết, đọc nó và phân tích cú pháp. Bạn cũng sẽ muốn đọc trong tệp grub / mặc định để tìm ra mục nhập menu grub nào là mặc định, bởi vì đó có thể là mục có tham số root = mà bạn quan tâm nhất.


Trong trường hợp đó, tôi cần một cách để đảm bảo grub đang tìm kiếm menu.lst ở vị trí thích hợp ... ở đâu đó, bộ tải khởi động phải được thông báo đĩa nào và phân vùng phải đi để nó có thể nhận được menu khởi động.
DrStalker

có rất nhiều thông tin hữu ích về grub tại grub trang chủ gnu.org/software/grub , grub wiki grub.enbug.org , và tại wikipedia en.wikipedia.org/wiki/GRUB
cas

8
Điều này không còn đúng với grub2. Thay vào đó hãy xem câu trả lời của @ benrifkah.
Paul Tomblin

52

Phương pháp luân phiên

file -skhông hoạt động với tôi trong Ubuntu Lucid vì các tệp ma thuật của lệnh tệp của tôi đã hết hạn . Một cách khác để làm điều này nếu các tệp ma thuật của bạn không theo kịp các thay đổi GRUB là kiểm tra 512 byte đầu tiên của thiết bị bằng ddlệnh như sau:

user@host:~$ sudo dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings
ZRr=
`|f
\|f1
GRUB
Geom
Hard Disk
Read
 Error

Điều này sẽ gửi đầu ra của ddlệnh thông qua stringslệnh do đó tước bỏ các ký tự không thể in được (số liệu thống kê chuyển bị loại bỏ /dev/null).

Nếu bạn thấy bất kỳ thông báo nào GRUB sẽ hiển thị khi gặp sự cố thì bạn đã cài đặt grub.

Hat tip cho louib trên ubuntuforums.org để trả lời trong bài đăng được bảo vệ bằng mật khẩu này: http://ubuntuforums.org/showthread.php?t=363372

Đối với những người tò mò đây là những gì tôi nhận được từ file -s:

user@host:~$ sudo file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 20
48, 337211392 sectors; partition 2: ID=0x5, starthead 254, startsector 337215486, 1434214
6 sectors, code offset 0x63

Không có gì về GRUB trong đó cụ thể.


5
Tại chỗ trên. Câu trả lời được chấp nhận không hoạt động với tôi trên một số máy, nhưng của bạn thì có.
Cerin

13
Câu trả lời được chấp nhận đã được viết vào năm 2009 và (như rõ ràng từ việc đề cập đến menu.lst chứ không phải grub.cfg) là dành cho grub1 hay còn gọi là "grub-legacy". rõ ràng mọi thứ đã thay đổi kể từ đó và grub2 không đưa định danh vào MBR. nếu nó hoạt động trên một số máy cho bạn nhưng không phải cho máy khác, điều đó có nghĩa là bạn có grub1 trên một số và grub2 trên các máy khác.
cas

1
Cảm ơn đã làm rõ Craig. Hệ thống ban đầu tôi đã thử file -slệnh sử dụng grub-pc rõ ràng là GRUB2 nên có vẻ như bạn đã đúng một phần. Tuy nhiên, tôi đã chạy file -strên một số hệ thống khác chạy GRUB 0.97 và trên một số hệ thống hoạt động trong khi trên các hệ thống khác thì không. Sự khác biệt giữa các hệ thống này là ở các số trong các tệp ma thuật đi kèm với lệnh tệp. Hoán đổi các tập tin số ma thuật xác nhận rằng các định nghĩa từ hệ thống không hoạt động khiến hệ thống làm việc bị lỗi.
benrifkah

7

Bạn có thể sử dụng grub-emuđể xem menu mà grub sẽ hiển thị khi máy khởi động lại tiếp theo.

$ sudo apt-get install grub-emu
$ sudo grub-emu

Trên máy tính để bàn của tôi, menu được hiển thị như mong đợi, mặc dù nếu tôi thực sự giả vờ khởi động kernel, tôi đã gặp lỗi "không có thiết bị như vậy". Tôi nghĩ rằng đó là hành vi dự kiến.

Trên VPS DigitalOcean của tôi, không có mục nào được hiển thị trong menu grub, mặc dù máy chủ đã thực sự khởi động lại tốt. (Đây là VPS 2013, vì vậy số dặm của bạn có thể thay đổi.)

Một số lưu ý khi chạy grub-emu:

  • Trong X-cửa sổ, nếu bạn muốn tương tác với grub, bạn cần bạn tập trung bàn phím được trên thiết bị đầu cuối từ đó bạn chạy grub-emu, không phải trên cửa sổ đó hiện lên.
  • Bạn có thể thoát trình giả lập bằng cách nhấn crồi gõ exit.
  • Sau khi thoát, trình giả lập thiết bị đầu cuối của bạn có thể ở trạng thái kém (ví dụ Enter sẽ không hiển thị trên một dòng mới). Khắc phục điều đó bằng cách gõ reset. (Đừng lo lắng nó sẽ không khởi động lại máy của bạn. Nó sẽ dọn sạch thiết bị đầu cuối của bạn.)

ctheo sau exitkhông làm việc cho tôi.
Faheem Mitha

1
hãy chắc chắn rằng bạn tập trung vào thiết bị đầu cuối sinh ra cửa sổ grub chứ không phải cửa sổ grub (tôi mất một giây để nhận ra điều này)
Madivad
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.