Создать цикл в файловой системе Linux - PullRequest
8 голосов
/ 08 апреля 2009

Как создать цикл в файловой системе Linux? Я хочу нарушить свойство ориентированного ациклического графа (DAG) файловой системы Linux. Это возможно? Я видел это условие однажды, когда я установил кросс-компилятор scratchbox на Ubuntu.

Я не знаю, как воспроизвести это сейчас.

Ответы [ 4 ]

6 голосов
/ 08 апреля 2009

Некоторые другие респонденты уже ответили, как настроить монтирование с использованием устройства loopback, но вы специально спросили о bind монтировках, которые немного отличаются. Если вы хотите использовать связывание, вы просто указываете --bind в команде монтирования. Например:

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

Это сделает расположение файловой системы доступным на /original/path , а также доступным на /new/path. Обратите внимание, что не будет соответствовать следующим точкам монтирования! Например, предположим, что у меня есть следующие точки монтирования:

/something
/something/underneath/that

Теперь предположим, что я сделал bind крепление для /something:

mount --bind /something /new_something

Я смогу получить доступ к файлам, таким как /something/myfile, по пути /new_something/myfile. Но я не смогу получить доступ к файлам типа /something/underneath/that/otherfile по пути /new_something/underneath/that/otherfile. Вы должны установить отдельное bind mount для каждой файловой системы; или если у вас относительно новое ядро, вы можете использовать rbind mounts, которые do следуют за точками монтирования:

mount --rbind /something /new_something

Одно предупреждение о rbind монтировании: они не обрабатывают случай, когда файловая система монтируется после установки rbind. То есть предположим, что у меня есть крепление, подобное этому:

/something

Затем я настраиваю rbind, как указано выше, и , затем , я монтирую /something/underneath/that: rbind волшебным образом не сделает новое крепление видимым через местоположение rbind. Также имейте в виду, что, очевидно, из-за ошибки в ядре вы не можете размонтировать rbind mount.

Кроме того, на всякий случай вы имели в виду «Как мне настроить bind mounts с помощью системного вызова mount (2)?»: Вы должны указать флаг MS_BIND (определенный в mount.h) при вызове mount(2) для обычного bind крепления. Для монтирования rbind необходимо указать MS_BIND и флаг недокументирования MS_REC (определенный в linux/fs.h).

Надеюсь, это поможет,

Эрик Мелски

1 голос
/ 08 апреля 2009

Похоже, что все ответы до сих пор касаются монтажа на петлевых устройствах, а не создания петли с использованием bind mounts .

Как вы, вероятно, обнаружили,

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

только позволяет получить доступ к test/test/test, и не дальше. Даже не

$ mount --rbind test test/test

работает, потому что рекурсивное связывание монтирования эффективно проходит через поиск существующих монтирований в источнике и связывание их в цели.

То, о чем вы просили, невозможно, так как привязные крепления не пересекают точки подключения. Если вы действительно хотите смоделировать цикл файловой системы, попробуйте использовать монтирование с псевдосвязью, например localfs . Я не пробовал себя, он может заблокироваться при попытке прочитать файловую систему, предоставленную им самим. Только что я попытался экспортировать дерево NFS с crossmnt и смонтировать его под себя, но не удалось по тем же причинам.

0 голосов
/ 08 апреля 2009

Вы также можете создать его с нуля:

Сначала создайте файл изображения и инициализируйте его

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

Далее, сделайте его допустимым разделом, используя тип FS на ваш выбор

mkfs.ext3 -F /tmp/loop.img

Смонтируйте ваш новый образ

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

Теперь вы можете создавать / копировать файлы и каталоги в новом образе.

Веселись,

Jeach!

0 голосов
/ 08 апреля 2009
mount /path/to/device /path/to/mount/location -o loop

где / path / to / device - это путь к разделу, который вы хотите смонтировать, или путь к образу диска, а / path / to / mount / location - это путь к папке, которую вы хотите смонтировать. устройство / изображение под

вам также может понадобиться указать тип файловой системы, например, такой (в которой используется fat16 / fat32):

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