Difference between revisions of "Esempio didattico sul file system ext2 (2026)"

From Sistemi Operativi
Jump to navigation Jump to search
m
 
Line 50: Line 50:
 
00002200 inode F symlink
 
00002200 inode F symlink
  
 +
</pre>
 
esempi di uso del tool e2exp:
 
esempi di uso del tool e2exp:
 +
<pre>
 +
dump di un blocco (con indirizzo hex):
 +
./e2exp disk dump 0x400
 +
00000400  10 00 00 00 80 00 00 00  06 00 00 00 66 00 00 00  |............f...|
 +
00000410  01 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  |................|
 +
00000420  00 20 00 00 00 20 00 00  10 00 00 00 71 54 d3 69  |. ... ......qT.i|
 +
00000430  94 54 d3 69 01 00 ff ff  53 ef 01 00 01 00 00 00  |.T.i....S.......|
 +
....
 +
 +
dump di un blocco (con numero blocco):
 +
./e2exp disk ddump 1
 +
00000400  10 00 00 00 80 00 00 00  06 00 00 00 66 00 00 00  |............f...|
 +
00000410  01 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  |................|
 +
00000420  00 20 00 00 00 20 00 00  10 00 00 00 71 54 d3 69  |. ... ......qT.i|
 +
....
 +
 +
dump di alcuni campi del superblock:
 +
./e2exp disk super 400
 +
00000400  10 00 00 00 --> 16 s_inodes_count
 +
00000404  80 00 00 00 --> 128 s_blocks_count
 +
0000040c  66 00 00 00 --> 102 s_free_blocks_count
 +
00000410  01 00 00 00 --> 1 s_free_inodes_count
 +
00000414  01 00 00 00 --> 1 s_first_data_block
 +
00000418  00 00 00 00 --> 0 s_log_block_size
 +
00000438  53 ef --> 61267 s_magic
 +
 +
dump di alcuni dati del blockgroup:
 +
./e2exp disk group 800
 +
00000800  03 00 00 00 --> 3 bg_block_bitmap
 +
00000804  04 00 00 00 --> 4 bg_inode_bitmap
 +
00000808  05 00 00 00 --> 5 bg_inode_table
 +
0000080c  66 00 --> 102 bg_free_blocks_count
 +
0000080e  01 00 --> 1 bg_free_inodes_count
 +
00000810  03 00 --> 3 bg_used_dirs_count
 +
 +
dump parziale bitmap allocazione blocchi:
 +
./e2exp disk bmb c00
 +
00000c00  ff ff ff 00 00 00 00 00
 +
  0000000000000000000000000000000000000000000000000000000000000000|
 +
  0000000000000000111111111111111122222222222222223333333333333333|
 +
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|
 +
  XXXXXXXXXXXXXXXXXXXXXXXX----------------------------------------
 +
00000c08  00 00 00 00 00 00 00 c0
 +
  0000000000000000000000000000000000000000000000000000000000000000|
 +
  4444444444444444555555555555555566666666666666667777777777777777|
 +
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|
 +
  --------------------------------------------------------XX------
 +
 +
dump parziale bitmap allocazione ino:
 +
./e2exp disk bmi 1000
 +
00001000  ff 7f ff ff ff ff ff ff
 +
  0000000000000000000000000000000000000000000000000000000000000000|
 +
  0000000000000000111111111111111122222222222222223333333333333333|
 +
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|
 +
  XXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 +
00001008  ff ff ff ff ff ff ff ff
 +
  0000000000000000000000000000000000000000000000000000000000000000|
 +
  4444444444444444555555555555555566666666666666667777777777777777|
 +
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|
 +
  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 +
 +
dump di dati di un inode:
 +
./e2exp disk inode 1400+2
 +
00001500  ed 41 --> 4 (S_IFDIR) ---RWXR-XR-X
 +
00001502  00 00 --> 0 i_uid
 +
00001504  00 04 00 00 --> 1024 i_size
 +
00001508  78 54 d3 69 --> 1775457400 i_atime
 +
0000150c  8f 54 d3 69 --> 1775457423 i_ctime
 +
00001510  8f 54 d3 69 --> 1775457423 i_mtime
 +
00001518  00 00 --> 0 i_gid
 +
0000151a  04 00 --> 4 i_links_count
 +
0000151c  02 00 00 00 --> 2 i_blocks
 +
00001528  09 00 00 00 --> [0] 9 i_block
 +
0000152c  00 00 00 00 --> [1] 0 i_block
 +
00001530  00 00 00 00 --> [2] 0 i_block
 +
00001534  00 00 00 00 --> [3] 0 i_block
 +
00001538  00 00 00 00 --> [4] 0 i_block
 +
0000153c  00 00 00 00 --> [5] 0 i_block
 +
00001540  00 00 00 00 --> [6] 0 i_block
 +
00001544  00 00 00 00 --> [7] 0 i_block
 +
00001548  00 00 00 00 --> [8] 0 i_block
 +
0000154c  00 00 00 00 --> [9] 0 i_block
 +
00001550  00 00 00 00 --> [10] 0 i_block
 +
00001554  00 00 00 00 --> [11] 0 i_block
 +
00001558  00 00 00 00 --> [12] 0 i_block
 +
0000155c  00 00 00 00 --> [13] 0 i_block
 +
00001560  00 00 00 00 --> [14] 0 i_block
 +
 +
Scansione di una dir:
 +
./e2exp disk dir 02400
 +
00002400  02 00 00 00 --> 2 inode
 +
00002404  0c 00 --> 12 rec_len (next 0x240c)
 +
00002406  01 --> 1 name_len
 +
00002407  02 --> 2 file_type
 +
00002408  2e --> .
 +
 +
./e2exp disk dir 0240c
 +
0000240c  02 00 00 00 --> 2 inode
 +
00002410  0c 00 --> 12 rec_len (next 0x2418)
 +
00002412  02 --> 2 name_len
 +
00002413  02 --> 2 file_type
 +
00002414  2e 2e --> ..
 +
 +
./e2exp disk dir 02418
 +
00002418  0b 00 00 00 --> 11 inode
 +
0000241c  14 00 --> 20 rec_len (next 0x242c)
 +
0000241e  0a --> 10 name_len
 +
0000241f  02 --> 2 file_type
 +
00002420  6c 6f 73 74 2b 66 6f 75 6e 64 --> lost+found
 +
 +
./e2exp disk dir 0242c
 +
0000242c  0c 00 00 00 --> 12 inode
 +
00002430  0c 00 --> 12 rec_len (next 0x2438)
 +
00002432  03 --> 3 name_len
 +
00002433  02 --> 2 file_type
 +
00002434  64 69 72 --> dir
 +
 +
./e2exp disk dir 02438
 +
00002438  0d 00 00 00 --> 13 inode
 +
0000243c  0c 00 --> 12 rec_len (next 0x2444)
 +
0000243e  04 --> 4 name_len
 +
0000243f  01 --> 1 file_type
 +
00002440  63 69 61 6f --> ciao
 +
 +
./e2exp disk dir 02444
 +
00002444  0f 00 00 00 --> 15 inode
 +
00002448  bc 03 --> 956 rec_len (next 0x2800)
 +
0000244a  07 --> 7 name_len
 +
0000244b  07 --> 7 file_type
 +
0000244c  73 79 6d 6c 69 6e 6b --> symlink
 +
 
</pre>
 
</pre>

Latest revision as of 10:47, 9 April 2026

truncate -s 128K disk
/sbin/mkfs.ext2 disk
hexdump -C disk

documento con spiegazioni: https://dondi.lmu.build/share/os/ext2-walkthrough.pdf

disco immagine di prova e tool sperimentale per facilitare la lettura:
https://www.cs.unibo.it/~renzo/so/ext2test.tgz

Il disco immagine è stato creato con questi comandi:

mount /tmp/disk /mnt
ls /mnt
mkdir /mnt/dir
echo ciao mare > /mnt/ciao
ln /mnt/ciao /mnt/dir/ciao2
echo addio > /mnt/dir/bye
ln -s /mnt/dir/bye /mnt/symlink
umount /mnt

bvi
:set cm=32

Aiuti per la lettura del dump esadecimale:

Blocchi:
00000000 0 -> boot block
00000400 1 superblocco
00000800 2 blockgroup
00000C00 3 BitMap blocchi
00001000 4 BitMap inode
00001400 5 area inode (vedi oltre)
...
00002400 9 inizio area dati, il blocco 9 e' la directory /
00002800 A ... fino a 00005400 15 e' la dir  lost+found
00005c00 17 dati file ciao (detto anche dir/ciao2)
00006000 18 dati file bye
0001fc00 7F directory dir

Inode:
00001400 inode 1 (riservato)
00001500 inode 2 directory /
00001600 inode 3 
00001e00 inode B lost+found
00001f00 inode C directory dir
00002000 inode D file ciao (dir/ciao2)
00002100 inode E file bye
00002200 inode F symlink

esempi di uso del tool e2exp:

dump di un blocco (con indirizzo hex): 
./e2exp disk dump 0x400
00000400  10 00 00 00 80 00 00 00  06 00 00 00 66 00 00 00  |............f...|
00000410  01 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  |................|
00000420  00 20 00 00 00 20 00 00  10 00 00 00 71 54 d3 69  |. ... ......qT.i|
00000430  94 54 d3 69 01 00 ff ff  53 ef 01 00 01 00 00 00  |.T.i....S.......|
....

dump di un blocco (con numero blocco):
./e2exp disk ddump 1
00000400  10 00 00 00 80 00 00 00  06 00 00 00 66 00 00 00  |............f...|
00000410  01 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  |................|
00000420  00 20 00 00 00 20 00 00  10 00 00 00 71 54 d3 69  |. ... ......qT.i|
....

dump di alcuni campi del superblock:
 ./e2exp disk super 400
00000400  10 00 00 00 --> 16 s_inodes_count
00000404  80 00 00 00 --> 128 s_blocks_count
0000040c  66 00 00 00 --> 102 s_free_blocks_count
00000410  01 00 00 00 --> 1 s_free_inodes_count
00000414  01 00 00 00 --> 1 s_first_data_block
00000418  00 00 00 00 --> 0 s_log_block_size
00000438  53 ef --> 61267 s_magic

dump di alcuni dati del blockgroup:
./e2exp disk group 800
00000800  03 00 00 00 --> 3 bg_block_bitmap
00000804  04 00 00 00 --> 4 bg_inode_bitmap
00000808  05 00 00 00 --> 5 bg_inode_table
0000080c  66 00 --> 102 bg_free_blocks_count
0000080e  01 00 --> 1 bg_free_inodes_count
00000810  03 00 --> 3 bg_used_dirs_count

dump parziale bitmap allocazione blocchi:
 ./e2exp disk bmb c00
00000c00  ff ff ff 00 00 00 00 00
  0000000000000000000000000000000000000000000000000000000000000000|
  0000000000000000111111111111111122222222222222223333333333333333|
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|
  XXXXXXXXXXXXXXXXXXXXXXXX----------------------------------------
00000c08  00 00 00 00 00 00 00 c0
  0000000000000000000000000000000000000000000000000000000000000000|
  4444444444444444555555555555555566666666666666667777777777777777|
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|
  --------------------------------------------------------XX------

dump parziale bitmap allocazione ino:
 ./e2exp disk bmi 1000
00001000  ff 7f ff ff ff ff ff ff
  0000000000000000000000000000000000000000000000000000000000000000|
  0000000000000000111111111111111122222222222222223333333333333333|
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|
  XXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
00001008  ff ff ff ff ff ff ff ff
  0000000000000000000000000000000000000000000000000000000000000000|
  4444444444444444555555555555555566666666666666667777777777777777|
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|
  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

dump di dati di un inode:
./e2exp disk inode 1400+2
00001500  ed 41 --> 4 (S_IFDIR) ---RWXR-XR-X
00001502  00 00 --> 0 i_uid
00001504  00 04 00 00 --> 1024 i_size
00001508  78 54 d3 69 --> 1775457400 i_atime
0000150c  8f 54 d3 69 --> 1775457423 i_ctime
00001510  8f 54 d3 69 --> 1775457423 i_mtime
00001518  00 00 --> 0 i_gid
0000151a  04 00 --> 4 i_links_count
0000151c  02 00 00 00 --> 2 i_blocks
00001528  09 00 00 00 --> [0] 9 i_block
0000152c  00 00 00 00 --> [1] 0 i_block
00001530  00 00 00 00 --> [2] 0 i_block
00001534  00 00 00 00 --> [3] 0 i_block
00001538  00 00 00 00 --> [4] 0 i_block
0000153c  00 00 00 00 --> [5] 0 i_block
00001540  00 00 00 00 --> [6] 0 i_block
00001544  00 00 00 00 --> [7] 0 i_block
00001548  00 00 00 00 --> [8] 0 i_block
0000154c  00 00 00 00 --> [9] 0 i_block
00001550  00 00 00 00 --> [10] 0 i_block
00001554  00 00 00 00 --> [11] 0 i_block
00001558  00 00 00 00 --> [12] 0 i_block
0000155c  00 00 00 00 --> [13] 0 i_block
00001560  00 00 00 00 --> [14] 0 i_block

Scansione di una dir:
./e2exp disk dir 02400
00002400  02 00 00 00 --> 2 inode
00002404  0c 00 --> 12 rec_len (next 0x240c)
00002406  01 --> 1 name_len
00002407  02 --> 2 file_type
00002408  2e --> .

./e2exp disk dir 0240c
0000240c  02 00 00 00 --> 2 inode
00002410  0c 00 --> 12 rec_len (next 0x2418)
00002412  02 --> 2 name_len
00002413  02 --> 2 file_type
00002414  2e 2e --> ..

./e2exp disk dir 02418
00002418  0b 00 00 00 --> 11 inode
0000241c  14 00 --> 20 rec_len (next 0x242c)
0000241e  0a --> 10 name_len
0000241f  02 --> 2 file_type
00002420  6c 6f 73 74 2b 66 6f 75 6e 64 --> lost+found

./e2exp disk dir 0242c
0000242c  0c 00 00 00 --> 12 inode
00002430  0c 00 --> 12 rec_len (next 0x2438)
00002432  03 --> 3 name_len
00002433  02 --> 2 file_type
00002434  64 69 72 --> dir

./e2exp disk dir 02438
00002438  0d 00 00 00 --> 13 inode
0000243c  0c 00 --> 12 rec_len (next 0x2444)
0000243e  04 --> 4 name_len
0000243f  01 --> 1 file_type
00002440  63 69 61 6f --> ciao

./e2exp disk dir 02444
00002444  0f 00 00 00 --> 15 inode
00002448  bc 03 --> 956 rec_len (next 0x2800)
0000244a  07 --> 7 name_len
0000244b  07 --> 7 file_type
0000244c  73 79 6d 6c 69 6e 6b --> symlink