web-dev-qa-db-fra.com

Comment répertorier les blocs de données d'un fichier sur Linux?

Si je comprends bien, chaque fichier sur un système d'exploitation de type UNIX a un numéro d'inode (qui peut être visualisé avec "LS -I"), et chaque inode est une liste de blocs de disque contenant les données réelles d'un fichier.

Existe-t-il une commande Linux qui prend un nom de fichier comme argument et imprime la liste des blocs de disque que les points d'inode du fichier sont-ils?

P.s. Le système de fichiers en question est ext3.

13
mike

Vous pouvez utiliser l'outil "Debugfs" pour afficher les informations de fichier sur la ligne de commande ou Interactivley. soit utiliser:

# debugfs /dev/<spartition>
# stat /path/to/file

ou

# debugfs -R "stat /path/to/file" /dev/<partition>

par exemple:

# debugfs -R "stat /etc/passwd"  /dev/sda5
Inode: 435914   Type: regular    Mode:  0644   Flags: 0x0
Generation: 979004472    Version: 0x00000000
User:     0   Group:     0   Size: 1577
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x4a2d6f78 -- Mon Jun  8 23:07:20 2009
atime: 0x4a2d6f79 -- Mon Jun  8 23:07:21 2009
mtime: 0x4a2d6f78 -- Mon Jun  8 23:07:20 2009
Size of extra inode fields: 4
BLOCKS:
(0):1767438
TOTAL: 1
17
katriel

Regardez la syntaxe pour "Debugfs" et spécifiquement la commande "STAT". Cela vous montrera une liste des blocs de données utilisés par un fichier. Vous pouvez transmettre des paramètres à "Debugfs" avec l'argument "-f" pour l'appeler à partir d'un script.

4
Evan Anderson

Un moyen simple d'obtenir la liste des blocs (sans avoir à lire de la partition comme dans les réponses debugfs) consiste à utiliser le FIBMAP ioctl. Je ne connais aucun commandement à le faire, mais il est très simple d'en écrire un; Une recherche Google rapide m'a donné n exemple d'utilisation FIBMAP , qui fait exactement ce que vous voulez. Un avantage est qu'il fonctionnera sur tout système de fichiers qui prend en charge l'opération bmap, pas seulement ext3.

Une alternative plus récente (et plus efficace) est le FIEMAP ioctl, qui peut également renvoyer des informations détaillées sur les extensions (utiles pour EXT4).

4
CesarB
hdparm --fibmap /path/to/filename

Je ne travaillerai pas sur ZFS, mais je vais sur EXT4, BTRFS, (V) FAT, etc.

man 8 hdparm :

--fibmap Lorsqu'il est utilisé, cela doit être le seul drapeau donné. Il nécessite un chemin de fichier en tant que paramètre et imprimera une liste des étendues de périphérique (gammes de secteurs) occupées par ce fichier sur disque. Les numéros sectoriels sont donnés sous forme de nombres LBA absolus, référencés du secteur 0 du périphérique physique ( non la partition ou le système de fichiers). Ces informations peuvent ensuite être utilisées à diverses fins, telles que l'examen du degré de fragmentation de fichiers plus volumineux ou de déterminer des secteurs appropriés à corrompre délibérément lors des procédures de test d'injection de défaut.

3
ChewbaccaKL