Linux: btrfs — seniai norėjau…

Posted: 2014-05-13 in Pezalai
Žymos:

Senesni linuksoidai turbūt žino apie tokią failų sistemą ReiserFS. Gera buvo failų sistema, daug žadanti. Tik vat, Hansas Raizeris paėmė ir pripjovė savo žmoną ir jį patupdė į kalėjimą. Nu ir baigėsi failų sistemos tobulinimas. Nors kiti kodytojai bandė vykdyti jo darbą toliau, bet… jie — ne Raizeris. Atsirado tokia Reiser4 sistema, bet kažkaip nelabai kas ją naudoja…

Kaip ten bebūtų, ext4 yra jau kiek pagyvenusi žurnalinė failų sistema. Daugumai poreikių ji tinka, našumas gan geras ir šiaip viskas su ja tvarkoje. Bet šiais laikais yra nauja failų sistemų karta, turinti visą eilę ganėtinai įdomių savybių.

btrfs, Linux | Darau, blė

Kuo pasižymi visokios „naujosios kartos“ (arba „penktosios kartos“) failų sistemos? Ogi ypatingu atsparumu duomenų susigadinimui, galimybe pasiskirstyti per keletą fizinių įrenginių, dinamišku skirsnių perskirstymu, automatine savitaisa ir „kopijavimu įrašant“. Grubiai tariant, penktosios kartos failų sistemos yra tiesiog geresnės, atsparesnės ir lengviau plečiamos.

Paprastam vartotojui tai lyg ir neįdomu. „Lyg ir“ — kaip visada, kol kokia nors nesėkmė neištiko. Yra toks terminas „pūvantys bitukai“ (bitrot). Tai — ypač bjaurus ir žalingas reiškinys, nuo kurio negelbsti nei RAID, nei atsarginės kopijos — jei netyčia kopija buvo jau paimta nuo „puvėko“.

Pūvantys bitukai — standžiųjų diskų susidėvėjimo rezultatas. Standieji diskai nuolat dėvisi. Sakykim, sulėtėjo diskas po kelerių metų naudojimo: tai ne defragmentuoti jį reikia, o kuo greičiau keisti. Disko sulėtėjimas atsiranda tuomet, kai jo vidinė programinė įranga pradeda pakartotinai nuskaitinėti duomenis — na, iš pirmo karto „neaiškiai“ nusiskaitė, tai bando dar ir dar kartą, o paskui gautus neaiškius bitukus vidurkina ir bando „atspėti“, kas gi ten buvo įrašyta. Va taip ir atsiranda „pūvantys bitukai“ — kai duomenys pradeda palengvėle „nykti“. Aišku, gali būti kaltas ir galvučių susidėvėjimas, ir žingsninių varikliukų nuokrypiai… daug ten visko gali sugesti. Aišku, jei diskas pabyrės, tai pabyrės, tada jokia failų sistema nepadės. Bet jei bitukai pradės gadintis, tai penktosios kartos failų sistemos gali pagelbėti, nes jose saugoma šiek tiek perteklinių duomenų, kurie pagelbsti atstatant pažeistą informaciją.

Linux vartotojams yra du pasirinkimai: btrfs ir ZFSbtrfs yra atvira Linux failų sistema, kuriama su mintimi pakeisti ext4 failų sistemą. ZFS yra taip pat atviro kodo, tačiau tuo pačiu ir firminė Sun (dabar Oracle) failų sistema, skirta Sun OS. Jei neklystu, kažkada šios sistemos kodas buvo atvertas, o paskui Sun ir Oracle vystė ją sau toliau. Trūkumas tas, kad ši sistema pagal licenciją nesuderinama su GPL ir dėl to nelabai platinama su Linux. Trumpai tariant, ZFS yra labai gera failų sistema, bet šiek tiek svetima Linux pasaulyje.

Po šiokių tokių apmąstymų ir nedidelio spyrio į subinę nusprendžiau tapti btrfs vartotoju. Labiausiai ne dėl visokių ten snapshot’ų ar COW ar volume management, o dėl labai paprasto dalyko — failų sistemos lygio glaudinimo. Turiu pakankamai daug tokių failų, kuriuos mielai šiek tiek spustelėčiau ir sutaupyčiau vietos. Iki šiol visokie tyrinėti metodai Linux OS manęs netenkino, ypač, kad dar naudoju ir skirsnių šifravimą. Pridėti dar vieną papildomą (glaudinimo) sluoksnį būtų tik papildomas vargas. O štai btrfs palaiko glaudinimą iš prigimties. Smagiausia, kad glaudinimą galima nurodyti paskiriems failams ir katalogams, neliečiant tų duomenų, kurie prastai glaudinami: vaizdo ir garso įrašų, nuotraukų, virtualių mašinų failų ir jau glaudintų dokumentų.

Seniai norėjau tokios failų sistemos, bet esamos kažkaip nedžiugindavo, o ZFS nekelia man pasitikėjimo ir viskas. Dar jos derinimas man nepatinka.

btrfs sistema vis dar skelbiama kaip eksperimentinė, nors tuo pačiu teigiama, kad esminės savybės yra sukurtos jau pilnai. Kitaip sakant, atnaujintos btrfs priemonės neturėtų susipykti su jau turima sistema ir padaryti ją nenuskaitoma. Pasidomėjęs jos stabilumu ir testais nusprendžiau pamėginti…

Dar viena btrfs savybė, kuri mane labai domina — momentinės kopijos (snapshot). Visada naudodavau rsync ar panašias priemones, bet jos tiesiog padaro atnaujinamų failų kopijas, bet nekaupia istorijos. O su momentinėmis kopijomis galima išsaugoti ir keletą to paties failo versijų bei daryti tas kopijas kur kas greičiau. Ir kopijos daromos ne pačių duomenų, o visos failų sistemos. Paskui norimos datos kopiją galima panaikinti — irgi labai patogu.

btrfs turi dar tokią savybę, kaip virtualūs skirsniai (subvolume). Viename skirsnyje galima sukurti keletą atskirų failų sistemų ir jas netgi prijungti kaip atskirus įrenginius. Esmė tame, kad fizinis skirsnis vienas, o subvolumų jame gali būti keli ir „besitampantys“ – nefiksuoto dydžio. Momentinės kopijos – tiesiog tam tikro tipo subvolumai. Taip pat failų sistemą galima išplėsti per kelis fizinius skirsnius ir, tuo pačiu, fizinius standžiuosius diskus. Na, gėris ir grožis. Ir nereikia papildomo LVM sluoksnio, kuris mane asmeniškai labai nervina. Gerai, kai visokie tokie navarotai palaikomi pačios failų sistemos, mažiau, taip sakant, judančių ir gendančių dalių.

Vartotojui nematomas duomenų glaudinimas – irgi labai geras dalykas. Ypač, kad galima glaudinti pavienius failus ar katalogus su jų turiniu. Tik čia slypi tokia maža kliurka: uždėsite failui ar katalogui glaudinimo atributą – o jis nesusispaudžia. Taip yra todėl, kad atributo keitimas nedaro poveikio pačiam failui. Kitą kartą, kai jį paredaguosite ir išsaugosite, glaudinimas jau bus pritaikytas. Taip pat bus ir su naujais failais, kurie bus kopijuojami į glaudinimui paruoštą katalogą.

Be abejo, galima prijungti btrfs skirsnį ir nurodyti, kad jis visas bus glaudinamas. Glaudinimo yra keli variantai: forsuotas, kai glaudinama viskas; normalus, kai glaudinama tai, kas gerai glaudinasi (šitą sprendžia btrfs modulis); glaudinama tai, kas pažymėta glaudinimui; forsuotas visko neglaudinimas. Mano galva geriausia pasijungti btrfs skirsnį kaip neglaudinamą, o glaudinimui pažymėti tai, ką norite. Na, juk žinote, kur pas jumis daugiausiai glaudinamų duomenų guli, ar ne? Kaip minėjau, filmų, muzikos, nuotraukų ir, pavyzdžiui, docx failų glaudinti neverta – ir taip jau jie glaudinti savaime. Užtai verta glaudinti visokius tekstinius, konfigūracinius failus, programų išeities kodus ir panašiai.

Baisiai gerai yra tai, kad galima turimą extX failų sistemos skirsnį paversti į btrfs neprarandant duomenų. Ir netgi atstatyti atgal! Bet tik buvusią versiją iki konvertavimo. Aišku, atsarginę kopiją vis tiek rekomenduočiau pasidaryti, nebent su kokiu šiukšliniu disku žaisite.

Aš taip ir padariau. Nusprendžiau patobulinti savo atsarginių kopijų sistemą avietiniame serveryje, kad darytų ir kasnaktines momentines kopijas pats sau. Taip pat tą patį pasidariau ir su antruoju disku savo darbiniame laptope. Pagrindinį darbinį skirsnį kol kas palieku ext4, nes reikia tam tikro patikimumo ir noriu pasižiūrėti, kaip btrfs eksperimentai laikysis.

Apie btrfs įrankius, konkrečius pavyzdukus ir visokias gudrybes papasakosiu kitą kartą, šitas straipsnelis ir taip jau ilgas gavosi.

 

Komentarai
  1. Linas parašė:

    Laukiam kito karto, apie gudrybes ir įrankius.

    Man klausimas dėl bitrot iškilo, ir btrfs avietėje. Aš kaip suprantu, kad galima būtu apsisaugoti nuo bitrot reikia tą btrfs raid’ą daryti per 2 arba daugiau fizinių HDD ? Nu kad būtu iš kur tuos papildomus duomenis paimti, jei kas supus.

    • Darau, Blė parašė:

      Ok, kad jau prašote… nupūsiu dulkes nuo kelių btrfs paruoštukų.

      RAID’as bitroto neišsprendžia. Jį išsprendžia pertekliniai duomenys failų sistemoje. RAID’as neturi galimybės patikrinti, kur atsiranda bitukų klaida, net jei ją aptinka. Kitaip sakant, RAID patikrinimas vyksta ne tame lygyje, kaip pačios failų sistemos.

      Lengvu stiliumi tas reikalas kažkiek nušviestas čia:
      http://arstechnica.com/information-technology/2014/01/bitrot-and-atomic-cows-inside-next-gen-filesystems/

      • Linas parašė:

        Aš ir turėjau omenyje btrfs-raid per kelis HDD:
        “Healing is made possible by combining per-block checksumming with (redundant) volume and drive management. If you aren’t storing your data redundantly, all you can do with a checksum is realize that your data is corrupt. But if you are storing data redundantly either through mirroring (btrfs-raid1 or btrfs-raid10) or striping-with-parity (btrfs-raid5 or btrfs-raid6), btrfs can immediately detect corruption and repair it.“

        Ta prasme, kad jei HDD su btrfs pradeda puliuoti ir jis yra vienintelis duomenų šaltinis. Ar nebūtu per dauk pavojinga žaisti, turint tos papildomos info, bet tame pačiame HDD. Čia labai susirūpinusiems savo duomenų nepraradimu apskritai ?

        • Darau, Blė parašė:

          Kiek žinau, vienintelis šaltinis su btrfs gali dalį duomenų atstatyti. Regis, ten papildomų duomenų kiekis konfigūruojamas. Nors pagal šitą tavo citatą jis atseit gali tik nustatyti, kad yra klaida, bet ne ją pataisyti. Gal straipsnis senstelėjęs.

          Be abejo, tai nėra labai rimta ir didesniam saugumui vis tiek reikia vienokių ar kitokių kopijų. RAID yra patogu, nes nematai to kopijavimo. btrfs RAID — ganėtinai patrauklus daiktas.

Parašykite komentarą

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.