Ist es möglich, eine Loopback-Datei schreibgeschützt bereitzustellen und alle Schreibvorgänge in den Arbeitsspeicher umzuleiten?
quelle
Ist es möglich, eine Loopback-Datei schreibgeschützt bereitzustellen und alle Schreibvorgänge in den Arbeitsspeicher umzuleiten?
Es ist möglich, eine Union-Dateisystemebene wie aufs zu verwenden .
Demo:
# dd if=/dev/zero of=/tmp/image bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.0028428 s, 369 MB/s
# mke2fs /tmp/image
...
# mkdir /tmp/imgmnt
# mount -o loop /tmp/image /tmp/imgmnt
# echo hello > /tmp/imgmnt/hello.txt
# umount /tmp/imgmnt
# mount -o loop,ro /tmp/image /tmp/imgmnt
# echo blah > /tmp/imgmnt/hello.txt
-su: /tmp/imgmnt/hello.txt: Read-only file system
# mkdir /tmp/rammnt
# mount -t tmpfs -o size=1M none /tmp/rammnt
# mkdir /tmp/combined
# mount -t aufs -o br:/tmp/rammnt:/tmp/imgmnt=ro none /tmp/combined
Diese Mount-Option zum Erstellen einer neuen "Verzweigung" ( br
) durch Stapeln/tmp/rammnt
(Lesen / Schreiben) über /tmp/imgmnt
(Nur Lesen). Diese "Verzweigung" wird als (Lese- / Schreib-) Dateisystem weiter sichtbar gemacht /tmp/combined
.
(Siehe die Informationen finden Manpage zu aufs (5) .)
Jetzt ist alles erledigt, was Sie haben:
# ls /tmp/combined
hello.txt lost+found
# cat /tmp/combined/hello.txt
hello
# echo bye > /tmp/combined/hello.txt
# cat /tmp/combined/hello.txt
bye
# cat imgmnt/hello.txt
hello
# cat rammnt/hello.txt
bye
Also die schreibt "halt" in die tmpfs
Dateisystem angehalten" werden, wird nicht versucht, sie in die Image-Datei mit eingebundener Schleife zu übertragen.
Sie hätten ein einfaches Verzeichnis (in einem Lese- / Schreib-Dateisystem) oder möglicherweise ein Verzeichnis unter verwenden können, /dev/shm
wenn dies für Sie funktioniert, anstatt ein bestimmtes Verzeichnis zu erstellentmpfs
dafür zu .
Diese Technik (oder Variationen davon) wird von einigen LiveCD-Distributionen verwendet. Die Wikipedia auf Eintrag listet einige auf.
fstab
, so dass der Einhängepunkt ist/
? (Das heißt, das System startet so ziemlich von einem verwerfbaren Image.)/
ich, dass du mit einer initrd besser dran bist (so geht das für Live-CDs, von denen ich glaube). Möglicherweise können Sie dies von einem Init-Skript aus tun, obwohl dies schwierig klingt.Aktualisieren:
Es scheint, dass es zwei weitere einfachere Möglichkeiten gibt, dies unter Ubuntu zu tun (zumindest die späteren Versionen):
sudo apt-get install overlayroot
gefolgt von der Einstellungoverlayroot="tmpfs:swap=1,recurse=0"
in/etc/overlayroot.local.conf
.sudo apt-get install fsprotect
gefolgt von der Übergabefsprotect
als Kernel-ParameterIch habe endlich herausgefunden, wie das mit dem Root-Dateisystem (in Ubuntu 11.04) geht!
Die Schritte zum Booten eines Systems sind einfach. Ich habe diesen Leitfaden in Kombination mit verwendet diesem Leitfaden und einer Reihe von Websuchen verwendet, um herauszufinden, wie ich ihn fehlerfrei zum Laufen bringen kann.
Zusammenfassung:
Lauf:
Speichern Sie dies in
/etc/initramfs-tools/scripts/init-bottom/__rootaufs
. Ich glaube nicht, dass der Name wirklich wichtig ist, aber der Anfang__
kann für Bestellzwecke verwendet werden. Wenn Sie den Namen ändern, möchten Sie möglicherweise die Unterstriche beibehalten. (Dies ist eine Kopie dieser Datei .)In
/etc/default/grub
finden Sie die Zeile, beginnt mitGRUB_CMDLINE_LINUX_DEFAULT
und innerhalb der Anführungszeichen , die folgen, fügen Sie den Parameteraufs=tmpfs
.Bonus: Wenn Sie gelegentlich deaktivieren die Umleitung vorübergehend, entfernen Sie einfach dieses Argument aus der Kernel - Parameterliste. Sie können dies wahrscheinlich tun, indem Sie beim Booten des Systems die Umschalttaste gedrückt halten, um das GRUB-Menü anzuzeigen. Drücken Sie dann e , um die Parameter zu bearbeiten, und löschen Sie den
aufs=...
Parameter einfach aus der Liste.Fügen Sie diese Zeilen an
/etc/sysctl.conf
. ( Warnung : Mögliches Sicherheitsrisiko.)Führen Sie diese Zeilen aus:
Wenn beim Neustart alles geklappt hat, werden Sie dies in einem temporären Dateisystem tun. Der RAM-Teil ist auf
/rw
und das Disk-Image auf/ro
, aber es ist natürlich schreibgeschützt.Wenn Sie jedoch ein temporäres System gebootet haben und eine permanente Änderung vornehmen müssen, können Sie das
/ro
Dateisystem mit den folgenden Anweisungen erneut einbindenum es beschreibbar zu machen, und dann können Sie alle erforderlichen Änderungen an diesem Verzeichnis vornehmen.
quelle
Ja, von unionfs, siehe unionfs.filesystems.org . Sie haben das erste Nur-Lese-Dateisystem und als zweites Lese-Schreib-RAM-Dateisystem über unionfs bereitgestellt.
In Ubuntu finden Sie das unionfs-fuse-Paket, eine weitere Implementierung derselben Dinge, jedoch im Benutzerbereich, nicht als Kernelmodul.
quelle
Sie können dies auch auf der Geräteebene tun, ohne eine Unionfs wie aufs. Siehe Geräte-Mapper
snapshot-origin
.quelle