Most ismerkedem a BTRFS fájlrendszerrel. Létrehoztam belőle egy kétlemezes RAID 1-et. Szerencsére az egyik lemez fizikailag sérült volt, így ki kellett vennem. Legalább találkozom ilyen helyzettel is.
A RAID 1 a cserére várva is elindult, működött, de mivel még csak tanulom, érdemi feladata nem volt, lekapcsoltam.
Most azonban, hogy megjött az új lemez, már csak RO módban tudom felcsatolni a fájlrendszert, de így sem az add, sem a replace művelet nem hajtódik végre. Pedig a csatoláci opciók között ott van a degraded.
A /dev/sda lemezt szeretném visszahelyezni. A
btrfs replace start 1 /dev/sda /storageparancs hiba nélkül lefut, de nem történik semmi. A dmesg kimenete:
[ 2168.491798] BTRFS info (device sdb): first mount of filesystem 7c471fa3-1f8e-4ac8-9f36-2104ec8274b8
[ 2168.491837] BTRFS info (device sdb): using crc32c (crc32c-intel) checksum algorithm
[ 2168.491852] BTRFS info (device sdb): allowing degraded mounts
[ 2168.491860] BTRFS info (device sdb): enabling all of the rescue options
[ 2168.491862] BTRFS info (device sdb): ignoring data csums
[ 2168.491864] BTRFS info (device sdb): ignoring bad roots
[ 2168.491867] BTRFS info (device sdb): disabling log replay at mount time
[ 2168.491873] BTRFS warning (device sdb): 'nologreplay' is deprecated, use 'rescue=nologreplay' instead
[ 2168.491877] BTRFS error (device sdb): nologreplay must be used with ro mount option
[ 2168.491927] BTRFS error (device sdb): open_ctree failed: -22
[ 2537.132936] BTRFS info (device sdb): first mount of filesystem 7c471fa3-1f8e-4ac8-9f36-2104ec8274b8
[ 2537.132971] BTRFS info (device sdb): using crc32c (crc32c-intel) checksum algorithm
[ 2537.132985] BTRFS info (device sdb): use zstd compression, level 3
[ 2537.132991] BTRFS info (device sdb): allowing degraded mounts
[ 2537.132994] BTRFS info (device sdb): using free space tree
[ 2537.134688] BTRFS warning (device sdb): devid 1 uuid 550c778e-933c-4a97-9485-ff2c2b092f6f is missing
[ 2537.135575] BTRFS info (device sdb): bdev /dev/sdb errs: wr 0, rd 0, flush 0, corrupt 3, gen 4
[ 2537.136754] BTRFS warning (device sdb): chunk 6640631808 missing 1 devices, max tolerance is 0 for writable mount
[ 2537.136761] BTRFS warning (device sdb): writable mount is not allowed due to too many missing devices
[ 2537.137195] BTRFS error (device sdb): open_ctree failed: -22
[ 2936.561455] BTRFS info (device sdb): first mount of filesystem 7c471fa3-1f8e-4ac8-9f36-2104ec8274b8
[ 2936.561487] BTRFS info (device sdb): using crc32c (crc32c-intel) checksum algorithm
[ 2936.561501] BTRFS info (device sdb): use zstd compression, level 3
[ 2936.561506] BTRFS info (device sdb): allowing degraded mounts
[ 2936.561509] BTRFS info (device sdb): using free space tree
[ 2936.562840] BTRFS warning (device sdb): devid 1 uuid 550c778e-933c-4a97-9485-ff2c2b092f6f is missing
[ 2936.563670] BTRFS info (device sdb): bdev /dev/sdb errs: wr 0, rd 0, flush 0, corrupt 3, gen 4Eddig a műokosra támaszkodtam, de már ott tart, hogy mentsek le mindent és hozzam létre újra a RAID 1-et, ami azért vicces megoldás.
Meg tudja valaki mondani, hogy ilyen helyzetben hogyan lehet életrekelteni egy RAID 1-et? Igaziból azt hiszem az a kérdés, hogy RW módban hogyan tudom felcsatolni, hisz ha ez egy éles üzemben történik, és még nincs cserelemez, a rendszernek akkor is mennie kellene.
- 1180 megtekintés
Hozzászólások
Amikor utoljára szívtam ezzel, azért volt mert a btrfs csak egyszer enged degraded módban rw csatolni, ezt meg már eljátszottad.
Akkor ez a kernel patch segített:
https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg60979.html
De lehet azóta már javították (mert ez pár éve volt :))
- A hozzászóláshoz be kell jelentkezni
Köszönöm. Ezek szerint a BTRFS-t még nem érdemes éles környezetben használni. Van alternatívája, vagy élesben még mindig az mdraid a célszerű választás?
- A hozzászóláshoz be kell jelentkezni
Mostanában már csak az LVM RAID opcióját használom itthon:
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/htm…
- A hozzászóláshoz be kell jelentkezni
Neba. Fudegaz.
- A hozzászóláshoz be kell jelentkezni
Szerintem az újnak más az uuid-je, ezért nem találja, először távolítsd el a hiányzót, majd add hozzá az újat.
Ezt próbáld ki:
btrfs device remove missing /storagebtrfs device add /dev/sda /storagebtrfs balance start /storage
- A hozzászóláshoz be kell jelentkezni
Ha RW módban fel lehetne csatolni, akkor lehetne módosítani rajta, és akkor le is futnának ezek a parancsok. A gond, hogy csak RO módban csatolható, amikor nem lehet módosítani rajta.
- A hozzászóláshoz be kell jelentkezni
Erre milyen hibát ír?
mount -o degraded,rw /dev/sdb /storageIlletve ezekre mit ír?
btrfs check --readonly /dev/sda
btrfs filesystem show /storageEsetleg még a dmesg által kiírtak is segíthetnek.
- A hozzászóláshoz be kell jelentkezni
mount -o degraded,rw /dev/sdb /storage:
mount: /storage: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error.
dmesg(1) may have more information after failed mount system call.A "btrfs check --readonly /dev/sda" parancsot nem is értem, hisz az sda meghajto fizikailag tönkrement, most egy teljesen új van helyette, arról ugye sokat nem fog tudni mondani:
Opening filesystem to check...
No valid Btrfs found on /dev/sda
ERROR: cannot open file systemA "btrfs filesystem show /storage" parancsot pedig csak RO mount után tudtam futtatni:
Label: 'STORAGE' uuid: 7c471fa3-1f8e-4ac8-9f36-2104ec8274b8
Total devices 2 FS bytes used 1.49GiB
devid 1 size 0 used 0 path MISSING
devid 2 size 10.91TiB used 3.03GiB path /dev/sdbAmit igazán az ok mögé sejtett a műokos, hogy a "btrfs filesystem df /storage/" kimenetében van "single" és "RAID1" is, és hiába 0B a single, ha van.
Data, RAID1: total=2.00GiB, used=1.44GiB
System, single: total=32.00MiB, used=0.00B
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=1.00GiB, used=56.73MiB
GlobalReserve, single: total=5.50MiB, used=0.00B
WARNING: Multiple block group profiles detected, see 'man btrfs(5)'
WARNING: System: single, raid1- A hozzászóláshoz be kell jelentkezni
mount: /storage: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error.
dmesg(1) may have more information after failed mount system call.
Ahogy írja is, jó volna ezután a dmesg kimenete. Valami baja lett a fájlrendszernek.
Egyébként már a replace logban is látszik, hogy hibás az sdb is:
bdev /dev/sdb errs: ... corrupt 3, gen 4
Amit igazán az ok mögé sejtett a műokos, hogy a "btrfs filesystem df /storage/" kimenetében van "single" és "RAID1" is.
Az enyém ezt írja:
Miért lehet "single, raid1" egyszerre?
Ez tipikusan akkor történik, ha:
- régen single-ként indult a FS
- később lett RAID1-re konvertálva
- disk csere / replace / degraded állapot volt
- balance nem futott le teljesen
A System blokkok nem mindig konvertálódnak automatikusan.
Vélhetően a single a meghibásodott lemezen volt, ami így elveszett:
Ezt próbálhatod még meg:
mount -o degraded,rw,rescue=all,clear_cache /dev/sdb /storageUi.: Az, hogy mind a két diszk hibás lett, az gyakran RAM vagy controller hiba következménye.
- A hozzászóláshoz be kell jelentkezni
Szerintem a single azért lett mellé mert már egyszer felmountolta degraded,rw-vel ami írt a lemezre. :)
- A hozzászóláshoz be kell jelentkezni
Azt kipróbáltam magamnál, olyankor nem lesz single.
- A hozzászóláshoz be kell jelentkezni
Akkor sem ha csak egy élő drive van?
- A hozzászóláshoz be kell jelentkezni
Akkor sem.
- A hozzászóláshoz be kell jelentkezni
Ezek szerint, ha Te kiveszed az egyik lemezt, a másikat többször is fel tudod RW-re mountolni, és minden esetben tudsz is rá írni?
Akkor lehet, hogy az volt a különbség, hogy nálam az sda lemezt azért kellett kivenni, mert döglődött, és emiatt kreülhetett fel rá SINGLE is a RAID mellé?
Összességében ez azért nem megnyugtató.
- A hozzászóláshoz be kell jelentkezni
Ezek szerint, ha Te kiveszed az egyik lemezt, a másikat többször is fel tudod RW-re mountolni, és minden esetben tudsz is rá írni?
Most teszt kedvéért csak image fájlban vannak a "lemezek", de igen, bármennyiszer "kivehetem", rw módban írhatok rá, törölhetek és nem lesz single rajta.
Akkor lehet, hogy az volt a különbség, hogy nálam az sda lemezt azért kellett kivenni, mert döglődött, és emiatt kreülhetett fel rá SINGLE is a RAID mellé?
Nem az volt, hogy single fájlendszerrel indítottál és azt alakítottad át raid1 -gyé?
Így hoztad létre a fájlrendszeredet?
mkfs.btrfs -d raid1 -m raid1 /dev/sda /dev/sdb- A hozzászóláshoz be kell jelentkezni
Kipróbáltam az új mount parancsot. A hibaüzenet ugyanaz, amint eddig. A dmesg tartalma:
[ 25.450048] BTRFS info (device sdb): first mount of filesystem 7c471fa3-1f8e-4ac8-9f36-2104ec8274b8
[ 25.450077] BTRFS info (device sdb): using crc32c (crc32c-intel) checksum algorithm
[ 25.450088] BTRFS info (device sdb): allowing degraded mounts
[ 25.450094] BTRFS info (device sdb): enabling all of the rescue options
[ 25.450096] BTRFS info (device sdb): ignoring data csums
[ 25.450098] BTRFS info (device sdb): ignoring bad roots
[ 25.450100] BTRFS info (device sdb): disabling log replay at mount time
[ 25.450103] BTRFS info (device sdb): force clearing of disk cache
[ 25.450105] BTRFS error (device sdb): nologreplay must be used with ro mount option
[ 25.450168] BTRFS error (device sdb): open_ctree failed: -22Érdekes módon, ha újra kiadom a mount parancsot, egy sorral több szerepel a dmesg elején:
[ 204.615477] BTRFS: device label STORAGE devid 2 transid 383 /dev/sdb scanned by mount (870)
[ 204.615959] BTRFS info (device sdb): first mount of filesystem 7c471fa3-1f8e-4ac8-9f36-2104ec8274b8
[ 204.615998] BTRFS info (device sdb): using crc32c (crc32c-intel) checksum algorithm
[ 204.616016] BTRFS info (device sdb): allowing degraded mounts
[ 204.616025] BTRFS info (device sdb): enabling all of the rescue options
[ 204.616029] BTRFS info (device sdb): ignoring data csums
[ 204.616033] BTRFS info (device sdb): ignoring bad roots
[ 204.616036] BTRFS info (device sdb): disabling log replay at mount time
[ 204.616041] BTRFS info (device sdb): force clearing of disk cache
[ 204.616045] BTRFS error (device sdb): nologreplay must be used with ro mount option
[ 204.616111] BTRFS error (device sdb): open_ctree failed: -22Amúgy a két lemez azért ment tönkre, mert a csomagszállító ledobta vagy valami hasonló brutálisat művelt vele. Az egyiken még a horpadás is látszott. Az új két lemez egyelőre nem úgy tűnik, mintha menne tönkre, így remélem, mégsem vezérlő vagy RAM.
- A hozzászóláshoz be kell jelentkezni
Egyetlen technikailag értelmes próbálkozás van még:
Csak nologreplay, nem rescue=all
mount -o degraded,rw,rescue=nologreplay /dev/sdb /mnt
Ha ez sem megy, akkor:
Próbáld explicit ro nélkül, de rescue nélkül
mount -o degraded,rw,clear_cache /dev/sdb /mnt
Ha ezek sem mennek, akkor nem marad más, mint az ro mount, mentés és visszaállítás.
- A hozzászóláshoz be kell jelentkezni
Ez egy teszt környezet. Rögtön RAID-nek hoztam létre az
mkfs.btrfs -f -d raid1 -m raid1 /dev/sda /dev/sdbparanccsal. A fenti két mount egyike sem segített.
El van téve pár régebbi kimenete a
btrfs filesystem usage /storageparancsnak.
A RAID létrehozása után még nincs single.
Majd kivettem az egyik meghajtót, és úgy írtam a RAID-re. Akkor a kimenetben megjelent a
System,single: Size:32.00MiB, Used:16.00KiB (0.05%)
/dev/sda<---> 32.00MiBtartalom.
Aztán lefutott egy replace, akkor lett:
Metadata,single: Size:1.00GiB, Used:0.00B (0.00%)
/dev/sdb<---> 1.00GiBMajd utána egy balance, ami végére újra eltűnt a single blokk.
A másik lemez hibájánál csak annyiban tértem el ettől, hogy az új lemez behelyezése után a RAID-et RW-be felcsatolva nem indítottam el azonnal a replace parancsot, hanem leállítottam.
Számomra ez úgy tűnik, hogy tényleg az RW mountolások száma van korlátozva sérülés után, mint ahogy ezt fentebb írták is.
A kérdés szerintem az, létre lehet-e úgy hozni RAID1-et az új sda lemezen, hogy csak egy lemez van benne, de kezelje féllábú RAID 1-ként. Ha igen, és ezt RW-ben fel lehet csatolni, a másikat meg csak RO-ban, akkor végülis át lehet mindent másolni, majd a másikat betenni az új RAID 1 másik lábának.
- A hozzászóláshoz be kell jelentkezni
Számomra ez úgy tűnik, hogy tényleg az RW mountolások száma van korlátozva sérülés után, mint ahogy ezt fentebb írták is.
Ez lehetséges, sérülés nélkül tetszőleges sokszor tudtam rw-be mountolni.
A kérdés szerintem az, létre lehet-e úgy hozni RAID1-et az új sda lemezen, hogy csak egy lemez van benne, de kezelje féllábú RAID 1-ként.
Szerintem nem lehet, de sima btrfs rendszernek igen, majd azt át lehet konvertálni raid1-gyé.
Ha igen, és ezt RW-ben fel lehet csatolni, a másikat meg csak RO-ban, akkor végülis át lehet mindent másolni, majd a másikat betenni az új RAID 1 másik lábának.
A sima, üres btrfs-t fel tudod csatolni rw-be, oda átmásolod az ro-s részt, majd a sima btrfs mellé beteszel egy új, jó második lemez-t és hozzáadod a simához.
btrfs device add /dev/sdb /storage
Majd először a metadatát konvertálod át:
btrfs balance start -mconvert=raid1 /storage
Majd az adatokat is:
btrfs balance start -dconvert=raid1 /storage
Elvileg ennyi.
- A hozzászóláshoz be kell jelentkezni
Mivel semmit sem értek a btrfs-hez, azt mondanám, hogy teljes törlés után nulláról kellene kezdeni, de valami kevésbé fejlett (értsd: kiforrott) technológiával.
- A hozzászóláshoz be kell jelentkezni
Alapvetően lehet fejlettebbet is használni, pl ZFS-t. Bárnit, amit régebbóta fejlesztenek és több a jó tapasztalat vele, mint a BTRFS-sel.
- A hozzászóláshoz be kell jelentkezni
Szerintem eléggé fejlett (kiforrott) technológia.
A fenti story-ból az látszik, hogy vélhetően ez történhetett:
- nem raid1 -ként lett eleve létrehozva, hanem egy sima btrfs fájlrendszerként (ezért van ott a single),
- majd ez lett átalakítva raid1-gyé, egy másik lemez hozzáadásával,
- a konverzió pedig nem ment le jól, mert közben lemez hiba történt, így megmaradt a single chunk,
- ezzel pedig nem lehet utólag mit csinálni, ha kivételre került a hibás lemez, amin a single chunk van,
Átalakítás után meg kell nézni, hogy tényleg sikerült-e a konverzió (nincs single),
btrfs filesystem dfha nem, akkor ezt futtatni:
btrfs balance start -dconvert=raid1 -mconvert=raid1 -sconvert=raid1- A hozzászóláshoz be kell jelentkezni
Tehát ez az a fele a tükörnek, ami a szinkron izélés előtti,vagy az az utáni? Ha az az előtti (eredeti) fele, akkor a single rendben van, de tudnia kéne, hogy a tükör másik fele nem készült el rendben, tehát nem is kellene keresnie. Ha meg ez a fele az, amire nem készült el rendesen a szinkron, akkor mit keres rajta az az infó, hogy "de eredetileg nem tükör volt"?
- A hozzászóláshoz be kell jelentkezni
Ez az átállás közbeni probléma. Nem futott le rendesen, mivel hibás volt az a lemez, amelyiken a single is volt (mint kiderült a másik is).
Még akkor esetleg helyre lehetett volna kézzel hozni, ha balance-ot futtatnak, amivel a system single konvertálást elvégzik (befejezik, ami félbe maradt).
Ehelyett el lett távolítva, így nem is tudja most már helyrehozni.
Nem mondom, hogy ez teljesen rendben van így, biztosan meg lehetne oldani jobban is. Azt viszont nehéz elvárni, hogy két hibás lemezen jól működjön, miközben félig raid1 félig még single és az egyik fele (amelyiken a single is van) már el is lett távolítva.
- A hozzászóláshoz be kell jelentkezni
Azaz user error is, hiszen a tükör nem lett kész, illetve a tükör sikeres elkészültét nem ellenőrizte... De a tükör "új" felén mit keres a "single" metaadat? Az mikor és miért kerül(t) oda? Ha a tényleges fájlrendszer "átment", szinkron izélődött volna, akkor a "single" ingó fölösleges, mi több, káros, ha meg nem ment át, akkor meg miért is kell ott ez az infó? Ez a diszk ugyanis sohasem volt szingli, már úgy "született" hogy volt neki párja... Ha meg az eredeti diszk hibás volt amúgy is, akkor a raid létrehozásának kellett volna ezerrel vilmáznia, (Wilmaaa! engedj be (Frédi)) hogy gond van a forrás oldalon... Tanulság: sz@r diszkről backup-ot csinálunk, nem raid tükröt - raid megoldástól (hw, dm, lvm, *fs, stb.) függetlenül.
- A hozzászóláshoz be kell jelentkezni
Ez a diszk ugyanis sohasem volt szingli, már úgy "született" hogy volt neki párja.
Na ez az, ami vélhetően nem így volt. Akkor eleve RAID lenne a system chunk.
- A hozzászóláshoz be kell jelentkezni
Bővebben: kivülállóként az a benyomásom, hogy ez a btrfs "lelkes közösség sokéves munkája nyomán létrejött mindent is tudó" fájlrendszer 1.0-as verziója.
- A hozzászóláshoz be kell jelentkezni
Mindezt levontad két, fizikailag sérült lemez alapján.
Egyébként itt van a státusza, ami még egy kívülállónak sem azt mutatja, hogy 1.0-ás lenne.
- A hozzászóláshoz be kell jelentkezni
Nem egészen, mert nem ez az első btrfs-es topik itt a hupon. Az ilyesféle topikokból összeintegrálva alakult ki egy ilyen érzésem.
Megjegyzés: már az is rosszt érzést kelt bennem, ha egy terméknek rajongói vannak; vagy ha a termék nem csak termék, hanem egy mozgalom; vagy ha a termékben pont az a jó, hogy megkönnyítésképpen számos funkciót egyesít magában, neked mindössze szóról szóra meg kell tanulnod egy vastag kézikönyvet; vagy ha azt nevezik meg a termék előnyének, hogy jól használható lesz, mihelyt hozzáigazítottad a rendszeredet a termékhez. (Szerk: na bakker, most szépen leírtam, hogy mit gondolok a git-ről. Vagy a systemd-ről. Vagy rengeteg más csodatermékről.)
- A hozzászóláshoz be kell jelentkezni
Az hogy a kotetkezelest es a filerendszert osszegyurtak az pont egy eloremutato racionalis fejlesztes, mert ket osszetartozo funkcio es igy sokkal hatekonyabb a (re)szinkronizacio. Azt sem lehet mondani erre, hogy egy ujkeletu otlet lenne, mert az AdvFs tobb mint 30eve tudja betonstabilan. Ha a compaq es hp nem tolja fullba a kretent, akkor lehet nem kene most bohockodni zfs/btrfssel. Szoval szerintem a systemd nem igazan jo pelda, mert abba olyan funkciokat gyurtak bele, amiknek alapvetoen az initrendszerhez semmi koze, es kezzelfoghato elony sem szarmazik abbol hogy nem maradt, tobb fuggetlen komponenskent meg a funkcionalitas.
- A hozzászóláshoz be kell jelentkezni
Az lvm az teljesen jó megoldás - illendően minden komponens azt és csak azt csinálja, ami a feladata ... A fütyürüfs-be integrált raid meg médialejátszó, meg kisf.om az szerintem fölösleges bonyolítása a dolgoknak... Jó hogy nem raknak az fs-be mondjuk komplett SQL motort, hogy sql query-vel lehessen fájlokat és azok tartalmát kezelni... Oh, wait...
- A hozzászóláshoz be kell jelentkezni
A RAID fájlrendszerbe építése – mint a Btrfs esetében – több szempontból is előnyös a hagyományos, alatta lévő (pl. mdadm-es) RAID-hez képest. Pl.:
Tud a fájlrendszer a redundanciáról (end-to-end integritás)
A klasszikus felállás esetén a fájlrendszer nem tudja, hogy melyik blokk melyik lemezen van, és nem ellenőrzi, hogy a RAID valóban jó adatot ad vissza.
A Btrfs viszont:
- minden blokkhoz checksumot tárol
- olvasáskor ellenőrzi az adat épségét
- ha hiba van, automatikusan a jó példányból javítja
Ez valódi end-to-end adatvédelem – nem csak lemezhibák ellen, hanem csendes bitflip (silent corruption) ellen is.
Finomabb RAID-kezelés (nem csak "mindent tükrözünk")
A Btrfs külön kezeli:
- adat blokkok
- metaadat blokkok
Például:
- adat: RAID1
- metaadat: RAID1c3 (három példány)
Ez nagyobb rugalmasság, mint a klasszikus RAID-szintek.
Online bővítés és átalakítás
A Btrfs egyik nagy előnye:
btrfs device add /dev/sdc /mnt
btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
Lehet:
- új lemezt hozzáadni
- RAID szintet menet közben változtatni
- adatot újraosztani
Nem kell teljes újraépítés, mint sok hardveres vagy mdadm RAID-nél.
- A hozzászóláshoz be kell jelentkezni