Вопрос

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

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

Это было полезно?

Решение

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

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 монтирование для каждой файловой системы;или, если у вас относительно новое ядро, вы можете использовать rbind крепления, которые делай следуйте точкам монтирования:

mount --rbind /something /new_something

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

/something

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

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

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

Эрик Мельски

Другие советы

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

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

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

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

$ mount --rbind test test/test

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

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

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

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

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

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

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

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

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

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

Получайте удовольствие,

Джич!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top