Puncte:1

BTRFS pe RHEL8 - compilarea modulului kernelului sau realizarea instrumentelor pentru spațiul utilizatorului

drapel it

Context

Am instalat recent RHEL 8 fără să-mi dau seama nu mai acceptă BTRFS.

Din păcate, am 4 discuri în BTRFS RAID10. Nu am suficient spațiu pe celelalte discuri ale mele pentru a păstra datele prezente pe discurile BTRFS, așa că copierea totul în altă parte în timp ce pornesc de pe o unitate USB este în fereastră.

Am întrebarea mea inițială, apoi câteva întrebări ulterioare referitoare la abordările pe care le-am luat și care au eșuat. Simțiți-vă liber să vă concentrați doar pe partea „cum să faceți BTRFS să funcționeze” a acestei probleme, deși sunt curios să aflu despre celelalte probleme dacă aveți răspunsuri la orice parte a acesteia.

Intrebarea 1

  1. Există o modalitate (relativ) ușoară de a face BTRFS să funcționeze pe RHEL8?

Spațiu utilizator btrfs-progs

Prima mea încercare de a face acest lucru a fost compilarea și instalarea btrfs-progs cu urmatoarele:

# Instalați dep-uri
sudo dnf install libuuid-devel libblkid-devel lzo-devel zlib-devel libzstd-devel e2fsprogs-devel e2fsprogs-libs e2fsprogs libgcrypt-devel libsodium-devel libattr-devel
# Instalați deps pentru doc ​​gen
sudo dnf install asciidoc xmlto source-highlight

# Cea mai recentă versiune de clonă superficială
git clone --depth 1 --branch v5.14.1 https://github.com/kdave/btrfs-progs.git
cd btrfs-progs
git switch -c v5.14.1

# Construi
# --disable-zoned deoarece această caracteristică necesită nucleu >=5.10
export CFLAGS="-O3 -pipe -frecord-gcc-switches -mtune=native -march=native"
export CPPFLAGS=$CFLAGS
export SODIUM_CFLAGS=$CFLAGS
export ZSTD_CFLAGS=$CFLAGS
exportă ZLIB_CFLAGS=$CFLAGS
export UUID_CFLAGS=$CFLAGS
export PYTHON_CFLAGS=$CFLAGS

./autogen.sh
./configure --with-crypto=libsodium --disable-zoned
face -j12
sudo make install

Se pare că se instalează corect și este accesibil utilizatorului meu:

$ care btrfs
/usr/local/bin/btrfs

$ ls -1 /usr/local/bin/ | grep btrfs
btrfs
btrfsck
btrfs-convertire
btrfs-find-root
btrfs-imagine
btrfs-hartă-logică
btrfs-select-super
btrfstune
fsck.btrfs
mkfs.btrfs

versiunea $ btrfs
btrfs-progs v5.14.1 

Cu toate acestea, root aparent nu are /usr/local/bin în calea sa implicit. Am adăugat exportați PATH+=":/usr/local/bin" către /etc/profileși/root/.bash_profile, dar niciunul dintre ele nu pare să obțină sursă automată atunci când este utilizat sudosau când cade într-o coajă de rădăcină cusudo su`.

Când se specifică calea completă către binar, se plânge că nu se poate deschide /dev/btrfs-control. Interogând motorul meu local de căutare, unii sugerează că este nevoie de udev, dar acesta este deja instalat (poate configurat greșit?)

$ sudo btrfs versiune
sudo: btrfs: comanda nu a fost găsită

$ sudo /usr/local/bin/btrfs scanare dispozitiv
Scanarea pentru sisteme de fișiere Btrfs
AVERTISMENT: nu s-a putut deschide /dev/btrfs-control, săriți peste înregistrarea dispozitivului: Nu există un astfel de fișier sau director
AVERTISMENT: nu s-a putut deschide /dev/btrfs-control, săriți peste înregistrarea dispozitivului: Nu există un astfel de fișier sau director
AVERTISMENT: nu s-a putut deschide /dev/btrfs-control, săriți peste înregistrarea dispozitivului: Nu există un astfel de fișier sau director
AVERTISMENT: nu s-a putut deschide /dev/btrfs-control, săriți peste înregistrarea dispozitivului: Nu există un astfel de fișier sau director
EROARE: au existat 4 erori la înregistrarea dispozitivelor

Alte comenzi BTRFS par să funcționeze:

$ sudo /usr/local/bin/btrfs sistem de fișiere arată /dev/sda
Etichetă: 'wdred' uuid: aaaa-bbbb-cccc-dddd-eeee
    Dispozitive totale 4 octeți FS utilizați 2,13 TiB
    devid 1 dimensiunea 5,46TiB a folosit calea de 1,07TiB /dev/sda
    Devid 2 dimensiune 5,46TiB folosit 1,07TiB cale /dev/sdc
    Devid 3 dimensiune 5,46 TiB folosit 1,07 TiB cale /dev/sdb
    devid 4 dimensiunea 5,46TiB a folosit calea de 1,07TiB /dev/sdd

Cu toate acestea, mi-a fost teamă să montez partițiile sau să efectuez orice operațiuni asupra lor, având în vedere eroarea de mai sus, de teamă că lipsesc componentele care ar determina să-mi distrugă datele.

Întrebările 2, 3, 4

  1. Este sigur să încercați să utilizați btrfs pentru a monta discurile având în vedere erorile de mai sus?
  2. Ce-i cu /dev/btrfs-control eroare activată scanare dispozitiv btrfs?
  3. Cum pot obține sudo și sudo su a avea /usr/local/bin în calea lui implicit?

Modulul nucleului BTRFS

M-am întrebat dacă ar fi mai bine să compilați un modul de kernel, dar având aproape nicio experiență de hacking a nucleului, a mers prost.

Se pare că trebuie să mă setez CONFIG_BTRFS_FS=m în configurația nucleului meu pentru a începe. Nu există în prezent și mi s-a părut că îmi amintesc că am putut face asta menuconfig.

$ grep "BTRFS" /boot/config-4.18.0-305.19.1.el8_4.x86_64 
# CONFIG_BTRFS_FS nu este setat

Documentația RHEL menționează cum să încărcați modulele kernelului și altele, dar nu despre cum să le construiți. Am consultat archwiki și am încercat să descarc nucleul RHEL8 de pe site-ul Red Hat. Pagina de descărcare pentru RHEL8 avea o filă „Surse” cu un fișier .iso 20G. L-am descărcat, l-am montat și am constatat că era plin cu fișiere .rpm și nu semăna deloc cu depozitul sursă al nucleului linux. Eram un pic pierdut.

M-am dus apoi la /usr/src/kernels/, a inițializat un git repo de teamă că voi distruge ceva important și a continuat să încerce să descopere cum să construiesc modulul kernel sau să schimb lucrurile în menuconfig.

$ cd /usr/src/kernels/4.18.0-305.19.1.el8_4.x86_64
$ sudo su
# git init
# git add -A
# git commit -m „Nucleu nemodificat”

# face mrproper
  Scripturi HOSTCC/basic/bin2c
scripts/kconfig/conf --syncconfig Kconfig
arch/x86/Makefile:184: *** Compilatorul nu are suport pentru asm-goto.. Stop.
make: *** [Makefile:1361: _clean_arch/x86] Eroare 2

Neavând suport asm-goto, internetul a sugerat că s-ar putea să am nevoie elfutils-libelf-devel dar se pare că am deja asta.

Pentru funzies am încercat să-l construiesc zăngăni si cu gcc-toolset-10, dar ambele au avut aceeași eroare.

Întrebarea 5

  • Orice idee de ce Compilatorul nu are suport pentru asm-goto?
  • Care este o resursă bună despre cum să construiți module de kernel / să corectați nucleele / să modificați nucleul sistemului dvs.?

Informatie de sistem

$ uname -a
Linux rhel 4.18.0-305.19.1.el8_4.x86_64 #1 SMP marți 7 sept 07:07:31 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux

$ gcc --versiune
gcc (GCC) 8.4.1 20200928 (Red Hat 8.4.1-1)


$ scl rulați gcc-toolset-10 „gcc --version”
gcc (GCC) 10.2.1 20201112 (Red Hat 10.2.1-8)

$ clang --version
clang versiunea 11.0.0 (Red Hat 11.0.0-1.module+el8.4.0+8598+a071fcd5)

Mulțumesc că ai citit până aici! Orice ajutor este apreciat.

Michael Hampton avatar
drapel cz
Se presupune că CONFIG_BTRFS este activat în nucleele ELrepo kernel-ml. De asemenea, aveți nevoie de elementele spațiului utilizator, care sunt în elrepo-testing (și au fost de când RHEL 8 a fost în versiune beta). Acest lucru ar trebui să vă permită să vă recuperați fișierele, astfel încât să puteți trece la un alt sistem de fișiere.
catleeball avatar
drapel it
Asta părea să funcționeze, mulțumesc @MichaelHampton!
drapel de
Cealaltă posibilitate este să activați repozițiile Oracle Linux și să instalați so callwd unbreakable kernel
catleeball avatar
drapel it
@kofemann există vreun motiv pentru a utiliza Oracle UEK peste nucleul linux principal pentru asta?
Puncte:2
drapel it

În comentarii, răspunsul lui @MichaelHampton a funcționat.

Am adăugat miez-ml din ELrepo ca aceasta:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
sudo yum --enablerepo=elrepo-kernel install kernel-ml

Rețineți că am construit deja instrumentele spațiului utilizator btrfs-progs și a subliniat pașii de construcție în întrebarea de mai sus. Dacă veniți aici de la Google, va trebui să instalați btrfs-progs pe lângă modulul kernel.

Apoi am repornit, am verificat că rulam nucleul principal și că am putut să-mi montez discurile cu BTRFS și să le citesc datele.

$ sudo repornire

$ uname -a
Linux rhel 5.14.8-1.el8.elrepo.x86_64 #1 SMP Sat Sep 25 10:32:52 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux

$ sudo mount UUID=zzz -o defaults,noatime /mnt/hdd

$ ls /mnt/hdd
toate fisierele mele :)

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.