Erstellen Sie eine Schleife in einem Linux-Dateisystem
-
06-09-2019 - |
Frage
Wie kann ich eine Schleife im Dateisystem Linux erstellen? Ich möchte den gerichteten azyklischen Graphen (DAG) Eigenschaft des Linux-Dateisystem brechen. Ist das möglich? Ich habe diesen Zustand einmal gesehen, als ich die scratchbox Cross-Compiler auf meinem Ubuntu installiert.
Ich weiß nicht, wie es jetzt zu reproduzieren.
Lösung
Einige andere Responder bereits beantwortet, wie eine Halterung mit dem Loopback-Gerät einzurichten, aber Sie speziell über bind
Halterungen gefragt, die ein wenig anders sind. Wenn Sie eine Bindung verwenden möchten montieren, geben Sie einfach --bind
in der Mount-Befehl. Zum Beispiel:
mount --bind /original/path /new/path
Dies wird die Position im Dateisystem zugänglich /original/path
auch zugänglich durch /new/path
machen. Beachten Sie, dass dies nicht folgende Einbindungspunkte! Angenommen, ich folgende Einbindungspunkte haben:
/something
/something/underneath/that
Nehmen wir nun an, ich bind
für /something
montieren machen:
mount --bind /something /new_something
ich in der Lage sein, Dateien über den Pfad /something/myfile
wie /new_something/myfile
zuzugreifen. Aber ich will nicht können Dateien zugreifen wie /something/underneath/that/otherfile
über den Pfad /new_something/underneath/that/otherfile
. Sie müssen eine separate bind
Halterung für jedes Dateisystem einzurichten; oder wenn Sie einen relativ neuen Kernel haben, können Sie rbind
Halterungen verwenden, die Sie folgen Einhängepunkte:
mount --rbind /something /new_something
Eine Warnung über rbind
Mounts: sie den Fall nicht behandeln, in denen ein Dateisystem gemountet wird, nachdem die rbind
Setup ist. Das heißt, nehme ich an eine Halterung wie folgt aus:
/something
Dann habe ich meine rbind
wie oben auf, und und I montieren /something/underneath/that
: die rbind
wird nicht auf magische Weise die neuen sichtbar durch die rbind
Lage montieren machen. Beachten Sie auch, dass offenbar aufgrund eines Fehlers im Kernel, man kann nicht eine rbind
montieren aushängen.
Auch für den Fall, Sie meinten: „Wie richte ich Bind Mounts die Halterung (2) Systemaufruf?“: Sie haben die MS_BIND
Flag angeben müssen (definiert in mount.h
), wenn Sie mount(2)
für eine regelmäßige bind
nennen montieren. Für eine rbind
montieren, müssen Sie MS_BIND
und die undocument MS_REC
Flag (definiert in linux/fs.h
) angeben.
Ich hoffe, das hilft,
Eric Melski
Andere Tipps
Es sieht aus wie alle Antworten so weit über die Montage auf Loopback-Geräte sind, und nicht um eine Schleife zu schaffen mit bind Mounts .
Wie Sie wahrscheinlich entdeckt haben,
$ mkdir -p test/test
$ mount --bind test test/test
können Sie nur test/test/test
zugreifen zu können, und nicht weiter. Nicht einmal
$ mount --rbind test test/test
funktioniert, weil die rekursive bind-mount geht effektiv durch an der Quelle vorhandene Halterungen zu finden und sie in der Zielbindungs.
Was haben Sie gefragt ist nicht möglich, da Bind Mounts nicht Einhängepunkte überqueren. Wenn Sie wirklich eine Dateisystem-Schleife simulieren wollen, versuchen Sie eine verwenden pseudo-bind montieren wie localfs . Ich habe mich nicht versucht, kann es einsperren, wenn sie versuchen, ein Dateisystem von selbst zur Verfügung gestellt zu lesen. Gerade jetzt habe ich versucht, einen NFS-Baum mit crossmnt
exportieren und sie unter sich selbst montiert werden, aber nicht aus ähnlichen Gründen.
mount /path/to/device /path/to/mount/location -o loop
wobei / path / to / Gerät ist der Weg, um entweder die Partition, die Sie montieren möchten, oder den Pfad zu einem Disk-Image und / path / to / mount / Standort ist der Pfad zu dem Ordner, den Sie wollen, dass die Montage Gerät / Bild unter
Sie müssen unter Umständen auch die Art des Dateisystems wie so enthalten (die FAT16 / FAT32 verwendet):
mount /path/to/device /path/to/mount/location -o loop -t vfat
Sie können auch einen wollen von Grund auf neu erstellen:
Zuerst die Image-Datei erstellen und initialisieren es
dd if=/dev/zero of=/tmp/loop.img bs=1024k count=$IMG_SIZE
Als nächstes stellen Sie eine gültige Partition einen FS-Typ Ihrer Wahl mit
mkfs.ext3 -F /tmp/loop.img
Mount Ihr neues Bild
mkdir -p /mnt/image
mount /tmp/loop.img /mnt/image -o loop
Sie können jetzt erstellen / Kopieren von Dateien und Verzeichnisse in Ihrem neuen Bild.
Haben Sie Spaß,
Jeach!