NILFS2 - ένα αλεξίσφαιρο σύστημα αρχείων για /home

NILFS2 - ένα αλεξίσφαιρο σύστημα αρχείων για /home

Όπως γνωρίζετε, αν μπορούν να συμβούν προβλήματα, σίγουρα θα συμβούν. Πιθανώς, όλοι έχουν βιώσει περιπτώσεις όπου ένα νέο σημαντικό αρχείο διαγράφηκε κατά λάθος ή κείμενο επιλέχθηκε και καταστράφηκε κατά λάθος σε ένα πρόγραμμα επεξεργασίας κειμένου.

Εάν είστε πάροχος φιλοξενίας ιστοσελίδων ή κάτοχος ιστοσελίδας, πιθανότατα έχετε αντιμετωπίσει παραβίαση λογαριασμών χρηστών ή της ιστοσελίδας σας. Σε τέτοιες περιπτώσεις, είναι σημαντικό να αποκαταστήσετε τη χρονολογία, να βρείτε τη μέθοδο διείσδυσης και την ευπάθεια που χρησιμοποίησε ο εισβολέας.

Το σύστημα αρχείων NILFS2 είναι ιδανικό για την επίλυση τέτοιων προβλημάτων.

Υπάρχει στον πυρήνα Linux, ξεκινώντας από την έκδοση 2.6.30.

Η ιδιαιτερότητα αυτού του συστήματος αρχείων είναι ότι είναι παρόμοιο με ένα σύστημα ελέγχου εκδόσεων: μπορείτε πάντα να επαναφέρετε την κατάσταση του συστήματος και να δείτε πώς ήταν πριν από λίγο καιρό.

Για να παρέχετε αυτήν τη λειτουργικότητα, δεν χρειάζεται να ρυθμίσετε τις παραμέτρους των σεναρίων Cron, να δημιουργήσετε στιγμιότυπα κ.λπ. Το σύστημα αρχείων NILFS2 τα κάνει όλα μόνο του. Δεν ξαναγράφει ποτέ παλιά δεδομένα και γράφει πάντα σε νέες περιοχές του δίσκου εάν υπάρχει αρκετός ελεύθερος χώρος. Σε πλήρη συμφωνία με την αρχή της αντιγραφής κατά την εγγραφή.

Στην πραγματικότητα, οποιαδήποτε αλλαγή σε ένα αρχείο δημιουργεί αυτόματα ένα νέο στιγμιότυπο του συστήματος αρχείων, επομένως μπορείτε να χρησιμοποιήσετε αυτό το ΛΣ ως χρονομηχανή και να επαναφέρετε την κατάσταση των αρχείων.

Ιστορία

NILFS2 - ένα αλεξίσφαιρο σύστημα αρχείων για /homeΤο NILFS2 αναπτύχθηκε στα έγκατα του Nippon Telegraph and Telephone Corporation, στην πραγματικότητα, το κράτος (έχει πλειοψηφικό πακέτο μετοχών) και η μεγαλύτερη εταιρεία τηλεπικοινωνιών στην Ιαπωνία. Πιο συγκεκριμένα, στο εργαστήριο CyberSpace Laboratories υπό την ηγεσία του Ryusuke Konishi.

Δεν είναι γνωστό για ποιο ακριβώς σκοπό αναπτύχθηκε, ωστόσο, μπορεί να υποτεθεί ότι ένα τέτοιο σύστημα διαχείρισης χρόνου, με τη λειτουργικότητα της «μηχανής του χρόνου», είναι ιδανικό για την αποθήκευση δεδομένων που ειδικές υπηρεσίες μπορεί να θέλουν να εξετάσουν προκειμένου να αναπαράγουν ολόκληρη την εικόνα SMS, email κ.λπ.

Το NILFS2 είναι επίσης ένα δυνητικά πολύτιμο εργαλείο για τις υπηρεσίες εσωτερικής ασφάλειας, καθώς σας επιτρέπει να επαναφέρετε όλα τα διαγραμμένα email στη βάση δεδομένων αλληλογραφίας, αποκαλύπτοντας τα λάθη των υπαλλήλων που ενδέχεται αργότερα να προσπαθήσουν να τα συγκαλύψουν διαγράφοντας ή τροποποιώντας τα αρχεία τους.

Πώς μπορώ να παρακολουθήσω ολόκληρο το ιστορικό της αλληλογραφίαςВ Linux Σε διακομιστές (και εδώ θα πρέπει να εγκατασταθεί το NILFS2 για σκοπούς εσωτερικής ασφάλειας), χρησιμοποιείται πολύ συχνά μια μέθοδος αποθήκευσης μηνυμάτων email που βασίζεται σε αρχεία. Η λεγόμενη μορφή MaildirΑρκεί να βάλουμε Διακομιστής αλληλογραφίας ταχυμεταφορών και να ρυθμίσετε την αποθήκευση γραμμάτων στο Maildir. Μια άλλη μορφή mbox είναι ένα μεγάλο αρχείο κειμένου που μπορεί εύκολα να αναλυθεί σε μεμονωμένα μηνύματα.

Εάν ο διακομιστής αλληλογραφίας χρησιμοποιεί μια βάση δεδομένων, το NILFS2 θα σας επιτρέψει να επαναφέρετε τον ακριβή χρόνο των αλλαγών στη βάση δεδομένων και τη δυνατότητα επαναφοράς της βάσης δεδομένων σε οποιαδήποτε από αυτές τις στιγμές. Και στη συνέχεια, θα πρέπει να χρησιμοποιήσετε τα εργαλεία βάσης δεδομένων για να δείτε τι υπήρχε σε αυτήν εκείνη τη χρονική στιγμή...

Ωστόσο, κάτι πήγε στραβά. Είτε η ιαπωνική κυβέρνηση άλλαξε γνώμη σχετικά με την κατασκοπεία των πάντων (κατά την αρχή του Yarovaya), είτε η απόδοση του NILFS2 σε παραδοσιακούς σκληρούς δίσκους ήταν εκτός των ορίων, οπότε το NILFS2 κυκλοφόρησε με την άδεια GPL και γρήγορα έγινε μέρος του πυρήνα. Linux, καθώς οι προγραμματιστές του πυρήνα δεν έχουν ιδιαίτερα παράπονα για τον κώδικα που γράφτηκε από Ιάπωνες με υψηλά προσόντα Linux δεν υπήρχε κανένας.

Πώς είναι το NILFS2;

Όσον αφορά τη χρήση: στο σύστημα ελέγχου εκδόσεων SVNΚάθε σημείο ελέγχου FS είναι μια υποβολή που γίνεται αυτόματα χωρίς τη γνώση του χρήστη για οποιαδήποτε αλλαγή: είτε πρόκειται για διαγραφή, αλλαγή περιεχομένου αρχείου είτε για δικαιώματα πρόσβασης. Κάθε υποβολή έχει έναν αριθμό που αυξάνεται γραμμικά.

Από την οπτική γωνία ενός προγραμματιστή: σε ένα κυκλικό buffer. Το σύστημα αρχείων συσσωρεύει αλλαγές και τις γράφει σε ένα chunk ίσο με περίπου 8 MB (2000 * 4096, όπου 2000 είναι ο αριθμός των στοιχείων σε ένα μπλοκ και 4096 είναι το μέγεθος μιας σελίδας μνήμης). Ολόκληρος ο δίσκος χωρίζεται σε τέτοια chunk. Η εγγραφή είναι διαδοχική. Όταν εξαντληθεί ο ελεύθερος χώρος, τα παλαιότερα στιγμιότυπα διαγράφονται και τα chunk αντικαθίστανται.

Κύρια χαρακτηριστικά του NILFS2

  • Δημιουργία εκδόσεων!!!
  • Η διαδικασία για την επαναφορά του FS μετά από μια αποτυχία είναι στοιχειώδης: κατά τη φόρτωση, αναζητείται το τελευταίο κομμάτι με το σωστό άθροισμα ελέγχου και εγκαθίσταται ένα superblock σε αυτό. Αυτή είναι μια σχεδόν στιγμιαία λειτουργία.
  • Δεδομένου ότι η καταγραφή είναι πάντα γραμμική, τότε:
    • μπορεί να δείξει καλά αποτελέσματα κατά την εργασία σε SSD, με αργή τυχαία εγγραφή.
    • Το NILFS2 εξοικονομεί πόρους SSD επειδή δεν υπάρχει σχεδόν καθόλου συντελεστής πολλαπλασιασμού εγγραφής.
      Πιο συγκεκριμένα, δεν είναι περισσότερο από 2.Το θέμα είναι ότι κατά την κυκλική επανεγγραφή ολόκληρου του δίσκου, το NILFS2 θα μεταφέρει αμετάβλητα δεδομένα σε νέα κομμάτια (chunks).

      Αν έχουμε 10% αμετάβλητα δεδομένα στον δίσκο, τότε θα έχουμε αύξηση 10% στην εγγραφή με 1 πλήρη επανεγγραφή. Λοιπόν, και αύξηση 50% με 50% πλήρωση συσκευών ανά 1 πλήρη επανεγγραφή δίσκου.

      Ο μέγιστος συντελεστής ενίσχυσης εγγραφής είναι 2. Αυτό είναι πολύ μικρό αν σκεφτεί κανείς ότι όλα γράφονται διαδοχικά. Γενικά, η ενίσχυση εγγραφής θα είναι μικρότερη από αυτή ενός κανονικού κατακερματισμένου FS με τομέα 4096 byte. (Η ιδέα προτείνεται από σχόλιο).

  • Πιθανή απλότητα υλοποίησης αναπαραγωγής σε ένα απομακρυσμένο NILFS2 FS

NILFS2 για /home

Τα λειτουργικά συστήματα τύπου Unix συνήθως έχουν έναν φάκελο /home, ο οποίος αποθηκεύει δεδομένα χρήστη. Διάφορα προγράμματα αποθηκεύουν τις ρυθμίσεις τους σε αυτόν τον φάκελο, οι οποίες είναι συγκεκριμένες για έναν συγκεκριμένο χρήστη.

Και ποιος, αν όχι οι χρήστες, κάνει τα λάθη του πιο συχνά; Επομένως, όπως λένε, ο ίδιος ο Θεός διέταξε να χρησιμοποιηθεί το NILFS2 στο /home.

Επιπλέον, με την ευρεία χρήση των SSD, δεν μπορούμε πλέον να ανησυχούμε για μια ισχυρή μείωση κατά τη χρήση συστημάτων αρχείων CoW.

Ναι, μπορούμε να δημιουργούμε στιγμιότυπα FS όσο συχνά θέλουμε τόσο στο ZFS όσο και στο BTRFS, αλλά υπάρχει πάντα ο κίνδυνος να γίνει κάποια αλλαγή σε κάποιο αρχείο μεταξύ των στιγμιότυπων. Και τα στιγμιότυπα πρέπει να διαχειρίζονται: τα παλιά πρέπει να διαγράφονται. Στο NILFS2, όλα αυτά συμβαίνουν αυτόματα, κυριολεκτικά κάθε λίγα δευτερόλεπτα.

Δημιούργησα έναν λογικό τόμο χρησιμοποιώντας το lvcreate (στην ομάδα τόμων nvme, thin pool). Συνιστώ να τον δημιουργήσετε σε έναν τόμο lvm, καθώς μπορεί εύκολα να επεκταθεί αργότερα. Συνιστώ να έχετε 50% ελεύθερο χώρο στον δίσκο με το NILFS2 για αξιοπρεπές βάθος δημιουργίας εκδόσεων.

lvcreate -V10G -T nvme/thin -n home

και το μορφοποίησα σε 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 !!

Μετά από αυτό, πρέπει να αντιγράψετε όλα τα δεδομένα από το τρέχον /home.

Το έκανα αυτό αμέσως μετά την εκκίνηση του υπολογιστή, πριν συνδεθώ στον λογαριασμό μου, ως root. Αν είχα συνδεθεί ως χρήστης μου, ορισμένα προγράμματα θα είχαν ανοίξει sockets και αρχεία στον φάκελο /home/user του χρήστη μου, κάτι που θα δυσκόλευε την καθαρή αντιγραφή. Όπως γνωρίζετε, ο αρχικός φάκελος για τον χρήστη root βρίσκεται συνήθως στο /root, επομένως δεν θα ανοίξουν αρχεία στο διαμέρισμα /home.

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

Σχετικά με την τελευταία γραμμή, βλ. ένα άρθρο.

Στη συνέχεια, επεξεργαζόμαστε το /etc/fstab, στο οποίο είναι προσαρτημένο το σύστημα αρχείων για το /home, ώστε να

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

Επιλογή noatime είναι απαραίτητο για τη βελτίωση της απόδοσης, έτσι ώστε κάθε φορά που γίνεται πρόσβαση στα αρχεία, η ώρα atime να μην αλλάζει. Στη συνέχεια, κάνουμε επανεκκίνηση.

Τύποι στιγμιότυπων στο NILFS2.

Ένα κανονικό στιγμιότυπο χωρίς ανοσία στη διαγραφή ονομάζεται σημείο ελέγχου (ή σημείο επαναφοράς).
Μια φωτογραφία με προστασία από αυτόματη διαγραφή ονομάζεται στιγμιότυπο, στο εξής απλώς στιγμιότυπο.

Η προβολή των σημείων ελέγχου γίνεται χρησιμοποιώντας την εντολή lscp.

Προβολή στιγμιότυπων lscp -s

Μπορούμε επίσης να δημιουργήσουμε στιγμιότυπα και σημεία ελέγχου οι ίδιοι ανά πάσα στιγμή χρησιμοποιώντας:

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

Επαναφέρουμε δεδομένα.

Το NILFS μας επιτρέπει να προσαρτήσουμε όσα παλιά στιγμιότυπα θέλουμε παράλληλα με την εργασία με τον κύριο κλάδο FS. Αλλά μόνο σε λειτουργία μόνο για ανάγνωση.

Όλα έχουν ρυθμιστεί ως εξής. Τα συνηθισμένα σημεία ελέγχου που δημιουργεί το NILFS2 μπορούν να διαγραφούν αυτόματα από αυτό ανά πάσα στιγμή (όταν εξαντληθεί ο χώρος στο δίσκο ή σύμφωνα με τους κανόνες του nilfs_cleanerd), επομένως πριν από την επεξεργασία πρέπει να μεταφέρουμε το σημείο ελέγχου σε ένα στιγμιότυπο ή, στα Ρωσικά, να διορθώσουμε το στιγμιότυπο.

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

Μετά από αυτό μπορούμε να προσαρτήσουμε το στιγμιότυπο, για παράδειγμα ως εξής:

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

Στη συνέχεια, αντιγράφουμε τα ανακτήσιμα αρχεία από το στιγμιότυπο στο /home.
Και στη συνέχεια, αφαιρούμε τη σημαία μη διαγραφής από το στιγμιότυπο, έτσι ώστε στο μέλλον ο αυτόματος συλλέκτης απορριμμάτων να μπορεί να αφαιρέσει τα παρωχημένα δεδομένα:

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

Βοηθητικά προγράμματα για το NILFS2

Αλλά αυτό είναι ένα πρόβλημα. Ναι, φυσικά, μπορούμε να δημιουργήσουμε ένα ΛΣ, να αλλάξουμε το μέγεθός του online, να δούμε τη λίστα με τα σημεία ελέγχου, να τα δημιουργήσουμε και να τα διαγράψουμε. Το πακέτο nilfs2-utils παρέχει ένα ελάχιστο σύνολο λειτουργιών για κυρίους.

Δεδομένου ότι το NTT έχει μειώσει τη χρηματοδότηση, δεν υπάρχουν γρήγορα βοηθητικά προγράμματα χαμηλού επιπέδου που να σας επιτρέπουν να εμφανίζετε το ιστορικό των αλλαγών στα αρχεία ή να κάνετε διαφορές μεταξύ στιγμιότυπων.

Το βοηθητικό μου πρόγραμμα n2u

Για να γεμίσω αυτό το κενό έγραψα το βοηθητικό πρόγραμμα n2u σας, το οποίο μπορεί να εμφανίσει το ιστορικό των αλλαγών σε ένα συγκεκριμένο αρχείο/κατάλογο:

n2u log filename

Το συμπέρασμα είναι κάπως έτσι:

          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

Λειτουργεί αρκετά γρήγορα για την επιλεγμένη μέθοδο υλοποίησης: αναζητά διαφορές μεταξύ αρχείων χρησιμοποιώντας διχοτόμηση, προσαρτώντας γρήγορα και συγκρίνοντας το αρχείο/κατάλογο σε διαφορετικά στιγμιότυπα.

Μπορείτε να καθορίσετε ένα εύρος σημείων ελέγχου χρησιμοποιώντας το πλήκτρο -cp CP1:CP2 ή -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Μπορείτε επίσης να δείτε τη διαφορά μεταξύ των σημείων ελέγχου για ένα συγκεκριμένο αρχείο ή κατάλογο:

n2u diff -r cp1:cp2 filename

Μπορείτε να εμφανίσετε ολόκληρο το ιστορικό των αλλαγών: όλες τις διαφορές μεταξύ των σημείων ελέγχου ενός συγκεκριμένου αρχείου/καταλόγου:

n2u blame [-r cp1:cp2] filename

Το εύρος ημερομηνιών υποστηρίζεται επίσης σε αυτήν την εντολή.

Κλήση προς τους προγραμματιστές

Υπάρχουν πολλοί ειδικοί στο Habr. Παρακαλώ, ολοκληρώστε το NILFS2. Κάντε αναπαραγωγή, γρήγορη διαφορά χαμηλού επιπέδου μεταξύ αναθεωρήσεων, ανασύνδεση και άλλα καλούδια!

παραπομπές

Επίσημος ιστότοπος NILFS.

Αποθετήρια:
NILFS2.
Βοηθητικά προγράμματα και ενότητες NILFS2.

Ενημερωτικά δελτία:
Ενημερωτικό δελτίο μέσω ηλεκτρονικού ταχυδρομείου για προγραμματιστές NILFS2Αναγνωριστικό για τη συνδρομή linux-nilfs.
Αρχείο ενημερωτικού δελτίου.

Οδηγός διαμόρφωσης nilfs_cleanerd.
Δείκτες Απόδοσης EXT4, Btrfs, XFS & NILFS2.

Ευχαριστώ:

  • Προγραμματιστές NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi και Satoshi Moriai. Άλλοι σημαντικοί συντελεστές είναι οι: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Στην Amblin Entertainment και την Universal Pictures για μια υπέροχη σειρά ταινιών "Επιστροφή στο μέλλον"Η πρώτη φωτογραφία της ανάρτησης είναι από την ταινία "Επιστροφή στο Μέλλον - 3".
  • Εταιρείες RUVDS για υποστήριξη και την ευκαιρία να δημοσιεύσετε στο ιστολόγιό σας στο Habré.

PS Στείλτε τυχόν σφάλματα που παρατηρήσετε σε προσωπικό μήνυμα. Αυξάνω το κάρμα μου για αυτό.

Μπορείτε να πειραματιστείτε με το NILFS2 παραγγέλνοντας μια εικονική μηχανή από RUVDS με το παρακάτω κουπόνι. Για όλους τους νέους πελάτες, δωρεάν δοκιμαστική περίοδος 3 ημερών.

NILFS2 - ένα αλεξίσφαιρο σύστημα αρχείων για /home

Πηγή: www.habr.com

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster