Иногда при работе требуется создать полный образ блочного устройства со всеми разделами. Такой образ удобно "закатывать" назад на диск-источник, но работа с ним затруднительна. Впрочем, "затруднительна" это преувеличение. Действительно, просто так командой mount его не замонтируешь, но тем не менее предварительные действия для этого несложны.
Для примера - есть образ диска EEE701, содержащий несколько разделов:
# fdisk -l ./netbook.imgDisk ./netbook.img: 3,7 GiB, 4001292288 bytes, 7815024 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0xa5cfec18Device 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/tempNTFS signature is missing.Failed to mount '/dev/loop0': Invalid argumentThe device '/dev/loop0' doesn't seem to have a valid NTFS.Maybe the wrong device is used? Or the whole disk instead of apartition (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|bc32256
подготавливаем 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)