Ich versuche, unter Linux ein verschlüsseltes, nach Bedarf wachsendes Dateisystem zu erstellen. Ich bin mit LUKS und Cryptsetup vertraut.
Ich kann eine leere Datei erstellen:
fallocate -l 512M /root/image
Ich kann einen LUKS-Container darauf erstellen:
cryptsetup -y luksFormat /root/image
Und dann "öffnen" Sie es:
cryptsetup luksOpen /root/image luksvolume
An dieser Stelle kann ich einfach ein Dateisystem darauf erstellen:
mkfs.ext4 -j /dev/mapper/luksvolume
Das ist alles in Ordnung und gut. Es wird jedoch nicht auf den Teil der Frage "Grow-on-Demand" eingegangen.
Die Idee ist, dass das Kopieren einer 2-GB-Datei in das verschlüsselte Dateisystem das Bild so "erweitert", dass es groß genug ist, um die Datei aufzunehmen.
Ist das überhaupt möglich?
mount
encryption
disk-volume
luks
Merc
quelle
quelle
Antworten:
Ja! Es sieht so aus, als wäre es möglich. Lassen Sie uns überprüfen, wie dies erreicht werden kann. Beachten Sie, dass dadurch kein echtes Grow-on-Demand-Dateisystem erstellt wird. Wenn das Dateisystem die maximale Größe der Datei mit geringer Dichte erreicht, werden Fehler gemeldet, wenn nicht genügend Speicherplatz vorhanden ist, wenn noch weitere Daten geschrieben werden müssen.
Zunächst untersuchte ich Thin Provisioning , eine bekannte Technologie, um Speicherplatz in Virtualisierungsszenarien zu sparen. Leider scheint es in gängigen Linux-Anwendungsfällen nur mit LVM verfügbar zu sein . Da dies etwas außerhalb des Rahmens Ihrer Frage zu liegen scheint, habe ich nach etwas anderem gesucht.
Das zweite Konzept, das ich untersucht habe, ist Sparse File . Dies passt genau zu Ihrer Frage und ... mein anfänglicher Zweifel war: " OK. Ich kann eine Sparse-Datei erstellen. Aber was passiert, wenn ich sie als LUKS-Container initialisiere? Wird durch eine solche Initialisierung der gesamte verfügbare Speicherplatz zugewiesen? Wenn nicht, Was passiert, wenn ich das Dateisystem in einem solchen Container initialisiere? Wird ein
mkfs.ext4
der gesamte verfügbare Speicherplatz zugewiesen? ". Da ich keine Antwort hatte, beschloss ich, es zu versuchen. Also mal sehen, was passiert ist.Beginnen wir mit meinem aktuellen System, auf dem ich nur 3,3 GB freien Speicherplatz im
/repository
Dateisystem habe:Erstellen wir eine 10G- Sparse-Datei in einem solchen Dateisystem mit:
und lassen Sie uns überprüfen, ob ... es sich wirklich um eine spärliche Datei handelt:
IN ORDNUNG. Wir haben also eine 10G- Datei in einem Dateisystem, das zuvor 3,3G freien Speicherplatz hatte. Wie viel freien Speicherplatz habe ich noch?
Immer noch 3,3G. Nett. Sparse-Dateien sind wirklich ... Sparse-Dateien ;-) Lassen Sie uns einen Schritt weiter gehen, indem wir einen LUKS-Container in einer solchen 10G-Datei erstellen und ... mal sehen, ob uns der Speicherplatz ausgeht:
Jetzt habe ich einen geöffneten
secrets
Container über meiner 10G-Sparse-Datei definiert, der in einem Dateisystem mit nur 3,3G freiem Speicherplatz gespeichert ist.Wie viel freien Speicherplatz habe ich noch?
Wunderbar! Immer noch 3,3 GB. Unser verschlüsselter Container benötigte meist keinen Platz!
Lassen Sie uns überprüfen, ob alles in Ordnung ist oder ob unser Setup etwas Seltsames enthält:
Alles scheint in Ordnung zu sein, also lasst uns anfangen, einen solchen Behälter zu verwenden, um etwas aufzubewahren. Beginnen wir mit der Erstellung eines EXT4-Dateisystems:
Es sieht so aus, als hätte es funktioniert, da es keine Spur von "out of space" gab. Lass uns das Prüfen:
Ähm ... also ist etwas passiert. Wir verloren etwas wie 100M Platz aber .... es ist ein erwartetes Verhalten: die Schaffung des EXT4 Dateisystem DO erfordert das Schreiben von vielen Metadaten. Es ist also normal, dass beim Erstellen etwas Speicherplatz verwendet wurde.
Ist es ein "funktionierendes" EXT4-Dateisystem?
Ja! Es sieht ok aus.
Jetzt haben wir ein EXT4-Dateisystem in einem geöffneten LUKS-Container geschrieben, der über einer 10G-Sparse-Datei definiert ist, die in einem 3.3G-Dateisystem gespeichert ist.
Mal sehen, ob alles richtig funktioniert, indem wir Speicherplatz "on-demand" zuweisen.
Beginnen wir mit dem Schreiben von 500 Millionen Dummy-Daten in den verschlüsselten FS
Haben wir die Datei erfolgreich erstellt?
Es sieht so aus.
Was ist mit unserem realen Dateisystem passiert?
Uau! Wir haben etwas mehr als 500 Millionen "verloren". Das ist übrigens gut, da der physische Raum wirklich nach Bedarf zugewiesen wird!
Speichern wir eine weitere 2-GB-Datei:
Was ist passiert?
Wirklich nett. Was passiert, wenn wir eine Datei löschen?
Wie erwartet ist das Verhalten bei Sparse-Dateien genau wie bei Thin Provisioning: Einmal zugewiesen, kann Speicherplatz beim Löschen von Dateien nicht mehr beansprucht werden. Aber das ist im Allgemeinen in Ordnung. Nicht wahr?
An diesem Punkt sollte die Antwort auf Ihre Frage vollständig sein. Richtig?
Zusatz:
Mal sehen, was passiert, wenn der unterstrichene Speicher voll wird:
Was? es sieht so aus, als wäre es gelungen! Wie war das möglich? Lass uns das Prüfen!
Ähm ... Es sieht in Ordnung aus. Sind wir sicher
Wir haben keinen Platz mehr! Ohne Fehler!
Auch wenn es schön wäre zu untersuchen, was wirklich passiert ist ... Ich überlasse dies Ihrer Neugier und / oder Ihren Fähigkeiten zur Fehlerbehebung bei anderen ServerFault-Mitgliedern ;-)
Habe Spaß!
Übrigens: Ich habe all das hier getestet:
quelle
rsync
hat eine--sparse
Option, die spärliche Dateien auf der Zieldiskette erstellen soll.