Newsgroup: it.comp.os.linux.sys
Titolo: Leggere gli inode

Salve!
Esiste un comando che, datogli in pasto il numero di un inode, mi
indichi *quali* blocchi occupa il file sul device?
Stat non lo fa: mi dice quanti sono i blocchi, la loro dimensione, un
sacco di altre belle cose... ma non *quali* blocchi.
Grazie in anticipo per qualsiasi indicazione. :)
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
____________________________________________________________________________
Non sprecare i cicli idle della tua CPU: 
http://boinc.berkeley.edu/index.php

 indichi *quali* blocchi occupa il file sul device?
debugfs

mallin.shetland wrote:

non ho capito come fare, 
debugfs: Usage: debugfs [-b blocksize] [-s superblock] [-f cmd_file] [-R
request] [-V] [[-w] [-c] device]
grazie

  [taglio]
man debugfs

 non ho capito come fare,
Ok, dai... Siccome ho appena imparato qualcosa, sento l'obbligo
morale di darti un piccolo aiuto. Ti mostro un caso concreto, vedrai
che capisci subito. Uso volutamente più passaggi del necessario, per
darti una panoramica, eh.
Naturalmente colgo l'occasione per ringraziare mallin.shetland! :)
Diciamo che ho questo problema: io ho /boot su partizione separata,
/dev/sda1. Per motivi miei, desidero poter leggere il file
/boot/grub/menu.lst anche quando /boot non è montata. So che dovrò usare
dd, ma non so quali blocchi del device dovrò leggere.
Procedo così, usando prima il comando stat:
lem@lappybaby:~$ sudo stat -f /boot/grub/menu.lst
  File: "/boot/grub/menu.lst"
    ID: 6f1ac96a10b912cd Namelen: 255     Type: ext2/ext3
Block size: 1024       Fundamental block size: 1024
Blocks: Total: 308612     Free: 266316     Available: 249851
Inodes: Total: 164656     Free: 164612
Il comando qui sopra mi dà indicazioni di massima sul fs che contiene
il file specificato. Mi interessa in particolar modo il block size,
che in questo caso è 1024.
Poi:
lem@lappybaby:~$ sudo stat -c %i /boot/grub/menu.lst
140574
Il comando qui sopra mi restituisce il numero di inode legato al
file che m'interessa.
Ora uso debugfs, interattivamente, per sapere quali blocchi son
"puntati" dall'inode (un inode contiene informazioni su un file,
tra cui quali blocchi sono occupati dal file):
lem@lappybaby:~$ sudo debugfs /dev/sda1
debugfs 1.41.4 (27-Jan-2009)
debugfs:  stat <140574>
che mi restituisce la schermata:
Inode: 140574   Type: regular    Mode:  0644   Flags: 0x0
Generation: 1985366524    Version: 0x00000000
User:     0   Group:     0   Size: 5520
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 12
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x4a86bee6 -- Sat Aug 15 15:57:58 2009
atime: 0x4a86bee7 -- Sat Aug 15 15:57:59 2009
mtime: 0x4a86bee6 -- Sat Aug 15 15:57:58 2009
BLOCKS:
(0-5):293891-293896
TOTAL: 6
M'interessano i BLOCKS, qui. Prendo nota.
Premo Q e torno alla console interattiva di debugfs:
debugfs: quit
e con quit sono uscito.
Missione compiuta. Ora, se voglio leggere il file, non m'interessa
più che il filesystem sia montato oppure no. Basta che faccia:
lem@lappybaby:~$ sudo dd if=/dev/sda1 bs=1024 skip=293891 count=6
Perché tu lo sappia: avrei potuto evitare di passare per il numero
d'inode. Mi bastava fare:
lem@lappybaby:~$ sudo debugfs /dev/sda1
debugfs 1.41.4 (27-Jan-2009)
debugfs:  stat /grub/menu.lst
Ok. Se ora leggi il manuale per trovar riscontro all'esempio dato,
son certo che non farai fatica. Di qui in poi, vola. ;)


wao...
grazie 1000