NILFS2 - un file system a prova di proiettile per /home

NILFS2 - un file system a prova di proiettile per /home

Come sai, se possono verificarsi problemi, accadranno sicuramente. Probabilmente a tutti sono capitati casi in cui un file importante recente è stato cancellato accidentalmente o il testo è stato selezionato e distrutto accidentalmente in un editor di testo.

Se sei un hoster o il proprietario di un sito web, probabilmente hai riscontrato l'hacking degli account utente o del tuo sito web. In questi casi è importante ripristinare la cronologia, individuare la modalità di ingresso e la vulnerabilità utilizzata dall'aggressore.

Il file system NILFS2 è perfetto per risolvere tali problemi.

È presente nel kernel Linux dalla versione 2.6.30.

La particolarità di questo file system è che è simile a un sistema di controllo della versione: puoi sempre ripristinare lo stato del sistema e vedere com'era qualche tempo fa.

Per fornire questa funzionalità, non è necessario configurare script Cron, acquisire istantanee, ecc. Il file system NILFS2 fa tutto da solo. Non sovrascrive mai i vecchi dati e scrive sempre in nuove aree del disco se c'è abbastanza spazio libero su disco. Nel pieno rispetto del principio Copy-on-Write.

Infatti, qualsiasi modifica a un file crea automaticamente una nuova istantanea del file system, quindi puoi utilizzare questo FS come una macchina del tempo e riavvolgere lo stato dei file.

storia

NILFS2 - un file system a prova di proiettile per /homeNILFS2 è stato sviluppato nel profondo di Nippon Telegraph e Telephone Corporation, infatti, è la più grande compagnia di telecomunicazioni del Giappone, di proprietà statale (ha una quota di controllo). Più specificamente, nei Laboratori CyberSpace sotto la guida Ryusuke Konishi.

Non si sa per cosa sia stato sviluppato esattamente, tuttavia si può presumere che un tale FS, con la sua funzionalità di "macchina del tempo", sia ideale per archiviare dati che i servizi segreti potrebbero voler approfondire per riprodurre l'intero quadro della situazione. SMS, email, ecc....

NILFS2 è potenzialmente uno strumento molto prezioso anche per i servizi di sicurezza interni, poiché consente di recuperare tutte le lettere cancellate nel database della posta, rivelando gli stipiti dei dipendenti che potrebbero successivamente tentare di camuffarle cancellando o modificando i propri file.

Come puoi tenere traccia dell'intera cronologia della corrispondenza?Sui server Linux (ed è qui che NILFS2 dovrebbe essere installato per motivi di sicurezza interna), il metodo file di archiviazione delle e-mail viene molto spesso utilizzato per archiviare i messaggi di posta elettronica. Il cosiddetto formato Maildir. Abbastanza da mettere Server di posta del corriere e configurare l'archiviazione della posta in Maildir. Altro formato mbox è un file di testo di grandi dimensioni che può essere facilmente suddiviso in singoli messaggi.

Se il server di posta utilizza un database, NILFS2 consentirà di ripristinare l'esatta tempistica delle modifiche al database e la possibilità di ripristinare il database in uno qualsiasi di questi momenti. E poi devi usare gli strumenti del database per vedere cosa c'era dentro in quel momento...

Tuttavia, qualcosa è andato storto. O il governo giapponese ha cambiato idea sul monitoraggio di tutti (secondo il principio Yarovaya), oppure le prestazioni di NILFS2 sugli HDD tradizionali si sono rivelate inferiori alla media, e NILFS2 è stato rilasciato con licenza GPL ed è entrato molto rapidamente nel kernel Linux, da allora non ci sono state lamentele particolari riguardo al codice scritto in giapponese altamente qualificato, gli sviluppatori del kernel Linux non ce l'avevano.

Com'è NILFS2?

Dal punto di vista dell'utilizzo: su un sistema di controllo della versione SVN. Ogni checkpoint FS è un commit che viene effettuato automaticamente all'insaputa dell'utente ogni volta che viene apportata una modifica: che si tratti di eliminazione, modifica del contenuto di un file o modifica dei diritti di accesso. Ogni commit ha un numero che aumenta linearmente.

Dal punto di vista del programmatore: un buffer circolare. Il file system accumula le modifiche e le scrive in un blocco pari a circa 8 MB (2000 * 4096, dove 2000 è il numero di elementi nel blocco e 4096 è la dimensione della pagina di memoria). L'intero disco è diviso in tali blocchi. La registrazione procede in sequenza. Quando lo spazio libero si esaurisce, gli snapshot più vecchi vengono eliminati e i blocchi vengono sovrascritti.

Chicche NILFS2 di base

  • Versione!!!
  • La procedura per ripristinare un file system dopo un guasto è semplice: durante il caricamento, viene cercato l'ultimo pezzo che ha il checksum corretto e su di esso viene installato un superblocco. Si tratta di un'operazione quasi istantanea.
  • Dato che la registrazione procede sempre in modo lineare, allora:
    • può mostrare buoni risultati quando viene eseguito su un SSD con scritture casuali lente.
    • NILFS2 risparmia risorse SSD, poiché non esiste quasi alcun fattore di moltiplicazione della scrittura.
      Più precisamente, non è più di 2.Il fatto è che quando si riscrive ciclicamente l'intero disco, NILFS2 trasferirà i dati immutabili in nuovi pezzi (pezzi).

      Se abbiamo il 10% di dati immutabili sul disco, otterremo un aumento di scrittura del 10% con 1 riscrittura completa. Ebbene, un aumento del 50% al 50% di riempimento del dispositivo per 1 riscrittura completa del disco.

      Il guadagno massimo in scrittura è 2. Questo è molto basso considerando che tutto viene scritto in sequenza. In generale, l'animazione di scrittura sarà inferiore a quella di un file system frammentato convenzionale con un settore da 4096 byte. (Pensiero ispirato da commento).

  • Potenziale facilità di implementazione della replica su un NILFS2 FS remoto

NILFS2 per /home

Nei sistemi operativi simili a Unix di norma è presente una cartella /home in cui vengono memorizzati i dati dell'utente. Diversi programmi salvano le impostazioni specifiche dell'utente in questa cartella.

E chi, se non gli utenti, commette errori più spesso? Pertanto, come si suol dire, Dio stesso ha ordinato l'uso di NILFS2 su /home.

Inoltre, con l’uso diffuso degli SSD, ora non dobbiamo più preoccuparci di gravi prelievi quando utilizziamo i file system CoW.

Sì, possiamo creare istantanee FS tutte le volte che vogliamo in ZFS e BTRFS, ma c'è sempre il rischio che una modifica del file persa finisca tra le istantanee. E le foto vanno ancora amministrate: quelle vecchie vanno cancellate. In NILFS2, tutto ciò avviene automaticamente, letteralmente ogni pochi secondi.

Ho creato un volume logico utilizzando lvcreate (nel gruppo di volumi nvme, thin pool thin). Consiglio di crearlo sul volume lvm, poiché può essere facilmente espanso in seguito. Consiglio di avere il 50% di spazio libero su disco con NILFS2 per una profondità di versione decente.

lvcreate -V10G -T nvme/thin -n home

e formattato in 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 !!

Successivamente, è necessario copiare tutti i dati dall'attuale /home.

L'ho fatto subito dopo aver avviato il computer, prima di accedere al mio account, come utente root. Se dovessi accedere come utente, alcuni programmi aprirebbero socket e file nella cartella /home/user del mio utente, il che renderebbe difficile una copia pulita. Come sai, la cartella home per l'utente root si trova solitamente nel percorso /root, quindi nessun file si aprirà nella partizione /home.

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

Per l'ultima riga, cfr Articolo.

Successivamente modifichiamo /etc/fstab, in cui è montato il file system per /home

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

Opzione noatime necessario per migliorare le prestazioni in modo che atime non cambi ad ogni accesso al file. Successivamente riavviamo.

Tipi di immagini in NILFS2.

Uno snapshot regolare senza immunità all'eliminazione è denominato checkpoint o punto di ripristino.
Uno snapshot protetto dall'eliminazione automatica viene chiamato snapshot, quindi semplicemente snapshot.

La visualizzazione dei checkpoint viene eseguita utilizzando il comando lscp

Visualizza istantanee lscp -s

Possiamo creare noi stessi istantanee e checkpoint in qualsiasi momento utilizzando:

mkcp [-s] устройство

Ripristiniamo i dati.

NILFS ci consente di montare tutte le vecchie istantanee che vogliamo parallelamente al lavoro con il ramo principale di FS. Ma solo in modalità lettura.

Tutto è organizzato così. I checkpoint regolari creati da NILFS2 possono essere eliminati automaticamente in qualsiasi momento (quando lo spazio su disco si esaurisce o secondo le regole nilfs_cleanerd), quindi prima dell'installazione dobbiamo convertire il checkpoint in un'istantanea o, in russo, catturare l'istantanea.

chcp ss номер_чекпоинта

Successivamente, possiamo montare l'istantanea, ad esempio, in questo modo:

mount -t nilfs2 -r -o cp=номер_чекпоинта /dev/nvme/home /mnt/nilfs/номер_чекпоинта

Dopodiché copiamo i file ripristinati dallo snapshot in /home.
E successivamente rimuoviamo il flag non cancellabile dallo snapshot in modo che in futuro il garbage collector automatico possa rimuovere i dati obsoleti:

chcp cp номер_чекпоинта

Utilità per NILFS2

Ma questo è il problema. Sì, certo, possiamo creare un file system, modificarne le dimensioni online, visualizzare l'elenco dei punti di sfida, crearli ed eliminarli. Il pacchetto nilfs2-utils fornisce un set minimo per gentiluomini.

Dato che NTT ha ridotto i suoi finanziamenti, non esistono utilità veloci di basso livello che consentano di visualizzare la cronologia delle modifiche ai file o di effettuare differenze tra le istantanee.

La mia utilità n2u

Per riempire questo vuoto ho scritto la tua utilità n2u, che può visualizzare la cronologia delle modifiche a un file/directory specifico:

n2u log filename

L'output è qualcosa del genere:

          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

Funziona abbastanza rapidamente per il metodo di implementazione scelto: cerca le differenze tra i file utilizzando il metodo di bisezione, montando e confrontando rapidamente il file/directory in diverse istantanee.

È possibile impostare una serie di checkpoint utilizzando il tasto -cp CP1:CP2 o -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Puoi anche vedere la differenza tra i checkpoint per un file o una directory specifica:

n2u diff -r cp1:cp2 filename

Puoi visualizzare l'intera cronologia delle modifiche: tutte le differenze tra i checkpoint di un file/directory specifico:

n2u blame [-r cp1:cp2] filename

È supportato anche l'intervallo di date in questo comando.

Un grido agli sviluppatori

Ci sono molti specialisti su Habré. Per favore finisci NILFS2. Effettua repliche, differenze veloci di basso livello tra revisioni, reflink e altre chicche!

riferimenti

Sito ufficiale del NILFS.

Repository:
NILFS2.
Utilità e moduli NILFS2.

Newsletter:
Newsletter via e-mail per gli sviluppatori NILFS2. ID per l'abbonamento a Linux-nilfs.
Archivio newsletter.

guida all'installazione di nilfs_cleanerd.
Benchmarking dei test prestazionali EXT4, Btrfs, XFS e NILFS2.

grazie:

  • Sviluppatori NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi e Satoshi Moriai. Altri importanti contributori sono: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Alla Amblin Entertainment e alla Universal Pictures per una meravigliosa serie di film. "Ritorno al futuro". La prima immagine del post è tratta dal film “Ritorno al futuro 3”.
  • società RUVDS per il supporto e l'opportunità di pubblicare sul tuo blog su Habré.

PS Si prega di inviare eventuali errori notati in un messaggio privato. Aumento il mio karma per questo.

Puoi sperimentare NILFS2 ordinando una macchina virtuale da RUVDS con il coupon qui sotto. Per tutti i nuovi clienti è previsto un periodo di prova gratuito di 3 giorni.

NILFS2 - un file system a prova di proiettile per /home

Fonte: habr.com

Aggiungi un commento