Иногда при работе требуется создать полный образ блочного устройства со всеми разделами. Такой образ удобно "закатывать" назад на диск-источник, но работа с ним затруднительна. Впрочем, "затруднительна" это преувеличение. Действительно, просто так командой mount его не замонтируешь, но тем не менее предварительные действия для этого несложны.

Для примера - есть образ диска EEE701, содержащий несколько разделов:

# fdisk -l ./netbook.img
Disk ./netbook.img: 3,7 GiB, 4001292288 bytes, 7815024 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
Disklabel type: dos
Disk identifier: 0xa5cfec18

Device                Boot   Start     End Sectors   Size Id Type
./netbook.img1 *         63 7341704 7341642   3,5G 83 Linux
./netbook.img2      7341705 7807589  465885 227,5M  5 Extended
./netbook.img5      7341768 7807589  465822 227,5M 82 Linux swap / Solaris

Его монтирование, естественно, не удаётся:

# mount ./father_netbook.img /mnt/temp
NTFS signature is missing.
Failed to mount '/dev/loop0': Invalid argument
The device '/dev/loop0' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

Есть как минимум три варианта:

1) losetup автоматически

# losetup --partscan --find --show ./netbook.img
/dev/loop0

Это автоматически создаст нужные разделы:

# ls /dev/loop0*
/dev/loop0  /dev/loop0p1  /dev/loop0p2  /dev/loop0p5

$ blkid|grep loop0
/dev/loop0p1: UUID="3f298df7-d3b4-40c8-a4ed-07fa4fea2269" TYPE="ext4" PARTUUID="a5cfec18-01"
/dev/loop0p5: UUID="eebf860f-7893-4c61-808b-1761393a2c09" TYPE="swap" PARTUUID="a5cfec18-05"
/dev/loop0: PTUUID="a5cfec18" PTTYPE="dos"

Можно монтировать:

# mount /dev/loop0p1 /mnt/temp
# mount |grep /mnt/temp
/dev/loop0p1 on /mnt/temp type ext4 (rw,relatime,data=ordered)

2) losetup вручную

Вычисляем смещение, для чего множим стартовый сектор нужного раздела на размер сектора 

# echo 63*512|bc
32256
подготавливаем loopback устройство с этим смещением

# losetup --offset 32256 $(losetup -f) ./netbook.img

и видим, что оно успешно подготовлено:

# losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0  32256         0  0 /mnt/backup/f/netbook.img

# blkid|grep loop0
/dev/loop0: UUID="3f298df7-d3b4-40c8-a4ed-07fa4fea2269" TYPE="ext4"

можно монтировать:

# mount /dev/loop0 /mnt/temp/
# mount |grep loop0
/dev/loop0 on /mnt/temp type ext4 (rw,relatime,data=ordered)

3) device mapper

Но что если нужно работать с несколькими разделами сразу? Не уверен, правда, зачем, но вдруг? В этом случае нам поможет device mapper с его linear целью. 

Подготавливаем блочное устройство "как есть":

$ losetup $(losetup -f) ./netbook.img

Создаём блочные устройства. Что удобно, fdisk уже подсказал нам нужные параметры, так что считать вручную нет нужды:

# dmsetup create netbook-root --table '0 7341642 linear /dev/loop0 63'
# dmsetup create netbook-swap --table '0 465822 linear /dev/loop0 7341768'
# blkid|grep netbook
/dev/mapper/netbook-root: UUID="3f298df7-d3b4-40c8-a4ed-07fa4fea2269" TYPE="ext4"
/dev/mapper/netbook-swap: UUID="eebf860f-7893-4c61-808b-1761393a2c09" TYPE="swap"

Можно монтировать:

# mount /dev/mapper/netbook-root /mnt/temp
# mount |grep netbook-root
/dev/mapper/netbook-root on /mnt/temp type ext4 (rw,relatime,data=ordered)

 

Добавить комментарий


Защитный код
Обновить