NILFS2 — nepremagljiva datotečna sistem za /home

NILFS2 — nepremagljiva datotečna sistem za /home

Kot je znano, če se lahko zgodi nadloga, se bo zagotovo zgodila. Verjetno je vsakdo doživel trenutke, ko je pomotoma izbrisal pomembno datoteko ali pa je pomotoma označil in uničil besedilo v urejevalniku besedil.

Če ste gostitelj ali lastnik spletnega mesta, ste verjetno naleteli na hekerske napade na uporabniške račune ali na svoje spletno mesto. V takšnih primerih je pomembno obnoviti časovno kronologijo, ugotoviti način vstopa in ranljivost, ki jo je uporabil napadalec.

Za reševanje takšnih težav je odlična izbira datotečni sistem NILFS2.

Ta je prisotna v jedru Linuxa od različice 2.6.30.

Posebnost tega datotečnega sistema je, da je podoben sistemu za nadzor različic: vedno lahko vrnete stanje sistema nazaj in si ogledate, kakšno je bilo pred časom.

Za zagotavljanje te funkcionalnosti vam ni treba nastavljati Cron skriptov, ustvarjati posnetkov in podobno. Datotečni sistem NILFS2 to počne sam. Nikoli ne prepisuje starih podatkov in vedno zapisuje v nove prostore diska, če je dovolj prostega diska. V popolnem skladu s principom Copy-on-Write.

Dejansko vsaka sprememba datoteke samodejno ustvari nov posnetek datotečnega sistema, zato lahko to FS uporabljate kot časovno mašino in se vrnete v prejšnje stanje datotek.

Zgodovina

NILFS2 — nepremagljiva datotečna sistem za /homeNILFS2 je bil razvit v okviru Nippon Telegraph and Telephone Corporation, v bistvu državne (ima nadzorni paket) in največje telekomunikacijske podjetje na Japonskem. Natančneje v laboratoriju CyberSpace Laboratories pod vodstvom Ryusuke Konishi..

Zakaj je bil ta sistem natančno razvijan, ni znano, vendar pa lahko domnevamo, da je takšna FS, s svojo funkcionalnostjo časovne mašine, idealna za shranjevanje podatkov, pri katerih bi lahko prišlo do želje, da bi jih preiskale varnostne službe, da ponovno predvajajo celotno sliko SMS-ov, e-mailov in podobno…

NILFS2 je tudi potencialno zelo dragoceno orodje za notranje varnostne službe, saj omogoča obnovitev vseh izbrisanih e-mailov v podatkovni bazi, razkrivanje napak zaposlenih, ki jih lahko kasneje poskušajo prikriti, tako da izbrišejo ali spremenijo svoje datoteke.

Kako lahko sledimo celotni zgodovini komunikacije?Na Linux strežnikih (tja je priporočljivo namestiti NILFS2 za notranjo varnost) se za shranjevanje elektronskih sporočil zelo pogosto uporablja datotečni način shranjevanja e-pošte. Tako imenovani format Maildir. Dovolj je, da namestite Courier Mail Server in konfigurirate shranjevanje sporočil v Maildir. Drugi format mbox je velik besedilni datoteke, ki se enostavno parsira na posamezna sporočila.

Če poštni strežnik uporablja bazo podatkov, bo NILFS2 omogočil obnovitev natančnega časovnega zapisa sprememb baze in možnost obnovitve baze na kateri koli od teh trenutkov. Potem je potrebno uporabiti orodja BDP, da se vidi, kaj je v tistem trenutku bilo v njej...

Vendar pa je nekaj šlo narobe. Mogoče je japonska vlada obupala z nadzorom (po načelu Yarovaya), ali pa je bila zmogljivost NILFS2 na tradicionalnih HDD-ih tako slaba, da je bila NILFS2 izdana pod GPL licenco in je zelo hitro prišla v jedro Linuxa, saj ni bilo nič posebnega pritožb na kodo, ki so jo napisali visoko usposobljeni Japonci.

Na kaj spominja NILFS2?

Z vidika uporabe: na sistem za nadzor različic SVN. Vsak kontrolni točko FS je commit, ki se samodejno izvede brez vednosti uporabnika pri vsaki spremembi: bodisi pri brisanju, spremembi vsebine datoteke ali pravic dostopa. Vsak commit ima številko, ki se linearno povečuje.

Z vidika programerja: na ciklično pomnilniško strukturo. Datotečni sistem zbira spremembe in jih zapisuje v kos velikosti približno 8 MB (2000 * 4096, kjer je 2000 število elementov v bloku, 4096 pa je velikost pomnilniške strani). Celoten disk je razdeljen na takšne bloke. Zapis se izvaja zaporedno. Ko se konča prosti prostor, se najstarejši posnetki izbrišejo, bloki pa se prepišejo.

Glavne prednosti NILFS2

  • Različnost!!!
  • Postopek obnove FS po izpadu je enostaven: ob zagonu se poišče zadnji blok, ki ima veljaven kontrolni znesek, in na njega se namesti superblok. To je praktično trenutna operacija.
  • Ker se zapis vedno izvaja linearno, lahko:
    • prikazuje dobre rezultate pri delu na SSD-jih, z počasnim naključnim zapisovanjem.
    • NILFS2 prihrani vire SSD, ker skoraj ni dejavnika multipliranja zapisa.
      To be precise, it is no more than 2.The thing is, when cyclically rewriting the entire disk, NILFS2 will move unchangeable data into new chunks.

      If we have 10% unchanged data on the disk, we will get a 10% write increase after a full rewrite. Similarly, we will achieve a 50% growth with 50% device occupancy after one full disk rewrite.

      The maximum write amplification is 2. This is very low considering that everything is written sequentially. Overall, the write amplification will be less than that of a standard fragmented file system with a 4096-byte sector. comment).

  • The potential simplicity of implementing replication to a remote NILFS2 file system.

NILFS2 for /home

In Unix-like operating systems, there is usually a /home folder where user data is stored. Various programs save their settings related to specific users in this folder.

And who, if not users, often makes mistakes? Therefore, as they say, it is wise to use NILFS2 for /home.

Moreover, with the widespread use of SSDs, we no longer need to worry about significant drops in performance when using CoW file systems.

Yes, we can create snapshots of the file system as often as we want in ZFS and BTRFS, but there is always the risk that a lost file change occurs between snapshots. Snapshots also need administration: deleting old ones. In NILFS2, this happens automatically, literally every few seconds.

I created a logical volume using lvcreate (in the nvme volume group, thin pool). I recommend creating it on an LVM volume, as it can be easily expanded later. I suggest having 50% free space on the disk with NILFS2 for decent versioning depth.

lvcreate -V10G -T nvme/thin -n home

and formatted it to NILFS2:

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

mkfs.nilfs2 (nilfs-utils 2.1.5)
Start writing file system initial data to the device
      Blocksize:4096  Device:/dev/nvme/home1  Device Size:10737418240
File system initialization succeeded !!

After that, you need to copy all the data from the current /home.

To je bilo storjeno takoj po zagonu računalnika, preden sem se prijavil v svoj račun, kot uporabnik root. Če bi se prijavil kot svoj uporabnik, bi nekatere programe odprle povezave in datoteke v mapi mojega uporabnika /home/user, kar bi otežilo čisto kopiranje. Kot je znano, se domača mapa za uporabnika root običajno nahaja na poti /root, zato na particiji /home ne bodo odprte nobene datoteke.

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

Glede zadnje vrstice glej. članak.

Nato uredimo /etc/fstab, v kateri se montira datotečni sistem za /home, na

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

Možnost noatime je potrebna za povečanje zmogljivosti, da se pri vsakem dostopu do datotek ne spreminja atime. Nato se ponovno zaženemo.

Vrste posnetkov v NILFS2.

Običajen posnetek brez zaščite pred brisanjem imenujemo kontrolna točka (checkpoint ali točka obnovitve).
Posnetek z zaščito pred samodejnim brisanjem imenujemo snepšot (snapshot), nato pa preprosto posnetek.

Ogled kontrolnih točk se izvede s pomočjo ukaza lscp

Ogled posnetkov (snepšotov) lscp -s

Naslednje lahko sami ustvarimo posnetke in kontrolne točke kadarkoli s pomočjo:

mkcp [-s] naprava

Obnovimo podatke.

NILFS nam omogoča montiranje neomejenega števila starejših posnetkov hkrati s delom z glavno vejo FS. A le v načinu za branje.

Vse je zasnovano tako. Običajne kontrolne točke, ki jih ustvari NILFS2, se lahko samodejno izbrišejo kadarkoli (ko zmanjka prostora na disku ali po pravilih nilfs_cleanerd), zato moramo pred montažo kontrolno točko spremeniti v snepšot ali, po slovensko, fiksirati posnetek.

chcp ss številka_kontrolne_točke

Nato lahko montiramo posnetek, na primer, tako:

mount -t nilfs2 -r -o cp=številka_kontrolne_točke /dev/nvme/home /mnt/nilfs/številka_kontrolne_točke

Potem kopiramo obnavljane datoteke iz posnetka v /home.
Kasneje lahko odstranimo oznako nedotakljivosti s posnetka, da lahko samodejni zbiralec smeti v prihodnje odstrani zastarele podatke:

chcp cp številka_kontrolne_točke

Orodja za NILFS2

To je težava. Da, seveda, lahko ustvarjamo FS, spreminjamo njeno velikost on-line, ogledujemo seznam kontrolnih točk, jih ustvarjamo in brišemo. Paket nilfs2-utils ponuja minimalen obsežen nabor.

Ker NTT je prenehala financiranje, nihit dovolj hitro nizkodatumskih programov, ki omogočajo izvoz zgodovine sprememb datotek in izvajanje primerjav med posnetki.

Moj pripomoček n2u

Za zapolnitev te praznine sem napisal svoj pripomoček n2u, ki lahko prikazuje zgodovino sprememb določene datoteke/direktorija:

n2u log filename

Izpis je približno takšen:

          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

Deluje precej hitro za izbrani način izvedbe: išče razlike med datotekami z metodo bisection, hitro montira in primerja datoteko/direktorij v različnih posnetkih.

Mogoče je določiti obseg kontrolnih točk z uporabo ključa -cp CP1:CP2 ili -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Prav tako lahko vidite razliko med kontrolnimi točkami za določeno datoteko ali direktorij:

n2u diff -r cp1:cp2 filename

Možno je izvesti celotno kronologijo sprememb: vse razlike med kontrolnimi točkami določene datoteke/direktorija:

n2u blame [-r cp1:cp2] filename

Interval datuma v tej izbiri je prav tako podprt.

Klic k razvijalcem

Na Habrju je veliko strokovnjakov. Prosim, dodelajte NILFS2. Izvedite replikacijo, nizkodatumski hiter diff med revizijami, reflink in druge funkcionalnosti!

Povezave

Uradna stran NILFS.

Repozitoriji:
NILFS2.
NILFS2 pripomočki in moduli.

Obvestila:
E-poštno obvestilo razvijalcev NILFS2. Identifikator za naročnino linux-nilfs.
Arhiv obvestil.

Priročnik za nastavitev nilfs_cleanerd.
Določeni testi zmogljivosti EXT4, Btrfs, XFS & NILFS2.

Zahvaljujem se:

  • Razvijalci NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi in Satoshi Moriai. Drugi glavni prispevki: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Podjetjem Amblin Entertainment in Universal Pictures za čudovito serijo filmov „Nazaj v prihodnost“. Prva slika objave je vzeta iz filma „Nazaj v prihodnost — 3“.
  • Podjetju RUVDS za podporo in možnost objave na svojem blogu na Habr.

P.S. Zaznane napake pošljite v zasebno sporočilo. Za to dvigujem karizmo.

Lahko eksperimentirate z NILFS2, tako da naročite virtualni stroj pri RUVDS z kuponom spodaj. Vsem novim strankam je na voljo brezplačno preizkušanje za 3 dni.

NILFS2 — nepremagljiva datotečna sistem za /home

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster