Волею судьбы пришлось срочно сделать образ диска. Образ был сделан утилитой dd и размещён на NAS. Места критически не хватает и забрать образ для распаковки некуда, дисков лишних на 0,5TB не имею, так что приходится работать с тем, что есть - образ диска на сетевой помойке.
Самый лучший для меня вариант - смонтировать все разделы из образа прямо на NAS`е его штатными утилитами (fdisk есть, mount loop поддерживается, а вот kpartx - нету). В сети полно мануалов о том, как сделать монтирование нескольких партиций из образа, но все они либо через kpartx, либо в примере жёсткий диск с одной-двумя партициями. Более того, в файлопомойке софт не столь продвинутый как в полноценном компьютере и 2/3 опций не поддерживаются.
В общем, я прошу знающих людей не только помочь мне с решением проблемы, но и в написании простой и понятной инструкции на основе реального примера из жизни.
Итак, имеем NAS с не очень развитыми утилитами (так что всё для монтирования прийдётся считать вручную), образ диска с основными и логическими партициями, на разных ФС. Задача: изъять данные из образа на NAS игнорируя ограничения прав доступа и сделать их доступными для скачивания (вопросы безопасности не рассматриваются - всё делает администратор сети).
Для начала привожу карту жёсткого диска:
fdisk sda.img
Command (m for help): p
Disk sda.img: 500.1 GB, 500112031744 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976781312 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: 0xaa9693fe
Device Boot Start End Blocks Id System
sda.img1 * 63 125831230 62915584 7 NTFS
sda.img2 125833277 976768064 425467394 5 Extended
sda.img5 125833279 545149709 209658215+ 7 NTFS
sda.img6 545149773 934822349 194836288+ 83 Linux
sda.img7 934822413 975787256 20482422 83 Linux
sda.img8 975788163 976768064 489951 82 Linux swap / Solaris
Лог NAS:
fdisk sda.img
Command (m for help): p
Disk /volume1/NetBackup/sda.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
sda.img1 * 1 7833 62915584 7 HPFS/NTFS
Partition 1 has different physical/logical endings:
phys=(1023, 254, 63) logical=(7832, 161, 8)
sda.img2 7833 60801 425467394 5 Extended
Partition 2 has different physical/logical beginnings (non-Linux?):
phys=(1023, 254, 63) logical=(7832, 193, 39)
Partition 2 has different physical/logical endings:
phys=(1023, 254, 63) logical=(60800, 254, 63)
sda.img5 7833 33934 209658215+ 7 HPFS/NTFS
sda.img6 33935 58190 194836288+ 83 Linux
sda.img7 58191 60740 20482422 83 Linux
sda.img8 60741 60801 489951 82 Linux swap
sda.img1 = NTFS,
sda.img5 = NTFS,
sda.img6 = /home,
sda.img7 = /
Лог NAS:
# losetup
BusyBox v1.16.1 (2014-02-11 20:12:55 CST) multi-call binary.
Usage: losetup [-o OFS] LOOPDEV FILE - associate loop devices
losetup -d LOOPDEV - disassociate
losetup [-f] - show
Options:
-o OFS Start OFS bytes into FILE
-f Show first free loop device
# losetup -f
/dev/loop2
Всего loop-устройств 0-255. Пробовал сделать в лоб: Смещение будет = число секторов на дорожке * размер сектора * начальная дорожка раздела, но не получается:
Лог NAS:
# mount -o loop,offset=$((63*512*33935)) ./sda.img ./0
mount: mounting /dev/loop1 on ./0 failed: Device or resource busy
# losetup
/dev/loop0: 0 /volume1/NetBackup/sda.img
# losetup -o $((63*512*33935)) /dev/loop6 ./sda.img
/dev/loop0: 0 /volume1/NetBackup/sda.img
/dev/loop6: 1094607360 ./sda.img
# mount /dev/loop6 ./0
mount: mounting /dev/loop6 on ./0 failed: No such device
#
Что именно я делаю не так? Что не проверил/не понял/чего ещё не знаю?