Cách sử dụng GRUB Rescue để sửa lỗi Linux

Tác giả sysadmin, T.Năm 11, 2023, 10:59:18 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách sử dụng GRUB Rescue để sửa lỗi Linux


Nếu hệ vỏ GRUB của bạn hiển thị lời nhắc "grub>", bạn có thể sử dụng các lệnh ls,, và để sửa hệ thống Linux của mình. Thay vào đó, nếu bạn thấy lời nhắc "grub rescue>", hãy sử dụng các lệnh,, và để khởi động PC của bạn. setlinuxinitrdsetinsmodlinuxinitrd


Nếu máy tính Linux của bạn không thể khởi động vào hệ điều hành của nó, bạn có thể thấy mình đang nhìn chằm chằm vào lời nhắc trong trình bao GRUB. Thực hiện theo các bước sau để sửa chữa các quá trình khởi động bị hỏng của bạn.

1. Khi Bootloader của bạn không khởi động

Có rất ít sự cố máy tính khiến trái tim bạn chìm sâu và nhanh chóng như lỗi không khởi động được. Không có hệ điều hành hoạt động, máy tính của bạn không thực sự là máy tính.

Nó có thể là một vấn đề rất mơ hồ, không có cách nào dễ dàng để đi sâu vào nguyên nhân gốc rễ. Nếu không có quyền truy cập vào Linux, bạn không thể sử dụng bất kỳ quy trình và công cụ chẩn đoán thông thường nào mà bạn sẽ sử dụng để điều tra sự cố. Và không xác định được vấn đề là gì, làm thế nào bạn có thể khắc phục nó?

Trên Linux,  GRUB  là phần mềm kiểm soát quá trình khởi động. Nếu bạn đã cài đặt nhiều hệ điều hành, bạn có thể chọn hệ điều hành mà bạn muốn khởi động.

GRUB được kiểm soát bởi cấu hình của nó. Nó cũng dựa vào các tệp hỗ trợ khác để thực hiện các chức năng của nó. Nếu bất kỳ thứ nào trong số này bị thiếu hoặc bị hỏng, GRUB sẽ không hoạt động. Các thay đổi đối với ổ đĩa cứng và phân vùng của máy tính của bạn cần được phản ánh trong cấu hình của GRUB. Nếu không phải như vậy, hướng dẫn của GRUB sẽ không có ý nghĩa và quá trình khởi động của bạn sẽ không hoạt động.

Xin lưu ý thêm, cái mà tất cả chúng ta gọi là GRUB thực ra là GRUB 2. Đây là phiên bản nâng cao của GRUB được phát hành vào năm 2012. Trong số những thay đổi khác, nó đã thay đổi cách tạo tệp "grub.cfg" và cho phép bạn khởi động từ phương tiện di động.

Nếu GRUB không thể tải hệ điều hành, bạn sẽ phải nhìn chằm chằm vào lời nhắc trong trình bao GRUB. Đây là một môi trường tối giản sẽ cho phép bạn thực hiện một số hành động. Tuy nhiên, nếu thực hiện đúng, các bước này có thể phục hồi máy tính của bạn.

Có hai shell GRUB khác nhau. Tùy thuộc vào nguyên nhân cốt lõi của vấn đề, bạn có thể thấy mình ở dấu nhắc trình bao GRUB:

Mã nguồn [Chọn]
grub>
Hoặc tại dấu nhắc shell cứu hộ GRUB :

Mã nguồn [Chọn]
grub rescue>
Trình bao cứu hộ GRUB thậm chí còn bị hạn chế hơn so với trình bao GRUB, nhưng nó vẫn đủ mạnh để khởi động máy tính của bạn. Khi máy tính của bạn đã khởi động, bạn sẽ ở một vị trí tốt hơn nhiều để giải quyết nguyên nhân gốc rễ.

2. Sử dụng GRUB Shell

GRUB Shell là một giao diện dòng lệnh cho phép bạn sử dụng một nhóm nhỏ các lệnh Linux. Nếu bạn thấy mình ở đây thay vì ở màn hình đăng nhập thông thường, điều đó có nghĩa là quá trình khởi động của bạn bị rối.


Các lệnh bạn có quyền truy cập không giống như các phiên bản Linux thông thường. Ví dụ: lslệnh trình bao GRUB không phải là lệnh Bash ls. Nó có rất ít điểm chung với nó. Chúng ta có thể thấy điều này bằng cách sử dụng --helptùy chọn.

Mã nguồn [Chọn]
ls --help

Nó chỉ liệt kê năm tùy chọn. Điều đó khác xa so với hàng tá tùy chọn được hỗ trợ bởi lsBash. Tuy nhiên, ngay cả với bảng lệnh hơi bị tắt tiếng, chúng tôi vẫn có thể khắc phục tình trạng này.

Tại dấu nhắc, nhập lsvà nhấn "Enter".

Mã nguồn [Chọn]
ls

Trên máy tính này, nó liệt kê ba mục.

  • (hd0)  là ổ cứng đầu tiên.
  • (hd0,gpt1)  là phân vùng đầu tiên trên ổ cứng đầu tiên.
  • (hd0,gpt2)  là phân vùng thứ hai trên ổ cứng thứ nhất.

Nhãn "gpt" là viết tắt của bảng phân vùng GUID. Chúng ta cần bao gồm dấu ngoặc " ()" khi tham chiếu phân vùng, nhưng chúng ta có thể bỏ qua nhãn.

Để xem lần lượt các phân vùng, chúng tôi sẽ sử dụng ls.

Mã nguồn [Chọn]
ls (hd0,1)
Mã nguồn [Chọn]
ls (hd0,2)

Chúng tôi nhận thấy rằng phân vùng thứ hai có hệ thống tệp Linux trên đó. Chúng tôi sẽ điều tra thêm một chút bằng cách xem thư mục gốc của phân vùng đó.

Mã nguồn [Chọn]
ls(hd0,2)/

Rõ ràng, đây là phân vùng Linux, với thư mục khởi động trên đó. Đây là nơi lưu trữ các tệp GRUB, ảnh khởi động Linux và các tệp khởi động khác.

Trên máy tính này, chúng ta sẽ cần tham chiếu phân vùng (hd0,2) khi ra lệnh. Trên máy tính của mình, bạn sẽ sử dụng bất kỳ phân vùng nào mà bạn tìm thấy bản cài đặt Linux của mình.

Chúng ta có thể sử dụng lệnh để xem các tệp văn catbản  bằng cách nối thêm đường dẫn thư mục và tên tệp vào tên phân vùng, như sau:

Mã nguồn [Chọn]
cat (hd0,2)/etc/issue

Khi cài đặt nhiều lần khởi động, đây là một cách hữu ích để xác minh bạn đang ở đúng phân vùng. Nó cũng tuyệt vời để xem bên trong các tập tin cấu hình.

Ở đây, chúng tôi đang sử dụng lslệnh với các tùy chọn -l(dài) và -h(kích thước con người có thể đọc được) để liệt kê các tệp trong thư mục "/boot".

Mã nguồn [Chọn]
ls -lh (hd0,2)/boot

Để máy tính này khởi động, chúng ta cần nói với GRUB rằng phân vùng Linux mới được phát hiện của chúng ta chứa các tệp khởi động.

Mã nguồn [Chọn]
set root=(hd0,2)
Chúng ta cần chỉ định nhân Linux nào sẽ khởi động từ đó. Chúng tôi làm điều này với linuxlệnh. Lưu ý rằng chúng tôi cũng phải cung cấp thư mục gốc bằng cách sử dụng sơ đồ đặt tên phân vùng và ổ cứng Linux thông thường.

Mã nguồn [Chọn]
linux /boot/vmlinuz-6.2.0-20-generic root=/dev/sda2
Trên máy tính mẫu của chúng tôi, chúng tôi đang sử dụng (hd0)ổ cứng đầu tiên. Điều này được gọi  sdatrong danh pháp Linux thông thường. Chúng tôi thấy rằng phân vùng thứ hai là phân vùng Linux, vì vậy chúng tôi cần chỉ định sda2.

Máy của bạn có thể khác. Ví dụ: nếu phân vùng Linux của bạn được báo cáo là (hd2,1)phân vùng đó có nghĩa là phân vùng một trên ổ cứng thứ ba hoặc sdc1.

Chúng tôi cũng cần chỉ định hình ảnh hệ thống tệp dựa trên RAM nào sẽ sử dụng khi máy tính khởi động. Điều này phải sử dụng cùng một thành phần số như nhân Linux mà chúng tôi đang sử dụng.

Mã nguồn [Chọn]
initrd /boot/initrd.img-6.2.0-20-generic

Bây giờ, để khởi động hệ thống của chúng tôi, hãy nhập "boot" và nhấn "Enter".

Điều này sẽ khởi động máy tính của bạn vào Linux. Điều đó giúp chúng tôi chạy lại, nhưng chúng tôi vẫn cần sửa lỗi GRUB để không cần phải làm điều này mỗi khi khởi động máy tính.

Chúng ta sẽ chạy update-grub. Điều này sẽ quét hệ thống của chúng tôi, xác định hệ điều hành và tạo cấu hình GRUB mới. Chúng ta cần chạy cái này với tư cách là người dùng root.

Mã nguồn [Chọn]
sudo update-grub

Hiếm khi, bạn cũng có thể cần phải cài đặt lại bộ tải khởi động GRUB, sử dụng grub-install.

Mã nguồn [Chọn]
sudo grub-install /dev/sda
Lưu ý bạn không cần chỉ định phân vùng nào sẽ cài đặt, chỉ cần ổ đĩa nào. Trong các cài đặt thông thường, đó là ổ đĩa mà Linux của bạn đang bật.

Bằng chứng về bánh pudding đi kèm với lần khởi động lại tiếp theo. Máy tính của bạn nên khởi động lại bình thường.

3. Sử dụng GRUB Rescue Shell

Tùy thuộc vào bản chất của sự cố khởi động, bạn có thể không bị rơi vào trình bao GRUB. Bạn có thể bị bỏ lại trong chế độ cứu hộ GRUB. Nếu đúng như vậy, lời nhắc của bạn sẽ giống như thế này:

Mã nguồn [Chọn]
grub rescue>
Các lệnh chúng ta cần đưa ra trong trình bao này là khác nhau. Chúng ta cần sử dụng lsđể tìm phân vùng Linux, giống như khi bạn đang sử dụng GRUB shell. Khi đã xác định được phân vùng Linux, bạn có thể tiếp tục và nhập các lệnh này.

Hãy nhớ sử dụng mã định danh ổ đĩa và số phiên bản kernel phù hợp với máy tính của bạn. Lệnh insmod tải các mô-đun Kernel.

Mã nguồn [Chọn]
set prefix=(hd0,2)/boot/grub
Mã nguồn [Chọn]
set root=(hd0,2)
Mã nguồn [Chọn]
insmod normal
Mã nguồn [Chọn]
insmod linux
Mã nguồn [Chọn]
linux /boot/vmlinuz-6.2.0-20-generic root=/dev/sda2
Mã nguồn [Chọn]
initrd /boot/initrd.img-6.2.0-20-generic

Sau đó, bạn có thể gõ "boot" và nhấn "Enter" để khởi động lại máy tính của mình. Khi nó đã khởi động lại và bạn đã đăng nhập, hãy cập nhật GRUB bằng update-grublệnh.

4. Các biện pháp khắc phục khả thi khác

Nếu sự cố hóa ra là thiếu tệp khởi động, chẳng hạn như tệp "vmlinuz" và "initrd.img", bạn có thể khởi động máy tính của mình từ Live DVD hoặc ổ flash USB Linux có thể khởi động và sao chép các tệp bị thiếu vào vị trí.

Lưu ý rằng các tệp "vmlinuz" và "initrd.img" phải có cùng số phiên bản vì chúng hoạt động như một cặp khớp.