Como encontrar o arquivo em um determinado bode do btrfs

4

Eu tenho um arquivo corrompido de acordo com btrfs

BTRFS info (device sdb1): csum failed ino 367 off 310013952 csum 1601485211 expected csum 3692975992

Eu assumi que ino 367 significa inode 367, então eu posso usar find e tentar restaurar o arquivo. No entanto find /path -inum 367 não encontra nada. Alguém sabe como encontrar o arquivo corrompido?

    
por user192749 05.01.2016 / 20:21

4 respostas

1

Não sei por que o comando de localização não funcionou para você. Pode ser ino # 367 deletado? Para mim, tanto find quanto btrfs-debug-tree parecem estar funcionando bem.

$ find  /btrfs/ -inum 257
/btrfs/100kbfile.txt
$ ls -li /btrfs/100kbfile.txt 
257 -rw-r--r--. 1 root root 102400 Nov 25 21:07 /btrfs/100kbfile.txt

Você também pode tentar usar 'btrfs-debug-tree' e grep para o objectid.

./btrfs-debug-tree  /btrfs/partition | grep -A2 257

encontre seu inode / objectid na saída. Você pode ver o name associado com objectid 257.

location key (257 INODE_ITEM 0) type FILE

namelen 13 datalen 0 name: 100kbfile.txt

    
por 09.03.2016 / 14:39
1

O método "find / path -inum xxx" funciona com kernels mais novos, o problema é um bug no código do kernel brtfs mais antigo.

    
por 11.03.2016 / 04:46
1

Exemplo:

sudo btrfs inspect-internal inode-resolve 15380 /home

man btrfs-inspect-internal diz:

   inode-resolve [-v] <ino> <path>
       (needs root privileges)

       resolve paths to all files with given inode number ino in a given
       subvolume at path, ie. all hardlinks

       Options

       -v
           verbose mode, print count of returned paths and ioctl()
           return value
    
por 18.08.2017 / 14:42
0

Se você quiser imprimir os nomes de vários inodes, aqui está um script baseado em esta resposta .

#!/bin/bash

set -eu

usage() {
    printf "Usage: %s /filesytem inode(s)\n" "$(basename "$0")" 2>&1
}

if [[ $# -lt 2 ]]; then
    usage; exit 1
fi

fs=$1
shift

if [[ ! -e $fs ]]; then
    usage; exit 1
fi

for i in "$@"; do
    # printf "%s " "$i"
    sudo btrfs inspect-internal inode-resolve "$fs" "$i"
done
    
por 16.11.2017 / 06:02

Tags