
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 byla vyvinuta ve státech , 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 .
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 . Stačí pouze nainstalovat a nakonfigurovat ukládání zpráv do Maildir. Jiný formát 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í. Kaž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 ).
- 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 homea 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. .
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_checkpointuPo 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_checkpointuNá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 , který dokáže zobrazit historii změn konkrétního souboru/adresáře:
n2u log název_souboruVý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 cpFunguje 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_souboruMůž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_souboruInterval 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
.
Repozitáře:
.
.
Zprávy:
. Identifikátor pro přihlášení k odběru linux-nilfs.
.
.
.
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ů . První obrázek příspěvku je z filmu „Návrat do budoucnosti — 3“.
- Společnosti 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 s kupónem níže. Pro všechny nové klienty je k dispozici bezplatné zkušební období na 3 dny.
Zdroj: habr.com
