Монтирование неизвестного LBA раздела

Discussion in 'Песочница' started by nuxster, 18 Aug 2016.

  1. nuxster

    nuxster New Member

    Joined:
    12 Jan 2011
    Messages:
    58
    Likes Received:
    0
    Reputations:
    0
    Доброго времени суток!
    Разбираюсь с одним девайсом, который грузится с SD-карточки.
    Система закрыта от меня, есть только образ SD-карты. На котором присутствует 2 раздела:

    Code:
    # fdisk -l mmcblk0.dd
    
    Disk mmcblk0.dd: 7,4 GiB, 7951351808 bytes, 15529984 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: 0x00000000
    
    Device  Boot  Start  End  Sectors  Size Id Type
    mmcblk0.dd1  62 15017267 15017206  7,2G  b W95 FAT32
    mmcblk0.dd2  15017268 15632803  615536 300,6M  c W95 FAT32 (LBA)
    
    Code:
    # file -s mmcblk0.dd 
    
    mmcblk0.dd: DOS/MBR boot sector; partition 1 : ID=0xb, start-CHS (0x0,1,1), end-CHS (0x3ff,145,62),
    startsector 62, 15017206 sectors; partition 2 : ID=0xc, start-CHS (0x3ff,145,62), end-CHS (0x3ff,145,62),
    startsector 15017268, 615536 sectors
    
    Code:
    # kpartx -a -v mmcblk0.dd
    
    add map loop0p1 (254:0): 0 15017206 linear /dev/loop0 62
    device-mapper: resume ioctl on loop0p2 failed: Invalid argument
    create/reload failed on loop0p2
    add map loop0p2 (0:0): 0 615536 linear /dev/loop0 15017268
    
    Мне необходимо получить доступ ко второму разделу (W95 FAT32 (LBA)), но я ни как не могу этого сделать, ни какими способами и программными средствами.

    Определить, что за ОСь крутится на устройстве не представляется возможным, т.к. интерфейс заблокирован сторонней оболочкой, подключиться к нему по сети или просканировать порты так же нет возможности, перезагрузить и т.п. - аналогично. Предположительно там Windows CE.

    Есть мнение, что внутри LBA-раздела есть еще какая то логическая разбивка на разделы, поэтому и не получается его примонтировать как отдельный раздел.

    Подскажите пожалуйста как можно прочитать структуру LBA-раздела и получить к нему доступ?
     
  2. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Почему не можешь? Если там нормальная файловая система то монтироваться раздел должен нормально.
    Что выводит команда mount -t vfat mmcblk0.dd1 /mnt ?
     
  3. nuxster

    nuxster New Member

    Joined:
    12 Jan 2011
    Messages:
    58
    Likes Received:
    0
    Reputations:
    0
    В данном случае я получаю:
    Code:
    #  mount -t vfat mmcblk0.dd2 /mnt
    
    mount: special device mmcblk0.dd2 does not exist
    
     
  4. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Блин. Я конечно подозревал, что такое может быть, но надеялся что раз чел так всё грамотно расписал то знает что делает.
    Естественно does not exist, а что ты сделал чтобы они exist?

    Сначала надо подмонтировать файл как блочное устройство, причём первый и второй раздел также должны быть подмонтированы с правильным сдвигом относительно 0 блока. Как это делается написано здесь https://major.io/2010/12/14/mounting-a-raw-partition-file-made-with-dd-or-dd_rescue-in-linux/

    Но вычислять сдвиг не обязательно, хотя полезно знать как это делается. Команда losetup делает это за тебя.
    Code:
    losetup --find --partscan --verbose mmcblk0.dd
    ls -lh /dev |grep loop
    mkdir /mnt/part1 /mnt/part2
    mount -t vfat /dev/loop0p1 /mnt/part1
    mount -t vfat /dev/loop0p2 /mnt/part2
    
     
    Payer likes this.
  5. nuxster

    nuxster New Member

    Joined:
    12 Jan 2011
    Messages:
    58
    Likes Received:
    0
    Reputations:
    0
    Дак понятное дело я его замонтировал сперва, ведь утилита kpartx, вывод которой я предоставил в своем первом посте, ясно показывает, что не может справиться со 2м разделом.

    Ваш вариант я в первую очередь проверил:
    Code:
    # losetup --find --partscan --verbose mmcblk0.dd
    # ls -lh /dev |grep loop
    ...
    ... loop0p1
    ... loop0p2
    ...
    # mkdir /mnt/loop_p{1,2}
    # mount -t vfat /dev/loop0p1 /mnt/loop_p1
    # mount -t vfat /dev/loop0p2 /mnt/loop_p2
    
    mount: wrong fs type, bad option, bad superblock on /dev/loop0p2,
      missing codepage or helper program, or other error
    
      In some cases useful info is found in syslog - try
      dmesg | tail or so.
    
    # dmesg | tail   
    
    [21216.560982] loop: module loaded
    [21216.577156]  loop0: p1 p2
    [21216.577309] loop0: p2 size 615536 extends beyond EOD, truncated
    [21240.645328] FAT-fs (loop0p2): utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
    [21240.645368] FAT-fs (loop0p2): bogus logical sector size 65535
    [21240.645371] FAT-fs (loop0p2): Can't find a valid FAT filesystem
    
    Пробовал различные варианты:
    Code:
    mount -t vfat -o codepage=866,iocharset=utf-8 /dev/loop0p2 /mnt/loop_p2
    mount -t vfat -o codepage=866,iocharset=cp1251 /dev/loop0p2 /mnt/loop_p2
    mount -t vfat -o codepage=866,iocharset=koi8-r /dev/loop0p2 /mnt/loop_p2
    .....
    
    В любом случае получаю:
    Code:
    [21720.554197] FAT-fs (loop0p2): bogus logical sector size 65535
    [21720.554202] FAT-fs (loop0p2): Can't find a valid FAT filesystem
    
     
  6. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Есть совсем дубовый способ. Просто запиши этот образ через dd на флешку размером >= 8гб и всё. А дальше если её винда не распознаёт то значит криво скопировано и единственный способ достать оттуда файлы - ковырять её программами по восстановлению дохлых файловых систем. Либо вообще вручную.
     
  7. nuxster

    nuxster New Member

    Joined:
    12 Jan 2011
    Messages:
    58
    Likes Received:
    0
    Reputations:
    0
    Я так тоже уже делал. Винда не видит. Но девайс грузится и работает, значит скопировано не криво.
    Какие программы можете посоветовать, на вскидку?
     
  8. nuxster

    nuxster New Member

    Joined:
    12 Jan 2011
    Messages:
    58
    Likes Received:
    0
    Reputations:
    0
    Ни чего не помогло из выше предложенного. :-(
    Но заметил интересную особенность:
    Code:
    # fdisk -l /dev/mmcblk0  
    
    Disk /dev/mmcblk0: 7,5 GiB, 8053063680 bytes, 15728640 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: 0x00000000
    
    Device  Boot  Start  End  Sectors  Size Id Type
    /dev/mmcblk0p1  62 15017267 15017206  7,2G  b W95 FAT32
    /dev/mmcblk0p2  15017268 15632803  615536 300,6M  c W95 FAT32 (LBA)
    
    Code:
    # fdisk -l /dev/mmcblk0p1
    
    Disk /dev/mmcblk0p1: 7,2 GiB, 7688809472 bytes, 15017206 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: 0x6f20736b
    
    Device  Boot  Start  End  Sectors  Size Id Type
    /dev/mmcblk0p1p1 ?  778135908 1919645538 1141509631 544,3G 72 unknown
    /dev/mmcblk0p1p2 ?  168689522 2104717761 1936028240 923,2G 65 Novell Netware 386
    /dev/mmcblk0p1p3 ?  1869881465 3805909656 1936028192 923,2G 79 unknown
    /dev/mmcblk0p1p4 ?  2885681152 2885736650  55499  27,1M  d unknown
    
    Partition table entries are not in disk order.
    
    Code:
    # fdisk -l /dev/mmcblk0p2
    
    Disk /dev/mmcblk0p2: 300,6 MiB, 315154432 bytes, 615536 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
    
    Т.е. раздел /dev/mmcblk0p1 содержыт в себе несколько разделов, но монтируется как один.
     
    #8 nuxster, 12 Sep 2016
    Last edited: 12 Sep 2016