Erstellen und Verwenden von Snapshots in BTRFS. "Fehlertolerantes" System basierend auf Ubuntu und Btrfs Btrfs Ubuntu Installation und Konfiguration

Der Wechsel zu einem neuen Dateisystem ist immer eine schwierige Aufgabe. Wir vertrauen bereits auf das alte, bewährte Dateisystem. Es kann sogar einige Einschränkungen in Funktionalität und Leistung geben, aber es hat uns nie im Stich gelassen. Die neuen Dateisysteme bieten viele Funktionen, aber die Frage ist, kann man ihnen vertrauen?

Ein solches Dateisystem ist Btrfs. Dies ist ein relativ neues Dateisystem, das 2007 erschien und von Oracle entwickelt wurde. Es bietet sehr viele neue Features und ist daher für Anwender sehr interessant, dennoch kursieren im Netz Gerüchte, dass dieses Dateisystem noch nicht für den dauerhaften Einsatz geeignet ist. In diesem Artikel werden wir versuchen herauszufinden, welche Möglichkeiten uns Btrfs bietet und ob es bereits verwendet werden kann.

Wie gesagt, Btrfs wurde 2007 von Oracle entwickelt. Es gibt keine eindeutige Entschlüsselung des Namens, einige sagen, dass er B-Tree FS bedeutet, andere Better Fs. Wie in anderen Dateisystemen werden alle Daten auf der Festplatte an bestimmten Adressen gespeichert. Diese Adressen werden in Metadaten gespeichert. Und hier beginnen die Unterschiede. Alle Metadaten sind als B-Bäume organisiert. Dies bietet eine höhere Leistung beim Arbeiten mit dem Dateisystem und ermöglicht Ihnen außerdem das Hinzufügen einer unbegrenzten Anzahl von Dateien.

Aber auch das ist noch nicht alles. Beim Überschreiben einer Datei werden die Daten nicht überschrieben, sondern nur der geänderte Teil an die neue Stelle kopiert und die Metadaten einfach aktualisiert. Auf diese Weise können Sie Snapshots des Dateisystems erstellen, die keinen Speicherplatz belegen, bis viele Änderungen vorgenommen wurden. Wenn der alte Block nicht mehr benötigt wird, weil er in keinem Snapshot enthalten ist, wird er automatisch gelöscht.

Aufgrund seiner Struktur hat Btrfs riesige Chancen Beispielsweise kann es mit den heutigen sehr großen Speichermedien umgehen. Maximale Größe Dateisystem ist 16 Exabyte groß. Dies ist alles möglich dank richtige Verwendung Festplattenplatz. Andere Dateisysteme verwenden Festplatte vollständig, von Anfang bis Ende, um seine Struktur aufzuzeichnen.

Btrfs macht die Dinge anders. Jede Festplatte ist unabhängig von ihrer Größe in Blöcke von 1 GB für Daten und 256 MB für Metadaten unterteilt. Dann werden diese Blöcke zu Gruppen zusammengesetzt, von denen jede auf unterschiedlichen Geräten gespeichert werden kann, wobei die Anzahl solcher Blöcke in einer Gruppe von dem RAID-Level für die Gruppe abhängen kann. Der Volume Manager ist bereits in das Dateisystem integriert, sodass keine zusätzliche Software verwendet werden muss.

Datenschutz und -komprimierung werden auch auf Dateisystemebene unterstützt, sodass Sie hier nicht darauf angewiesen sind zusätzliche Programme. Das btrfs-Dateisystem unterstützt auch die Datenspiegelung über mehrere Medien. Hier sind weitere Funktionen von btrfs, die erwähnt werden können:

  • Unterstützung für Dateisystem-Snapshots, schreibgeschützt oder schreibgeschützt;
  • Prüfsummen für Daten und Metadaten mit dem crc32-Algorithmus. Auf diese Weise lassen sich eventuelle Schäden am Block sehr schnell feststellen;
  • Komprimierung mit Zlib und Lzo;
  • Das für die Arbeit mit SSD optimierte Dateisystem erkennt SSD automatisch und beginnt sich anders zu verhalten;
  • Hintergrundprozess zur Fehlererkennung und -korrektur sowie Echtzeitdefragmentierung und -deduplizierung;
  • Unterstützt die Konvertierung von ext4 und ext3 und umgekehrt.

All dies ist sehr gut, aber ist es möglich, dieses Dateisystem bereits zu verwenden? Versuchen wir, damit umzugehen.

Ist btrfs einsatzbereit?

Es gibt immer noch viele Missverständnisse rund um Btrfs. Viele von ihnen stammen aus realen Problemen, die am Anfang der Entwicklung des Dateisystems standen. Aber Leute, die sich diese Informationen ansehen, achten nicht auf das Datum. Ja Btrfs war in der Tat instabil und instabil. Es gab viele Probleme mit Datenverlust und viele Benutzer schrieben darüber, aber das war im Jahr 2010.

Der wichtigste Teil eines Dateisystems ist sein Speicherformat auf der Festplatte. Aber das Format des Btrfs-Dateisystems ist bereits festgelegt, es geschah bereits im Jahr 2012 und es ändert sich nicht mehr, es sei denn, es ist absolut notwendig. Dies allein reicht aus, um die Stabilität von btrfs zu erkennen.

Aber warum wird Btrfs von vielen als instabil angesehen? Dafür gibt es mehrere Gründe. Erstens ist es die Angst der Benutzer vor neuen Technologien. Das war nicht nur bei Linux der Fall, sondern auch bei Microsoft mit der Umstellung auf NTFS und bei Apple. Aber hier gibt es ein Paradox, das XFS-Dateisystem hat 20 Jahre stabile Entwicklung hinter sich, aber das stabilste Dateisystem ist ext4, das 2006 aus einem Fork von ext3 entwickelt wurde. Tatsächlich ist es ein Jahr älter als Btrfs.

Der zweite Grund liegt in der aktiven Entwicklung, obwohl das Datenspeicherformat eingefroren ist, die Hauptcodebasis immer noch aktiv entwickelt wird und es noch viel Raum für Leistungsverbesserungen und neue Funktionen gibt.

Aber es gibt bereits viele Bestätigungen, dass das Dateisystem bereit ist. Dieses Dateisystem wird auf den Servern von Facebook verwendet, auf denen das Unternehmen seine sensiblen Daten speichert. Und das allein ist ein wichtiger Faktor. Unternehmen wie Facebook, SuSE, RedHat, Oracle, Intel und andere arbeiten an der Verbesserung des Dateisystems. Dieses Dateisystem wird seit Version 12 standardmäßig in SUSE Linux Enterprise verwendet. All diese Faktoren zusammen beweisen, dass das Dateisystem ziemlich einsatzbereit ist. Und angesichts der Funktionalität und Eigenschaften von btrfs kann es bereits verwendet werden.

Btrfs-Nutzung

Warum sich der Einsatz von Btrfs lohnt und ob es sich überhaupt lohnt, herausgefunden. Jetzt möchte ich etwas Übung zeigen, damit Sie dieses Dateisystem in Aktion bewerten können. Ich werde Beispiele geben, die auf Ubuntu basieren. Installieren Sie zunächst die Tools zur Dateisystemverwaltung:

sudo apt installiere btrfs-tools

Erstellen eines Btrfs-Dateisystems

Zuerst müssen Sie ein Dateisystem erstellen. Nehmen wir an, wir haben zwei Festplatte/dev/sdb und /dev/sdc, wir wollen darauf ein einzelnes Dateisystem mit Datenspiegelung erstellen. Tun Sie dazu einfach Folgendes:

sudo mkfs.btrfs /dev/sdb /dev/sdc

Der Standardwert ist RAID0 für Daten (keine Redundanz und RAID1 für Metadaten (Duplizieren auf eine einzelne Festplatte). Wenn Sie eine einzelne Festplatte verwenden, werden auch die Metadaten dupliziert. Wenn Sie dieses Verhalten deaktivieren möchten, können Sie das -m single verwenden Möglichkeit:

sudo mkfs.btrfs -m single /dev/sdb

Dadurch erhöhen Sie jedoch das Risiko eines Datenverlusts, denn wenn die Metadaten verloren gehen, gehen auch die Daten verloren.

Sie können Informationen über das neu erstellte Dateisystem mit dem Befehl anzeigen:

sudo btrfs filesystem show /dev/sdb

Oder über alle gemounteten Dateisysteme:

sudo btrfs filesystem show

btrfs-Mount

Verwenden Sie zum Mounten den üblichen Befehl:

sudo mount /dev/sdb /mnt

Sie können jedes der Laufwerke mounten, es hat den gleichen Effekt. Die Zeile in /etc/fstab sieht so aus:

/dev/sdb /mnt Btrfs-Standardwerte 0 1

Nun schauen wir uns Informationen über den belegten Speicherplatz an:

sudo btrfs filesystem df /mnt

Komprimierung in btrfs

Um die Komprimierung zu aktivieren, fügen Sie beim Mounten einfach die Komprimierungsoption hinzu. Sie können ihm den lzo- oder zlib-Algorithmus übergeben:

sudo mount -o compress=lzo /dev/sdb /mnt
$ sudo mount -o compress=zlib /dev/sdb /mnt

btrfs wiederherstellen

Um ein beschädigtes Btrfs wiederherzustellen, verwenden Sie die Recovery-Mount-Option:

sudo mount -o recovery /dev/sdb /mnt

Größenänderung

Mit dem Befehl resize können Sie die Größe eines Volumes in Echtzeit ändern:

sudo btrfs filesystem resize -2g /mnt

Reduzieren Sie die Größe um 2 Gigabyte. Dann um 1 Gigabyte erhöhen:

sudo btrfs filesystem resize +1g /mnt

Subvolumes erstellen

Mit Btrfs können Sie logische Partitionen und Subvolumes innerhalb der Hauptpartition erstellen. Sie können innerhalb der Hauptpartition gemountet werden:

sudo btrfs subvolume create /mnt/sv1
$ sudo btrfs subvolume create /mnt/sv2
$ sudo btrfs subvolume list /mnt

Mounten von Subvolumes

Sie können das Subvolume mit der ID mounten, die Sie mit dem letzten Befehl erhalten haben:

sudo umount /dev/sdb

sudo mount -o subvolid=258 /dev/sdb /mnt

Oder Sie können den Namen verwenden:

sudo mount -o subvol=sv1 /dev/sdb /mnt

Subvolumes entfernen

Mounten Sie zuerst das Btrfs-Root anstelle des Subvolumes:

sudo umount /mnt

sudo mount /dev/sdb /mnt/

Um ein Subvolume zu entfernen, können Sie zum Beispiel den Bereitstellungspfad verwenden:

sudo btrfs subvolume löschen /mnt/sv1/

Schnappschüsse machen

Mit dem Btrfs-Dateisystem können Sie Momentaufnahmen von Änderungen erstellen. Dazu wird der Snapshot-Befehl verwendet. Lassen Sie uns zum Beispiel eine Datei erstellen und dann einen Schnappschuss machen:

Berühren Sie /mnt/sv1/test1 /mnt/sv1/test2

Schnappschuss erstellen:

sudo btrfs Subvolume-Snapshot /mnt/sv1 /mnt/sv1_snapshot

btrfs(manchmal Butter fs ausgesprochen) ist ein neues freies Dateisystem, das mit Unterstützung von Oracle entwickelt wird. Verteilt unter der GPL-Lizenz. Obwohl seine Entwicklung noch lange nicht abgeschlossen ist, wurde das Dateisystem am 9. Januar 2009 in den Linux-Kernel integriert und ist in Debian Squueze verfügbar.

Obwohl Btrfs im 2.6.29-Kernel enthalten war, geben die Entwickler an, dass "wir ab dem 2.6.31-Kernel nur noch planen, das Festplattenwechselformat fortan kompatibel zu machen". Die Entwickler wollen die Benutzer-/Verwaltungstools noch verbessern, um sie benutzerfreundlicher zu machen. Zum bekommen zusätzliche Informationüber Btrfs, unter dem Link im Abschnitt.

Ext2/3/4 kann in Btrfs umgewandelt werden (aber nicht umgekehrt).

Status

Debian Squeeze und neuere Versionen unterstützen Btrfs.

FAQ

Welches Paket enthält Dienstprogramme für Btrfs?

btrfs-tools (in DebianSqueeze und höher)

Siehe auch: Häufig gestellte Fragen zum Btrfs-Wiki

Beispielbefehle für die Arbeit mit btrfs

Erstellen eines Dateisystems:

mkfs.btrfs

Volumes, Subvolumes, Snapshots verwalten; Überprüfung der Integrität des Dateisystems:

btrfsctl

Scannen nach btrfs-Dateisystemen:

btrfsctl -a btrfsctl -A /dev/sda2

Snapshots und Subvolumes erstellen:

mount -t btrfs -o subvol=. /dev/sda2 /mnt btrfsctl -s neuer_Subvol_Name /mnt btrfsctl -s Snapshot_of_Default /mnt/default btrfsctl -s Snapshot_of_new_Subvol /mnt/new_Subvol_Name btrfsctl -s Snapshot_of_a_Snapshot /mnt/snapshot_of_new_Subvol ls /mnt

Überprüfen der Extent-Bäume des Dateisystems:

btrfsck

Metadaten in Textform ausgeben:

Debug-Baum Debug-Baum /dev/sda2 >& big_output_file

Btrfs-Dateisysteme auf Festplatte anzeigen:

btrfs-show /dev/sda*

Defragmentieren (standardmäßig nicht erforderlich):

# btrfs filesystem defragment /mnt oder # btrfs filesystem defragment /mnt/file.iso

Konvertieren eines ext3-Dateisystems in btrfs

Das ext3-Dateisystem kann in btrfs umgewandelt werden und als neues Dateisystem weiter damit arbeiten. Darüber hinaus wird der Zustand des ursprünglichen ext3-Dateisystems später verfügbar sein.

# Führen Sie immer zuerst fsck aus %# fsck.ext3 -f /dev/xxx # Konvertieren von Ext3->Btrfs %# btrfs-convert /dev/xxx # Hängen Sie das resultierende Btrfs-Dateisystem ein %# mount -t btrfs /dev/xxx /btrfs # Mounten Sie den ext3-Snapshot %# mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved # Loopback mounten Sie die Image-Datei %# mount -t ext3 -o loop,ro /ext2_saved/image /ext3

Das Verzeichnis /ext3 zeigt nun den Zustand des ursprünglichen Dateisystems.

Die Demontage erfolgt in umgekehrter Reihenfolge:

%# umount /ext3 %# umount /ext2_saved %# umount /btrfs

Sie können zu einem ext3-Dateisystem zurückkehren und Ihre Änderungen verlieren:

%# btrfs-convert -r /dev/xxx

Oder Sie können auf btrfs bleiben und das gespeicherte ext3-Dateisystem-Image löschen:

%# rm /ext2_saved/image

Notiz: Das neue Dateisystem hat nach der Konvertierung manchmal eine sehr große Metadatengröße.

Größe der Metadaten anzeigen:

# btrfs-Dateisystem df /mnt/data1tb/

Normalisieren Sie ihre Größe:

btrfs fi balance /mnt/btrfs

Weiterlesen: Konvertierung von ext3 (Englisch) und Konvertieren von ext3fs zu btrfs (Russisch)

Ändern der Größe des Dateisystems und der Partitionen

Für btrfs ist eine Online-Größenänderung (on the fly) des Dateisystems verfügbar. Zuerst müssen Sie die gewünschte Partition mounten:

# mount -t btrfs /dev/xxx /mnt

2 GB hinzufügen:

# btrfs filesystem resize +2G /mnt oder # btrfsctl -r +2g /mnt

Verkleinerung um 4 GB:

# btrfs filesystem resize -4g /mnt oder # btrfsctl -r -4g /mnt

Größe auf 20 GB Dateisystem setzen:

# btrfsctl -r 20g /mnt oder # btrfs filesystem resize 20g /mnt

Nutzung des gesamten freien Speicherplatzes:

# btrfs filesystem resize max /mnt oder # btrfsctl -r max /mnt

Die obigen Befehle gelten nur für das Dateisystem. Um die Größe einer Partition zu ändern, müssen Sie andere Dienstprogramme wie fdisk verwenden. Betrachten Sie ein Beispiel, um eine Partition um 4 GB zu reduzieren. Mounten und reduzieren Sie die Partition:

# mount -t btrfs /dev/xxx /mnt # btrfsctl -r -4g /mnt

Hängen Sie nun die Partition aus und verwenden Sie fdisk:

# umount / mnt fdisk / dev / xxx # wobei dev / xxx die Festplatte mit der benötigten Partition ist

Original: So erstellen und verwenden Sie BTRFS-Snapshots - Tutorial
Autor: Igor Ljubuncic
Erscheinungsdatum: 25. Februar 2012
Übersetzung: A. Krivoshey
Übergabedatum: April 2012

BTRFS ist ein relativ neues Dateisystem, das auf Suns ZFS basiert, das Unix in den letzten 25 Jahren vor der Übernahme durch Oracle die meisten Innovationen gebracht hat. BTRFS gilt immer noch als instabil und daher nicht für Produktionsanwendungen geeignet. Dieses Dateisystem hat jedoch viele nützliche Funktionen, die es wert sind, erkundet zu werden. Eine davon ist die Erstellung von Snapshots des Systems.
Lassen Sie mich das klären. Snapshots sind Momentaufnahmen des Zustands eines Systems. Wenn Sie eine Datei kopieren und ein Backup erstellen, machen Sie gewissermaßen einen Schnappschuss davon zum Zeitpunkt der Kopie. Dies ist überall und jederzeit möglich. Stellen Sie sich ein Dateisystem vor, das tatsächlich mehrere Kopien Ihrer Dateien innerhalb seiner Struktur verwalten kann und Sie diese nach Belieben verwenden können. Klingt interessant, lass uns das untersuchen.

BTRFS-Einführung

Bevor wir tiefer graben, möchte ich kurz die Fähigkeiten dieses Dateisystems skizzieren. BTRFS muss dafür sorgen, dass alle Systemoperationen im Zusammenhang mit Datenträgern und Dateiverwaltung, die normalerweise erforderlich sind zusätzliche Dienstprogramme. BTRFS bietet Defragmentierung, Lastausgleich, Verkleinerung, Vergrößerung, Hot-Swapping, RAID, Snapshots, Komprimierung, Klonen und mehr, alles in den Dateisystemtreiber integriert. Bei anderen Dateisystemen benötigen Sie wahrscheinlich eine Vielzahl anderer Treiber und Benutzerprogramme, um all diese Arten von Vorgängen zu verwalten, z. B. einen Dateisystem-Defragmentierer, RAID- und LVM-Treiber und so weiter.
Integrierte Funktionalität bedeutet Leistung und Benutzerfreundlichkeit. Allerdings weiter dieser Moment BTRFS ist aufgrund von Instabilität sowie Leistungseinbußen im Vergleich zu anderen Dateisystemen wie Ext4 noch nicht vollständig nutzbar. Aber es hat ein enormes Potenzial, also kann es nicht ignoriert werden, sondern muss untersucht werden.
In dieser Anleitung zeige ich Ihnen, wie Sie Snapshots verwalten. Dies ist eine äußerst relevante Funktion, mit der Sie erstellen können Sicherungen wichtige Dateien bevor Sie Änderungen daran vornehmen, und stellen Sie sie dann bei Bedarf wieder her. In gewisser Weise ist es wie die Windows-Systemwiederherstellung plus ein Rollback-Treiber auf Dateisystemebene. Neben Schnappschüssen finden Sie in diesem Artikel übrigens auch ein paar nützliche Informationenüber die tägliche Arbeit mit dem Dateisystem BTRFS. Die Tests wurden auf einem Fedora 16 Verne-System mit einem KDE-Desktop durchgeführt.

So verwalten Sie BTRFS

Sie können BTRFS für das Root-Dateisystem verwenden, mit Ausnahme von /boot, das mit einem herkömmlichen Journaling-Dateisystem formatiert werden muss. Der Einfachheit halber werden wir in diesem Tutorial mit arbeiten separates Gerät/dev/sdb1 in BTRFS formatiert und nach Bedarf verwendet. In der Praxis könnte dies /home oder /data oder was auch immer sein.

So, was werden wir machen?

Wir nehmen /dev/sdb1 und mounten es. Dann werden wir einige Unterabschnitte erstellen. Stellen Sie sich Unterabschnitte als virtuelle Stammbäume vor, da jeder von ihnen eine separate, unabhängige Baumdatenstruktur ist, selbst wenn die Daten dieselben sind.
Nachfolgend finden Sie die dazu erforderliche Befehlsfolge. Keine Angst, wir erklären Ihnen, wie sie funktionieren.

$ btrfs subvolume create /mnt/data $ btrfs subvolume create /mnt/data/orig $ echo "Dedoimedo is l33t" > /mnt/data/orig/file $ btrfs subvolume Snapshot /mnt/data/orig /mnt/data/backup

/dev/sdb1 ist auf /mnt gemountet. Wir erstellen einen Unterschlüssel namens data. Darin erstellen wir einen weiteren Unterabschnitt namens orig. Und schon darin werden unsere Dateien erstellt. Aus der Sicht des Benutzers sehen Unterabschnitte wie normale Verzeichnisse aus. Mit anderen Worten, data und data/orig sind Verzeichnisse.
Als nächstes erstellen wir Textdatei zum Ursprung aufgerufene Datei, die etwas Text enthält. Schließlich erstellen wir einen Snapshot des orig-Unterschlüssels und nennen ihn Backup. Wir haben jetzt eine identische Kopie des orig-Unterabschnitts. Hier ist der Beweis:

Außerdem verwenden wir zur Überprüfung den Befehl Liste der btrfs-Subvolumes um alle Unterabschnitte zu sehen:

$ btrfs Subvolume-Liste

Beachten Sie, dass jeder Unterabschnitt seine eigene ID-Nummer hat. Wie wir bald sehen werden, ist dies wichtig.

Standardansicht

Derzeit zeigt /mnt standardmäßig sowohl Orig als auch Backup (alles in Daten). Wir können es ändern. Erinnern Sie sich, dass ich vorhin virtuelle Stammbaumstrukturen erwähnt habe? Mit BTRFS können Sie das virtuelle Stammverzeichnis in einen der Unterschlüssel ändern.
Die Verwendung von Unterabschnitten und Snapshots bedeutet also einfach, zwischen verschiedenen Datenhierarchien zu wechseln. Keine Notwendigkeit, Dateien zu löschen, zu überschreiben oder irgendetwas anderes zu tun. Sie wechseln einfach zu einem anderen Unterabschnitt. Wir werden nun sehen, wie das gemacht wird.
Mannschaft btrfs-Subvolume-Set-Standard-ID ist alles was wir brauchen. Wir werden die Standardansicht auf eine andere Partition setzen, dann das Gerät unmounten und erneut mounten. Es ist wichtig!
Wenn Sie jetzt an einem Dateisystem arbeiten, das nicht ausgehängt werden kann, weil es verwendet wird, wie z. B. /usr oder /etc, müssen Sie den Computer neu starten, damit die Änderungen wirksam werden. Nun wird im angegebenen Verzeichnisbaum ein weiterer Unterabschnitt angezeigt. Der Benutzer wird den Unterschied nicht bemerken, aber die Daten in den Verzeichnissen werden sich ändern.
Um wirklich zu sehen, wie das funktioniert, werden wir es bearbeiten Datei im Backup. Ersetzen Sie den Text Dedoimedo ist l33t durch Dedoimedo ist NICHT l33t.

$ echo "Dedoimedo ist NICHT l33t" > /mnt/data/backup/file

Okay, wir kennen die ID für alle Unterabschnitte. Daher werden wir die ID als Standardansicht bereitstellen. Das bedeutet, sobald Sie /mnt erneut einhängen, sehen wir hier eine Datei mit diesem Inhalt.

$ btrfs subvolume set-default 257 /mnt $ umount /mnt $ mount /dev/sdb1 /mnt

Jetzt setzen wir alles zurück:

Dies kann so oft wie nötig durchgeführt werden:

Oben haben wir die Ansicht zwischen 257 und 260 geändert, also zwischen Orig und Backup, als Ergebnis konnten wir den Inhalt der geänderten Datei anzeigen. Wir haben dem Benutzer einfach verschiedene Unterabschnitte gezeigt.
Wenn wir also sowohl Orig als auch Backup im Datenverzeichnis sehen möchten, müssen wir die Standardansicht des Unterabschnitts wiederherstellen Höchststufe, also Daten. Beachten Sie, dass alle Daten im Verzeichnis /mnt angezeigt werden, da wir es als Einhängepunkt gewählt haben. Sie können jedoch stattdessen jedes andere Verzeichnis verwenden.

Fazit

Die Snapshot-Funktion in BTRFS ist recht ordentlich implementiert und ihre Verwendung ist nicht schwierig. Natürlich müssen Sie darauf achten, den richtigen Datenbaum zu verwenden und nichts zu verwechseln. Aber jetzt weißt du es schon grundlegende Befehle BTRFS und Sie können souveräner agieren. In Zukunft werden wir Snapper testen, ein von openSUSE erhältliches BTRFS-Frontend, das die Implementierung der gleichen Funktionalität über eine grafische Benutzeroberfläche für diejenigen ermöglicht, die die Befehlszeile nicht mögen.

Als Geek habe ich immer noch die Angewohnheit, ständig mit dem System zu experimentieren: Neuerstellung, Installation instabiler RC-Kernel, einschließlich experimenteller Update-Zweige. Oft würde ich sogar sagen, dass ich das System zu oft kaputt mache (mein persönlicher Bestwert, 2 Wochen ohne Neuinstallation).

Was bedeutet Pause? Wenn etwas extrem schlecht funktioniert, z. B. LibreOffice und Compiz, das oft abstürzt und gerne einfriert, versuche ich entweder, das System neu zu konfigurieren, aber das ist ziemlich lang und langweilig.

Genau worauf ich hinaus will.

Wenn jemand wie ich gerne mit dem System experimentiert und es leid ist, es jedes Mal neu zu erstellen, dann ist hier eine Option für Sie, wie ich dieses Problem für mich gelöst habe. Ich werde unter der Katze hindurchgehen.

How-to oder normales Fahrrad.

Punkt 1: Live-CD

Post factum gehen wir davon aus, dass die Platte in 2 Partitionen aufgeteilt ist: /boot formatiert in ext4 und / formatiert in btrfs.
Grub 2 wird in den MBR der Platte geschrieben.
Dementsprechend lautet der erste Absatz:
Aus persönlichen Gewohnheiten und Überlegungen heraus ist es viel einfacher, das System über die grafische Oberfläche wiederherzustellen, als den schwarzen Bildschirm zu bewundern und manchmal ohne Zugang zum Internet Befehle zu merken und vorzuschreiben. Nein, ich denke nicht, dass die Konsole böse ist, ich liebe die Konsole, aber trotzdem ist es angenehmer von der grafischen Oberfläche.
Akt eins
Die Idee ist nicht neu, ich gebe zu, sie ist irgendwo auf Habré aufgetaucht, aber ich habe den Link nicht gefunden, also entschuldige ich mich bei der Quelle der Veröffentlichung.
Kopieren Sie das Image der gewünschten Live-Distribution in den /boot-Ordner
sudo cp /media/timofey/boot/grub/ISO/Linux/Ubuntu/ubuntu-12.10-desktop-amd64.iso /boot/ubuntu-12.10-desktop-amd64.iso
/boot wird auf eine separate Partition verschoben, nicht weil es besser wäre, sondern weil aus mir unbekannten Gründen LiveCDs, die unter Grub 2 in btrfs geschrieben wurden, nicht geladen werden.
Jetzt korrigieren wir die Standardeinstellungen von Grub 2, damit wir beim Aktualisieren von Grub "a das Image nicht verlieren.
sudo nano /etc/grub.d/40_custom

Und fügen Sie dort nach den Kommentaren so etwas ein:
menuentry "Ubuntu 12.10 amd64" ( set isofile=/ubuntu-12.10-desktop-amd64.iso loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noeject noprompt -- initrd (loop )/casper/initrd.lz )

Tatsächlich wurde es im Bild und Gleichnis konfiguriert (offizielles Ubuntu-Wiki):
/Grub2/ISOBoot
Jetzt "fast" das Wichtigste, wir generieren die Config neu:

sudo update-grub

Das ist es, jetzt können wir nach dem Neustart mit gedrückter Umschalttaste ein Minisystem mit dem Internet und einer grafischen Oberfläche starten, unabhängig vom Zustand des Hauptsystems.

Punkt 2: Bilder

Ich denke, dass jeder, der sich schon lange mit Linux auskennt, zumindest von btrfs gehört, vielleicht sogar schon eine eigene Meinung gebildet hat. Wenn Sie Ubuntu auf einer Partition mit btrfs installieren, wird dies standardmäßig sehr klug gemacht, der Unterpartitionsmechanismus wird verwendet und es werden 2 Unterpartitionen erstellt, dies sind @ und home (die ich jeweils / und / home ersetze). Bei der korrekten Neuinstallation des Systems gehen keine Konfigurationen verloren. Aber darum geht es jetzt nicht. Wie kann man dieses Anliegen für Endbenutzer nutzen? Sehr einfach.

Ein kleiner Hintergrund:
Es war ursprünglich geplant, das Skript über rc.local auszuführen, aber es wurde nicht ausgeführt, dann wurde es über Daily Cron implementiert, später habe ich rc.local besiegt und Snapshots zur Hölle in Cron deaktiviert.

Skriptcode:

#!/bin/bash #Dieses Skript zum automatischen Erstellen von Snapshots beim Start #Version 1.2.9 set -e DATA="$(date +%g%m%d%k%M%S)" VOLUME=/dev/sda1 [ ! -d "/tmp/$DATA/" ] && sudo mkdir "/tmp/$DATA/" mount $VOLUME "/tmp/$DATA/" && ( [ ! -d "/tmp/$DATA/snapshots/" ] && sudo mkdir "/tmp/$DATA/snapshots/" mkdir "/tmp/$DATA/snapshots/$DATA/" && cd "/tmp/$DATA/" btrfs Subvolume Snapshot ./@ ."/snapshots/$DATA /@_$(DATA)/" Btrfs Subvolume Snapshot ./@home ."/snapshots/$DATA/@home_$(DATA)/" [ ! -f ./snapshots/snapshots.log ] && touch ./snapshots/ snapshots.log chmod 777 ./snapshots/snapshots.log echo on_startup_$(date +%X_%x) >> ./snapshots/snapshots.log umount -l "/tmp/$DATA/" && sudo rmdir "/tmp/ $DATEN/" )

Es befindet sich unter /etc/btrfs_snapshot_onstartup
Fügen Sie es zu /etc/rc.local hinzu und erteilen Sie beiden Dateien Ausführungsberechtigungen über sudo chmod +x "Dateipfad".
Die Ausführungsprotokollierung in der Datei ./snapshots/snapshots.log funktioniert möglicherweise nicht, dann müssen Sie sie manuell mit Root-Rechten erstellen. Nach dem Neustart erhält er selbst die notwendigen Rechte.

Wir können jederzeit den Status von System-Snapshots anzeigen, indem wir Folgendes eingeben:
cat /var/log/snapshots.log

Alle Snapshots werden der Partition mit dem System im Snapshots-Ordner hinzugefügt, wo für jeden erfolgreichen Systemstart ein Ordner erstellt wird.
Einige mögen sagen, dass es sich nicht auszahlt, beim Start Schnappschüsse zu machen. Überhaupt nicht, es rechtfertigt, dass ich an einem Tag eine Reihe von Änderungen am System vornehmen und es hundertmal neu starten kann, und in alternativen Fällen werde ich nicht zum Moment eines erfolgreichen Starts (tatsächlich) zurückkehren können, aber erst vor einem Tag.

Option zum manuellen Starten:
#!/bin/bash #Dieses Skript zum automatischen Erstellen von Snapshots #Version 1.2.8 set -e DATA=$(date +%g%m%d%k%M%S) ########### ######################## [ ! -d /tmp/$DATA/ ] && sudo mkdir /tmp/$DATA/ sudo mount /dev/sda2 /tmp/$DATA/ && ( ################## ################################################## # [ ! -d /tmp/$DATA/snapshots/ ] && mkdir /tmp/$DATA/snapshots/ mkdir /tmp/$DATA/snapshots/$DATA/ cd /tmp/$DATA/ sudo btrfs Subvolume Snapshot ./@ . /snapshots/$DATA/@_$(DATA)/ sudo btrfs Subvolume Snapshot ./@home ./snapshots/$DATA/@home_$(DATA)/ ############## # ################################################# ## ### sudo chmod 777 ./snapshots/snapshots.log sudo echo this.hands_$(date +%X_%x) >> ./snapshots/snapshots.log sudo cat ./snapshots/snapshots.log sleep 1 sudo umount - l /tmp/$DATA/ && sudo rmdir /tmp/$DATA/ ################################ # ################################## sudo btrfs filesystem df / #information about fs ) read exit 0

Punkt 3: Wiederherstellung

Das haben sie versucht, sie haben das System zerstört, was tun?
Wir booten von der LiveCD und mounten die Systempartition in einem für uns geeigneten Ordner.
Verstecken oder entfernen Sie dann bei Bedarf die standardmäßigen @- und home-Subvolumes.
und ersetzen Sie den fehlenden durch den erforderlichen Snapshot.
In den meisten Fällen reicht es aus, @ zu ersetzen.
nazarpc
Außerdem ermöglichen Snapshots nicht nur das Zurücksetzen auf einen bestimmten Zustand des Systems, sondern auch das Extrahieren der erforderlichen Datei oder Konfiguration daraus, was auch eine gewisse Freiheit beim Löschen von Dateien unbekannter Herkunft bietet.

Punkt 4: Reinigung

Snapshots nehmen nicht viel Platz ein, können sich aber im Laufe der Zeit auf der Festplatte ansammeln großes Volumen Müll. Hier ist ein Skript zum automatischen Bereinigen von Snapshot-Ordnern. Dadurch werden alle System-Snapshots entfernt

#!/bin/bash #Version 0.0.9 set -e DATA=$(date +%g%m%d%k%M%S) [ ! -d "/tmp/$DATA" ] && sudo mkdir "/tmp/$DATA" sudo mount /dev/sda1 "/tmp/$DATA" && ( cd "/tmp/$DATA/snapshots/" für i in * /* do sudo btrfs subvolume delete "$i" done for i in * do sudo rmdir -v "$i" done echo cleanup_$(date +%g%m%d%k%M%S) > "./snapshots .log" sudo cp "./snapshots.log" "/var/log/snapshots.log" sudo umount -l "/tmp/$DATA" && sudo rmdir "/tmp/$DATA" ) read exit 0

Ergebnis

Wir haben ein relativ fehlertolerantes System entwickelt, in dem wir die Möglichkeit haben, das System nach einem Ausfall schnell wiederherzustellen. Gleichzeitig wird ein Minimum an Zeit und Mühe für den Aufbau eines Schutzsystems aufgewendet.
Meine eigenen Gedanken dazu
Ich denke, dass eine solche Lösung in großen IT-Strukturen kaum sinnvoll sein dürfte, für den kleinen Heimgebrauch aber ideal sein sollte.

Es wäre auch cool, das Reinigungsskript so zu beenden, dass es alle Snapshots bereinigt, die älter als beispielsweise Wochen sind, und nicht alle verfügbaren, ich habe es ehrlich versucht, aber es hat bei mir nicht geklappt. Dann könnte es zum Beispiel auch standardmäßig in cron gefahren werden, um einmal am Tag ausgeführt zu werden, und dann in das offizielle btrfs-Installationsskript aufgenommen werden, ich denke, mit geringfügigen Änderungen ist dies eine ziemlich universelle Lösung, basierend auf Standartfunktionen btrfs.

Ja, ich kenne lvm, aber ich brauche keine zusätzliche Abstraktionsebene von der Hardware und Bilder auf eine separate Sektion zu stellen, ist auch nicht comme il faut.

AKTUALISIERUNG 1:
Danke an die Benutzer

Keiner von uns ist vor Fehlern gefeit. Manchmal führt das Syndrom der krummen Hände zu sehr traurigen Folgen. Manchmal ist es sehr schwierig, zu widerstehen und keine "antiwissenschaftlichen" Experimente mit dem System durchzuführen oder ein Skript / eine Anwendung auszuführen, die von einer nicht verifizierten Quelle heruntergeladen wurden. Und hier kommen verschiedene Tools zum Ausführen von Anwendungen in einer isolierten Umgebung und erweiterte Dateisystemfunktionen zur Hilfe.

Einführung

*nix-Systeme waren schon immer relativ widerstandsfähig gegenüber schlecht geschriebenen Anwendungen (vorausgesetzt natürlich, dass sie nicht als root ausgeführt wurden). Manchmal besteht jedoch der Wunsch, mit dem System zu experimentieren - mit Konfigurationen herumzutollen, von denen einige lebenswichtig sein können, ein verdächtiges Skript auszuführen, ein Programm zu installieren, das aus einer nicht vertrauenswürdigen Quelle stammt ... Andernfalls überwindet Paranoia einfach, und ich möchte so viele Barrieren wie möglich aufzubauen, um sich vor potenzieller Malware zu schützen. Der Artikel beschreibt einige Mittel, um die Folgen von unerzwungenen Fehlern zu vermeiden, indem Sie zu einem zuvor erstellten Rückkehrpunkt (Btrfs-Snapshots) zurückkehren, ein verdächtiges Programm in einer begrenzten Umgebung ausführen und Ihre Paranoia amüsieren (Arkose und Chroot).

Chroot

Chroot ist seit langem bekannt. Es hat einen großen Vorteil gegenüber anderen Tools - es funktioniert überall, sogar auf sehr alten Distributionen. All diese neumodischen Sandboxen sind nichts anderes als seine Weiterentwicklung. Aber es gibt auch Nachteile. Beispielsweise gibt es keine Möglichkeit, das Netzwerk einzuschränken, Root kann es mit einigem Aufwand herausholen, und vor allem ist es ziemlich schwierig, es zu konfigurieren. Trotzdem ist es für einige Zwecke, wie das Installieren von Paketen aus dem Quellcode, ideal.

Es gibt mindestens drei Möglichkeiten, eine Chroot-Umgebung zu erstellen:

  1. Sie definieren alle Anwendungen und Bibliotheken, die für die Arbeit des gestarteten Programms erforderlich sind. Dies ist der flexibelste Weg, aber auch der verwirrendste.
  2. Die Chroot-Umgebung wird dynamisch gebildet. Früher gab es das Isolate-Projekt, das dies tat, aber jetzt ist es aus unbekannten Gründen in Vergessenheit geraten.
  3. Das Basissystem im angegebenen Verzeichnis bereitstellen und darauf rooten – ich werde es beschreiben.

grub und btrfs

Höchstwahrscheinlich wird Grub beim Booten von der Btrfs-Partition schwören, dass Sparse-Dateien nicht erlaubt sind, und Sie auffordern, eine beliebige Taste zu drücken. Um zu verhindern, dass diese Nachricht erscheint, öffnen Sie sie in Ihrem Favoriten Texteditor Datei /etc/grub.d/00.header und kommentieren Sie dort folgende Zeile aus:

Wenn [ -n "\$(have_grubenv)" ]; then if [ -z "\$(boot_once)" ]; dann save_env recordfail; fi; fi

Eigentlich ist die recordfail-Variable notwendig, um einen zyklischen Neustart zu verhindern, wofür sie beim Start gespannt und dann bei erfolgreichem Laden auf 0 gesetzt wird. Obwohl es unerwünscht ist, den für diesen Vorgang verantwortlichen Code zu kommentieren, Ich denke, dass man auf einem Desktop-System durchaus darauf verzichten kann.

Ognelis im Sandkasten – so der Titel

Lassen Sie uns zuerst das Paket debootstrap installieren, das nur für diesen Zweck verwendet wird.

$ sudo apt-get install debootstrap

Dann erstellen wir ein Verzeichnis, in dem sich die Chroot befindet, und stellen das Quantal-Basissystem darin bereit. Im Allgemeinen kann es überall erstellt werden, aber sein traditioneller Speicherort ist /var/chroot. Da die meisten der folgenden Befehle erfordern Root-Berechtigungen, ist es sinnvoll, auf das Superuser-Konto zu wechseln:

$ sudo su - # mkdir /var/chroot && cd /var/chroot # debootstrap quantal ./quantal-chr1 http://mirror.yandex.ru/ubuntu

Schauen wir uns den letzten Befehl an. Es stellt die Quantal-Ubuntu-Version in einem separaten quantal-chr1-Verzeichnis (man weiß nie, man braucht plötzlich eine andere Chroot) vom nächstgelegenen Spiegelserver aus bereit. Nachdem die Bereitstellung abgeschlossen ist, müssen Sie die Dateisysteme procfs, sysfs und (falls zutreffend) das Verzeichnis /dev diesem Teilbaum zuordnen. Falls die Chroot bis zu einem Neustart nur für Textanwendungen verwendet wird, sollten die folgenden Befehle ausreichen:

# mount --bind /proc /var/chroot/quantal-chr1/proc # mount --bind /sys /var/chroot/quantal-chr1/sys # mount --bind /dev /var/chroot/quantal-chr1/ Entwickler

Wenn Sie möchten, dass dieser Teilbaum nach einem Neustart funktioniert, fügen Sie die entsprechenden Zeilen zu /etc/fstab hinzu. Nun, für die Arbeit einiger grafische Anwendungen Die Verzeichnisse /tmp und /var/run/dbus sollten ebenfalls angezeigt werden. Danach können Sie bereits den folgenden Befehl eingeben, der tatsächlich die Chroot erstellt:

# chroot /var/chroot/quantal-chr1/

Und du bist bereits darin eingeschlossen. Um Chroot nicht mit einem echten System zu verwechseln, empfehle ich, den Shell-Prompt zu ändern. Lassen Sie uns zum Beispiel Skype in der Chroot installieren und ausführen. Dazu müssen Sie das Schroot-Paket auf dem Hostsystem installieren, was die Ausführung von Programmen in einer Chroot-Umgebung erleichtert:


Bereitstellen auf dem Chroot des Basissystems mit debootstrap # apt-get install schroot

Dann fügen wir der Datei /etc/schroot/schroot.conf einen Eintrag hinzu. In meinem Fall habe ich Folgendes hinzugefügt:

/etc/schroot/schroot.conf description=Quantal Skype-Verzeichnis=/var/chroot/quantal-chr1 Priorität=3 Benutzer=ROM-Gruppen=ROM-Stammgruppen=Root,ROM

Wir leiten /dev, /proc, /sys, /tmp und /var/run/dbus weiter – siehe oben, wie das geht. Fügen Sie der Chroot einen Skype-Benutzer und eine Gruppe hinzu - es ist wünschenswert, dass die uid und gid mit der uid / gid des Hauptbenutzers des realen Systems (in meinem Fall rom) übereinstimmen, wofür wir die folgenden Befehle eingeben:

# schroot -c quantal-skype -u root # addgroup --gid 1000 skype # adduser --disabled-password --force --uid 1000 --gid 1000 skype

Danach legen wir das frisch heruntergeladene Skype - wieder in die Chroot - und erfüllen seine Abhängigkeiten:

# dpkg --force-all -i skype-ubuntu-precise_4.1.0.20-1_i386.deb # apt-get -f install # beenden

Auf dem Hauptsystem erlauben wir Verbindungen zum X-Server von localhost und geben die Chroot als ein regelmäßiger Benutzer:

$ xhost +localhost $ cd / && schroot -c quantal-skype -u rom /bin/bash

Setzen Sie die DISPLAY-Variable (die Sie sich im Hauptsystem ansehen müssen) und starten Sie Skype:

$ export DISPLAY=":0.0" $ skype --dbpath=/home/skype/.Skype &

Skype wurde erfolgreich installiert und in einer Chroot-Umgebung gestartet.

Es wäre möglich, ein Skript zu schreiben, um den Start zu erleichtern, aber Sie können es selbst tun.


Verwenden von Arkose

Arkose funktioniert ähnlich wie Windows-Sandboxen wie Sandboxie. In der Praxis ist dies ein praktischer Wrapper für LXC-Container. Aber wie Sie wissen, sind Komfort und Flexibilität manchmal unvereinbar - Feinabstimmung erstellte Container ist schwierig. Von den Pluspunkten stelle ich eine intuitive Benutzeroberfläche fest (dies ist, wenn Sie die GUI verwenden - jedoch starten Sie von Befehlszeile ist auch sehr einfach), aber von den Minuspunkten - standardmäßig benötigt es ziemlich viel freien Speicherplatz auf der Festplatte und es gibt einige mögliche Wege Bypass; aber wenn Sie Arkose als zusätzlichen Wrapper für potenzielle Möglichkeiten zum Einschleusen von Malware (Browser) oder auch nur zum Experimentieren mit einigen verwenden interessante Anwendung, es wird nicht weh tun.

seccomp und seccomp-bpf

Seccomp ist ein wenig bekannter Mechanismus, der im 2.6.12-Kernel eingeführt wurde und es einem Prozess ermöglicht, einen Übergang in eine Richtung in einen "sicheren" Zustand zu machen, in dem ihm nur vier Systemaufrufe zur Verfügung stehen - exit(), sigreturn(), read() und write(), und die letzten beiden sind nur für schon verfügbar Dateien öffnen. Wenn der Prozess versucht, einen anderen Systemaufruf aufzurufen, wird er sofort beendet.

Offensichtlich ist diese Lösung nicht sehr flexibel. In diesem Zusammenhang erschien seccomp-bpf im 3.5-Kernel, mit dem Sie mithilfe von BPF-Regeln feinabstimmen können, welche Systemaufrufe (und ihre Argumente) zulässig sind und welche nicht. Seccomp-bpf wird verwendet in Google Chrome, Chrome OS und zurückportiert auf Ubuntu 12.04.

Vor der Verwendung von Arkose muss es installiert werden. Das Verfahren ist Standard:

$ sudo apt-get install arkose-gui

Sowohl die GUI (arkose-gui) als auch das Befehlszeilenprogramm (arkose) werden installiert. GUI so einfach, dass ich keinen Sinn darin sehe, es zu beschreiben, ist es besser, sofort mit der Praxis fortzufahren.


Manuelle Erstellung
schreibgeschützter Schnappschuss-
ta im btrfs

Befehlszeilenoptionen berücksichtigen:

  • -n (none,direct,filtered) – ordnet das Netzwerk der Sandbox zu. Die Optionen keine und direkt sind selbsterklärend, gefiltert erstellt für jede Sandbox eine eigene Oberfläche. In der Praxis ist es besser, entweder none oder direct zu verwenden, da die Einrichtung von gefiltert viel Zeit in Anspruch nimmt.
  • -d (none,system,session,both) – Zugriff auf D-Bus-Busse aus der Sandbox.
  • -s Größe – legt die Speichergröße in Megabyte fest. Der Standardwert ist 2000 MB für ext4 oder die Hälfte des Speichers für tmpfs. Nachdem das in der Sandbox laufende Programm beendet wird, wird das Repository zerstört.
  • -t - Speicherdateisystemtyp. Der Standardwert ist ext4.
  • --root directory – Gibt das Verzeichnis an, das der Sandbox als Root zugeordnet ist.
  • --root-type (cow,bind) - wie genau die Wurzel angezeigt werden soll. Wenn Sie cow verwenden, gehen alle Änderungen nach dem Schließen der Sandbox verloren, und wenn Sie binden, werden sie gespeichert.
  • --base-path - gibt den Speicherort der Sandbox an. Der Standardwert ist ~/.arkose.
  • --bind directory und --cow directory - zeigt ein Verzeichnis entweder im Cow-Modus oder direkt an. Natürlich hängt die Verwendung der einen oder anderen Option von der Art der Root-Zuordnung ab – es macht keinen Sinn, die Option --cow auf ein Verzeichnis anzuwenden, das bereits Copy-on-Write ist.
  • -h - Echtes Home-Verzeichnis verwenden. Ähnlich wie --bind $HOME.
  • -p - ermöglicht die Verwendung von PulseAudio.

Starten wir als Beispiel Firefox:

$ sudo arkose -n direct -p firefox

Dieser Befehl startet Firefox mit Webzugriff und PulseAudio. Da jeder neu erstellte Container standardmäßig sein eigenes Home-Verzeichnis hat, ist das firelis-Profil ebenfalls neu, ohne installierte Add-Ons, falls vorhanden.

"Aber warte! Warum sudo? - Eine berechtigte Frage kann aufkommen. Tatsache ist, dass einige vorbereitende Operationen nur unter root verfügbar sind. Ich beeile mich jedoch, Sie zu beruhigen - das gestartete Programm funktioniert mit den Rechten des aktuellen Benutzers.


Hinzufügen eines Benutzers zum Ausführen von Skype in Chroot

Kurz zu BTRFS

Es kommt vor, dass das System nach der Installation von Updates zusammenbricht. Tools ähnlich der Windows-Sywären hier nützlich. Ich bin stolz sagen zu können, dass wir sie haben! Und eines dieser Tools ist Btrfs. Von den Vorteilen des neuen Dateisystems von Oracle ist Folgendes hervorzuheben:

  • Copy-on-Write. Diese Technologie wird verwendet, um Snapshots zu erstellen – sofortige Momentaufnahmen des Systemzustands. Beim Erstellen eines Snapshots kopiert der FS-Treiber die Metadaten hinein und beginnt mit der Überwachung der eigentlichen Aufzeichnung. Wenn es gefunden wird, werden die ursprünglichen Datenblöcke in den Snapshot eingefügt und neue an ihre Stelle geschrieben.
  • Dynamische Zuweisung von Inodes. Im Gegensatz zu FS der alten Generation hat Btrfs keine Begrenzung der Anzahl von Dateien.
  • Dateikomprimierung.
  • Möglichkeit, ein Dateisystem auf mehreren physischen Medien zu hosten. Tatsächlich ist dies dasselbe RAID, nur auf einer höheren Ebene. Zum Zeitpunkt des Schreibens werden RAID 0, RAID 1 und RAID 10 unterstützt, während sich die Unterstützung für RAID 5 in den frühen Entwicklungsstadien befindet.

Snapshots erstellen und löschen

Um Operationen auf einem Dateisystem der neuen Generation durchzuführen, wie z. B. das Erstellen von Snapshots, das Defragmentieren eines Volumes und viele andere, wird der Befehl btrfs verwendet. Seine Syntax ist Allgemeiner Fall, nächste:

btrfs<команда> <аргументы>

Welche Operationen können auf Btrfs durchgeführt werden? Unten sind die Befehle, die ich interessant fand.

  • btrfs-Subvol erstellen [<путь>/]<имя>- erstellt ein Subvolume (siehe Seitenleiste). Wenn kein Pfad angegeben ist, wird er im aktuellen Verzeichnis erstellt.
  • btrfs-Subvol löschen<имя>- bzw. löscht das Subvolume.
  • btrfs subvol find-new<путь> <поколение>- Liste der zuletzt geänderten Dateien im angegebenen Pfad, beginnend mit der angegebenen Generation. Leider ist es noch nicht möglich auf einfache Weise Finden Sie die aktuelle Generation einer bestimmten Datei heraus, sodass die Verwendung dieses Befehls möglicherweise von einem Tanz mit einem Tamburin begleitet wird.
  • btrfs-Subvol-Snapshot [-r]<подтом> <путь к снапшоту>- das Highlight des Programms. Erstellt einen Snapshot des angegebenen Subvolumes mit dem angegebenen Pfad dazu. Die Option -r deaktiviert das Schreiben in Snapshots.
  • btrfs-Subvol-Liste<путь>- Zeigt eine Liste der Subvolumes und Snapshots im angegebenen Pfad an.
  • btrfs filesys df - Speicherplatznutzung für den angegebenen Einhängepunkt.
  • btrfs filesys Größe ändern [+/-]<новый размер> <путь>- ja, ja, Btrfs hat die Fähigkeit, die Größe auf einem "Live"-System zu ändern und nicht nur zu vergrößern, sondern auch zu verkleinern! Mit den Argumenten ist meines Erachtens alles mehr oder weniger klar, aber zusätzlich zur Angabe der Größe kann man das Argument max verwenden, das das Dateisystem auf die maximal mögliche Größe erweitert.

Die verbleibenden Befehle sind zwar interessant, beziehen sich aber nur insofern auf das Thema des Artikels, und wir werden sie nicht berücksichtigen. Um also einen Snapshot eines Subvolumes mit dem aktuellen Datum zu erstellen, beispielsweise das Root-Verzeichnis, geben wir den folgenden Befehl ein:

$ sudo btrfs subvol snap -r / /snapshot-2013-01-16

$ sudo btrfs subvol del /snapshot-2013-01-16

Btrfs-Subvolume

Ein Btrfs-Subvolume kann auf zwei Arten fungieren: als Verzeichnis und als VFS-Objekt – etwas, das gemountet werden kann. Bei der Installation von Ubuntu werden beispielsweise zwei Subvolumes erstellt – @ und @home. Die erste enthält Systemdateien, die zweite sind Benutzerdaten. Dies ist vergleichbar mit der Partitionierung einer Platte, nur dass früher eine Partition in der Regel nur ein VFS-Objekt enthalten konnte, können nun mehrere Objekte gleichzeitig auf einer Partition liegen und verschachtelt werden.

Automatisierung

Ich sehe nicht viel Sinn darin, Snapshots manuell zu erstellen - Sie können dies einfach vergessen. Drei Automatisierungsszenarien fallen mir ein:

  • Schreiben Sie ein Skript und fügen Sie es in rc.local ein;
  • Schreiben Sie ein Skript und fügen Sie es in cron ein.
  • Verwenden Sie den Befehl btrfs autosnap.

Leider ist in Ubuntu 12.10 die letzte Methode aus irgendeinem Grund nicht verfügbar, sodass es praktisch keine Wahl als solche gibt. Ich persönlich habe es vorgezogen, ein Cron-Skript zu schreiben, aber zuerst erstellen wir ein Subvolume, in dem unsere Snapshots gespeichert werden. Wofür? Zumindest um den Stammordner nicht zu verunreinigen.

# mkdir /mnt/sda11 # mount /dev/sda11 /mnt/sda11 # btrfs subvol create /mnt/sda11/@snapshots # umount /mnt/sda11

Mal sehen, was diese Befehle bewirken. Da das eigentliche Dateisystem-Root im Moment nicht verfügbar ist (Ubuntu verwendet stattdessen das @-Subvolume als Root), müssen wir es manuell einhängen. In meinem Fall ist es auf /dev/sda11. Mit dem dritten Befehl erstellen wir das @snapshots-Subvolume – wenn wir es oder das echte Root also nicht mounten, ist sein Inhalt unzugänglich. Und jetzt das eigentliche Skript:

Autosnap.sh #!/bin/bash set -e VOLUME=/dev/sda11 TMP_PATH=/tmp/snapshots MOUNT_OPTS=" [E-Mail geschützt]" # Aktuelles Datum und Uhrzeit - erforderlich, um Snapshot-Ordner zu benennen NOW="$(date +%Y%m%d%H%M)" NOW_SEC="$(date +%s)" if [ $# -ne 1 ] ; then # Wenn das Skript ohne Argumente ausgeführt wird, setze den Standardwert auf vor einem Tag OLDER_SEC="$(date --date "1 day ago" +%s)" else # Wenn wir ein Argument haben, nehmen wir an, dass dies der Fall ist ein Datum in einem beliebigen Format, das der date-Befehl versteht, mit allen Implikationen OLDER_SEC="$(date --date "$1" +%s)" fi # Subtract from aktuelles Datum erforderlich und in Minuten umrechnen OLDER=$(($NOW_SEC-$OLDER_SEC)) OLDER_MIN=$(($OLDER/60)) [ ! -d "$(TMP_PATH)/" ] && mkdir "$(TMP_PATH)/" [ -z "`grep "$(TMP_PATH)" /proc/mounts`" ] && mount "$(VOLUME)" "$(TMP_PATH )/" -o "$(MOUNT_OPTS)" && ( # Mount mkdir "$(TMP_PATH)/$(NOW)/" # Snapshots erstellen btrfs subvol snap / "$(TMP_PATH)/$(NOW)/rootsnap" > / dev/null 2>&1 btrfs subvol snap /home "$(TMP_PATH)/$(NOW)/homesnap" > /dev/null 2>&1 ) && ( # Durchsucht Ordner mit Snapshots, die älter sind als das angegebene Datum für f in `find " $ (TMP_PATH)" -minTiefe 1 -maxTiefe 1 -type d -cmin +"$OLDER_MIN" -print0 |xargs -0`; do btrfs subvol del "$(f)/rootsnap" > /dev/null 2>&1 && btrfs subvol del "$(f)/homesnap" > /dev/null 2>&1 && # und Snapshots und Ordner löschen, die sie enthalten rmdir "$f" done ) umount -l "$(TMP_PATH)" && rmdir "$(TMP_PATH )"

Dieses Skript kann dort platziert werden, wo es bequem ist (ich persönlich ziehe es vor, solche Dinge in /usr/local/bin zu platzieren, aber das ist Geschmackssache) und es entweder von cron oder von rc.local auszuführen. Standardmäßig rotiert das Skript Snapshots, die älter als einen Tag sind, aber Sie können eine beliebige Anzahl im Format des date-Befehls angeben - ganz wichtig, vergessen Sie nicht, sie in Anführungszeichen zu setzen.

Verwenden eines ISO-Images

Um die Disc mit dem aufgezeichneten Ubunt nicht jedes Mal zu ziehen, wenn wichtige Dateien beschädigt sind, ist es möglich, das Boot-Element aus dem ISO-Image im Grub-Menü hinzuzufügen, was ich vorschlage. Dazu benötigen Sie eine Nicht-Btrfs-Partition (denn aus unbekannten Gründen will das Standard-initramfs der Ubuntu-ISO das Image nicht sehen, wenn es sich auf der Partition mit dem beschriebenen FS befindet) und direkte Hände. Fügen Sie der Datei /etc/grub.d/40_custom die folgenden Zeilen hinzu:

Menüeintrag "Ubuntu 12.10 i386 iso" ( insmod part_msdos insmod fat # Root installieren, von wo wir das ISO-Set bekommen root="hd0,msdos7" # Pfad zum Image relativ zum obigen Root-Set isofile=/ubuntu-12.10-desktop- i386.iso # Als Loopback-Gerät direkt in Grub Loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noeject noprompt -- initrd (loop)/casper/initrd.lz )

und führen Sie den Befehl aus, um die Grub-Hauptkonfiguration zu aktualisieren:

$ sudo grub aktualisieren

Nun können Sie selbst bei schwerwiegenden Schäden am System – sofern natürlich nicht der Bootloader und seine Dateien betroffen sind – jederzeit vom ISO-Image booten und wechseln beschädigte Dateien oder Rollback zu einem früheren Zustand des Systems.


DIE INFO

Wenn Sie als Root in einer Chroot-Umgebung arbeiten, besteht die Möglichkeit, von dort zu entkommen. Eine Möglichkeit besteht darin, den Systemaufruf mknod() zu verwenden und dann das echte Root zu mounten. Die Installation des grsecurity-Patchsets löst dieses Problem.

Btrfs-Befehle haben Standard- und abgekürzte Formen. Beispielsweise kann der Befehl „btrfs subvolume snapshot“ als „btrfs su sn“ geschrieben werden.

Nehmen wir also an, Sie haben das System gelöscht und müssen es aus einem Btrfs-Snapshot wiederherstellen. Booten Sie dazu von diesem ISO-Image, mounten Sie die Partition, auf der Sie das System abgelegt haben - genau die Partition, nicht das Subvolume! - und geben Sie folgende Befehle ein (natürlich angepasst an Ihre Snapshots und Partitionen):

# cd /mnt/sda11 # mv @ @_badroot # mv @snapshots/201302011434/rootsnap @

Dasselbe machen wir bei Bedarf mit @home und rebooten. Wenn alles gut gelaufen ist, können Sie @_badroot entfernen:

$ sudo btrfs subvol del @_badroot

Fazit

Auf *nix-Systemen gibt es viele Möglichkeiten, sich vor schlechten Experimenten zu schützen oder sie abzumildern. Ich habe einige von ihnen überprüft. Es ist jedoch erwähnenswert, dass all diese Methoden hauptsächlich für Experimentatoren gedacht sind, die gerne tiefer in das System eintauchen. Sie eignen sich nicht zum Fangen von Malware - sie sind leicht zu erkennen, obwohl sie sicherlich ein gewisses Maß an Sicherheit bieten.