Jak vlastně vypadá diskový oddíl?

Student

Jak vlastně vypadá diskový oddíl?
« kdy: 01. 10. 2017, 22:37:12 »
Zdravím, uvažoval jsem, že bych se pokusil přečíst souborový systém FAT (12, 16, 32, - exfat jsem zatím vzdal). Našel jsem si k němu nějakou dokumentaci a právě to louskám, ale obecně je souborový systém uložený v diskovém oddílu. Pokoušel jsem se najít nějaké podrobnější informace o tom, jak diskový oddíl vypadá, ale moc se mi toho najít nepodařilo. Nějakým způsobem jsem vyčetl, že je tam nějaké jeho ID, informace o tom, že je ten oddíl dosový (0x08), ale to je asi tak všechno. Nevíte někdo, kde bych k tomu, jak je vlastně diskový oddíl uspořádaný, našel nějaké podrobnější info? (Ideálně hoooooooodně podrobnější a hooooooooodně polopatické?) Díky za rady.


Radovan.

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #1 kdy: 01. 10. 2017, 22:58:11 »

Jenda

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #2 kdy: 02. 10. 2017, 01:00:17 »
https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system (druhý odkaz z Googlu na "fat fs format", a to ještě "format" je mnohoznačné protože to znamená i sloveso vytvoření filesystému) vypadá dostatečně podrobně na to, aby podle toho šel napsat alespoň read-only driver.

Pokud chceš rovnou kopírovat kousky kódu, tak bych se koukl na FAT knihovnu pro Arduino - tam je zaručeno, že to bude minimalistické a snad jednoduché.

.

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #3 kdy: 02. 10. 2017, 01:28:47 »
Na začátku disku jsou (kromě jiného) informace o rozdělení disku. Prostě kde jednotlivé oddíly začínají a končí. Říká se tomu partition table, je několik formátů a jsou podrobně zdokumentované. V tom oddílu je pak souborový systém, nebo cokoliv tam chceš mít. Začít můžeš tady:
https://en.wikipedia.org/wiki/Partition_table
http://wiki.osdev.org/Partition_Table



Student

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #4 kdy: 02. 10. 2017, 05:01:31 »
Díky všem za info. Jak k tomu FATu, tak především k Partition Table. Ty odkazy na OSDev jsou fakt užitečné. Ten FAT sice najít tak nějak dokážu, zatím mě docela mate to "binární smetí" před FAT tabulkou, takže jsem chtěl zjistit, k čemu vlastně je a jakým způsobem je určený jeho rozsah (abych věděl, jestli FAT nemůže mít počátek jinde). Podle dokumentace, kterou jsem zatím přečetl, to vypadá, že tam je ještě něco, co neznám. Pravděpodobně to není hlavička dosovského ani GPT oddílu. K tomu FATu sice už nějakou dokumentaci mám (vypadá, že od Microsoftu - http://read.pudn.com/downloads77/ebook/294884/FAT32%20Spec%20(SDA%20Contribution).pdf ), ale většina z těch odkazů, co jste sem dali, je o dost přehlednějších než to, co jsem si našel.

Takže ještě jednou díky za užitečné odkazy.


nou

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #5 kdy: 02. 10. 2017, 08:47:04 »
Na taketo pokusy by som asi odporucal si spravit file system do suboru a pre naplnenie mountnut cez
Kód: [Vybrat]
mount -o loop

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #6 kdy: 02. 10. 2017, 08:52:13 »
Pokud se nepoužívá GPT, je na začátku disku Master boot record (MBR). Jeho součástí je i tabulka rozdělení disku, ale před ní je ještě kód zavaděče (kód, který je načten BIOSem při startu počítače a následně mu předá řízení – např. LILO nebo GRUB).

Milfaus(ten pravej)

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #7 kdy: 02. 10. 2017, 10:36:36 »
Čtení fat je dost triviální záležitostí.
Dokonce tak triviální, že se kód dá napsat v Assembleru bez ztráty příčetnosti.
FAT12 - obvykle použitý na disketách - jsem prasil sám kdysi dávno v dřevním ASMx86 bez použití cizích maker.

No ale taky jde o to, jak moc nízký přístup k HW máš.
V Linuxu programovat neumím, no nejsem si jistý, co všechno ti OS dovolí provést.

Pro inspiraci: http://www.independent-software.com/writing-your-own-bootloader-for-a-toy-operating-system-4/
(Vygooglováno a jen tak lehce prohlédnuto.)

Milfaus(ten pravej)

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #8 kdy: 02. 10. 2017, 10:43:49 »
Doplnění: Můžeš si napsat vlastní OS! ;)
Vůbec to není tak složité, jak to na první pohled vypadá.
Tedy do doby, než budeš potřebovat multitasking.
A myslím, že bys jako vývojové prostředí pro vlastní OS, klidně mohl použít Widlo/Linux + GCC, tedy za předpokladu, že bys používal svoje knihovní funkce nebo na svůj OS tyto funkce portoval. Protože OS funguje jako vrstva mezi programem a souborem služeb, které ti poskytuje BIOS a hardware.
Tvoje štěstí je, že pro grafiku bys mohl použít režim VESA, článků o VGA VESA programming je dost.

asdf111

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #9 kdy: 02. 10. 2017, 11:03:26 »
ak sa zaujimas o fat16/32, tak naco ti je diskovy oddiel? ten je nutny le nak chces bootovat z toho disku, hociaky dalsi disk vies zformatovat cely, minimalne v linuxovom svete, neviem ci vo win je nutne mat partition tabulku na kazdom disku.

Milfaus(ten pravej)

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #10 kdy: 02. 10. 2017, 11:29:33 »
neviem ci vo win je nutne mat partition tabulku na kazdom disku.

Je, ale jsou výjimky stejně jako na Linuxu.

ten je nutny le nak chces bootovat z toho disku

Tabulka rozdělení disků je potřeba, abys věděl, kde ti začíná která partition a nebo - pokud to chceš říct jinak - kde leží jaká tabulka systému souborů. Bez partition table bys nevěděl, kolik na disku těch tabulek je a ani kde bydlí.
Což je řešitelné, nikoliv však pohodlné.

srigi

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #11 kdy: 02. 10. 2017, 14:43:26 »
Vyexportuj si prvy 1MB a kukni na to hexeditorom

Kód: [Vybrat]
dd if=/dev/sda of=./sda.bin bs=512 count=2048

nobody(ten pravej)

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #12 kdy: 02. 10. 2017, 16:56:21 »
Doplnění: Můžeš si napsat vlastní OS! ;)
twl, ty ses vazne pripad... jestli mu porad, aby pri svem reseni pochopeni diskovych oddilu a fat fs, ze by si mohl postavit vlastni HW, pouzit samozrejme CPU vlastniho navrhu a napajet to vyhradne elektrinou co odchyti ze vzduchu... ;)

nobody(ten pravej)

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #13 kdy: 02. 10. 2017, 16:57:26 »
neviem ci vo win je nutne mat partition tabulku na kazdom disku.
Je, ale jsou výjimky stejně jako na Linuxu.

tak bud to nutne je, nebo neni, v Linuxu to nutne neni, filesystem se da vytvorit primo na celem disku, bez pouziti rozdeleni_disku/partition_table/mbr/gpt...

Student

Re:Jak vlastně vypadá diskový oddíl?
« Odpověď #14 kdy: 02. 10. 2017, 18:51:12 »
Jak vidím, podařilo se mi vyvolat bouři ve sklenici vody. Takže se tak trošku pokusím vysvětlit, co je vlastně mým cílem. Každopádně díky za všechny podnětné nápady. Mým cílem je přečíst SD kartu arduinem, ideálně s jakýmkoliv FAT systémem. Jelikož jsem ale nesehnal dokumentaci od exfat, tak jsem jej prozatím vyřadil. Navíc využívá nějaké patenty Microsoftu, takže si raději naformátuji kartu na FAT 32, byť bych byl raději, kdyby fungovala jakákoliv vložená karta. Udělal jsem si tedy obraz disku pomocí dd (nejprve s exfat, později s FAT 32, 16 a 12 - jakkoliv pro mě je relevantní pouze FAT 32, případně exfat). Na FAT 16 a 12 jsem se prostě chtěl mrknout pro úplnost. Zjistil jsem ale, že z nějakého důvodu začíná FAT 32 od adresy 0x100000. Prozatím se v tom nevyznám, ale mezi touhle adresou a prvním sektorem disku je nějaká hromada hexa kódu. Mě zajímá hlavně proto, abych věděl, jestli se můžu u všech zařízení spolehnout, že ten FAT bude stále na stejné adrese (a já nemusím nic řešit) nebo jestli se ta počáteční adresa může pohybovat podle nějakého dalšího oddílu nebo kódu, který musím nějak přeskočit. Proto začínám diskovým oddílem. Taky si říkám, jestli bych se neměl zajímat o komplikovanější situace, např. více oddílů s FAT. To je důvod, proč mě zajímá taky diskový oddíl. Co se týče hexa kódu, očesal jsem ho o nulové řádky a pošlu tady jeho začátek. Nejsem si jistý, ale zavaděč by to být neměl. Jednak jsem jej nevytvářel, jednak v prvním sektoru to nevypadá, že by tam nějaký zavaděč byl. Taky mi to přijde docela obsáhlé a pokud tím listuju, tak se některé pasáže opakují. Celá ta změť znaků končí až na začátku FAT oddílu na uvedené adrese.

Jen pro úplnost:
- Ano, čtení FAT samostatně bude asi relativně jednoduché
- Ve finále to budu programovat v Assembleru pro AVR, předtím si udělám model v C/C++ a budu číst obraz uložený u sebe na PC
- Taky si nemyslím, že bych se z toho programování v Assembleru zbláznil
- Přístup k hardware nemůžu mít lepší, čtečku si asi budu muset vyrobit (pokud půjde vše podle plánu).

Určitě bude spousta z Vás zkušenějších než já, takže pokud byste někdo věděli, co je to tam za rozsypaný čaj, postnu tady začátek obrazu očesaný o řádky plné nul. Budu určitě rád, když mě to usnadníte. Na začátku jsem rozluštil identifikaci dosovského oddílu, který jsem vytvořil. Ale netuším, co je ten zbytek...

000001c0: 0300 83b7 cefc 0008 0000 0098 eb00 0000  ................
00000200: 52b3 efa8 61f1 4427 98d1 52e7 ee50 65e1  R...a.D'..R..Pe.
00000210: 5c47 c990 b563 bf49 83b5 09be 3584 bd1b  \G...c.I....5...
00000220: 8e59 25d6 dcf6 ca36 bcb7 8bb1 39a6 95d7  .Y%....6....9...
00000230: 7cf3 0a2a 3cfc 8a0b 3c3a 889f 3342 ab8f  |..*<...<:..3B..
00000240: f920 16c0 7681 3706 b217 ac71 e924 76d9  . ..v.7....q.$v.
00000250: 36d6 b6f7 b631 b4a5 bbdd 98cd 52af efe0  6....1......R...
00000260: 6041 4187 8511 1e66 4555 9ffd 400f 8021  `AA....fEU..@..!
00000270: 00c6 0294 0f78 2310 ca62 bd4f 8fa1 21c6  .....x#..b.O..!.
00000280: c496 9b77 5b33 daa8 dff2 c02e 80e7 0252  ...w[3.........R
00000290: 0dec 2c68 e972 772d 32ee ae67 e550 5fe1  ..,h.rw-2..g.P_.
000002a0: c044 819b 055a 1fdc 40c9 82b5 0fbe 2184  .D...Z..@.....!.
000002b0: c51a 9e5f 45c3 9c89 4b37 bab1 9fa5 41df  ..._E...K7....A.
000002c0: 84c1 1a86 5f15 c27c 8d0b 2e3a e49e 5b45  ...._..|...:..[E
000002d0: db9c d94a d7be f186 2514 de7a c51e 9e47  ...J....%..z...G
000002e0: 4593 9d69 4f77 a331 caa4 bfdb 80d9 02d6  E..iOw.1........
000002f0: 0ef4 2638 d492 fb6e 1b64 5b59 dbd4 d8fa  ..&8...n.d[Y....
00000300: d21e ec46 6995 757f 3f02 820f 0c22 28cc  ...Fi.u.?...."(.
00000310: f2aa 2ffc e00a 403d 808d 032e 0ae4 3e58  ../...@=......>X
00000320: 85d3 1cea 4a7d bd0d 8e2d 24ee da66 dd56  ....J}...-$..f.V
00000330: cff6 a037 c0b0 83a3 09ca 34bc bb8b 9939  ...7......4....9
00000340: 5697 f770 3320 aac3 fe88 0730 12a0 6fc1  V..p3 .....0..o.
00000350: 6087 4313 8a69 3d76 8f37 22b2 cfae a1e7  `.C..i=v.7".....
00000360: c450 99e3 544b f9b8 1590 7d61 0f46 2394  .P..TK....}a.F#.
00000370: c97a b71f b241 ad85 ed1c 6e49 65b7 5db3  .z...A....nIe.].
00000380: cda8 adf3 ec28 68f1 7227 2cd2 eaee 7e65  .....(h.r',...~e
00000390: 055e 1fc4 4099 8355 0bfe 3804 901b 605b  .^..@..U..8...`[
000003a0: 41db 84d9 1ad6 5ef5 c63c 948b 7b3b 1a9a  A.....^..<..{;..
000003b0: 5f5d c3cc 88ab 33fa a81f f040 2180 c502  _]....3....@!...
000003c0: 9e0f 4423 98c9 52b7 efb0 61a1 45c7 9c91  ..D#..R...a.E...
000003d0: 4b67 bb51 9be5 585f d1c0 e482 5b0d da2c  Kg.Q..X_....[..,
000003e0: dcea ca7e bd07 8e11 2466 d956 d7f6 f036  ...~....$f.V...6
000003f0: 20b4 c3ba 899f 3542 bf8f 8121 06c6 1694   .....5B...!....
00000400: c972 b72f b2e1 ae45 e59c 5d49 cfb4 a1bb  .r./...E..]I....
00000410: c598 9d53 4feb a079 c114 867b 151a 7e5d  ...SO..y...{..~]
00000420: 05ce 1ca4 4bd9 b8d5 92fd 6e0f 6423 58cb  ....K.....n.d#X.
00000430: d2b8 ef92 616d 476f 9361 6b47 7b93 196a  ....amGo.akG{..j
00000440: 577d f30c 2a28 fcf2 0a2c 3ce8 8a73 3d2a  W}..*(...,<..s=*
00000450: 8eff 2602 d40e f826 10d4 62f9 4e17 a471  ..&....&..b.N..q
00000460: d924 d6da f6de 36c4 b69b b759 b3d5 a8fd  .$....6....Y....
00000470: f20c 2c28 e8f2 722d 2cee ea66 7d55 0ffe  ..,(..r-,..f}U..
00000480: 2004 c01a 805f 01c2 048c 1b28 5af1 de24   ...._.....(Z..$
00000490: c4da 9adf 5ec3 c688 9733 72ab 2ffa e01e  ....^....3r./...
000004a0: 4045 819d 054e 1fa4 41d9 84d5 1afe 5e05  @E...N..A.....^.
000004b0: c41c 984b 51bb e598 5d51 cfe4 a05b c1d8  ...KQ...]Q...[..
000004c0: 84d3 1aea 5e7d c50c 9e2b 44fb 9a19 5c57  ....^}...+D...\W
000004d0: c9f0 b423 b8c9 92b5 6fbf 6183 450b 9e39  ...#....o.a.E..9
000004e0: 4497 9b71 5b27 dad0 dee2 c64e 95a7 7dd3  D..q['.....N..}.
000004f0: 0cea 2a7c fd0a 0e3c 2488 db32 daae dfe6  ..*|...<$..2....
00000500: c056 81f7 0432 18ac 53e9 e874 7139 2696  .V...2..S..tq9&.
00000510: d776 f336 2ab4 ffba 019c 0548 1fb0 41a1  .v.6*......H..A.
00000520: 85c5 1c9e 4b45 bb9d 994d 57af f1e0 2440  ....KE...MW...$@
00000530: d982 d50e fe26 04d4 1af8 5e11 c464 995b  .....&....^..d.[
00000540: 57db f0d8 22d0 cee2 a64f d5a0 fdc2 0c8c  W..."....O......
00000550: 2b28 faf2 1e2c 44e9 9a75 5d3f ce80 a703  +(...,D..u]?....
00000560: d208 ec32 68ad 73ef 2862 f14e 27a4 d1da  ...2h.s.(b.N'...
00000570: e4de 5ac5 de9c c74a 93bf 6983 750b 3e3a  ..Z....J..i.u.>:
00000580: 849f 1b42 5b8d d92c d6ea f67e 3504 be1b  ...B[..,...~5...
00000590: 8459 19d6 54f5 fa3c 1c88 4b31 baa5 9fdd  .Y..T..<..K1....
000005a0: 40cf 82a1 0fc6 2094 c37a 8b1f 3a42 9d8f  @..... ..z..:B..
000005b0: 4d23 aec9 e6b4 57b9 f194 2578 df12 c26e  M#....W...%x...n
000005c0: 8d67 2f52 e3ee 4865 b15d a7cd d0ac e3ea  .g/R..He.]......
000005d0: 487d b10d a62d d4ec fa6a 1d7c 4f09 a235  H}...-...j.|O..5
000005e0: ccbc ab8b f938 1690 7761 3346 ab97 f970  .....8..wa3F...p
000005f0: 1720 72c1 2e86 e716 5275 ed3c 6e89 6737  . r.....Ru.<n.g7
00000600: 52b3 efa8 61f1 4427 98d1 52e7 ee50 65e1  R...a.D'..R..Pe.
00000610: 5c47 c990 b563 bf49 83b5 09be 3584 bd1b  \G...c.I....5...
00000620: 8e59 25d6 dcf6 ca36 bcb7 8bb1 39a6 95d7  .Y%....6....9...
00000630: 7cf3 0a2a 3cfc 8a0b 3c3a 889f 3342 ab8f  |..*<...<:..3B..
00000640: f920 16c0 7681 3706 b217 ac71 e924 76d9  . ..v.7....q.$v.
00000650: 36d6 b6f7 b631 b4a5 bbdd 98cd 52af efe0  6....1......R...
00000660: 6041 4187 8511 1e66 4555 9ffd 400f 8021  `AA....fEU..@..!