Для чого взагалі потрібен циклічний пристрій?


15

Раніше я створював файли зображень за допомогою dd, налаштовував на них файлову систему mkfsта використовував mountїх як змонтовані розділи. Пізніше я побачив в Інтернеті, що багато прикладів losetupзаздалегідь використовують для введення в нього циклічного пристрою /dev, а потім змонтують його. Я не міг сказати, чому практично потрібен файл зображень, щоб він поводився як циклічний пристрій і мав власний /devзапис, тоді як таку саму поведінку можна отримати без всяких клопотів.

Резюме: Для чого в реальному сценарії нам взагалі потрібен /dev/loopXзапис, коли ми можемо просто змонтувати зображення без нього? Для чого використовується циклічний пристрій?


9
"... в той час, як однакова поведінка може бути досягнута без всяких клопотів." - Ви там помиляєтеся;) - в Linux файл неможливо встановити без "клопоту" циклічного пристрою. Просто в наш час mountдостатньо розумно зробити клопоту за вас. (як показує Стівен Гарріс у своїй відповіді)
marcelm

Відповіді:


22

Монтаж, як правило, повинен виконуватися на блокових пристроях. Драйвер циклу кладе блоковий пристрій блоком на ваш файл даних.

Якщо ви робите цикл кріплення без losetupцього, ОС робить один у фоновому режимі.

напр

$ dd if=/dev/zero of=/tmp/foo bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0798775 s, 1.3 GB/s
$ mke2fs /tmp/foo
mke2fs 1.42.9 (28-Dec-2013)
....


$ losetup    
$ mount -o loop /tmp/foo /mnt1    
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         1  0 /tmp/foo
$ umount /mnt1
$ losetup
$ 

Можливо, вам доведеться зателефонувати losetupбезпосередньо, якщо у файл вашого файлу вбудовані розділи.

наприклад, якщо у мене є це зображення:

$ fdisk -l /tmp/foo2      

Disk /tmp/foo2: 104 MB, 104857600 bytes, 204800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1f25ff39

     Device Boot      Start         End      Blocks   Id  System
/tmp/foo2p1            2048      204799      101376   83  Linux

Я не можу це встановити безпосередньо

$ mount -o loop /tmp/foo2 /mnt1
mount: /dev/loop0 is write-protected, mounting read-only
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error

Але якщо я використовую losetupі kpartxтоді можу отримати доступ до розділів:

$ losetup -f /tmp/foo2
$ losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /tmp/foo2
$ kpartx -a /dev/loop0
$ mount /dev/mapper/loop0p1 /mnt1
$

Вам не потрібно явного losetupпросто використання mount -o loop,offset=$((512*2048)), де 512розмір сектору, і 2048це те, що було fdiskдано Startдля розділу.
Руслан

Так, це був лише приклад використання. У цьому конкретному прикладі це може бути простіше зробити розрахунок зміщення , але можуть бути випадки використання (наприклад , кілька розділів , які ви хочете встановити в той же час) , де вона може бути простіше просто losetupі kpartx. Нехай інструменти важко працюють :-)
Стівен Гарріс

18

Файлові системи розраховують читати і записувати на блокування пристроїв, але файли зображень не блокують пристрої. Циклічні пристрої надають блоковий пристрій над версією файлу (або іншим блоковим пристроєм, необов'язково з перезаносом).

Не потрібно враховувати петлеві пристрої під час монтажу зображень у багатьох випадках, оскільки це mountтурбується про все за вас; але петлеві пристрої все ще задіяні. losetup -l -aпокаже їх.

Дивіться також Яка різниця між монтуванням та циклом кріплення -o .


Отже, блокована пристроїзація неявно обробляється mount?
corsel

2
Так, mountопікується losetup, додаючи -o loopтощо
Стівен Кітт

@corsel, У більшості випадків втрата виклику при монтажі для вас працює чудово, але є винятки, такі як монтаж декількох розділів із зображення диска.
hildred

11

Здається, ви працюєте в Linux, і Linux використовує неправильну назву для цієї функції.

Я винайшов цю функцію в 1988 році на SunOS-4.0 і називаю цю функцію fbk- Файл емулює пристрій BlocK.

Фон полягає в тому, що драйвер пристрою імітує блоковий пристрій зверху простого файлу. Вам це потрібно, оскільки файлова система не може використовувати звичайний файл у якості фонового сховища для файлової системи. Він швидше потребує блочного пристрою, і це те, що fbkімітує.

З деякого часу деякі люди зробили програму mountтрохи розумнішою, і існують програми монтування, які автоматично створюють fbkекземпляр для файлу, якщо mountпрограма виявить, що аргумент, який, як очікується, є блоковим пристроєм, здається, файл файлу плану.


3
Дуже вражаюче резюме ви отримали у своєму профілі. Повага ...
corsel

11
Ваша посада стає якось елітною. Можливо, ви написали першу реалізацію, але Linux використовує іншу реалізацію, тому її не використовується "неправильне" ім'я, просто інше, ніж те, що ви вибрали для своєї реалізації.
Остін Хеммельгарн

4
Я ніколи не казав, що вони вживали правильне ім’я, я просто сказав, що стверджуючи, що це було неправильно, змушує вас звучати як впевнений елітар.
Остін Хеммельгарн

9
Ім'я 'loop' є скороченням «loopback» 'і посилається на те, як операції на блоковому пристрої «перекидаються назад» на VFS. Solaris 8 представив пристрій lofi("файл зворотного зв'язку"), який працював аналогічно; BSD представив їх під назвою vnd("vnode disk"), тому концепція протягом багатьох років мала багато імен.
caf

2
Дві найскладніші проблеми в CS: узгодженість кешу, іменування ідентифікаторів та помилки окремо.
Єнс

1

Навіть якщо вона не потрібна у фоновому режимі для монтажу файлових систем з файлів, вона все одно знадобиться для будь-якої установки за допомогою драйвера або програми, яка абсолютно очікує блочного пристрою. Подумайте про сервери nbd (мережевий блок пристроїв), драйвери складених блокових пристроїв, такі як mdraid, lvm тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.