Salut,
Je fais un peu d'archéologie du système de fichier et j'ai un problème
avec les i-nœuds.
Sur mon système (ext4), si je fais :
% ls -il /etc/zsh
total 24
1474675 -rw-r--r-- 1 root root 1295 déc. 30 2017 newuser.zshrc.recommended
1474676 -rw-r--r-- 1 root root 344 déc. 30 2017 zlogin
1474677 -rw-r--r-- 1 root root 58 déc. 30 2017 zlogout
1474678 -rw-r--r-- 1 root root 264 déc. 30 2017 zprofile
1474679 -rw-r--r-- 1 root root 623 déc. 30 2017 zshenv
1468184 -rw-r--r-- 1 root root 3884 févr. 21 2020 zshrc
Les i-nœuds apparaissent à gauche.
Je cherche à regarder dans le file system. Un répertoire n'est qu'un
fichier qui indexe (en gros) le nom des contenants avec les i-nœuds
correspondants.
https://www.kernel.org/doc/html/latest/filesystems/ext4/directory.html?highlight=struct+ext4_dir_entry
Il faut donc trouver déjà dans quel groupe de bloc est écrit le répertoire :
# debugfs -R "blocks /etc/zsh" /dev/sda1
debugfs 1.45.5 (07-Jan-2020)
5777186
Donc chez moi, cela donne 5777186. Pour calculer le bloc, il suffit de
faire une simple opération :
5777186x4096/512 (pour des blocs de 4 ko chez moi).
Cela donne 46217488.
Lisons le bloc en question (pour savoir si je ne me suis pas gouré) :
# dd if=/dev/sda1 bs=512 skip=46217488 count=1 status=none | hexdump -C
00000000 6a 0b 16 00 0c 00 01 02 2e 00 00 00 01 00 16 00 |j...............|
00000010 0c 00 02 02 2e 2e 00 00 74 80 16 00 10 00 06 01 |........t.......|
00000020 7a 6c 6f 67 69 6e 72 2e 75 80 16 00 10 00 07 01 |zloginr.u.......|
00000030 7a 6c 6f 67 6f 75 74 65 76 80 16 00 10 00 08 01 |zlogoutev.......|
00000040 7a 70 72 6f 66 69 6c 65 77 80 16 00 10 00 06 01 |zprofilew.......|
00000050 7a 73 68 65 6e 76 67 2d 18 67 16 00 68 00 05 01 |zshenvg-.g..h...|
00000060 7a 73 68 72 63 6c 6f 67 00 00 00 00 00 00 00 00 |zshrclog........|
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000000c0 73 80 16 00 34 0f 19 01 6e 65 77 75 73 65 72 2e |s...4...newuser.|
000000d0 7a 73 68 72 63 2e 72 65 63 6f 6d 6d 65 6e 64 65 |zshrc.recommende|
000000e0 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |d...............|
000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000200
Bingo, ça fonctionne !
Analysons donc le binaire en partant de la ligne 3, la première entrée
(les deux autres sont évidemment le . et le ..). Le système est petit
boutiste :
7a 6c 6f 67 69 6e 72 2e pour zlogin : OK
01 pour 1 : c'est un fichier régulier : OK
00 06 pour 6 : c'est la longueur du fichier zlogin : OK
10 : 16 bits de codage pour la longueur de l'entrée totale : OK
74801600 : c'est le numéro de l'inode : et là patatra : cela fait
1954551296, bien différent du ls que j'ai donné en premier.
Si j'analyse les numéros d'i-node de . et .., c'est pareil.
Où est-ce que je fais une erreur ?
Merci de vos lumières,
PK
--
|\ _,,,---,,_ Patrice KARATCHENTZEFF
ZZZzz /,`.-'`' -. ;-;;,_ mailto:patrice.karatchentzeff@gmail.com
|,4- ) )-,_. ,\ ( `'-'
'---''(_/--' `-'\_)