Как автоматически монтировать петлевые устройства с разделами

812
sherrellbc

Я тестирую некоторый код драйвера файловой системы и хотел бы сделать это вне ядра. Самый простой и безопасный способ сделать это из пользовательского пространства. Итак, я создал файл некоторой длины

dd if=/dev/zero of=testfs bs=10M count=50

Затем я установил схему разбиения MBR с помощью fdisk

fdisk testfs

Я могу настроить петлевое устройство для доступа к моему файлу в режиме эмуляции блока:

$ losetup /dev/loop0 testfs 

На данный момент я могу видеть это новое эмулированное блочное устройство в списке устройств:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk  ├─sda1 8:1 0 46G 0 part / ├─sda2 8:2 0 1K 0 part  └─sda5 8:5 0 4G 0 part [SWAP] sr0 11:0 1 55.2M 0 rom  loop0 7:0 0 50M 0 loop  

И это устройство имеет следующую таблицу разделов

$ fdisk -l /dev/loop0   Disk /dev/loop0: 52 MB, 52428800 bytes 96 heads, 25 sectors/track, 42 cylinders, total 102400 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 identifier: 0xe7d5af9a  Device Boot Start End Blocks Id System /dev/loop0p1 * 2048 102399 50176 7 HPFS/NTFS/exFAT 

Однако для создания файловой системы мне нужно смонтировать раздел, а не «диск». Разве система циклов не монтирует разделы устройства автоматически, как другие блочные устройства? Мне удалось создать файловую систему путем монтирования файла через цикл со смещением

$ losetup -o $((2048*512)) /dev/loop0 testfs 

Но это решение далеко не идеальное, поскольку поведение немного отличается от реальных блочных устройств. Есть ли способ «автоподключения» разделов при выполнении через петлевое устройство?

0

1 ответ на вопрос

0
grawity

Для этого есть вариант:

losetup --partscan /dev/loop0 testfs 

Это активирует обычную поддержку разделов в вашем ядре, создание /dev/loop0p1и так далее.


Вы также можете использовать partx из util-linux:

losetup /dev/loop0 testfs partx -u /dev/loop0 

Это создаст основанные на ядре разделы ( /dev/loop0p1и т. Д.), Но сама таблица разделов будет проанализирована с использованием libblkid, а не по запросу ядра.


Наконец, есть kpartx из нескольких инструментов:

losetup /dev/loop0 testfs kpartx -u /dev/loop0 

Хотя на первый взгляд это то же самое, что и выше, оно вообще не использует встроенную в ядро ​​поддержку циклических разделов. Вместо этого он создает с использованием подсистемы device-mapper (линейные отображения)./dev/mapper/loop0p1

Похожие вопросы