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
- 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ă cu
sudo 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
- Este sigur să încercați să utilizați btrfs pentru a monta discurile având în vedere erorile de mai sus?
- Ce-i cu
/dev/btrfs-control
eroare activată scanare dispozitiv btrfs
?
- 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.