Inode: differenze tra le versioni

1 666 byte aggiunti ,  15 nov 2008
nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
=== Nota ===
=== Premessa ===
Spero di fare cosa gradita nel condividere alcuni appunti del filesystem del kernel 0.0.1 che sto studiando. Tuttavia, non posso garantire che quanto scritto qui sia perfettamente esatto, ma solo deduzioni da quanto ho appreso fino ad oggi. La guida è in fase di creazione e di correzione nel tempo . Grazie per la vostra comprensione e per le correzioni che chiunque potrà fare.
Spero di fare cosa gradita nel condividere alcuni appunti del filesystem del kernel 0.0.1 che sto studiando. Tuttavia, non posso garantire che quanto scritto qui sia perfettamente esatto, ma solo deduzioni da quanto ho appreso fino ad oggi. La guida è in fase di creazione e di correzione nel tempo . Grazie per la vostra comprensione e per le correzioni che chiunque potrà fare.


===Che cos'è un inode?===
=== Che cos'è un inode? ===


Un inode è una struttura che viene utilizzata quando un filesystem viene creato per salvare le informazioni dei file, quali i diritti di accesso, la dimensione, l'uid e il gid ecc... (http://en.wikipedia.org/wiki/Inode) quando questi vengono aperti .
Un inode è una struttura che viene utilizzata quando un filesystem viene creato per salvare le informazioni dei file, quali i diritti di accesso, la dimensione, l'uid e il gid ecc... (http://en.wikipedia.org/wiki/Inode) quando questi vengono aperti .
Riga 94: Riga 94:
Un altra cosa a cui dobbiamo dare attenzione sono i campi unsigned short s_imap_blocks : questo campo definisce il blocco che contiene la bitmap degli inode e cioè dove si trovano i blocchi che contengono delle strutture di inode .
Un altra cosa a cui dobbiamo dare attenzione sono i campi unsigned short s_imap_blocks : questo campo definisce il blocco che contiene la bitmap degli inode e cioè dove si trovano i blocchi che contengono delle strutture di inode .


=== Creiamo il nostro filesystem minix e spiamolo ===
Il codice del superblock si tova in linux/fs/super.c . In questo file si trovano le routine per fare il mount del superblock (e quindi la sua descrizione completa) e del device di root.


Per mettere in pratica i concetti appena esposti creaimo un piccolo filesystem minix (serve mkfs.minix e che si abbia almeno un device di loop). Come detto prima il fs in questione non è esattamente come quello che Linus ha usato, ma la versione 3, per cui alcune cose saranno lievemente diverse .
==== Creamo il nostro filesystem minix e spiamolo ====
 
Per mettere in pratica i concetti appena esposti creaimo un piccolo filesystem minix (serve mkfs.minix e che si abbia almeno un device di loop). Come detto prima il fs in questione non è esattamente come quello che Linus ha usato, ma la versione 3, per cui alcune cose saranno lievemente diverse (per esempio il magic number).
 
<pre>
Bisognera' usare root per montare in lodevice il file cha andreamo a creare, per cui attenzione a non fare danni.
 
$ dd if=/dev/zero of=minixfs count=10 bs=1024
  10+0 records in               
  10+0 records out               
  10240 bytes (10 kB) copied, 0.000333843 seconds, 30.7 MB/s
 
# losetup /dev/loop0 minixfs
# mkfs.minix /dev/loop0
  32 inodes
  10 blocks
  Firstdatazone=5 (5)
  Zonesize=1024
  Maxsize=268966912
 
questi valori ci serviranno dopo quando andremo a vedere cosa c'è dentro il nostro filesystem .
# mount -t minix /dev/loop0 /mnt/data/
$
</pre>
 
Andremo ora a fare delle semplici prove per vedere come cambiano i dati nel nostro filesystem appena creato e come cambiano gli inode su disco (fare riferimento al paragrafo precedente per una descrizione degli inode contenuti in memoria dal kernel TODO) usando hexdump come tool.
 
Come detto il primo blocco è vuoto, per cui partiamo dal secondo blocco che contiene il superblock:
 
<pre>
$ hexdump minixfs -C  -n 1024 -s 0x400
  00000400  20 00 0a 00 01 00 01 00  05 00 00 00 00 1c 08 10  | ...............|
  00000410  8f 13 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
  00000420  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
  *
  00000800
</pre>
 
Se confrontate i primi campi del superblock e i dati contenuti su disco potrete ritrovare molte cose stampate quando abbiamo creato il minix fs .


=== Gli inode ai giorni nostri ===
=== Gli inode ai giorni nostri ===


Come acennato prima all'inizio di questa guida, gli inode oggi si trovano a livello di astrazione del VFS (fate riferimento alla mappa del kernel), guardando nel codice di un kernel moderno, ovviamente saranno un po' più complicati e dipendono anche dal tipo di fs che il vostro kernel supporterà in fase di configurazione .
Come acennato prima all'inizio di questa guida, gli inode oggi si trovano a livello di astrazione del VFS (fate riferimento alla mappa del kernel), guardando nel codice di un kernel moderno, ovviamente saranno un po' più complicati e dipendono anche dal tipo di fs che il vostro kernel supporterà in fase di configurazione .
7

contributi