Я тестирую некоторый код драйвера файловой системы и хотел бы сделать это вне ядра. Самый простой и безопасный способ сделать это из пользовательского пространства. Итак, я создал файл некоторой длины
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
Но это решение далеко не идеальное, поскольку поведение немного отличается от реальных блочных устройств. Есть ли способ "автоподключения" разделов при выполнении через петлевое устройство?