Tôi có một máy chủ nhỏ (HP ProLiant MicroServer Gen8) chạy Ubuntu 18.04 64 bit với hạt nhân chung HWE mới nhất (5.4.0.74.83~18.04.67); nó có hai ổ đĩa SATA, được phân vùng GPT nhưng khởi động ở chế độ BIOS cũ. Cả hai ổ đĩa được phân vùng như sau:
- phân vùng 1 (1 MB): phân vùng khởi động "bóng tối", dành cho mã GRUB;
- phân vùng 2 (vài TB): BtrFS, chứa
@
tập phụ cho /
và @Trang Chủ
tập phụ cho /Trang Chủ
; /khởi động
thực sự là dưới /@/khởi động
- phân vùng 3 (4 GB): trao đổi
Các phân vùng BtrFS của hai ổ đĩa được gắn với nhau trong cấu hình nhân bản BtrFS.
Một vài ngày mất điện và NAS không bao giờ phục hồi. Khi khởi động, tôi vừa nhận được "giải cứu grub" đáng sợ, nói rằng nó không thể tìm thấy phân vùng đích (tôi nghĩ là được chỉ định với GUID khối lượng BtrFS). Cố gắng làm ls (hd0,gpt2)
(hoặc thực sự, bất kỳ phân vùng nào khác) cho tôi biết "hệ thống tệp không xác định" (mặc dù insmod btrfs
dường như hoạt động chính xác).
Nghĩ rằng có gì đó không ổn với nội dung GRUB, tôi đã khởi động bằng khóa cài đặt máy chủ Ubuntu 18.04 và cố gắng sửa chữa GRUB, như sau:
gắn kết/dev/sda2/mnt
(/dev/sda2
là phân vùng BtrFS); Tôi có thể thấy rằng tất cả dữ liệu vẫn còn đó;
gắn kết --bind /dev /mnt/@/dev
; giống với /dev/pts
, /proc
, /sys
, /chạy
(nếu không thì DNS, được quản lý bởi resolvconf trong cả hệ thống trực tiếp và hệ thống "bị hỏng" sẽ không chạy)
chroot /mnt/@
- bên trong chroot, tôi đã làm
gắn kết /dev/sda2 / -o subvol=@
nếu không thì grub-thăm dò
/cài đặt grub
sẽ bị nhầm lẫn; bên ngoài chroot, làm lại thứ ràng buộc vì thứ đó bị che khuất bởi phần kể lại;
gắn kết -a
Sau đó (qua nhiều lần thử) tôi đã thử một số thứ:
- đã cài đặt lại GRUB thành
/dev/sda
(cài đặt grub/dev/sda
); đã thử với --kiểm tra lại
và không có, đã thử grub-mkdevicemap
(xóa thủ công thiết bị khóa USB khỏi tệp đã tạo thiết bị.map
tập tin);
- đã tạo lại cấu hình GRUB (
cập nhật-grub
);
- đã nâng cấp kernel, không thực sự nghĩ rằng đó là vấn đề của phiên bản kernel, nhưng để đảm bảo (1) Tôi đang cố khởi động thứ gì đó chắc chắn không bị hỏng và (2) có initrd mới được tạo
- đã kiểm tra xem tất cả các tệp kernel/initrd có thể đọc được không (ví dụ: với
sha1sum /khởi động/*
), vì các thông báo GRUB về điều đó rất đáng sợ - xem sau;
- đã hạ cấp GRUB (bản sửa đổi 2.02 mới nhất có sẵn trong kho) xuống một vài bản sửa đổi bản vá trước đó, vì tôi nghi ngờ việc mất điện không liên quan gì nhiều đến nó, mà thay vào đó, một số nâng cấp đã phá vỡ nó
- chạy
kiểm tra btrfs/dev/sda2
và kiểm tra btrfs/dev/sdb2
; cả hai đều chạy không có lỗi, vấn đề duy nhất (được báo cáo cho cả hai) là trong bộ đệm không gian trống của một khối (sau này tôi đã gắn /dev/sda2/
với xóa_cache
tùy chọn chỉ để chắc chắn)
Kết quả từ tất cả những thứ này không đáng khích lệ: khi được thực hiện đúng cách, những thứ này luôn dẫn tôi trở lại giải cứu ấu trùng
, nhưng lần này với một bước ngoặt thú vị hơn:
- nó có thể đọc phần nào khối lượng BtrFS, nhưng có thể nói là hầu như không; đang làm
ls(hd0,gpt2)/
hiển thị các tiểu tập, nhưng cả hai ls (hd0,gpt2)/@
và ls (hd0,gpt2)/@home
hiển thị các thư mục trống (đó là lý do tại sao nó không thể tìm thấy (hd0,gpt2)/@/boot/
và sau đó tất cả những thứ cần thiết sẽ chuyển sang chế độ bình thường);
- điều thú vị nhất là có các tập phụ khác, cụ thể là ba ảnh chụp nhanh được thực hiện bởi tập lệnh nâng cấp phiên bản Ubuntu; những, cái đó tập phụ thay thế có thể được đọc bởi GRUB; không chỉ vậy: nếu tôi điều chỉnh
tiếp đầu ngữ
, nguồn gốc
& đồng. để trỏ vào bên trong các tập con ảnh chụp nhanh, tôi có thể quản lý để chuyển sang chế độ GRUB "bình thường" và, điều chỉnh lại các đường dẫn trong các mục menu, khởi động nhân cũ hơn trong ảnh chụp nhanh (vấn đề duy nhất là nó không thể tìm thấy các mô-đun, vì tôi đang tải một phiên bản kernel cũ hơn không còn được cài đặt trong hệ thống tệp gốc hiện tại, nhưng do chúng không thực sự được sử dụng nên nó vẫn khởi động tốt).
Một lần (khi tôi có lẽ đã làm hỏng một cái gì đó trong phần nói trên gắn kết
nhảy trong chroot) Tôi đã cố gắng khởi động lại và trực tiếp vào chế độ bình thường, nhưng GRUB luôn tìm thấy điều gì đó không ổn đối với tất cả các mục trong menu khởi động: đặc biệt, đối với mỗi và mọi mục, nó không thể tải kernel hoặc initrd, khiến một thông báo lỗi đáng sợ "không tìm thấy inode" (hoặc, trong một trường hợp khác, "không thể tìm thấy bộ mô tả đoạn mã"; cả hai thông báo này đều không khớp trong Google ngoài chính các nguồn GRUB, đây luôn là một dấu hiệu xấu); lưu ý rằng, như tôi đã nói ở trên, bên trong phiên USB trực tiếp, tất cả chúng đều có thể đọc được.
Suy nghĩ thêm:
- bo mạch chủ của máy chủ có một chút vấn đề kỳ lạ với bộ điều khiển SATA - việc liệt kê đĩa dường như mất nhiều thời gian, dẫn đến lỗi này khi tôi nâng cấp lên 18.04 https://bugs.launchpad.net/ubuntu/+source/linux/+orms/1752961; cách khắc phục (đáng buồn) duy nhất là thêm một
ngủ 5
trong initrd trước quét btrfs
; điều này cũng dẫn đến việc có đĩa thứ hai là /dev/sdc
Trong một số của USB trực tiếp chạy, nhưng nó dường như không thành vấn đề (khi nó xảy ra, tôi cũng đã điều chỉnh tên tệp trong / nhà phát triển
, điều này dường như không liên quan đặc biệt đến kết quả);
- Tôi đã nghĩ về RAM kém, mặc dù điều đó có vẻ khó xảy ra vì (1) sau khi khởi động, hệ thống chạy bình thường và (2) đó là RAM ECC và tôi mong đợi ít nhất một số loại thông báo lỗi trong trường hợp này; dù sao đi nữa, tôi đã bắt đầu một MemTest và nó đã chạy được vài giờ mà không có lỗi;
iLO báo lỗi tự kiểm tra khi khởi động, tuy nhiên điều đó dường như không liên quan. lỗi sau đó đã được khắc phục bằng cách nâng cấp lên phiên bản phần sụn mới nhất và xóa NVRAM của nó; như mong đợi, điều này không tạo ra sự khác biệt nào cả, nhưng ít nhất thì màn hình POST sạch hơn một chút
Dự đoán hiện tại của tôi là như thế này: nhân HWE đang sử dụng phiên bản BtrFS với một số tính năng không tương thích với phiên bản GRUB Ubuntu 18.04 "thông thường", vì vậy tất cả các tệp/thư mục được viết "hiện tại" đều có khả năng GRUB khó đọc; thực sự, tôi thấy rằng giữa GRUB 2.02 và phiên bản hiện tại (2.06) đã có một số công việc về nội dung BtrFS, mặc dù để nén zstd, điều đó không được kích hoạt trên đĩa của tôi. Có lẽ việc thử GRUB gần đây hơn có thể khắc phục sự cố? Nhưng có một số bản dựng GRUB 2.06 được đóng gói hoạt động cho 18.04 không?
Câu chuyện dài: bất kỳ ý tưởng nào về vấn đề có thể là gì và cách khắc phục sự cố?