7
contributi
(→INODE) |
Nessun oggetto della modifica |
||
Riga 1: | Riga 1: | ||
=== | === 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 . | ||
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 . |
contributi