NILFS2 — en kulsprutebestĂ€ndig filsystem för /home

NILFS2 — en kulsprutebestĂ€ndig filsystem för /home

Som bekant, om nÄgot dÄligt kan hÀnda, sÄ kommer det att hÀnda. Sannolikt har alla varit med om att ett viktigt fil oavsiktligt blivit raderat, eller att text oavsiktligt markerats och raderats i en textredigerare.

Om du Àr en hostingleverantör eller webbplatsÀgare har du sÀkert stött pÄ hackade anvÀndarkonton eller din egen webbplats. I sÄdana fall Àr det viktigt att ÄterstÀlla tidslinjen, hitta ingÄngssÀttet och sÄrbarheten som anvÀndes av gÀrningspersonen.

För att lösa sÄdana problem passar filsystemet NILFS2 utmÀrkt.

Det ingÄr i Linux-kÀrnan sedan version 2.6.30.

En sÀrskiljande faktor för detta filsystem Àr att det liknar versionskontrollsystem: du kan alltid ÄterstÀlla systemets tillstÄnd tillbaka och se hur det var för en tid sedan.

För att sÀkerstÀlla denna funktion behöver du inte stÀlla in Cron-skript, göra snapshots och sÄ vidare. Filsystemet NILFS2 gör allt detta sjÀlv. Det skriver aldrig över gamla data och skriver alltid till nya omrÄden pÄ disken om det finns tillrÀckligt med ledigt diskutrymme. Helt i linje med principen Copy-on-Write.

Faktum Àr att varje Àndring av en fil leder till automatisk skapelse av en ny snapshot av filsystemet, sÄ du kan anvÀnda detta filsystem som en tidsmaskin och gÄ tillbaka till tidigare filers tillstÄnd.

Historien

NILFS2 — en kulsprutebestĂ€ndig filsystem för /homeNILFS2 utvecklades inom Nippon Telegraph and Telephone Corporation, som faktiskt Ă€r ett statligt företag (det har kontroll över aktiemajoriteten) och Japans största teletjĂ€nsteföretag. Mer specifikt vid CyberSpace Laboratories under ledning av Ryusuke Konishi..

Vad det utvecklades konkret för Àr okÀnt, men man kan anta att ett sÄdant filsystem, med dess funktion som "tidsmaskin" Àr perfekt för att lagra data som sÀkerhetstjÀnster kan tÀnkas vilja grÀva i, för att Äterskapa hela bilden av SMS, e-post och sÄ vidare...

NILFS2 Àr ocksÄ potentiellt ett mycket vÀrdefullt verktyg för interna sÀkerhetstjÀnster, eftersom det möjliggör ÄterstÀllning av alla raderade e-postmeddelanden i databasen, avslöja anstÀllningsbrister som anstÀllda senare kan försöka dölja genom att radera eller Àndra sina filer.

Hur man kan spÄra hela kommunikationshistoriken.I Linux-servrar (dit NILFS2 bör installeras för intern sÀkerhet) anvÀnds ofta en filbaserad metod för lagring av e-postmeddelanden. Den sÄ kallade format Maildir. Det rÀcker med att installera Courier Mail Server och konfigurera lagringen av meddelanden i Maildir. Ett annat format mbox Àr en stor textfil som enkelt kan parsas till separata meddelanden.

Om e-postservern anvÀnder en databas, sÄ kommer NILFS2 att ge möjlighet att ÄterstÀlla den exakta tidslinjen för Àndringar i databasen och ÄterstÀlla databasen till vilket av dessa ögonblick som helst. DÀrefter mÄste man anvÀnda databasverktyg för att se vad som fanns dÀr vid den tidpunkten...

Men nÄgot gick fel. Antingen Àndrade den japanska regeringen sig om att övervaka alla (liknande Jarovys princip), eller sÄ visade sig prestandan hos NILFS2 pÄ traditionella HDD vara mycket lÄg, och NILFS2 slÀpptes under GPL-licens och kom snabbt in i Linux-kÀrnan, eftersom det inte fanns nÄgra sÀrskilda invÀndningar mot koden som skrevs av högutbildade japaner frÄn Linux-kÀrnans utvecklare.

Vad liknar NILFS2?

Ur anvÀndningssynpunkt: som ett versionskontrollsystem. SVNVarje checkpoint i filsystemet Àr en commit som görs automatiskt utan anvÀndarens vetskap vid varje Àndring: vare sig det handlar om borttagning, Àndring av filinnehÄll eller ÄtkomstrÀttigheter. Varje commit har ett nummer som ökar linjÀrt.

Ur programmerarens perspektiv: som en cirkulÀr buffert. Filsystemet samlar förÀndringar och skriver dem till en bit som Àr ungefÀr 8 MB (2000 * 4096, dÀr 2000 Àr antalet element i blocket och 4096 Àr storleken pÄ minnessidan). Hela disken Àr uppdelad i sÄdana bitar. Skrivning sker sekventiellt. NÀr det fria utrymmet tar slut, raderas de Àldsta snapshoten och bitarna skrivs över.

Huvudfördelarna med NILFS2

  • Versionshantering!!!
  • ÅterstĂ€llningsproceduren för filsystemet efter ett fel Ă€r enkel: vid start söks den senaste biten med giltig kontrollsumma, och superblocket installeras pĂ„ den. Detta Ă€r praktiskt taget en omedelbar operation.
  • Eftersom skrivningen alltid sker linjĂ€rt, sĂ„:
    • kan den visa bra resultat vid arbete pĂ„ SSD, med lĂ„ngsam slumpmĂ€ssig skrivning.
    • NILFS2 sparar resurser pĂ„ SSD eftersom faktorn för skrivmultiplikation nĂ€stan Ă€r obefintlig.
      Mer exakt, den Àr inte mer Àn 2.Saken Àr den att vid cyklisk omskrivning av hela disken flyttar NILFS2 oförÀnderliga data till nya block.

      Om vi har 10% oförÀnderliga data pÄ disken fÄr vi 10% ökad skrivning vid 1 fullstÀndig omskrivning. Och 50% ökning vid 50% fyllning av enheten vid 1 fullstÀndig omskrivning av disken.

      Den maximala skrivförstÀrkningsfaktorn Àr 2. Detta Àr mycket lÄgt med tanke pÄ att allt skrivs sekventiellt. Generellt kommer skrivmultipliceringen att vara mindre Àn för ett vanligt fragmenterat filsystem med en sektor pÄ 4096 byte. (Detta vÀcker tankar kommentaren).

  • Den potentiella enkelheten i att implementera replikering till en fjĂ€rr-NILFS2-fil

NILFS2 för /home

I Unix-liknande operativsystem finns vanligtvis en mapp /home dÀr anvÀndardata lagras. Olika program sparar sina instÀllningar i denna mapp som rör den specifika anvÀndaren.

Och vem annars Àn anvÀndarna strular till det? SÄ, som man sÀger, Gud har befalt att anvÀnda NILFS2 för /home.

Dessutom, med den breda spridningen av SSD behöver vi inte lÀngre oroa oss för kraftiga nedgÄngar vid anvÀndning av CoW-filsystem.

Ja, vi kan skapa filsystem snapshots hur ofta som helst i ZFS och BTRFS, men det finns alltid en risk att förlorad filÀndring hamnar mellan snapshot:arna. Och snapshots mÄste ocksÄ administreras: radera gamla. I NILFS2 sker allt detta automatiskt, bokstavligen varje nÄgra sekunder.

Jag skapade en logisk volym med hjÀlp av lvcreate (i volymgruppen nvme, tunnt lager). Jag rekommenderar att skapa pÄ en LVM-volym, dÄ den lÀtt kan utökas senare. Jag rekommenderar att ha 50% ledigt utrymme pÄ disken med NILFS2 för anstÀndig versionsdjup.

lvcreate -V10G -T nvme/thin -n home

och formaterade den i NILFS2:

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

mkfs.nilfs2 (nilfs-utils 2.1.5)
Börjar skriva systemets initialdata till enheten
      Blockstorlek: 4096  Enhet: /dev/nvme/home1  Enhetsstorlek: 10737418240
Filssysteminitialisering lyckades!!

Efter detta mÄste alla data kopieras frÄn den nuvarande /home.

Jag gjorde det direkt efter att ha startat datorn, innan jag loggade in pÄ mitt konto, under anvÀndaren root. Om jag hade loggat in som min anvÀndare skulle nÄgra program ha öppnat sockets och filer i min anvÀndares mapp /home/user, vilket skulle ha gjort en ren kopiering besvÀrlig. Som bekant ligger hemkatalogen för anvÀndaren root vanligtvis pÄ sökvÀgen /root, sÄ inga filer pÄ partitionen /home kommer att öppnas.

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

AngÄende den sista raden se. artikeln.

DÀrefter redigerar vi /etc/fstab, dÀr filsystemet för /home monteras, till

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

Alternativ noatime Àr nödvÀndigt för att förbÀttra prestandan, sÄ att atime inte Àndras vid varje filÄtkomst. DÀrefter startar vi om.

Typer av snapshots i NILFS2.

En vanlig snapshot utan skydd mot radering kallas checkpoint (checkpoint eller ÄterstÀllningspunkt).
En snapshot med skydd mot automatisk radering kallas snapshot, hÀrefter bara snapshot.

Visning av checkpoints görs med kommandot lscp

Visning av snapshots (snapshots) lscp -s

Vi kan ocksÄ skapa snapshots och checkpoints nÀr som helst med hjÀlp av:

mkcp [-s] enhet

ÅterstĂ€ller data.

NILFS tillÄter oss att montera sÄ mÄnga gamla snapshots som vi vill parallellt med arbetet i huvudgrenen av FS. Men endast i lÀslÀge.

Det Àr ordnat sÄ hÀr. Vanliga checkpoints som NILFS2 gör kan automatiskt tas bort nÀr som helst (nÀr diskutrymme tar slut eller enligt reglerna för nilfs_cleanerd), dÀrför mÄste vi före monteringen konvertera checkpointen till en snapshot eller, pÄ ryska, fasta en snapshot.

chcp ss checkpointnummer

Efter detta kan vi montera snapshoten, till exempel sÄ hÀr:

mount -t nilfs2 -r -o cp=checkpointnummer /dev/nvme/home /mnt/nilfs/checkpointnummer

Efter det kopierar vi de ÄterstÀllda filerna frÄn snapshoten till /home.
Och senare tar vi bort flaggan för att undvika radering frÄn snapshoten, sÄ att den automatiska skrÀpsamlaren kan ta bort förÄldrad data i framtiden:

chcp cp checkpointnummer

Verktyg för NILFS2

Men hÀr Àr det ett problem. Ja, sjÀlvklart kan vi skapa FS, Àndra dess storlek online, visa listan över checkpoints, skapa och ta bort dem. Paketet nilfs2-utils erbjuder en minimal gentleman-set.

Eftersom NTT har dragit tillbaka finansieringen finns det inga snabba lÄg-nivÄ verktyg som gör det möjligt att visa historik över filÀndringar eller göra diff mellan snapshots.

Mitt verktyg n2u

För att fylla detta vakuum skrev jag mitt verktyg n2u, som kan ge historik över Àndringar för en specifik fil/directory:

n2u log filnamn

Utdatan ser ungefÀr ut sÄ hÀr:

          CHECKPOINT        DATUM     TID     TYP          STORLEK  LÄGE
             1787552  2019-11-24 22:08:00    första          7079    cp
             1792659  2019-11-25 23:09:05  Àndrad          7081    cp

Det fungerar ganska snabbt för det valda implementeringssÀttet: den söker efter skillnader mellan filer med hjÀlp av bisektionsmetoden, monterar snabbt och jÀmför fil/directory i olika snapshots.

Ett intervall av checkpoints kan anges med nyckeln -cp CP1:CP2 eller -cp {ÅR-MÅN-DAG}:{ÅR-MÅN-DAG}.

Det gÄr ocksÄ att se skillnaden mellan checkpoints för en specifik fil eller directory:

n2u diff -r cp1:cp2 filnamn

All histori över förÀndringar kan visas: alla skillnader mellan checkpoints av en viss fil/directory:

n2u blame [-r cp1:cp2] filnamn

Datumintervallet stöds ocksÄ i detta kommando.

Anrop till utvecklarna

Det finns mÄnga experter pÄ Habré. Jag ber er, förbÀttra NILFS2. Skapa replikation, lÄg-nivÄ snabb diff mellan revideringar, reflink och andra funktioner!

LĂ€nkar

NILFS officiella webbplats.

Repository:
NILFS2.
NILFS2 verktyg och moduler.

Nyhetsbrev:
E-postnyhetsbrev till NILFS2 utvecklarna. Identifierare för prenumeration linux-nilfs.
Arkiv för nyhetsbrev.

Guide för att konfigurera nilfs_cleanerd.
PrestandajÀmförelser EXT4, Btrfs, XFS & NILFS2.

Tack:

  • Utvecklarna av NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi och Satoshi Moriai. Andra viktiga bidragsgivare Ă€r: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Företagen Amblin Entertainment och Universal Pictures för den fantastiska filmserien «Tillbaka till framtiden». Den första bilden i inlĂ€gget Ă€r hĂ€mtad frĂ„n filmen «Tillbaka till framtiden – 3».
  • Företaget RUVDS för stöd och möjligheten att publicera pĂ„ sin blogg pĂ„ HabrĂ©.

P.S. Rapportera eventuella upptÀckta fel till mig. Jag ökar din karma för det.

Du kan experimentera med NILFS2 genom att bestÀlla en virtuell maskin hos RUVDS med kupongen nedan. För alla nya kunder finns det ett gratis testperiod pÄ 3 dagar.

NILFS2 — en kulsprutebestĂ€ndig filsystem för /home

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster