Linux / xBSD đã khởi động như thế nào trước GRUB?


23

Theo Wikipedia , GRUB được phát hành vào năm 1995. Đến thời điểm đó, Linux và xBSD đã tồn tại được vài năm. Tôi biết các phiên bản Unix đầu tiên được gắn với phần cứng trong những năm 70 và 80, nhưng Linux và xBSD được phân phối và cài đặt miễn phí. Điều này đặt ra câu hỏi làm thế nào bạn khởi động Linux trở lại? Phân phối có được vận chuyển với việc triển khai bộ nạp khởi động của riêng họ không?


32
Umm ... Bạn không có mặt khi LILO là trình tải khởi động Linux duy nhất? Và tôi chưa bao giờ sử dụng LILO hay Grub trên các hệ thống BSD của mình. Bạn quan tâm đến cái nào? Xem ví dụ biosboot(8).
Kusalananda

8
@Kusalananda Thật không may, tôi quan tâm nhiều hơn đến đồ chơi và vẽ Ninja Rùa hơn là đường ống, thực thi và đạn pháo sau đó :) Tôi quan tâm đến lịch sử chung, không phải là bộ nạp khởi động cụ thể. Từ trang bạn đã liên kết, tôi thấy OpenBSD có biosboothai kiến ​​trúc, i386 và amd64. Điều đó có nghĩa là OpenBSD đặc biệt phải nhắm mục tiêu các kiến ​​trúc thay vì có một công cụ thống nhất?
Sergiy Kolodyazhnyy

1
Bộ tải khởi động giai đoạn đầu sẽ khác nhau đối với mỗi kiến ​​trúc (chỉ có i386 và amd64 có BIOS "bios"). Hãy xem NetBSD nếu bạn quan tâm đến các kiến ​​trúc kỳ lạ hơn PC tiêu chuẩn không có thật.
Kusalananda

3
@Kusalananda Tôi không nghĩ LILO là trình tải khởi động Linux duy nhất. Theo như tôi biết, trình tải được tích hợp trong ảnh kernel có trước LILO và do thời gian hỗ trợ cho trình nạp tích hợp đã bị ngừng, có ít nhất một số bộ tải khởi động khác xung quanh.
kasperd

2
LILO là bộ tải khởi động mặc định cho rất nhiều bản phân phối cho đến đầu những năm 2000
phuclv

Câu trả lời:


51

Bản phân phối Linux đầu tiên tôi sử dụng từ những năm 90 ( Slackware 3.0IIRC) đã sử dụng LILO làm bộ tải khởi động. Và nhiều bản phân phối được sử dụng LILOtrong nhiều năm ngay cả khi GRUBđang trở thành bộ tải khởi động "mặc định".

Hơn nữa, trong những năm đầu của Linux, người ta thường khởi động Linux từ một hệ điều hành khác (ví dụ như DOS hoặc Windows) thay vì dựa vào bộ tải khởi động / khởi động kép. Ví dụ, có loadlin .

Đừng quên Syslinux , một trình tải khởi động đơn giản hơn thường được sử dụng cho các bản cài đặt / khôi phục tự khởi động USB. Hoặc Isolinux (từ cùng một dự án) được sử dụng bởi nhiều bản phân phối "Live".

Hãy nhớ rằng ngày nay GRUBcó thể được sử dụng để tải nhiều hệ điều hành, trong khi LILOhạn chế hơn và được nhắm mục tiêu cụ thể vào Linux (ví dụ LInux LOader), với một số hỗ trợ để khởi động kép vào Windows.
GRUBrất hữu ích cho việc khởi động kép / đa vì có nhiều tùy chọn cấu hình, khả năng tạo tập lệnh, v.v ...
Nếu bạn chỉ muốn một hệ điều hành duy nhất trên máy của mình "bất kỳ" (tức là bất kỳ trình tải khởi động nào là mặc định cho bản phân phối Linux / BSD của bạn) đủ.


5
@MrShunz: hồi đó không có UEFI. Cửa sổ khởi động chỉ là vấn đề của việc thêm một mục nhập của ví dụ other=/dev/hda1với table=/dev/hdatới lilo.conf, và lilo sẽ chỉ chuyển giao quyền kiểm soát đối với khu vực khởi động tại hda1, biết bảng phân vùng sẽ có mặt tại hda.
ninjalj

2
Bạn đã từng có thể có được NTLDR để tải LILO; xem jaeger.morpheus.net/linux/ntldr.php ; Tôi phát hiện ra một cách độc lập, trở lại trong ngày.
Roger Lipscombe

2
Nhược điểm của phương pháp LILO là nó bị hỏng nếu vị trí đĩa của các tệp cần tải thay đổi. Cụ thể, điều này có nghĩa là LILO cần phải được ghi lại vào vị trí khởi động (MBR hoặc phân vùng khởi động phân vùng) sau mỗi lần nâng cấp kernel.
cắm vào

1
@plugwash: GRUB có cùng vấn đề với tệp giai đoạn thứ hai của nó. Sự khác biệt ở đây là 1) "giai đoạn thứ hai" của LILO kernel, do đó, đó là các cập nhật kernel, không phải các cập nhật LILO đã phá vỡ mọi thứ; và 2) Các bản cập nhật GRUB bao gồm tự động viết lại vị trí của giai đoạn thứ hai sang MBR (với giai đoạn thứ hai sau đó tải kernel Linux, với kiến ​​thức đầy đủ về hệ thống tệp để vị trí kernel không thành vấn đề). ;-)
DevSolar

1
IIRC grub sẽ lưu trữ "giai đoạn 1.5" để hiểu hệ thống tệp giữa MBR và phân vùng đầu tiên và sẽ chỉ lưu trữ một tham chiếu đến các lĩnh vực hệ thống tệp cụ thể nếu không có chỗ cho giai đoạn 1.5 (hoặc nếu nó được cài đặt một khu vực khởi động phân vùng chứ không phải MBR)
plugwash

28

LILO là tiêu chuẩn thực tế để khởi động Linux trên PC trước Grub, từ giai đoạn rất sớm (MCC, một trong những bản phân phối Linux đầu tiên, đã sử dụng nó). Nhiều bộ tải khởi động khác đã được sử dụng cùng lúc. Loadlin khá phổ biến; nó đã khởi động Linux từ DOS và thậm chí còn được sử dụng trong một số cấu hình umsdosđể lưu trữ môi trường Linux trong hệ thống tệp DOS ... Một cấu hình phổ biến khác không liên quan đến bộ tải khởi động: kernel có thể tự khởi động từ đĩa mềm và hầu hết Người dùng Linux đã giữ một cặp đĩa mềm khởi động và bộ đệm gốc nổi tiếng, một bộ chứa kernel, hệ thống tập tin gốc cơ bản khác cho mục đích giải cứu.

Có một số cách sử dụng bộ tải khởi động của các hệ điều hành khác để khởi động Linux; ví dụ: trình quản lý khởi động của OS / 2 hoặc NTLDR của Windows NT.

Các hệ thống khác có bộ tải khởi động riêng:

  • SILO trên SPARC (máy trạm mặt trời và những người khác);
  • PALO trên PA-RISC (máy trạm HP);
  • YaBoot và Quik trên PowerPC;
  • aBoot và MILO trên Alpha ...

Ngay cả ngày nay Grub không phải là bộ tải khởi động duy nhất bạn sẽ thấy. Mặc dù việc khởi động kernel trực tiếp từ đĩa mềm không còn rất hữu ích nữa sở hữu hệ điều hành nhỏ được thiết kế để tải các hệ điều hành khác, như Grub). Trên nhiều hệ thống nhỏ hơn (hệ thống nhúng, máy tính bảng đơn ...) bạn sẽ tìm thấy U-Boot . (Và cũng có một lớp EFI cho U-Boot .)


Kiến trúc PowerPC cũng thú vị vì một số bo mạch chủ có BIOS hoàn chỉnh Turing - Openfirmware (về cơ bản là ngôn ngữ lập trình Forth với một số chức năng được cài đặt sẵn). Điều này cho phép khởi động trực tiếp từ BIOS mà không cần bộ tải khởi động nếu bạn biết cách định cấu hình BIOS của mình
slebetman

Này, chỉ tò mò thôi, NTLDR có thể tải kernel linux trực tiếp không? Tôi nghe nói rằng NTLDR có thể chainloader grub4dos và sau đó tải kernel linux.
炸鱼 薯条

@slebetman: Chính xác hơn, OpenFirmware được Sun phát triển cho SPARC và sau đó được liên minh PowerPC (IBM, Apple, Motorola) áp dụng cho Kiến trúc tham chiếu PowerPC và cụ thể là Apple cho Macintosh dựa trên PowerPC. Một trong những khía cạnh mạnh mẽ là các trình điều khiển đơn giản có thể được lưu trữ bên trong chip ROM trên thẻ mở rộng hoặc trong một số khu vực khởi động được chỉ định của ổ cứng, và vì chúng được viết bằng mã byte đối với ABI đã chỉ định, chúng sẽ hoạt động bất kể CPU nào kiến trúc và hệ điều hành bạn đang cố khởi động.
Jörg W Mittag

Ví dụ: bạn có thể có bộ điều hợp RAID có trình điều khiển OpenFirmware bên trong chip ROM, sau đó môi trường OpenFirmware có thể sử dụng trình điều khiển đó để truy cập RAID, bên trong RAID, có thể có trình điều khiển khác cho định dạng bảng phân vùng, cho phép môi trường OFW để tìm các phân vùng, ở đầu mỗi phân vùng sẽ là trình điều khiển OFW cho hệ thống tập tin, cho phép hệ thống OFW tìm thấy kernel và kernel sẽ có một bộ tải khởi động nhỏ được viết bằng mã byte OFW ở đầu.
Jörg W Mittag

GRUB có thể hoạt động theo cách tương tự, nhưng điểm khác biệt là tất cả các trình điều khiển đó phải được viết riêng cho GRUB, trong khi cái hay của OFW là thiết bị sẽ mang theo trình điều khiển của nó, điều đó có nghĩa là ngay cả các thiết bị chưa tồn tại khi môi trường OFW được viết sẽ chỉ hoạt động "kỳ diệu". UEFI cũng có thể hoạt động theo cách tương tự, nhưng "định dạng mã byte di động" của nó về cơ bản là một tập hợp con của DOS, đó là lý do chính tại sao Itanium vẫn cần một trình giả lập x86.
Jörg W Mittag

12

Cho đến giữa 2,6 hạt nhân, hạt nhân x86 có khả năng khởi động trực tiếp nếu được sao chép vào đĩa mềm (như thể đó là hình ảnh đĩa).

Trên thực tế, đây là cách khởi động Linux ban đầu.

Nếu bạn nhìn vào tiêu đề của hạt nhân x86 ngày hôm nay, bạn sẽ thấy một thông báo lỗi cho biết việc khởi động từ đĩa mềm như thế không còn hoạt động nữa.


2
Mặt khác, hạt nhân x86 hiện có thể khởi động trực tiếp nếu được cung cấp cho chương trình cơ sở UEFI. Vì vậy, vẫn còn một bộ tải khởi động còn sơ khai được xử lý trước kernel, chỉ là một loại khác ...
grawity

@grawity: Bạn có chắc bạn không có ý x64?
Joshua

1
@Joshua: Tôi không chắc ý của bạn là gì. EFI không thực sự thực thi phần này dưới dạng mã.
grawity

2
@Juaua gì? Đó là phiên bản DEC DEC, và POP POP DX ở chế độ 16 bit (EBP / EDX ở chế độ 32 bit). Nhưng dù sao nó cũng không nên được thực thi; Các tệp nhị phân EFI là các tệp PE (tất nhiên không thành vấn đề nếu nó được ghi vào một khu vực khởi động ...).
Stephen Kitt

1
@Joshua OK, nhưng đó không phải là hành vi x86 không xác định trong tâm trí của tôi ;-). (Tôi nghĩ về “hành vi x86 không xác định” như opcodes mà hành vi không được định nghĩa, chứ không phải hành vi nền tảng xác định.)
Stephen Kitt

5

Tôi bắt đầu với Linux vào cuối những năm 90 và như đã đề cập lilolà mặc định. Nếu bạn muốn khởi động kép với hệ thống DOS, bạn có thể thực hiện khởi động trần mà không cần tải nội dung vào HIMEM hoặc tải trình điều khiển CD, v.v. và sử dụng loadlin. Để khởi động kép Win95, trước tiên bạn có thể khởi động ổ đĩa bằng DOS, sau đó cài đặt bộ tải khởi động '95 và '95' sẽ cho phép bạn khởi động hạt nhân DOS và sau đó bạn có thể sử dụng loadlin.

Để khởi động kép với NT4, mẹo là ghi LILO vào /phân vùng, sau đó loại bỏ 512 byte đầu tiên bằng cách sử dụng dd( dd if=/dev/sda2 of=/path/to/file bs=512 count=1) và đặt tệp kết quả vào nơi ntldrcó thể nhìn thấy và bạn có thể sử dụng nó từ trình tải khởi động của WinNT. Vấn đề với việc đó là khi bạn nâng cấp kernel, bạn phải nhớ lặp lại tất cả các bước trước khi khởi động lại, nếu không bạn sẽ gặp vấn đề khi quay lại hệ thống Linux. Quá trình tương tự đã làm việc với Win2k.

Với LILO, bất cứ khi nào kernel được cập nhật, bạn phải nhớ cập nhật LILO.

Với loadlinbất kỳ thời điểm hạt nhân cập nhật, bạn phải nhớ để chép kernel ra vào phân vùng hệ điều hành DOS.

Một tùy chọn khác được gợi ý trong các câu trả lời khác là ghi kernel trực tiếp vào đĩa mềm bằng cách sử dụng dd if=/path/to/vmlinuz of=/dev/fd0NHƯNG thiết bị gốc phải được đặt đúng trong kernel, vào thời gian biên dịch hoặc bằng cách sử dụng rdevtiện ích.

Khi GRUBxuất hiện, có rất nhiều niềm vui vì bạn không còn phải nhớ cập nhật LILO, hoặc cập nhật LILO và loại bỏ thông tin khởi động, v.v. Không còn bị rời khỏi hệ thống Linux của bạn vì bạn quên cập nhật trình tải khởi động thông tin ...


Nghe có vẻ như đó là toàn bộ công việc và cơ hội cao để lại với máy không khởi động trước đó, nhưng chắc chắn là một trải nghiệm giáo dục
Sergiy Kolodyazhnyy

@SergiyKolodyazhnyy yeah, và không có nhiều thông tin như vậy trên internet, hoặc các công cụ tìm kiếm tuyệt vời để tìm thấy nó nếu nó ở đó. Có một số bản phát hành cứu đĩa mềm duy nhất có đủ Linux để khởi động và sửa lỗi LILO, v.v. Chúng tôi đã đi một chặng đường dài!
ivanivan

Chạy make installsẽ chạy /sbin/lilo, vì vậy bạn không thực sự phải cập nhật bất cứ thứ gì bằng tay (và đó vẫn có thể là trường hợp, nếu bạn đã lilocài đặt). Đó có thể là một vấn đề về quan điểm, nhưng tôi không nhớ nhiều về sự vui mừng grub, ngược lại. Và lilo(ít nhất là phiên bản 1999) có thể khởi động kép windows tốt, không cần loadlin.
mosvy

0

Và trước LILO và GRUB, bạn phải khởi chạy nó từ dòng lệnh với một số tiện ích bootloader tùy chỉnh.

Ví dụ, Amiga đã có sẵn Linux. Bạn phải sử dụng một tiện ích dòng lệnh gọi là amiboot để tải ELF kernel vào bộ nhớ và nhảy tới nó.

Dưới đây là video một người nào đó sử dụng amiboot từ dòng lệnh để khởi chạy linux trên Amiga 600 . Kịch bản StartInstall của anh ấy đang gọi chương trình thực thi amiboot. Bạn có thể xem bộ nhớ cấu hình amiboot, tìm ra địa chỉ tải mong muốn và truyền tham số cho kernel vào khoảng 0h55.

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.