Điểm:0

giải cứu grub trên Ubuntu 18.04 với phân vùng btrfs

lá cờ uz

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 /@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/sda2kiể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:

  • 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)/@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ố?

Điểm:1
lá cờ cn

bất kỳ ý tưởng nào về vấn đề có thể là gì

Không thực sự, mặc dù tôi chia sẻ sự nghi ngờ của bạn rằng grub và btrfs có thể không hoạt động tốt.

Và làm thế nào để khắc phục nó?

Bạn đã cân nhắc việc tự cứu mình khỏi cơn đau đầu này và di chuyển /khởi động bên ngoài btrfs?

Bạn có thể tạo ra một chút dung lượng (thu nhỏ phân vùng trao đổi xuống 1G - hoán đổi dù sao cũng được đánh giá cao) và nhận cho mình một cái mới /khởi động phân vùng của 1G bổ sung này.

Để dự phòng cho ổ đĩa bạn có thể dùng phần mềm RAID1 - grub hỗ trợ khá tốt.

Bạn sẽ mất khả năng chụp nhanh cho /khởi động, Tuy nhiên /khởi động là đủ nhỏ để có một số cách khác để phục hồi nó.

lá cờ uz
Đó là một trong những giải pháp tôi nghĩ đến, nhưng trong trường hợp đó có lẽ tôi chỉ cần làm lại toàn bộ máy chủ từ đầu bằng cách sử dụng các lựa chọn nhàm chán hơn cho mọi thứ (có thể là MDRaid + LVM + ext4), vì btrfs hầu như chỉ khiến tôi đau đầu và hiệu suất kém. Điều làm tôi khó chịu nhất là thiết lập này đã hoạt động hoàn hảo trong 5 năm hoặc lâu hơn và rồi đột nhiên GRUB quyết định rằng nó không thích phân vùng đó nữa, mặc dù nó gắn kết tốt trên hầu hết mọi nhân tôi đã thử - đó là điều không nên xảy ra.
lá cờ cn
@MatteoItalia Bây giờ không còn chủ đề nữa, nhưng tôi đã ở trong hoàn cảnh của bạn. Sau đó, tôi đã chuyển đổi các máy của mình từ btrfs sang ZFS khi tôi nhận ra rằng với 20.04, Ubuntu đã tạo ZFS trên root (và `/boot`) hoàn thiện tốt và được hỗ trợ đầy đủ.
lá cờ uz
Nếu điều đó cuối cùng cũng hoạt động tốt, tôi có thể dùng thử... Bạn có sử dụng nó với khả năng nhân bản gốc của nó hay với MDRaid bên dưới không? Làm cách nào để bạn xử lý việc giữ bộ tải khởi động đồng bộ trên các đĩa khác nhau của mảng?
lá cờ cn
Grub hỗ trợ zfs (mirror) và gói grub tự động cài đặt bootloader vào nhiều đĩa. Tôi sử dụng chế độ UEFI mặc dù. https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/Ubuntu%2020.04%20Root%20on%20ZFS.html

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.