Ono je asi vhodne nejprve si ustanovit terminologii, pak pripravit prostredi a pak zacit zkoumat data.
Tedy:
- na disketach nebyvala informace o rozdeleni na diskove oddily, na discich, flashkach a dost casto dnes i na sd kartach ta informace je
- sd karty, pokud maji tabulku diskovych oddilu, vyuzivaji pro ulozeni informaci o oddilech tzv. partition table v master boot recordu (v pripade extended oddilu je struktura jeste slozitejsi):
https://en.m.wikipedia.org/wiki/Master_boot_record- pro nalezeni pocatecniho sektoru partition/souboroveho systemu je treba precist partition table a pak se vydat na konkretni diskovy offset (dnes se pro prvni partition pouziva jiz zminovanych 1MiB od zacatku disku)
- data v dokumentaci FAT pouzivaji offsety od zacatku partition (pozor na to)
- pri vytvareni souboroveho disku ani partition tabulky se disk NEINICIALIZUJE nulami; inicializuji se jen vybrane sektory: pokud na disku uz neco driv bylo, a inicializace FAT to neprepsala, tak to tam porad muze byt - binarni balast tak vubec nemusi patrit FAT filesystemu
Tedy: je nejlepsi SDkartu inicializovat nulami (dd=/dev/zero of=/dev/sdX), nasledne vytvorit partition tabulku s jednou partition (cfdisk /dev/sdX) a nakonec vyrobit souborovy system ve vytvorene partition (mkfs.vfat -F 32 /dev/sdX1)
Pak bude na karte jen skutecne nejnutnejsi minimum vhodne pro zkoumani.
Dal muzete zacit psat program, ktery v jedne procedure nacte partition tabulku a najde zacatek partition, a v jine procedure zkousi nacist souborovy system FAT; vyberte si jednu z verzi FAT a s tou zacnete. Nedelejte program rovnou univerzalni, nejde to. Vyvarujte se FAT12, at nemusite resit slozite bitshifty. Na experimenty dobre poslouzi FAT16, ktera ma tusim pevne umisteny root adresar, sestnactibitove entries ve FAT tabulce a pod.
Pak nactete prvni sektor (boot record) diskoveho oddilu (/dev/sdX1) a z nej spocitejte informace, ktere potrebujete - velikost FAT clusteru, pozici prvni a druhe kopie FAT tabulky, pozici korenoveho adresare. Pak zkuste nacist korenovy adresar (filename entry). Pak zkuste nacist obsah souboru v korenovem adresari (pro to je treba: rozparsovat boot record, najit korenovy adresar, najit file entry, najit ve fat tabulce prvni cluster souboru a vsechny dalsi clustery, a pak nacist samotna data clusteru z disku). Nakonec muzete zkusit pracovat s vnorenymi adresari. Vizte tez
https://en.m.wikipedia.org/wiki/Design_of_the_FAT_file_systemV dokumentaci bude pravdepodobne zobrazovan offset - tedy posunuti od nejakeho mista. Pouziva se offset od zacatku boot sektoru, offset od zacatku fat rabulky, offset od zacatku fat datove oblasti, atp.)
Pro cteni diskovych struktur doporucuju hexdump -C nazev.souboru, ktery zobrazuje offsety od zacatku souboru. Da se pouzit i na cely disk, ale nedelal bych to. :-)