LINUX.ORG.RU
решено ФорумAdmin

Вытащить данные из экстренного dd-образа

 , ,


1

1

Волею судьбы пришлось срочно сделать образ диска. Образ был сделан утилитой 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
#
Что именно я делаю не так? Что не проверил/не понял/чего ещё не знаю?

★★

Последнее исправление: zzdnx (всего исправлений: 1)

в файлопомойке софт не столь продвинутый как в полноценном компьютере и 2/3 опций не поддерживаются

Примонтировать NFS-шару на компьютере с нормальной ОС и уже на нем работать с образом диска?

kernelpanic ★★★★★
()

Смонтировать на рабочей машине каталог с образом (по NFS или еще как) и монтировать образ уже на ней.

Kuzz ★★★
()
Ответ на: комментарий от kernelpanic

Именно так сейчас и сделал. Имею 2 проблемы:

1) Скорость. 200GB копируются уже 3-и суктки!

2) Полно ошибок типа «cp: cannot stat `/mnt/loop1p6/.......mp3': Input/output error»

zzdnx ★★
() автор топика
Последнее исправление: zzdnx (всего исправлений: 1)
Ответ на: комментарий от kernelpanic

Я всё по проводам делаю. Просто хаб не выдаёт более 10мб, а ещё от вайфая не будет такой проблемы, когда один файл всегда копируется, а второй - никогда. Оба файла созданы одним пользователем и права доступа к этим файлам одинаковые. Повреждений на диске нет и эти оба файла регулярно использовались, пока система была в ПК.

zzdnx ★★
() автор топика
Последнее исправление: zzdnx (всего исправлений: 1)
Ответ на: комментарий от kernelpanic

Нет, просто у меня пока что нет физической возможности подключиться к сети иначе, а данные нужны очень срочно. И, как на зло, именно те, которые отказываются копироваться.

zzdnx ★★
() автор топика

modinfo loop | grep part

Выстави 16 - получишь нормальные разделы «изкоробки» вида /dev/loop0pN

anonymous
()
Ответ на: комментарий от zzdnx

200GB копируются уже 3-и суктки!

Как то маловато даже для 10Мбит. Для NSF какие то параметры заданы? (У меня, например: rsize=8192,wsize=8192,timeo=14,intr)

Kuzz ★★★
()

откуда формула - Смещение будет = число секторов на дорожке * размер сектора * начальная дорожка раздела ? fdisk показывает смещение , а не начальную дорожку раздела - соответственно формула - смещение * на размер сектора - для sda.img6 смещение 33935 и умножить на 512 байт

Tsvetkov
()
#!/bin/sh
sudo mount -o loop,offset=$((${3}*512)),sizelimit=$((${4}*512)) ${1} ${2}

${1} - имя dd образа

${2} - куда монтируем

${3} - значение в столбце Start из вывода fdisk -l dd_image на нужной партиции

${4} - значение в столбце End из вывода fdisk -l dd_image на нужной партиции

dhampire ★★★
()
Ответ на: комментарий от zzdnx

Скорость. 200GB копируются уже 3-и суктки!

Давно бы уже разобрал NAS и подключил диск напрямую к компьютеру.

arson ★★★★★
()
Ответ на: комментарий от Tsvetkov

Откуда формула?

С просторов сети (кажись, OpenNet) от делитантов стиля «делай как я».

К большому сожалению, я не так хорошо знаю физическое размещение данных внутри винчестера чтобы проводить расчёты, и потому вынужден верить проходимцам, а потом писать сюда не работающий бред.

zzdnx ★★
() автор топика
Ответ на: комментарий от dhampire

Спасибо, я обязательно попробую это и отпишусь о результатах.

zzdnx ★★
() автор топика
Ответ на: комментарий от arson

Давно бы уже разобрал NAS...

NAS разбирать было не нужно. Он достаточно быстрый и имеет USB3.

Команда CP по неизвестной мне причине не могла сохранить некоторые файлы с вполне безобадными именами, регулярно ругалась на права доступа, а под конец скорость копирования упала до 2-3-х кБс.

Я достал переходник USB3-SATA и устроил истерику (иначе меня отказывались впускать в комнату с NAS). Записал образ диска прямо на винчестер по USB3, загрузился с него и запустил бэкап пользовательских данных RSYNC`ом. Скорость 11МБс через тот же самый хаб. Стабильно.

Когда перенос данных закончится - постараюсь сделать подключение средствами самого NAS.

zzdnx ★★
() автор топика

mount: mounting /dev/loop6 on ./0 failed: No such device

Посмотрите, есть ли в выводе ″ls -l /dev/loop*″ или ″ls -l /dev/block/loop*″ это самый ваш loop6.

mky ★★★★★
()
Последнее исправление: mky (всего исправлений: 1)
Ответ на: комментарий от mky

Есть.

Смотрел первым делом после сообщения «не найдено».

zzdnx ★★
() автор топика
9 июля 2015 г.
Ответ на: комментарий от dhampire

Благодарю за невероятно полезный рецепт!

В простом нечему ломаться...

#!/bin/sh
sudo mount -o loop,offset=$((${3}*512)),sizelimit=$((${4}*512)) ${1} ${2}
Где
${1} - имя dd образа
${2} - куда монтируем
${3} - значение в столбце "Start" из вывода "fdisk -l dd_image" на нужной партиции
${4} - значение в столбце "End" из вывода "fdisk -l dd_image" на нужной партиции

CP у меня не работала из-за адово длинных путей. Как только я перенёс точку монтирования в корень (/p1; /p2; /p3...) - всё чудесно начало копироваться.

Тема закрыта.

zzdnx ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.