Làm cách nào để kiểm tra ổ đĩa nào grub2 đã thực sự cài đặt MBR?


17

Tôi đang sử dụng hệ thống Debian / Squeeze (có lịch sử trở lại ít nhất là Woody) đã được nâng cấp lên grub2 như một phần của bản nâng cấp Squeeze. Tất cả đều hoạt động tốt, nhưng tôi sắp sửa làm hỏng cấu hình đĩa.

Hiện tại máy chạy hết 2 ổ 80 GB với phân vùng RAID1-ed /, / home và / boot (có một cặp ổ khác có RAID1-ed "/ data" và một vài lần hoán đổi, trong trường hợp bất kỳ ai cũng tự hỏi nơi trao đổi , nhưng tôi không chạm vào những cái đó).

Tôi đã thêm 2 ổ SSD 130 GB, phân vùng chúng ít nhất bằng phân vùng trên các ổ 80 GB và có ý định chuyển sang ổ SSD mới bằng cách phát triển RAID1 để bao gồm chúng, chờ đồng bộ hóa, sau đó xóa cũ ổ đĩa từ các mảng để chỉ còn lại SSD (và sau đó phát triển hệ thống tập tin). Nhưng mdadm / ext3 wrangling không phải là câu hỏi này về ...

Điều đó sẽ để lại cho tôi 2 ổ đĩa 80 GB (IDE) lỗi thời mà tôi muốn xóa khỏi máy. Lo lắng của tôi là loại bỏ chúng sẽ mang theo một số MBR quan trọng. Làm cách nào để đảm bảo máy vẫn có khả năng khởi động?

Cụ thể hơn:

  • Khi tôi thực hiện nâng cấp Squeeze, tôi nhớ có một số lựa chọn được trình bày về ổ đĩa grub2 nên cài đặt (Tôi đã đi với mặc định, đó là tất cả các ổ đĩa). Mặc dù vậy, SSD vẫn chưa có trong máy; Làm cách nào tôi có thể chạy lại cái này để cài đặt grub trên SSD MBR? (Tôi đoán đó là một cấu hình dpkg của một số gói).

  • Làm thế nào tôi có thể tìm thấy ổ đĩa grub2 nghĩ rằng nó được cài đặt trên? Thật đau buồn khi có gần 200 tệp dưới / boot / grub / những ngày này! Nhìn ở đâu? Ngoài ra, có vẻ hơi kỳ lạ khi /boot/grub/device.map.auto hiện chỉ liệt kê 3 ổ đĩa (2 trong số 80 GB nhưng chỉ có một trong các cặp ổ đĩa khác và không có ổ SSD nào). Làm thế nào để tôi có được điều đó đến nay? ( Cập nhật: đó là một cá trích đỏ; device.map.auto dường như là một di tích từ nhiều năm trước; device.map trông có vẻ hợp lý trên một bản cập nhật của grub-mkdevicemap. sắp xếp lại thứ tự thiết bị mà GRUB nhìn thấy trong một ý thích bất chợt).

Kết quả: tất cả đều ổn và hiện tại tôi đã có hai ổ IDE 80 GB cũ, và một hệ thống khởi động nhanh và gọn gàng chạy SSD RAID1-ed với tất cả các hệ thống tệp được thay đổi kích thước theo kích thước phân vùng mới của chúng. "Phần còn thiếu của câu đố Grub" mà tôi đang tìm kiếm là dpkg-reconfigure grub-pclời nhắc cho các đĩa nào để duy trì MBR. Câu trả lời của Aaron thực sự đã làm hầu hết để trấn an tôi rằng điều này đang hoạt động như mong đợi, do đó chấp nhận câu trả lời đó.

Câu trả lời:


17

MBR là 512 byte, vì vậy một cách nhanh chóng để xem GRUB có ở đó không ...

dd if=/dev/sda bs=512 count=1 | xxd

Nó bỏ MBR, tôi thấy "GRUB" trong mỏ của tôi ở byte 0x17F = 383.

dd if=/dev/sda bs=1 count=4 skip=383

Khi tôi làm điều đó, nó sẽ in ' GRUB' theo sau là ddđầu ra.

Bạn có thể gói nó trong một forvòng lặp bash hoặc một cái gì đó để đi qua nhiều ổ đĩa hơn. nếu bạn không muốn làm bằng tay.


4
Chỉ là một bổ sung nhỏ - vì vị trí của GRUB có thể thay đổi từ phiên bản này sang phiên bản khác, người ta có thể sử dụng dd if=/dev/sda bs=1 count=512 | grep -aob GRUB. Điều đó sẽ trả về vị trí của điểm đánh dấu trong khu vực khởi động.
Alessandro Santini

16

Có một số bước trong quy trình khởi động (Tôi đang mô tả BIOS PC truyền thống):

  1. BIOS đọc sector đầu tiên (512 byte) của đĩa khởi động.
  2. Mã trong khu vực đầu tiên này đọc thêm dữ liệu và mã tại một vị trí cố định thông qua giao diện BIOS. Giao diện BIOS này chỉ hiển thị hai đĩa cứng: đĩa 0 là bất cứ nơi nào khu vực đầu tiên được đọc và đĩa 1 là một đĩa khác không dễ dự đoán nếu bạn có nhiều hơn hai. Khu vực khởi động chứa một byte cho biết đĩa cứng nào được bật thêm dữ liệu; đây là đĩa chứa /boot/grub.
  3. Mã được tải ở giai đoạn trước hiểu các phân vùng, hệ thống tệp và các khái niệm cấp cao khác. Dữ liệu bao gồm một vị trí hệ thống tập tin (tức là một chuỗi như (hd0)/boot/grub) xác định nơi tìm grub.cfgvà thêm các mô-đun Grub.
  4. grub.cfg được thực thi, thường để hiển thị menu và khởi động HĐH.

Khu vực khởi động được tạo bởi grub-setup, thường được gọi thông qua grub-install. Khu vực khởi động kết thúc trên bất kỳ đĩa nào bạn đã chỉ định (theo cú pháp Linux) trên dòng lệnh grub-installhoặc grub-setup. Bạn có thể kiểm tra xem bạn có khu vực khởi động trên đĩa bằng cách chạy không file -s /dev/sda. Vì bạn đang thêm một đĩa mới và muốn khởi động từ nó, bạn cần chạy grub-installtrên đĩa mới. Chạy grub-installnhiều lần trên cùng một đĩa là vô hại.

Phần khó là ở bước 2 ở trên. Nếu có thể, hãy đặt Grub (tức là /boot/grubthư mục) vào đĩa khởi động BIOS (hoặc, tiếp cận điều này từ hướng khác, báo cho BIOS của bạn khởi động từ đĩa ở đâu /boot/grub). Đây là nơi device.mapđi vào chơi. Đảm bảo rằng (hd0)ánh xạ tới đĩa chứa /boot/grub, sau đó chạy grub-installtrên đĩa đó.

Nếu hai đĩa của bạn có cấu hình RAID-1 phần mềm, bạn sẽ có các cung khởi động giống hệt nhau. Đây là hành vi mong muốn: nếu một đĩa là đĩa khởi động BIOS bị lỗi, việc khởi động từ đĩa kia sẽ chỉ hoạt động (vì chúng chứa cùng một byte tại cùng một vị trí có liên quan). Nếu bạn chỉ nhân đôi một số phân vùng nhất định, thì việc cài đặt một phần khởi động chỉ ảnh hưởng đến một trong các đĩa. Bạn nên chạy grub-installlại trên đĩa thứ hai, sau khi thay đổi device.mapđể liên kết (hd0)với đĩa chứa bản sao nhân đôi thứ hai của /boot/grub.

Bước 3 là khá phức tạp, nhưng thường hoạt động ra khỏi hộp. Ở bước 4, Grub định vị các hệ thống tệp bằng UUID hoặc tìm kiếm các tệp được đặt tên, do đó bạn không còn phải lo lắng về các cách khác nhau để chỉ định đĩa.

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.