Creare un ciclo in un filesystem di Linux
-
06-09-2019 - |
Domanda
Come faccio a creare un loop del filesystem di Linux?Voglio rompere il grafo orientato aciclico (DAG) la struttura del filesystem di Linux.È possibile questo?Ho visto questa condizione una volta quando ho installato il scratchbox cross compilatore sul mio Ubuntu.
Non so come riprodurlo ora.
Soluzione
Alcuni altri soccorritori hanno già risposto come impostare un monte utilizzando il dispositivo di loopback, ma è specificamente chiesto monti bind
, che sono un po 'diverso. Se si desidera utilizzare un vicolo cieco di montaggio, basta specificare --bind
nel comando mount. Ad esempio:
mount --bind /original/path /new/path
Questo renderà la posizione del file system accessibile a /original/path
anche accessibile attraverso /new/path
. Si noti che questo non seguenti punti di mount! Ad esempio, supponiamo di avere i seguenti punti di mount:
/something
/something/underneath/that
Ora supponiamo che io faccio un supporto bind
per /something
:
mount --bind /something /new_something
sarò in grado di accedere ai file come /something/myfile
tramite il /new_something/myfile
percorso. Ma io non in grado di accedere ai file come /something/underneath/that/otherfile
tramite il /new_something/underneath/that/otherfile
percorso. È necessario impostare un bind
separata mount per ogni file system; o se si dispone di un relativamente nuovo kernel, è possibile utilizzare cavalcature rbind
, che non seguo punti di montaggio:
mount --rbind /something /new_something
Un avvertimento su supporti rbind
: essi non gestiscono il caso in cui un file system è montato dopo la rbind
è stato configurato. Cioè, supponiamo di avere un supporto come questo:
/something
Poi ho impostato il mio rbind
come sopra, e poi monto /something/underneath/that
: il rbind
non sarà magicamente far montare il nuovo visibile attraverso la posizione rbind
. Anche essere consapevoli del fatto che, apparentemente a causa di un bug nel kernel, non si può smontare montare un rbind
.
Inoltre, nel caso in cui si intende: "Come faccio a impostare monta legano con il supporto (2) chiamata di sistema?": È necessario specificare il flag MS_BIND
(definito in mount.h
) quando si chiama mount(2)
per un bind
regolare montaggio. Per montare un rbind
, è necessario specificare MS_BIND
e la bandiera MS_REC
undocument (definito in linux/fs.h
).
Speranza che aiuta,
Eric Melski
Altri suggerimenti
Sembra che tutte le risposte finora sono circa il montaggio su dispositivi di loopback, e non la creazione di un ciclo utilizzando monta bind .
Come probabilmente avete scoperto,
$ mkdir -p test/test
$ mount --bind test test/test
consente solo di accedere test/test/test
, e non oltre. Nemmeno
$ mount --rbind test test/test
opere, perché il ricorsiva bind-mount efficace passa attraverso la ricerca supporti esistenti sulla sorgente e vincolante l'obiettivo.
Quello che hai chiesto non è possibile, dal momento che i supporti si legano non attraversano punti di montaggio. Se davvero si vuole simulare un ciclo filesystem, provare a utilizzare un supporto pseudo-bind come localfs . Non mi sono provato, può bloccare quando si cerca di leggere un file system fornito da sé. Proprio ora, ho provato l'esportazione di un albero di NFS con crossmnt
e il montaggio sotto se stessa, ma fallisce per ragioni analoghe.
mount /path/to/device /path/to/mount/location -o loop
dove / path / to / dispositivo è il percorso o la partizione che si desidera montare, o il percorso ad un'immagine del disco, e / path / to / mount / location è il percorso della cartella che si desidera montare il dispositivo / immagine sotto
potrebbe essere necessario includere il tipo di file system in questo modo (che utilizza FAT16 / FAT32):
mount /path/to/device /path/to/mount/location -o loop -t vfat
Si potrebbe anche voler creare uno da zero:
Prima di creare il file di immagine e inizializzare
dd if=/dev/zero of=/tmp/loop.img bs=1024k count=$IMG_SIZE
A quel punto, la rendono un valido partizione utilizzando un FS tipo di vostra scelta
mkfs.ext3 -F /tmp/loop.img
Montare la nuova immagine
mkdir -p /mnt/image
mount /tmp/loop.img /mnt/image -o loop
È ora possibile creare/copiare i file e le directory nella vostra nuova immagine.
Divertirsi,
Jeach!