NILFS2 — neprůstřelný souborový systém pro /home

NILFS2 — neprůstřelný souborový systém pro /home

Jak je známo, pokud se může stát nepříjemnost, určitě se stane. Asi každý z nás měl chvíle, kdy omylem smazal důležitý soubor, nebo omylem vybral a zničil text v textovém editoru.

Pokud jste poskytovatel hostingu nebo majitel webových stránek, pravděpodobně jste se setkali s hackováním uživatelských účtů nebo vlastního webu. V takových případech je důležité obnovit chronologii, najít způsob proniknutí a zranitelnost, kterou útočník použil.

Pro řešení podobných problémů je ideální souborový systém NILFS2.

Je přítomen v jádře Linuxu od verze 2.6.30.

Zvláštností tohoto souborového systému je, že je podobný systému správy verzí: vždy se můžete vrátit zpět do stavu systému a podívat se, jaký byl před nějakou dobou.

Pro zajištění této funkce nemusíte nastavovat cron skripty, vytvářet snapshoty a podobně. Souborový systém NILFS2 to dělá všechno sám. Nikdy nepřepisuje stará data a vždy zapisuje do nových oblastí disku, pokud je dostatek volného diskového prostoru. V plném souladu s principem Copy-on-Write.

Fakticky jakákoliv změna souboru automaticky vytváří nový snímek souborového systému, takže tento FS můžete použít jako stroj času a vrátit zpět stavy souborů.

Historie

NILFS2 — neprůstřelný souborový systém pro /homeNILFS2 byla vyvinuta ve státech Nippon Telegraph and Telephone Corporation, vlastně státní (má kontrolní podíl) a největší telekomunikační společnost v Japonsku. A konkrétně v laboratoři CyberSpace Laboratories pod vedením Ryusuke Konishi.

Pro co konkrétně byla vyvíjena – není známo, avšak lze předpokládat, že podobný FS, s jeho funkcionalitou 'stroje času', je ideální pro uchovávání dat, ve kterých může vzniknout zájem tajných služeb, aby znovu přehrály celý obraz SMS, e-mailů a podobně…

NILFS2 je také potenciálně velmi cenný nástroj pro interní bezpečnostní služby, protože umožňuje obnovit všechny smazané e-maily v databázi e-mailů, odhalit chyby zaměstnanců, kteří se je později mohou pokusit zakrýt jejich smazáním nebo změnou svých souborů.

Jak lze sledovat celou historie korespondenceNa serverech s Linuxem (kde je také dobré nasadit NILFS2 pro interní bezpečnost) se pro ukládání e-mailových zpráv velmi často používá souborový způsob ukládání e-mailů. Takzvaný formát Maildir. Stačí pouze nainstalovat Courier Mail Server a nakonfigurovat ukládání zpráv do Maildir. Jiný formát mbox představuje velký textový soubor, který se snadno analyzuje na jednotlivé zprávy.

Pokud však poštovní server používá databázi, NILFS2 umožní obnovit přesný časový sled změn databáze a možnost obnovit databázi na jakýkoli z těchto bodů. A pak je potřeba využít nástroje DB, abychom zjistili, co bylo v ní v daném okamžiku...

Nicméně něco se pokazilo. Buď se japonská vláda rozhodla přestat sledovat všechny (ve smyslu principu Jarovoj), nebo se výkon NILFS2 na tradičních HDD ukázal jako velmi slabý, a NILFS2 byla vydána pod licencí GPL a velmi rychle se dostala do jádra Linuxu, protože vývojáři jádra Linuxu neměli vůči kódu, který napsali vysoce kvalifikovaní Japonci, žádné zvláštní výhrady.

Na co se podobá NILFS2?

Z hlediska použití: na systém řízení verzí. SVNKaždý checkpoint FS je commit, který se provádí automaticky bez vědomí uživatele při jakékoli změně: ať už jde o odstranění, změnu obsahu souboru nebo změnu práv přístupu. Každý commit má číslo, které se lineárně zvyšuje.

Z pohledu programátora: na cyklický buffer. Souborový systém shromažďuje změny a zapisuje je do kusu o velikosti přibližně 8 MB (2000 * 4096, kde 2000 je počet prvků v bloku a 4096 je velikost stránky paměti). Celý disk je rozdělen na takové chunku. Zápis probíhá sekvenčně. Když dojde volné místo, nejstarší snímky se odstraní a chunky se přepisují.

Hlavní výhody NILFS2

  • Verzování!!!
  • Obnova FS po selhání je triviální: při startu se hledá poslední chunk s platním kontrolním součtem a na něj se instaluje superblok. Tato operace je téměř okamžitá.
  • Vzhledem k tomu, že zápis probíhá vždy lineárně, tak:
    • může vykazovat dobré výsledky při práci na SSD s pomalým náhodným zápisem.
    • NILFS2 šetří zdroje SSD, protože téměř chybí faktor multiplikačního zápisu.
      Přesněji řečeno, není více než 2.Při cyklickém přepsání celého disku NILFS2 přesune neměnné údaje do nových bloků (chunků).

      Pokud máme na disku 10 % neměnných dat, dostaneme 10 % nárůst zápisu při jednom úplném přepsání. A máme 50 % nárůst při 50 % zaplněnosti zařízení na jedno úplné přepsání disku.

      Maximální koeficient zesílení zápisu je 2. To je velmi málo, když všechno zapisujeme sekvenčně. Celková násobnost zápisu bude menší než u běžního fragmentovaného FS se sektorem 4096 bajtů. (To mě přivedlo na myšlenku komentáře).

  • Potenciální jednoduchost realizace replikace na vzdálenou NILFS2 FS

NILFS2 pro /home

V Unixových podobných OS obvykle existuje složka /home, kde jsou uchovávána uživatelská data. Různé programy ukládají do této složky svá nastavení vztahující se k konkrétnímu uživateli.

A kdo jiný než uživatelé, že? Proto se, jak se říká, sám Bůh postavil k tomu, aby se na /home použil NILFS2.

Tím spíše, že s běžným rozšířením SSD se nyní nemusíme obávat silného poklesu výkonu při použití CoW souborových systémů.

Ano, snímky FS (snapshoty) můžeme vytvářet tak často, jak chceme, jak v ZFS, tak v BTRFS, ale vždy existuje riziko, že ztracená změna souboru se ocitne mezi snímky. A snímky je také potřeba spravovat: mazat staré. V NILFS2 se to děje automaticky, doslova každých pár sekund.

Vytvořil jsem logický svazek pomocí lvcreate (ve skupině svazků nvme, tenký pool thin). Doporučuji vytvořit ho právě na svazku lvm, protože později může být snadno rozšířen. Doporučuji mít 50 % volného místa na disku s NILFS2 pro rozumnou hloubku verzování.

lvcreate -V10G -T nvme/thin -n home

a naformátoval ho v NILFS2:

mkfs.nilfs2 -L nvme_home /dev/nvme/home

mkfs.nilfs2 (nilfs-utils 2.1.5)
Začíná se zapisovat počáteční data souborového systému na zařízení
      Velikost bloku:4096  Zařízení:/dev/nvme/home1  Velikost zařízení:10737418240
Inicializace souborového systému byla úspěšná!!

Poté je nutné zkopírovat všechna data z aktuálního /home.

To jsem udělal ihned po spuštění počítače, před přihlášením do svého účtu, jako uživatel root. Kdybych se přihlásil jako můj uživatel, nějaké programy by otevřely sokety a soubory ve složce mého uživatele /home/user, což by ztížilo čisté kopírování. Jak je známo, domovská složka pro uživatele root se obvykle nachází na cestě /root, takže na oddílu /home žádné soubory nebudou otevřeny.

mkdir /mnt/newhome
mount -t nilfs2 /dev/nvme/home /mnt/newhome
cp -a /home/. /mnt/newhome

Co se týče posledního řádku, viz. článek.

Nyní upravíme /etc/fstab, kde se montuje souborový systém pro /home, na

/dev/disk/by-label/nvme_home /home nilfs2    noatime 0 0

Volba noatime je potřebné pro zvýšení výkonu, aby při každém přístupu k souborům nedocházelo ke změně atime. Poté restartujeme.

Typy snímků v NILFS2.

Běžný snímek bez ochrany proti smazání se nazývá checkpoint (checkpoint nebo bod obnovení).
Snímek s ochranou proti automatickému smazání se nazývá snapshot, dále jen snímek.

Prohlížení checkpointů se provádí pomocí příkazu lscp

Prohlížení snímků (snapshotů) lscp -s

Můžeme také sami vytvářet snímky a checkpointy kdykoliv pomocí:

mkcp [-s] zařízení

Obnova dat.

NILFS nám umožňuje montovat libovolný počet starých snímků paralelně s prací s hlavní větví FS. Ale pouze v režimu pro čtení.

Je to uspořádáno takto. Běžné checkpointy, které NILFS2 vytváří, mohou být kdykoliv automaticky odstraněny (když dojde místo na disku nebo podle pravidel nilfs_cleanerd), proto před montáží musíme převést checkpoint na snapshot nebo, jak se česky říká, zafixovat snímek.

chcp ss číslo_checkpointu

Po tom můžeme přimontovat snímek, například takto:

mount -t nilfs2 -r -o cp=číslo_checkpointu /dev/nvme/home /mnt/nilfs/číslo_checkpointu

Poté kopírujeme obnovované soubory ze snímku do /home.
A poté odstraníme flag neodstranitelnosti ze snímku, aby v budoucnu automatický sběrač odpadu mohl odstranit zastaralá data:

chcp cp číslo_checkpointu

Nástroje pro NILFS2

Ale tady je problém. Ano, samozřejmě, můžeme vytvářet FS, měnit její velikost on-line, prohlížet seznam checkpointů, vytvářet je a odstraňovat. Balíček nilfs2-utils poskytuje minimální sadu nástrojů.

Jelikož NTT ukončila financování, neexistují žádné rychlé nízkoúrovňové nástroje, které by umožnily zobrazit historii změn souborů a provést diff mezi snímky.

Můj nástroj n2u

Abych vyplnil tuto mezery, napsal jsem svůj nástroj n2u, který dokáže zobrazit historii změn konkrétního souboru/adresáře:

n2u log název_souboru

Výstup vypadá přibližně takto:

          CHECKPOINT        DATE     TIME     TYPE          SIZE  MODE
             1787552  2019-11-24 22:08:00    first          7079    cp
             1792659  2019-11-25 23:09:05  changed          7081    cp

Funguje to docela rychle na základě vybraného způsobu implementace: hledá rozdíly mezi soubory metodou bisekce, rychle montuje a porovnává soubor/adresář v různých snímcích.

Můžete zadat rozsah checkpointů pomocí klíče -cp CP1:CP2 nebo -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Také můžete zobrazit rozdíl mezi checkpointy pro konkrétní soubor nebo adresář:

n2u diff -r cp1:cp2 název_souboru

Můžete zobrazit celou chronologii změn: všechny rozdíly mezi checkpointy konkrétního souboru/adresáře:

n2u blame [-r cp1:cp2] název_souboru

Interval dat v této příkazu je také podporován.

Výzva pro vývojáře

Na Habru je spousta specialistů. Prosím, vylepšete NILFS2. Umožněte replikaci, nízkoúrovňový rychlý diff mezi revizemi, reflink a další vylepšení!

Odkazy

Oficiální stránky NILFS.

Repozitáře:
NILFS2.
NILFS2 nástroje a moduly.

Zprávy:
E-mailový newsletter vývojářů NILFS2. Identifikátor pro přihlášení k odběru linux-nilfs.
Archiv newsletteru.

Příručka pro nastavení nilfs_cleanerd.
Srovnávací testy výkonu EXT4, Btrfs, XFS & NILFS2.

Poděkování:

  • Vývojářům NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi a Satoshi Moriai. Další významní přispěvatelé: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Firmám Amblin Entertainment a Universal Pictures za úžasnou sérii filmů „Návrat do budoucnosti“. První obrázek příspěvku je z filmu „Návrat do budoucnosti — 3“.
  • Společnosti RUVDS za podporu a možnost publikovat ve svém blogu na Habru.

P.S. Zpozorované chyby hlaste do soukromé zprávy. Zvyšuju za to karmu.

Můžete experimentovat s NILFS2 objednáním virtuálního stroje u RUVDS s kupónem níže. Pro všechny nové klienty je k dispozici bezplatné zkušební období na 3 dny.

NILFS2 — neprůstřelný souborový systém pro /home

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster