2009-04-08 8 views
8

Comment créer une boucle dans le système de fichiers Linux? Je veux casser la propriété de graphe acyclique dirigée (DAG) du système de fichiers Linux. Est-ce possible? J'ai vu cette condition une fois quand j'ai installé le compilateur croisé de scratchbox sur mon Ubuntu.Créer une boucle dans un système de fichiers Linux

Je ne sais pas comment le reproduire maintenant.

+0

mon interprétation de cette question est différente de ce que tout le monde semble répondre ... Je pense que le PO veut une structure de répertoires infiniment récursif. C'est possible de créer en utilisant des liens physiques, et peut-être des liens symboliques, mais idk comment le faire avec mount, donc je m'abstiendrai de répondre. – rmeador

+0

Vous ne pouvez pas relier des répertoires dans un système de fichiers UNIX "traditionnel". – ephemient

+0

a modifié la question – suresh

Répondre

6

d'autres intervenants ont déjà répondu à comment définir une monture en utilisant le périphérique de bouclage, mais vous avez spécifiquement posé des questions sur bind montures, qui sont e un peu différent. Si vous souhaitez utiliser un montage de liaison, vous devez simplement spécifier --bind dans la commande mount. Par exemple:

mount --bind /original/path /new/path 

Cela rendra l'emplacement du système de fichiers accessible à /original/path également accessible par /new/path. Notez que cela va pas points de montage suivants! Par exemple, supposons que j'ai les points de montage suivants:

/something 
/something/underneath/that 

Supposons maintenant que je fais un montage bind pour /something:

mount --bind /something /new_something 

je serai en mesure d'accéder à des fichiers comme /something/myfile via le chemin /new_something/myfile. Mais je ne pourrai pas accéder à des fichiers comme /something/underneath/that/otherfile via le chemin /new_something/underneath/that/otherfile. Vous devez configurer un support bind distinct pour chaque système de fichiers; ou si vous avez un noyau relativement nouveau, vous pouvez utiliser rbind supports, qui ne pas suivi mountpoints:

mount --rbind /something /new_something 

Une mise en garde sur rbind supports: ils ne gèrent pas le cas où un système de fichiers est monté après la rbind est installer. Autrement dit, supposons que j'ai une monture comme ceci:

/something 

Puis-je configurer mon rbind comme ci-dessus, et puis je monter /something/underneath/that: le rbind ne fera pas par magie le nouveau montage visible à travers l'emplacement rbind. Sachez également qu'en raison d'un bogue dans le noyau, vous ne pouvez pas démonter un montage rbind.

Aussi, juste au cas où vous vouliez dire « Comment puis-je configurer monte liaison à l'aide de l'appel système de montage (2)? »: Vous devez spécifier le drapeau MS_BIND (défini dans mount.h) lorsque vous appelez mount(2) pour un bind régulier de montage . Pour un montage rbind, vous devez spécifier MS_BIND et l'indicateur MS_REC sans document (défini dans linux/fs.h).

Espoir qui aide,

Eric Melski

-1
mount /path/to/device /path/to/mount/location -o loop 

où/chemin/vers/périphérique est le chemin soit la partition que vous voulez monter, ou le chemin d'une image disque, et/chemin/vers/montage/emplacement est le chemin d'accès au dossier veulent monter l'appareil/image sous

vous devrez peut-être inclure le type du système de fichiers comme si (qui utilise FAT16/FAT32):

mount /path/to/device /path/to/mount/location -o loop -t vfat 
1

Il semble que toutes les réponses à ce jour sont sur le point de montage sur des dispositifs de réalimentation, et non la création d'une boucle à l'aide bind mounts.

Comme vous l'avez probablement découvert,

$ mkdir -p test/test 
$ mount --bind test test/test 

ne vous permet d'accéder test/test/test, et pas plus loin. Pas même

$ mount --rbind test test/test 

œuvres, parce que la liaison de montage récursive va efficacement grâce à la recherche supports existants sur la source et les liant dans la cible.

Ce que vous avez demandé n'est pas possible, car les montages de liaison ne traversent pas les points de montage. Si vous souhaitez vraiment simuler une boucle de système de fichiers, essayez d'utiliser un pseudo-lien tel que localfs. Je n'ai pas essayé moi-même, il peut se bloquer en essayant de lire un système de fichiers fourni par lui-même. Tout à l'heure, j'ai essayé d'exporter un arbre NFS avec crossmnt et le monter sous lui-même, mais échoue pour des raisons similaires.

-1

Vous pouvez également créer un à partir de zéro:

d'abord créer le fichier d'image et l'initialiser

dd if=/dev/zero of=/tmp/loop.img bs=1024k count=$IMG_SIZE 

Ensuite, faire une partition valide en utilisant un type FS de votre choix

mkfs.ext3 -F /tmp/loop.img 

Montez votre nouvelle image

mkdir -p /mnt/image 
mount /tmp/loop.img /mnt/image -o loop 

Vous pouvez maintenant créer/copier des fichiers et des répertoires dans votre nouvelle image.

Amusez-vous,

Jeach!

+0

Cela ... ne répond pas à la question ... – hintss

Questions connexes