Ich suche nach einem Mechanismus auf Kernelebene, der durchgeleitet wird und Datei-Hashes ändert, indem er entweder Dateiinhalte verschlüsselt oder Daten anhängt. Die naheliegendste Lösung ist die Verschlüsselung, aber ich kann keine geeigneten Verschlüsselungsmethoden finden (z. B. vollständig nur auf dem Kernel, kein ecryptfs, nichts auf FUSE basierendes usw.).
Insbesondere habe ich eine große Anzahl von Dateien, in /foo
denen ich auch in einer Weise erscheinen möchte /foobar
, die den ursprünglichen MD5 der Dateien verschleiert,ohneDuplizierung der Rohdaten. Ich mache mir keine Sorgen, wenn die Dateien /foobar
durch Hinzufügungen unbrauchbar werden - ich füge gerne ein paar zufällige Bytes an jede Datei an und lasse viele Dateiformate dadurch kaputt gehen, aber ich weiß nicht, wie ich das mit einer Art Bind-Mount machen soll.
Antwort1
Wenn Sie nach einem benutzerdefinierten Dateisystem-Overlay suchen, ist FUSE die richtige Wahl. Es gibt verschiedene benutzerdefinierte Dateisysteme, die mit FUSE geschrieben wurden (sshfs, ntfs-3g, wikipediafs...), darunter einfache Overlays wiebindfs.
Man könnte den Bindfs-Quellcode nehmen und ihn so ändern, dass er beispielsweise bei jeder Leseoperation das erste Byte mit einigen zufälligen Daten XOR-verknüpft.
Für eine reine Kerneloption können Sie overlayfs
unsere unionfs
Treiber auf ähnliche Weise ändern.
Eine andere Alternative besteht darin, Samba zu nehmen, ein Samba-VFS-Modul zu schreiben, um Dateien zu beschädigen, das Quellverzeichnis freizugeben und es mit dem Linux- cifs
Treiber auf derselben Maschine zu mounten. (Dasselbe ist auch mit dem 9p
Treiber und dem u9fs
Daemon oder mit dem nfs
Treiber und irgendeinem NFS-Server-Daemon möglich.)
Wenn Ihnen der Inhalt egal ist, erstellen Sie Sparse-Dateien mit der gewünschten Größe. Diese belegen überhaupt keinen Speicherplatz:
$ truncate -s 1G largefile
$ du -h --apparent largefile
1G largefile
$ du -h largefile
0 largefile
Schleifen Sie einen Baum wie folgt:
cd /foo
find -type d | while read -r file; do
mkdir -p "/foobar/$file"
done
find -type f | while read -r file; do
truncate -r "$file" "/foobar/$file"
done