Erstellen Sie eine Schleife in einem Linux-Dateisystem

8

Wie erstelle ich eine Schleife im Linux-Dateisystem? Ich möchte die Directed Acyclic Graph (DAG) -Eigenschaft des Linux-Dateisystems brechen. Ist das möglich? Ich habe diesen Zustand einmal gesehen, als ich den Scratchbox Cross Compiler auf meinem Ubuntu installiert habe.

Ich weiß nicht, wie ich es jetzt reproduzieren soll.

    
suresh 08.04.2009, 15:43
quelle

4 Antworten

6

Einige andere Responder haben bereits geantwortet, wie man ein Mount mit dem Loopback-Gerät einrichtet, aber Sie haben speziell nach bind mounts gefragt, die ein wenig anders sind. Wenn Sie einen Bind-Mount verwenden möchten, geben Sie einfach --bind im Befehl mount an. Zum Beispiel:

%Vor%

Dadurch wird der Speicherort des Dateisystems unter /original/path auch zugänglich gemacht durch /new/path . Beachten Sie, dass dies nicht folgt. Angenommen, ich habe die folgenden Mountpoints:

%Vor%

Nun nehme ich an, dass ich ein bind mount für /something :

mache %Vor%

Ich kann auf Dateien wie /something/myfile über den Pfad /new_something/myfile zugreifen. Aber ich werde nicht über den Pfad /something/underneath/that/otherfile auf Dateien wie /new_something/underneath/that/otherfile zugreifen können. Sie müssen für jedes Dateisystem eine separate Mount-Datei bind einrichten. oder wenn Sie einen relativ neuen Kernel haben, können Sie rbind mounts verwenden, die Mountpoints folgen:

%Vor%

Ein Vorbehalt zu rbind mounts: Sie behandeln nicht den Fall, dass ein Dateisystem gemountet wird, nachdem rbind eingerichtet wurde. Nehmen wir an, ich habe ein solches Mount:

%Vor%

Dann richte ich mein rbind wie oben ein und dann moate /something/underneath/that : Das rbind wird das neue Mount nicht magisch durch den rbind Ort sichtbar machen. Beachten Sie auch, dass Sie anscheinend aufgrund eines Fehlers im Kernel ein rbind mount nicht aushängen können.

Auch für den Fall, dass Sie meinen "Wie richte ich Bind-Mounts mit dem Systemaufruf von mount (2) ein?": Sie müssen das MS_BIND -Flag (definiert in mount.h ) beim Aufruf von mount(2) angeben für ein normales bind mount. Für ein rbind mount müssen Sie MS_BIND und das Dokument% c_de% des Dokuments angeben (definiert in MS_REC ).

Hoffe das hilft,

Eric Melski

    
Eric Melski 08.04.2009, 15:58
quelle
1

Es sieht so aus, als ob alle bisherigen Antworten auf das Mounten auf Loopback-Geräten und das Erstellen einer Schleife mit Bind-Mounts gerichtet sind .

Wie Sie wahrscheinlich herausgefunden haben,

%Vor% Mit

können Sie nur auf test/test/test und nicht weiter zugreifen. Nicht einmal

%Vor%

funktioniert, weil das rekursive bind-mount effektiv nach vorhandenen Mounts auf der Quelle sucht und sie im Ziel bindet.

Was Sie verlangt haben, ist nicht möglich, da Bind-Mounts keine Mount-Punkte kreuzen. Wenn Sie wirklich eine Dateisystemschleife simulieren möchten, verwenden Sie ein Pseudo-Bind-Mount wie localfs . Ich habe es selbst nicht versucht, es kann blockieren, wenn ich versuche, ein von mir bereitgestelltes Dateisystem zu lesen. Gerade jetzt habe ich versucht, einen NFS-Baum mit crossmnt zu exportieren und ihn unter sich zu mounten, scheitert aber aus ähnlichen Gründen.

    
ephemient 08.04.2009 16:10
quelle
-1
%Vor%

Dabei steht / path / to / device für den Pfad zu der Partition, die Sie mounten möchten, oder für den Pfad zu einem Festplatten-Image und / path / to / mount / location für den Pfad zu dem Ordner, den Sie mounten möchten Gerät / Bild unter

Sie müssen möglicherweise auch den Typ des Dateisystems wie folgt angeben (der fat16 / fat32 verwendet):

%Vor%     
Jiaaro 08.04.2009 15:48
quelle
-1

Sie können auch eine von Grund auf neu erstellen:

Erstellen Sie zuerst die Image-Datei und initialisieren Sie sie.

%Vor%

Als nächstes erstellen Sie eine gültige Partition mit einem FS-Typ Ihrer Wahl

%Vor%

Montiere dein neues Bild

%Vor%

Sie können jetzt Dateien und Verzeichnisse in Ihrem neuen Image erstellen / kopieren.

Viel Spaß,

Jeach!

    
Jeach 08.04.2009 17:48
quelle

Tags und Links