Existe-t-il une commande qui affichera les blocs de début et de fin d'un fichier?
command-line
filesystems
files
précis
la source
la source
Réponses:
hdparm
Je ne suis pas sûr à 100% que c'est ce que vous recherchez, mais je pense que vous pouvez le faire en utilisant la commande
hdparm
, en particulier avec son--fibmap
commutateur.extrait
Exemple
Disons que nous avons un exemple de fichier.
Maintenant, quand nous courons
hdparm
.filefrag
Une autre méthode intéressante pour trouver les blocs de début et de fin d'un fichier est
filefrag
. Vous devrez cependant utiliser les commutateurs appropriés pour obtenir la sortie souhaitée. Un avantage de cet outilhdparm
est que tout utilisateur peut l'exécuter, donc aucunsudo
n'est requis. Vous devrez utiliser le-b512
commutateur pour que les sorties soient affichées dans des blocs de 512 octets. Nous devons également direfilefrag
d'être verbeux.Exemple
debugfs
Une troisième méthode pour obtenir les LBA d'un fichier consiste à utiliser
debugfs
. Cette méthode nécessitera un peu de calcul, mais j'ai pensé qu'il était important de montrer comment on peut convertir des valeurs d'étendue rapportées pardebugfs
en LBA, pour ceux qui pourraient être curieux.Commençons donc par l'inode du fichier.
REMARQUE: nous pourrions également utiliser le nom du fichier à l'intérieur,
debugfs
mais pour cette démonstration, je vais utiliser l'inode à la place.Maintenant, obtenons les
stat
informations viadebugfs
sur notre inode.Les informations importantes se trouvent dans la section étendue. Il s'agit en fait de blocs de système de fichiers utilisés par cet inode. Nous avons juste besoin de les convertir en LBA. Nous pouvons le faire grâce à l'équation suivante.
REMARQUE: En supposant que notre système de fichiers utilise des tailles de bloc de 4k et que le matériel sous-jacent utilise des unités de 512 octets, nous devons multiplier les exents par 8.
Exemple
Ainsi, dans notre exemple, notre étendue de début et de fin est la même, car notre fichier tient dans une seule étendue.
Nos LBA sont donc 282439184..282439191.
Références
la source
filefrag
.debugfs
.filefrag
avec des tailles de blocs disponibles de 1024 et 2048 ..debugfs
avec une extension de fichier plus grande : 0 - 12187 .. je vais prendre mon temps et comprendre .. c'est une grande aide, merci ...Numéro de secteur par rapport au périphérique de bloc contenant le FS (pas le disque entier)
(Notez que cela
hdparm --fibmap
est relatif à l'ensemble du disque, pas à la partition ou à tout autre blockdev contenant le FS. Il nécessite également root.)filefrag -e
fonctionne bien et utilise l' ioctl générique et efficaceFIEMAP
, il devrait donc fonctionner sur à peu près n'importe quel système de fichiers (y compris le BTRFS souvent étrange, même pour les fichiers compressés BTRFS). Il reviendra à FIBMAP pour les systèmes de fichiers / noyaux sans prise en charge FIEMAP.XFS uniquement
Si vous utilisez xfs, la
xfs_bmap
sortie est plus agréable: elle vous montre où il y a des trous, tandisfilefrag
que la prochaine étendue commence à un secteur ultérieur. Il utilise des blocs de 512B, quelle que soit la taille de bloc du système de fichiers. (généralement 4k sous Linux). Il vous montre dans quel groupe d'allocation chaque extension se trouve et comment elle est alignée sur les limites de la bande RAID.-l
est redondant lorsqu'il-v
est utilisé, mais pour une raison quelconque, je tape toujours-vpl
.-pl
est une sortie plus compacte.Les deux
filefrag
etxfs_bmap
vous montrent les extensions préallouées.hdparm --fibmap
n'est utile que si vous voulez un numéro de secteur par rapport à l'ensemble du disque dur , pas dans la partition sur laquelle se trouve le système de fichiers. Il ne fonctionne pas en plus du RAID logiciel (ou probablement de tout autre élément entre le système de fichiers et un disque dur). Il nécessite également root. Malgré le nom de l'option, il utilise en faitFIEMAP
lorsqu'il est disponible (le plus récent ioctl de carte d'extension, pas l'ancien ioctl de carte de bloc lent).la source
Donc, pour un fichier donné, vous voulez savoir quels numéros de bloc de disque contiennent le début et la fin de ce fichier.
debugfs (8) semble prometteur pour les FS ext2 / 3/4
stat (1), ls -i, lsof (8) fournissent le numéro d'inode, mais pas grand-chose d'autre sur les blocs de disques.
head / tail --bytes = 1024 est utile pour le contenu des fichiers, mais pas pour les blocs de disques.
dd (1) sera ce que vous voulez inspecter le contenu du bloc - soyez attentif à la différence entre les paramètres de recherche = et de saut = et évitez de = / dev / ... sauf si vous voulez vraiment que le fichier de sortie soit un périphérique .
la source
hdparm --fibmap
répertorie les blocs qu'un fichier occupe. Notez qu'ils peuvent ne pas être contigus, donc "début et fin" n'a pas de sens.la source
--fibmap
. Vous devez également spécifier un nom de fichier avec. Exemple:hdparm --fibmap afile
.hdparm
était sur un niveau de disque entier, je ne l'ai jamais utilisé pour des fichiers auparavant.