Am un server mic (HP ProLiant MicroServer Gen8) care rulează Ubuntu 18.04 pe 64 de biți cu cel mai recent kernel generic HWE (5.4.0.74.83~18.04.67); are două unități SATA, partiționate GPT, dar pornind în modul BIOS vechi. Ambele unități sunt partiționate după cum urmează:
- partiția 1 (1 MB): partiția de boot „umbră”, pentru codul GRUB;
- partiția 2 (mai mulți TB): BtrFS, care conține
@
subvolum pentru /
și @Acasă
subvolum pentru /Acasă
; /boot
este într-adevăr sub /@/boot
- partiția 3 (4 GB): schimb
Partițiile BtrFS ale celor două unități sunt legate împreună într-o configurație oglindă BtrFS.
Câteva zile s-a întrerupt curent, iar NAS-ul nu și-a revenit niciodată. La pornire, tocmai am primit temutul „grub rescue”, spunând că nu a putut găsi partiția țintă (specificată cu GUID-ul volumului BtrFS, cred). Incerc sa fac ls (hd0,gpt2)
(sau într-adevăr, orice altă partiție) mi-a spus „sistem de fișiere necunoscut” (chiar dacă insmod btrfs
pare să funcționeze corect).
Crezând că ceva a fost prăjit cu chestiile GRUB, am pornit cu o cheie de instalare a serverului Ubuntu 18.04 și am încercat să repar GRUB, după cum urmează:
montați /dev/sda2 /mnt
(/dev/sda2
este partiția BtrFS); Văd că toate datele sunt încă acolo;
mount --bind /dev /mnt/@/dev
; la fel pentru /dev/pts
, /proc
, /sys
, /alerga
(în caz contrar, DNS, gestionat de resolvconf atât în sistemul live, cât și în sistemul „defect” nu ar rula)
chroot /mnt/@
- în interiorul chroot, am făcut-o
mount /dev/sda2 / -o subvol=@
in caz contrar grub-sondă
/grub-install
s-ar deruta; în afara chroot-ului, a refăcut lucrul legat, deoarece era umbrit de remontare;
monte -a
Apoi (în mai multe încercări) am încercat mai multe lucruri:
- reinstalat GRUB la
/dev/sda
(grub-install /dev/sda
); încercat cu --reverificare
si fara, incercat grub-mkdevicemap
(eliminarea manuală a dispozitivului cheie USB din dispozitivul generat dispozitiv.hartă
fişier);
- a recreat configurația GRUB (
update-grub
);
- am actualizat nucleul, fără a crede că este o problemă cu versiunea nucleului, dar pentru a mă asigura (1) încerc să pornesc ceva care cu siguranță nu este corupt și (2) să am initrd proaspăt făcut
- a verificat dacă fișierele kernel/initrd erau toate lizibile (de exemplu, cu
sha1sum /boot/*
), deoarece mesajele GRUB despre asta erau înfricoșătoare - vezi mai târziu;
- a retrogradat GRUB (care este cea mai recentă versiune 2.02 disponibilă în repoziții) la câteva revizuiri de patch-uri mai devreme, deoarece bănuiam că pierderea de putere nu are mare lucru de făcut, dar a fost în schimb o actualizare care l-a rupt
- alerga
btrfs verifica /dev/sda2
și btrfs verifica /dev/sdb2
; ambele au rulat fără erori, singura problemă (raportată pentru ambele) a fost în spațiul cache liber al unui singur bloc (am montat ulterior /dev/sda2/
cu clear_cache
opțiune doar pentru a fi sigur)
Rezultatele din toate aceste lucruri au fost departe de a fi încurajatoare: atunci când sunt făcute corect, aceste lucruri mă conduc întotdeauna din nou la salvare grub
, dar de data aceasta cu o întorsătură mai interesantă:
- aceasta poate sa citeste oarecum volumul BtrFS, dar, ca sa zic asa, abia; face
ls (hd0,gpt2)/
arată subvolumele, dar ambele ls (hd0,gpt2)/@
și ls (hd0,gpt2)/@home
arată directoare goale (de aceea nu poate găsi (hd0,gpt2)/@/boot/
și apoi toate lucrurile de care are nevoie pentru a intra în modul normal);
- Cel mai interesant lucru este că există și alte subvolume, și anume trei instantanee realizate de scriptul de actualizare a versiunii Ubuntu; acestea subvolume în schimb poate sa să fie citit de GRUB; nu numai atât: dacă mă adaptez
prefix
, rădăcină
& co. pentru a indica subvolumele de instantaneu, pot reuși să intru în modul GRUB „normal” și, ajustând din nou căile din intrările de meniu, pornesc nucleul mai vechi care era în instantaneu (singura problemă este că nu poate găsi modulele, deoarece încărc o versiune mai veche a nucleului care nu mai este instalată în sistemul de fișiere rădăcină actual, dar având în vedere că nu sunt cu adevărat utilizate, pornește foarte bine).
Odată (când probabil am greșit ceva în cele menționate mai sus montură
dance in the chroot) Am reușit să repornesc și să ajung direct în modul normal, dar GRUB găsea mereu ceva rău pentru toate intrările din meniul de pornire: în special, pentru fiecare intrare nu putea încărca nici nucleul, nici initrd, dând un mesaj de eroare înfricoșător „inode not found” (sau, într-un alt caz, „nu a putut găsi descriptorul chunk”; ambele nu au potriviri în Google în afară de sursele GRUB în sine, ceea ce este întotdeauna un semn rău); observați că, așa cum am spus mai sus, în cadrul sesiunii USB live erau toate lizibile.
Gânduri suplimentare:
- placa de bază a serverului are o problemă puțin ciudată cu controlerul SATA - enumerarea discului pare să ia mult, ceea ce a dus la această eroare când am făcut upgrade la 18.04 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1752961; singura soluție (trista) a fost adăugarea unui
somn 5
in initrd inainte scanare btrfs
; acest lucru a dus și la a avea al doilea disc ca /dev/sdc
în niste USB-ul live rulează, dar nu părea să conteze (când s-a întâmplat, am ajustat și numele fișierului în /dev
, care însă nu părea a fi deosebit de relevant pentru rezultat);
- M-am gândit la RAM proastă, deși mi s-a părut puțin probabil pentru că (1) odată pornit sistemul funcționează normal și (2) este RAM ECC și mă așteptam la un fel de mesaj de eroare în caz; oricum, am pornit un MemTest și au mai multe ore că rulează fără erori;
iLO raportează o eroare de autotest la pornire, care însă pare să nu aibă legătură. eroarea a fost rezolvată ulterior prin actualizarea la cea mai recentă versiune de firmware și ștergerea NVRAM-ului; așa cum era de așteptat, acest lucru nu a făcut nicio diferență, dar cel puțin ecranul POST este puțin mai curat
Presupunerea mea actuală este cam așa: nucleul HWE folosește o versiune BtrFS cu unele caracteristici incompatibile cu versiunea „obișnuită” Ubuntu 18.04 GRUB, astfel încât toate fișierele/directoarele care sunt scrise „acum” sunt potențial problematice pentru citirea GRUB; într-adevăr, am văzut că între GRUB 2.02 și versiunea actuală (2.06) s-a lucrat la chestii BtrFS, deși pentru compresia zstd, aceasta nu este activată pe discurile mele. Poate că încercarea unui GRUB mai recent ar putea rezolva problema? Dar există vreo versiune GRUB 2.06 ambalata care funcționează pentru 18.04?
Pe scurt: aveți idee despre care ar putea fi problema și cum să o remediați?