LINUX.ORG.RU

Не получается примонтировать образ диска с установленной windows xp

 ,


0

1

Для некоторых исследований решил поисследовать windows xp. С помощью qemu-img создал raw файл для диска. Установил windows в файл.

Вот вывод.

archinaragu@pc:~/rev> file xp.hdd 
xp.hdd: DOS/MBR boot sector MS-MBR XP english at offset 0x12c "Invalid partition table" at offset 0x144 "Error loading operating system" at offset 0x163 "Missing operating system", disk signature 0x8ee08ee; partition 1 : ID=0x7, active, start-CHS (0x0,1,1), end-CHS (0x26,127,63), startsector 63, 4185153 sectors

Пробую смонтировать так.

archinaragu@pc:~/rev> sudo mount xp.hdd mnt/
mount: /home/archinaragu/rev/mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.

archinaragu@pc:~/rev> sudo mount -t ntfs xp.hdd mnt/
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?

archinaragu@pc:~/rev> sudo fdisk -l xp.hdd 
Disk xp.hdd: 2 GiB, 2147483648 bytes, 4194304 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: 0x08ee08ee

Device     Boot Start     End Sectors Size Id Type
xp.hdd1    *       63 4185215 4185153   2G  7 HPFS/NTFS/exFAT

archinaragu@pc:~/rev> sudo mount -t msdos xp.hdd mnt/
mount: /home/archinaragu/rev/mnt: /home/archinaragu/rev/xp.hdd is not a block device; try "-o loop".
       dmesg(1) may have more information after failed mount system call.

archinaragu@pc:~/rev> sudo mount -o loop -t msdos xp.hdd mnt/
mount: /home/archinaragu/rev/mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.

fdisk показывает, что первый раздел начинается с 64 байта. Я с помощью dd решил пропустить 64 байта и записать всё остальное.

xp.hdd1    *       63 4185215 4185153   2G  7 HPFS/NTFS/exFAT

dd if=xp.hdd of=parted.hdd seek=64

Но файл становится простым набором данных. Ах, я не правильно делал, надо было skip писать.

dd if=xp.hdd of=parted.hdd skip=64

Теперь отображается как

archinaragu@pc:~/rev> file parted.hdd 
parted.hdd: NTFS bootstrap NTLDR

Но всё равно пишет

archinaragu@pc:~/rev> sudo mount parted.hdd mnt/
mount: /home/archinaragu/rev/mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.

Ты тип файловой системы (-t у mount) не указал, видимо он пытается как ext4 смонтировать. Типы бывают ntfs, ntfs3, ntfs-3g вроде в зависимости от версии ядра и модулей.

А вообще лучше не dd было делать а сделать вруную losetup чтобы создался /dev/loop0 а потом partprobe чтобы он на нём разделы прочитал.

с 64 байта

Не байта а сектора. И тебе очень повезло, что у dd единицы по умолчанию - блоки по 512 байт, которые совпадают с секторами, иначе бы опять мусор вышел.

Только не в 64 а с 63 так что dd ты сделал походу всё-таки неправильно. Может из-за этого и ntfs там не распозналось.

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

С losetup видел пример здесь на форуме, но воздержался. Видимо должно было тоже помочь. Теперь известны два способа сделать то что требуется.

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

Для вас kpartx придумано.

Ну и lvm, а не диск но то мелочи…

usermod
()

У losetup есть ключ -P. Он сам таблицу разделов распарсит и по блочному устройству на раздел создаст.

Для FAT ещё можно передать опцию offset (для mount), чтобы не заморачиваться с разделами. Не знаю, поддерживается ли она для NTFS.

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

Зачем? qemu-nbd и kpartx всеядны, и с существующим сработают, и с qcow2…

Vsevolod-linuxoid ★★★★★
()

fdisk показывает, что первый раздел начинается с 64 байта. Я с помощью dd решил пропустить 64 байта и записать всё остальное.

Вот тут основная ошибка — не с 64 байта, а с 63-го сектора. Обрати внимание на

Units: sectors of 1 * 512 = 512 bytes

(единица — не байт, а сектор) и

xp.hdd1 * 63 4185215 4185153 2G 7 HPFS/NTFS/exFAT

(63, а не 64).

Правильным действием будет, если не ошибаюсь, передать параметр offset на 32256 = 512×63 байт (и тогда не надо делать dd):

sudo mount xp.hdd -o offset=32256 /mnt
squareroot ★★★★
()
Ответ на: комментарий от squareroot

И всё-таки, лучше нормально распознать разделы, а не костылить оффсеты.

firkax ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.