В чем разница между mount и mount -o loop

28

У меня есть ISO-файл с именем ubuntu.iso.

Я могу mountего с помощью команды: mount ubuntu.iso /mnt. После установки, я могу видеть его из Outout команды df -h: /dev/loop0 825M 825M 0 100% /mnt.

Однако, если я выполню команду mount -o loop ubuntu.iso /mnt, я получу тот же результат.

Как я знаю, устройство loop позволяет нам просматривать iso-файл как устройство, поэтому я думаю, что именно поэтому мы добавили эту опцию -o loop. Но я могу посетить свой iso-файл, даже если я только выполню mount ubuntu.iso /mnt.

Так что я не вижу разницы между mountи mount -o loop.

Ив
источник
Также важно то, что иногда mount не может настроить петлевое устройство с соответствующими дополнениями. Например: mount ubuntu.iso /mntоно не устанавливает петлевое устройство только для чтения и mount /image.squashfs /mntне устанавливает петлевое устройство DIO( losetup --direct-io=on).
неграмотный

Ответы:

47

Обе версии используют петлевые устройства и дают одинаковый результат; короткая версия опирается на «ум», добавленный mountв последние годы. mount -o loopговорит mountявным образом использовать устройство обратной связи; он оставляет само устройство петли до mount, которое будет искать доступное устройство, настраивать его и использовать его. (Вы также можете указать устройство с помощью, например mount -o loop=/dev/loop1 .)

Хитрость заключается в том, что когда предоставляется файл для монтирования, mountон автоматически использует циклическое устройство для монтирования, когда это необходимо - то есть файловая система не указана или libblkidопределяет, что файловая система поддерживается только на блочных устройствах (и, следовательно, устройство петли необходимо для преобразования файла в блочное устройство).

Раздел «Устройство цикла» на mountстранице руководства содержит более подробную информацию.

Стивен Китт
источник
1
Не то чтобы давным-давно не было опции "-o loop" в mount, и вам пришлось бы вручную создавать устройство loop с помощью команды losttup.
Эдхелдил
@Edheldil, это зависит от вашего понятия «давно» ;-). util-linux2.11 поддерживается mount -o loopв 2001 году, и я думаю, что 2.10 тоже, по крайней мере, годом ранее.
Стивен Китт
Да, но обычно ли в 2001 году стабильные дистрибутивы уже использовали util-linux 2.11?
сторожевик
2
@rackandboneman Я стал копать немного больше, и оказалось, что поддержка -o loopбыла добавлена ​​где-то между util-linux2.4 и 2.5j; У Debian 1.1 была последняя версия, и она была выпущена в июне 1996 года. Так что эта опция доступна в дистрибутивах более двадцати лет.
Стивен Китт
Преимущество этой хитрости: если / когда новая функция «прямого монтирования файлов» разработчиков XFS (без необходимости использования петлевых устройств) достигнет ядра, mountона сможет прозрачно переключиться на этот механизм (по крайней мере, в течение первых 15 минут, пока оказывается, он сломал чей-то шеллскрипт, и все должны вернуться к устройствам цикла) , в отличие от mount -o loopкоторых все еще явно запрашивается старый (текущий) механизм.
grawity
9

loopУстройство главным образом управляется с помощью losteupкоманды. Так что losetup -aдает вам обзор используемых петлевых устройств и прикрепленных файлов. Команда mountможет монтировать только блочное устройство . Устройство цикла может создать виртуальное блочное устройство из файла (символьное устройство).

На самом деле между этими командами есть большая разница, потому что в старых системах Linux mountне удалось распознать файл как правильное устройство для монтирования, но в то время, когда команда монтирования была выполнена с большим количеством функций, следовательно, теперь она может самостоятельно решить попробуйте вызвать команду losttup и смонтировать результат. Но если у вас есть весь образ диска не в формате iso, а, например, с MBR в начале, команда mount не может его распознать, и вам нужно найти используемый раздел (например, с помощью parted disk_image.raw unit B printкоманды) yoursef, а затем смонтировать его с полным параметром mount comman как :

mount disk_image.raw /mntpoint/ -o loop,offset=${OFFSET_of_PARTITION}

В этом синтаксисе петлевое устройство не было указано, и предполагается, что система выбирает первое свободное ( /dev/loop0и /dev/loop1т. Д.). Среди других новых функций команды mount является то, что вам не нужно указывать тип файловой системы смонтированного блочного устройства (в вашем случае -t iso9660) если поддержка файловой системы была установлена.

Швейк
источник
7

Там нет никакой разницы между mount ubuntu.iso /mntи mount -o loop ubuntu.iso /mnt.

Первый прозрачно обрабатывается, как если бы вы использовали второй.

Эммануэль Роза
источник