Temos um número de inode que estamos tentando associar a um nome de arquivo real. O sistema de arquivos é XFS. Olhando há exemplos que pretendem conseguir isso com xfs_db
e/ou xfs_ncheck
, mas até agora não tivemos sucesso em fazer isso.
Exemplo
Estamos fazendo a triagem de um problema em que gostaríamos de encontrar os nomes de arquivos associados aos números de inode que aparecem em um fdinfo
arquivo procs em /proc
.
$ grep inotify /proc/9652/fdinfo/23 | head
inotify wd:58eb9 ino:cfd30c7 sdev:20 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:c730fd0c00000000
inotify wd:58eb8 ino:cfd1f09 sdev:1e mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:091ffd0c00000000
inotify wd:58eb7 ino:cfd1ee9 sdev:1a mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:e91efd0c00000000
inotify wd:58eb6 ino:cfd1ec8 sdev:1c mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:c81efd0c00000000
inotify wd:58eb5 ino:cfd1eb9 sdev:19 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:b91efd0c00000000
inotify wd:58eab ino:cfd24cf sdev:20 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:cf24fd0c00000000
inotify wd:58eaa ino:cfdbc51 sdev:1e mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:51bcfd0c00000000
inotify wd:58ea9 ino:cfdbc31 sdev:1a mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:31bcfd0c00000000
inotify wd:58ea8 ino:cfdbc0f sdev:1c mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:0fbcfd0c00000000
inotify wd:58ea7 ino:cfdb000 sdev:19 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:00b0fd0c00000000
Esses inodes estão em HEX, então precisamos convertê-los para DEC:
$ echo $((16#cfd30c7))
217919687
Usando xfs_ncheck
:
$ xfs_ncheck -i $(echo $((16#cfd30c7))) /dev/mapper/vg0-dockerlv
ERROR: The filesystem has valuable metadata changes in a log which needs to
be replayed. Mount the filesystem to replay the log, and unmount it before
re-running xfs_ncheck. If you are unable to mount the filesystem, then use
the xfs_repair -L option to destroy the log and attempt a repair.
Note that destroying the log may cause corruption -- please attempt a mount
of the filesystem before doing this.
must run blockget -n first
Perguntas
- Como podemos fazer isso com o XFS?
- Eu fiz coisas semelhantes usando debugfs e sistemas de arquivos ext3/4, mas isso não parece tão fácil com o XFS?
Em teoria, o comando deve funcionar, mas na prática,
xfs_ncheck
é um script de shellxfs_db
exfs_db
prefere sistemas de arquivos desmontados de forma limpa:Portanto, por padrão, para sistemas de arquivos montados, ele nem é executado, opções adicionais são necessárias para ignorar o estado montado (implícito por
xfs_ncheck
), mas mesmo assim, em um sistema de arquivos montado ou não limpo, osxfs_db
comandos relacionados geralmente não funcionam como esperado, e então você recebe uma mensagem pouco clara sobre logs que precisam ser reproduzidos e similares.Portanto, você teria que desmontar, ou remontar somente leitura, ou usar um instantâneo de cópia na gravação para produzir uma imagem limpa do sistema de arquivos para executar esses comandos com sucesso.
Mas se for apenas o número normal do inode, para um sistema de arquivos montado, você também pode usar
Mas isso não encontrará arquivos já excluídos e também poderá perder arquivos ocultos em outros pontos de montagem (nesse caso, considere
mount --bind
em vez de-xdev
).Observe também que a correlação inum-nome de arquivo pode ser um pouco arbitrária no caso de links físicos e similares.