Puncte:0

Grub rescue pe Ubuntu 18.04 cu partiția btrfs

drapel uz

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?

Puncte:1
drapel cn

orice idee despre care ar putea fi problema

Nu chiar, deși împărtășesc suspiciunea dvs. că grub și btrfs ar putea să nu se descurce bine.

si cum sa o repar?

V-ați gândit să vă salvați această durere de cap și să mutați /boot în afara btrfs?

Ai putea tăia puțin spațiu (reduceți partiția de schimb cu 1G - schimbul este oricum supraevaluat) și obțineți-vă unul nou /boot partiția acestui 1G suplimentar.

Pentru redundanța discului puteți folosi software-ul raid1 - grub îl suportă destul de bine.

Ai pierde capacitatea de instantaneu pentru /boot, totuși /boot este suficient de mic pentru a avea o altă modalitate de a-l recupera.

drapel uz
Aceasta este una dintre soluțiile la care m-am gândit, dar în acest caz probabil că aș reface întregul server de la zero folosind opțiuni mai plictisitoare pentru orice (MDRaid + LVM + ext4, probabil), deoarece btrf-urile mi-au dat bătăi de cap și performanțe proaste. Ceea ce mă deranjează cel mai mult este că această configurare a funcționat impecabil timp de aproximativ 5 ani și apoi dintr-o dată GRUB decide că nu-i mai place partiția, chiar dacă se montează bine pe aproape fiecare kernel pe care l-am încercat - acesta este un lucru care pur și simplu nu ar trebui. întâmpla.
drapel cn
@MatteoItalia Nu e subiectul acum, dar am fost în situația ta. Apoi mi-am convertit mașinile din btrfs în ZFS când mi-am dat seama că cu 20.04 Ubuntu a făcut ca ZFS pe root (și `/boot`) să fie bine matur și pe deplin suportat.
drapel uz
Dacă în sfârșit funcționează bine, pot să-l încerc... Îl folosești cu capabilitățile sale native de oglindă sau cu MDRaid dedesubt? Cum te descurci cu menținerea bootloader-ului sincronizat pe diferitele discuri ale matricei?
drapel cn
Grub acceptă zfs (oglindă), iar pachetul grub instalează automat bootloader-ul pe mai multe discuri. Folosesc modul UEFI. https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/Ubuntu%2020.04%20Root%20on%20ZFS.html

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.