Как мне смонтировать img, созданный с / bin / dd жесткого диска?

19

Я использовал ddдля резервного копирования 80GB диска

dd if=/dev/sdb of=~/sdb.img

Теперь мне нужно получить доступ к некоторым файлам на этом диске, но я не хочу копировать «.img» обратно на диск.

mount ~/sdb.img /mnt/sdbтоже не работает. Возвращает:

mount: you must specify the filesystem type

Я пытался найти тип файловой системы с file -s

fox@shoebox $ file -s sdb.img
sdb.img: x86 boot sector; partition 1: ID=0x12, starthead 1, startsector 63, 10233342 sectors; partition 2: ID=0xc, active, starthead 0, startsector 10233405, 72517410 sectors; partition 3: ID=0xc, starthead 0, startsector 82750815, 73545570 sectors, code offset 0xc0

Можно ли смонтировать sdb.img, или я должен использовать ddдля восстановления диска?

лиса
источник

Ответы:

27

При использовании ddна /dev/sdbвместо /dev/sdb1или /dev/sdb2, скопировать все на разделы от указанного диска в один файл.

Вы должны монтировать каждый раздел отдельно.


Чтобы смонтировать раздел из файла , вы должны сначала выяснить, где в файле находится этот раздел.

Используя ваши выходные данные, file -s sdb.imgмы найдем startsectorsдля каждого раздела:

sdb.img: загрузочный сектор x86; раздел 1 : ID = 0x12, начальный заголовок 1, начальный сектор 63 , 10233342 сектора; раздел 2 : ID = 0xc, активный, начальный заголовок 0, начальный сектор 10233405 , 72517410 секторов; раздел 3 : ID = 0xc, начальный 0, начальный сектор 82750815 , 73545570 секторов, смещение кода 0xc0

Раздел      Стартовый сектор
1 63
2 10233405
3 82750815

Чтобы смонтировать отдельный раздел, где X находится начальный сектор этого раздела, выполните:

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

Итак, чтобы смонтировать второй раздел , вам нужно выполнить:

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

sidenote: убедитесь, что /mnt/sdb2существует, прежде чем запустить это.

Веселиться!


Обновление: в ответ я предположил, что размер сектора для вашего изображения был 512, пожалуйста, посмотрите этот вопрос о том, как рассчитать это.

Стефан
источник
Вы также можете получить стартовые секторы в табличном формате, используя, file -l sdb.imgкак указано в ответе на ваш вопрос: unix.stackexchange.com/questions/2668/…
студент
@student: Только исправление для читателей будущих: Это было бы fdisk -lне file -l.
Runium
Дальнейшее пояснение - вы можете получить число секторов по 512 байт, добавив в эту команду параметр -u - такfdisk -u -l sdb.img
Аарон Мейсон,
Если ваша версия fileменее разговорчивы по умолчанию, попробуйте добавить -kпереключатель , чтобы получить вид продукции , показанный в ответ - как это: file -k FILENAME.img.
Кристиан Питч
7

В Linux команды монтирования в принятом ответе неявно создадут устройство цикла. Предполагая, что полный образ диска имеет правильную таблицу разделов (которую может понять ваше ядро), вы можете предпочесть использовать losetup(8)напрямую, чтобы избавить вас от необходимости расчета смещений. Также нет необходимости в дополнительных инструментах, как kpartxв другом ответе . Это будет делать в основном то же самое, что и следующее:

losetup -Prf sdb.imgбудет ассоциировать первое устройство свободной петли ( -f) как readonly ( -r) с файлом изображения sdb.img. В -Pпараметр заставляет ядро сканировать таблицу разделов данного устройства контура и создаст петлю устройства для каждого раздела.

Таким образом, вы можете получить что-то вроде:

$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 167.7G  1 loop
├─loop0p1 259:0    0   500M  1 loop
└─loop0p2 259:1    0 167.2G  1 loop
...

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

$ mount -r /dev/loop0p1 /tmp/backup_sdb1

Хранение всего только для чтения не является обязательным, но может быть полезно для резервного образа.

обновление: -Pопция была добавлена с util-linux-2.21 в 2012 году. Поэтому она не была доступна на момент написания принятого ответа. Также обратите внимание, что этот и другие ответы относятся к Linux. OpenBSD и NetBSD имеют диски vnode, которыми управляет, vnconfig(8)а FreeBSD имеет диски памяти, которыми управляет mdconfig(8).

escrl
источник
2

Кроме того, вы можете использовать хороший инструмент под названием kpartx. Со страницы руководства:

kpartx - создает карты устройств из таблиц разделов

Это означает, что вы можете создать «псевдоустройство» с разделами устройства прямо из файла img:

$ kpartx -av sdb.img
add map loop0p1 (254:2): 0 2048 linear /dev/loop0 0
add map loop0p2 (254:3): 0 31162 linear /dev/loop0 2048
$ lsblk
.
.
.
loop0                     7:0    0  16.2M  0 loop
├─loop0p1               254:2    0     1M  0 part
└─loop0p2               254:3    0  15.2M  0 part

Затем вы можете смонтировать, /dev/mapper/loop0p2например, если вы хотите второй раздел на образе.

Омер Даган
источник