Sau một số cập nhật gần đây, máy tính của tôi không còn khởi động! Đây là những gì tôi có thể xác định:
- Đây là một máy tính gần đây được cung cấp cho tôi bởi IT công ty. Nó có CPU Intel gần đây (thế hệ Skylake).
- Máy tính chạy Ubuntu 16.04.
- Máy tính khởi động lần cuối một cách chính xác một thời gian trong tháng ba. Vấn đề có lẽ là do cập nhật phần mềm hoặc lỗi phần cứng.
- Tôi có một máy tính khác chạy 16.04 với khá nhiều phần mềm được cài đặt (tôi đã sử dụng
apt-clone
) và nó hoạt động rất tốt. Nó có phần cứng khác nhau (cũng là amd64, nhưng CPU khác nhau, GPU khác nhau, v.v.). - Nhân không bắt đầu, initrd hoạt động chính xác. Khi tôi khởi động với màn hình giật gân ở chế độ đồ họa, tôi được nhắc nhập mật khẩu cho khối lượng dm-crypt của mình và điều cuối cùng tôi thấy là nó được gắn kết thành công.
- Việc treo xảy ra trước khi tôi nhận được lời nhắc đăng nhập. Khi máy tính bị treo, đó là một lỗi khó khăn. Thậm chí Alt+ SysRqkhông trả lời. CPU rõ ràng được chốt ở mức 100% kể từ khi quạt bật hoàn toàn.
- Tôi vẫn còn kernel tôi đang chạy trước khi khởi động lại. Khi tôi chọn kernel này trong menu Grub, tôi sẽ bị khóa tương tự. Vì vậy, có vẻ như đây là một lỗi kernel đã có sẵn được kích hoạt bởi một thứ khác - nhưng cái gì?
- Nếu tôi tắt màn hình giật gân (xóa
splash
khỏilinux
dòng lệnh trong Grub), tôi thấy một số dịch vụ bắt đầu, sau đó nó bị khóa. Tôi có thể lấy shell root bằng cách thêm
init=/bin/sh
vàolinux
dòng lệnh trong Grub. Tôi thậm chí có thể nhận được nhiều hơn bằng cách thêmsystemd.unit=basic.target systemd.shell
Điều này bắt đầu một số dịch vụ và chạy shell root trên tty9.
- Nếu tôi chạy
systemctl start multi-user.target
từ vỏ gốc đó, máy tính sẽ khóa. Vì vậy, có lẽ vấn đề được kích hoạt bởi một trong những dịch vụ này. - Tôi chạy
systemctl list-dependencies multi-user.target
để xem những dịch vụ bắt đầu. Tôi tự khởi động các phụ thuộc được liệt kê từng cái một và mọi thứ bắt đầu tốt.
Vì vậy, điều này trông giống như một lỗi phần cứng (vì nó xảy ra trên một máy tính nhưng không phải trên một máy tính khác) được kích hoạt bởi một số phần mềm. Nhưng phần mềm nào? Vì máy tính khóa quá mạnh, tôi không thể nhận được bất kỳ nhật ký nào. Tôi thậm chí không thể nhận được bất kỳ đầu ra giao diện điều khiển hữu ích.
Các kỹ thuật sửa lỗi hữu ích:
- Alt+ SysRq: phím SysRq ma thuật , cho phép bạn thực hiện những việc như khởi động lại khẩn cấp. Nó truy cập kernel ở mức rất thấp, vì vậy nó hoạt động trong tất cả các sự cố tồi tệ nhất. Trong trường hợp của tôi, Alt+ SysRqkhông phản hồi, điều này cho thấy sự cố sâu đến mức nào.
- Để sửa đổi các tham số khởi động, nhấn và giữ Shiftmột vài giây sau khi bật nguồn. Bạn cần nhấn nó sau khi BIOS đã khởi tạo bàn phím, nhưng trước khi hệ điều hành khởi động. Điều này làm cho menu Grub xuất hiện.
- Trong menu Grub, nhấn eđể chỉnh sửa dòng lệnh cho mục nhập menu. Để thay đổi các tham số khởi động Linux, hãy điều hướng đến dòng bắt đầu bằng
linux
. Trên một Ubuntu hiện đại, bạn sẽ tìm thấy các hạt nhân cũ dưới các tùy chọn Nâng cao cho Ubuntu Ubuntu. Khi bạn đã thực hiện các thay đổi mong muốn cho dòng lệnh, hãy nhấn Ctrl+ xđể khởi động. Mọi thay đổi bạn thực hiện ở đây chỉ dành cho khởi động này, chúng không được lưu vào đĩa. - Một số tùy chọn hữu ích trên
linux
dòng lệnh:quiet nosplash
ẩn gần như tất cả các thông điệp khởi động. Loại bỏ chúng để nhận tin nhắn trên bàn điều khiển trong khi khởi động, điều này là cần thiết để có bất kỳ cơ hội chẩn đoán vấn đề.recovery
cung cấp cho bạn một vỏ gốc với hầu như không có dịch vụ. Bạn sẽ cần phải biết mật khẩu root. Chế độ phục hồi của mục nhập vào mục menu sử dụng này.init=/bin/sh
cung cấp cho bạn một vỏ gốc không có dịch vụ nào cả. Để tiếp tục khởi động bình thường, hãy chạyexec init
. Bạn có thể vượt qua các tùy chọn systemd tại thời điểm này, ví dụ:exec init --unit=basic.target
để bắt đầu init và một vài dịch vụ (lưu ý rằng điều này không bắt đầu bất kỳ cách nào để đăng nhập, vì vậy tốt hơn là bạn nên chạy shell trên bảng điều khiển khác). Lưu ý rằng hệ thống tập tin gốc được gắn kết chỉ đọc; chạymount -o remount,rw /
để có thể viết cho nósystemd.unit=basic.target
bắt đầu một bộ dịch vụ rất cơ bản Lưu ý rằng điều này không bao gồm bất kỳ cách nào để đăng nhập! Bạn có thể đặt mặc định này bằng cách chạysystemctl set-default basic.target
tại dấu nhắc gốc. Để khôi phục mục tiêu mặc định ban đầu, hãy chạysystemctl set-default graphical.target
(hoặcsystemctl set-default multi-user.target
cho một máy chủ không có GUI).systemd.debug-shell
bắt đầu một vỏ gốc trên tty9. Bạn có thể kích hoạt tính năng này cho mọi khởi động bằng cách chạysystemctl enable debug-shell
tại dấu nhắc gốc. Đừng quên tắt điều này sau khi bạn đã giải quyết vấn đềsystemctl disable debug-shell
. Nhấn Alt+ F9để chuyển sang tty9.- Xem thêm mẹo hệ thống Fedora , mẹo khởi động Arch Linux .