LINUX.ORG.RU

ФС на USB flash


0

2

привет всем!

реализовал «сырое» блочное чтение и запись для USB флеш, и возникли такие вопросы: 1. как мне считать суперблок и с какого блока(или какую то структуру ФС, чтобы определить какая там ФС и ее структуру) 2. считываю всю флеш, но в итоге все равно нескольких мегабайт не досчитываюсь, в чем мб проблема?

>реализовал «сырое» блочное чтение и запись для USB флеш, и возникли такие вопросы: 1. как мне считать суперблок и с какого блока(или какую то структуру ФС, чтобы определить какая там ФС и ее структуру) 2. считываю всю флеш, но в итоге все равно нескольких мегабайт не досчитываюсь, в чем мб проблема?

1 man mount

2 facepalm

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

Попробуй посмотреть исходники ядра. Или - взять - отформатировать для начала Flash как FAT16 - у нее структуура простая, и начинается с известных символов.

pacify ★★★★★
()

1. можешь посмотреть исходники wipefs (пакет util-linux), там есть поиск суперблоков для некоторых фс.

2. чего?

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

>уж если большего нечего сказать, не засирай тему тогда

дядя, тебе сырцы fs сюда скопипастить, или сам посмотришь?

1) команда mount как-то определяет

2) исходники доступны

почему ещё не прочитал? ну погугли...

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

> команда mount как-то определяет
mount и wipefs про которые я писал определяют с помощью либы blkid. Её исходники и надо смотреть.

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

>mount и wipefs про которые я писал определяют с помощью либы blkid. Её исходники и надо смотреть.

можно. А можно тупо прочитать девайс, и распарсить magic-сигнатуру. Для EXT2,3,4 прокатывает.

Filesystem magic number: 0xEF53

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

facepalm

ну и разработчики пошли...

# hexdump -n1900 /dev/sda5
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0000400 dd30 0001 721e 0007 5f4e 0000 1203 0004
0000410 4e87 0001 0000 0000 0002 0000 0002 0000
0000420 8000 0000 8000 0000 1fd0 0000 356e 4daf
0000430 29d8 4da8 0010 0022 ef53 0001 0001 0000
0000440 29d8 4da8 4e00 00ed 0000 0000 0001 0000
0000450 0000 0000 000b 0000 0100 0000 003c 0000
0000460 0246 0000 007b 0000 b323 8a25 a9e5 2d4d
0000470 42b3 fa01 5163 626f 0000 0000 0000 0000
0000480 0000 0000 0000 0000 002f 2152 35a9 3500
0000490 de2e 42e8 de6d 3280 de71 9e44 dda6 6fc4
00004a0 c110 42e8 de6d 9e34 dda6 3700 de0c 0000
00004b0 0000 9ec8 dda6 3280 de71 3500 de2e 9e64
00004c0 dda6 810e c110 47e0 0000 0000 0000 0077
00004d0 0000 0000 0000 0000 0000 0000 0000 0000
00004e0 0008 0000 0000 0000 0000 0000 5686 7117
00004f0 b80f e542 edb1 7340 8e5d a210 0101 0000
0000500 0000 0000 0000 0000 ada0 4daa f30a 0001
0000510 0004 0000 0000 0000 0000 0000 2000 0000
0000520 0000 0003 0000 0000 0000 0000 0000 0000
0000530 0000 0000 0000 0000 0000 0000 0000 0000
0000540 0000 0000 0000 0000 0000 0000 0000 0200
0000550 0000 0000 0000 0000 0000 0000 001c 001c
0000560 0001 0000 0000 0000 0000 0000 0000 0000
0000570 0000 0000 0004 0000 546b 001d 0000 0000
0000580 0000 0000 0000 0000 0000 0000 0000 0000
*
0000760 0000 0000 0000 0000 0000 0000          
000076c
видно?

ну если не в состоянии распарсить сырцы, то так посмотрите, hexedit'ом, или какой там у вас в венде...

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

вот что у меня получилось для флеш с fat: а как пропарсить эти данные? где посмотреть конкретно описание этого блока для fat?

0000000 58eb 4d90 4453 534f 2e35 0030 0802 0026
0000010 0002 0000 f800 0000 003f 00ff 2000 0000
0000020 7000 001e 0799 0000 0000 0000 0002 0000
0000030 0001 0006 0000 0000 0000 0000 0000 0000
0000040 0100 0b29 3e3f 4eac 204f 414e 454d 2020
0000050 2020 4146 3354 2032 2020 c933 d18e f4bc
0000060 8e7b 8ec1 bdd9 7c00 4e88 8a02 4056 08b4
0000070 13cd 0573 ffb9 8aff 66f1 b60f 40c6 0f66
0000080 d1b6 e280 f73f 86e2 c0cd 06ed 6641 b70f
0000090 66c9 e1f7 8966 f846 7e83 0016 3875 7e83
00000a0 002a 3277 8b66 1c46 8366 0cc0 00bb b980
00000b0 0001 2be8 e900 0348 faa0 b47d 8b7d acf0
00000c0 c084 1774 ff3c 0974 0eb4 07bb cd00 eb10
00000d0 a0ee 7dfb e5eb f9a0 eb7d 98e0 16cd 19cd
00000e0 6066 3b66 f846 820f 004a 6a66 6600 0650
00000f0 6653 1068 0100 8000 027e 0f00 2085 b400
0000100 bb41 55aa 568a cd40 0f13 1c82 8100 55fb
0000110 0faa 1485 f600 01c1 840f 000d 46fe b402
0000120 8a42 4056 f48b 13cd f9b0 5866 5866 5866
0000130 5866 2aeb 3366 66d2 b70f 184e f766 fef1
0000140 8ac2 66ca d08b c166 10ea 76f7 861a 8ad6
0000150 4056 e88a e4c0 0a06 b8cc 0201 13cd 6166
0000160 820f ff54 c381 0200 4066 0f49 7185 c3ff
0000170 544e 444c 2052 2020 2020 0020 0000 0000
0000180 0000 0000 0000 0000 0000 0000 0000 0000
*
00001a0 0000 0000 0000 0000 0000 0000 0a0d 6552
00001b0 6f6d 6576 6420 7369 736b 6f20 2072 746f
00001c0 6568 2072 656d 6964 2e61 0dff 440a 7369
00001d0 206b 7265 6f72 ff72 0a0d 7250 7365 2073
00001e0 6e61 2079 656b 2079 6f74 7220 7365 6174
00001f0 7472 0a0d 0000 0000 ac00 d8cb 0000 aa55
0000200 5252 4161 0000 0000 0000 0000 0000 0000
0000210 0000 0000 0000 0000 0000 0000 0000 0000
*
00003e0 0000 0000 7272 6141 c231 0003 09b9 0000
00003f0 0000 0000 0000 0000 0000 0000 0000 aa55
0000400 0000 0000 0000 0000 0000 0000 0000 0000
*
00005f0 0000 0000 0000 0000 0000 0000 0000 aa55
0000600 0000 0000 0000 0000 0000 0000 0000 0000
*
0000760 0000 0000 0000 0000 0000 0000
000076c

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

>вот что у меня получилось для флеш с fat: а как пропарсить эти данные? где посмотреть конкретно описание этого блока для fat?

без понятия. мне это никогда не нужно было. покопайтись в сырцах, там всё написано. А лучше закопайте обратно это УГ (я про фат), для USB-flash куда как лучше EXT2.

[не в тему] Ещё ознакомьтесь с usbutils и usbview. Думаю вам пригодятся эти исходные тексты (мне пригодились).

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

>но от fat никуда не денешься, многие флеш идут с ними

ну и пусть идут. я их постоянно теряю, а EXT2 это дополнительный заборчик, который не преодолеть 95% взломщиков :-)

(для остальных 5% есть GnuPG)

drBatty ★★
()

Вот начало моего загрузчика для FAT16:

[bits 16]

    org 0x7C00 ; BIOS загружает содержимое MBR по адресу 0000:7C00
begin:
    jmp short main
    db 0x90       ; NOP
    db 'SIMPUKE ' ; +0x03 (8) - сигнатура изготовителя операционной системы (OEM name)
; BIOS Parameter Block (BPB)
    dw 0x0200     ; +0x0B (2) - число байтов в секторе (bytes per sector)
    db 1          ; +0x0D (1) - число секторов в кластере (sectors per cluster)
    dw 0x0001     ; +0x0E (2) - число [резервных] секторов до первой FAT (reserved sectors), = 1 для FAT12/16
    db 2          ; +0x10 (1) - число копий FAT в разделе (number of FATs)
    dw 0x0200     ; +0x11 (2) - число записей (32-байтных дескрипторов) в корневом каталоге (root entries)
    dw 0x0B40     ; +0x13 (2) - полное число секторов на диске, = 2880 (total sectors), < 4085 - FAT12
    db 0xF0       ; +0x15 (1) - байт описателя (тип) носителя, 2 sides, 18 sector/track (media)
    dw 0x0009     ; +0x16 (2) - размер FAT в секторах (sectors per FAT)
    dw 0x0012     ; +0x18 (2) - число секторов на дорожке (sectors per track)
    dw 0x0002     ; +0x1A (2) - число головок (сторон) (heads per cylinder)
    dd 0          ; +0x1C (4) - число скрытых секторов (hidden sectors)
    dd 0          ; +0x20 (4) - число секторов на логическом диске (больше 32 Мбайт) (total sectors on big disk)
    db 0x00       ; +0x24 (1) - идентификатор диска (fda=0x00/hda=0x80) (drive number)
    db 0x00       ; +0x25 (1) - зарезервировано для Windows NT (unused)
    db 0x29       ; +0x26 (1) - сигнатура расширенного boot-сектора - показывает, что следующие три поля отсутствуют (ext boot segnature)
    dd 0          ; +0x27 (4) - серийный номер (при форматировании, как комбинация времени и даты создания) (serial number)
    db 'SYSTEM     ' ; +0x2B (11) - метка тома, текстовая строка (volume label)
    db 'FAT12   ' ; +0x36 (8) - аббревиатура типа файловой системы, текстовая строка (file system), не исп. для идентификации

bpbsize equ $-begin
; пустая область (на всякий случай)
    times 0x3E-bpbsize db 0x00

; boot code +0x3E
main:
....

od -tx1 floppy.img:

0000000 eb 3c 90 53 49 4d 50 55 4b 45 20 00 02 01 01 00
0000020 02 00 02 40 0b f0 09 00 12 00 02 00 00 00 00 00
0000040 00 00 00 00 00 00 29 00 00 00 00 53 59 53 54 45
0000060 4d 20 20 20 20 20 46 41 54 31 32 20 20 20 b8 03
0000100 00 cd 10 b9 00 20 b4 01 cd 10 fc b8 00 b8 8e c0
0000120 66 31 ff b8 20 0f 66 b9 d0 07 00 00 f3 ab 0e 1f
0000140 66 be 96 7c 00 00 66 bf 00 0f 00 00 66 b9 07 00
0000160 00 00 f3 a5 b8 40 02 ba 00 00 b9 02 00 bb 00 00
0000200 8e c3 bb 00 80 cd 13 72 09 3c 40 75 05 ea 00 80
0000220 00 00 90 f4 eb fd 53 0f 69 0f 6d 0f 70 0f 75 0f
0000240 6b 0f 65 0f 00 00 00 00 00 00 00 00 00 00 00 00
0000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
0000760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa

pacify ★★★★★
()
Ответ на: комментарий от perlovik
0000000 58eb 4d90 4453 534f 2e35 0030 0802 0026

EB 58 - это JMP SHORT +bytes.

00005f0 0000 0000 0000 0000 0000 0000 0000 aa55
55 AA - это конец загрузочного сектора.

В чем проблема? Если надо распарсить каталоги - бери книжки по структуре FAT16 - и
парси. По Ext2 нам хорошо в университете рассказывал С.Кузнецов - может
в инете тоже есть толковые лекции.

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

>По Ext2 нам хорошо в университете рассказывал С.Кузнецов - может в инете тоже есть толковые лекции.

ЕМНИП именно его я и читал.

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

И правильно, потому что МБ = Мегабайт, а «Мега» — десятичная приставка. А если речь идёт о двоичной приставке, то надо говорить МиБ, что значит «Мебибайт».

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