xfs: localiza arquivos no primeiro 1 TB

5

Eu fui atingido pelo xfs ' Sem espaço no dispositivo . De acordo com o FAQ:

link

The only way to fix this is to move data around to free up space below 1TB. Find your oldest data (i.e. that was around before even the first grow) and move it off the filesystem (move, not copy). Then if you copy it back on, the data blocks will end up above 1TB and that should leave you with plenty of space for inodes below 1TB.

Mas como identifico os dados para mover? Eu não posso ir pela idade, porque os primeiros 10 TB foram preenchidos no mesmo dia usando rsync .

Eu tentei:

xfs_db -r -c "blockget -i 1 -n -v" /dev/md3

Mas parece que só consigo obter o nome de base do arquivo e não o caminho completo para o arquivo. E uma vez que muitos dos meus arquivos são chamados os mesmos (mas em dirs diferentes), então isso não é muito útil. Também parece me dar mais informações que apenas inode 1.

Tenho a sensação de que posso usar xfs_db e obter isso para me dizer quais arquivos estão usando blocos no primeiro 1 TB, mas não consegui ver como.

(Ao usar a opção de montagem inode64 , o sistema de arquivos não fornecerá nenhum espaço no dispositivo , mas se você esquecer mais tarde de usar a opção de montagem inode64 , obterá Ainda não resta espaço no dispositivo .Eu gostaria de evitar a opção de montagem inode64 , pois o sistema de arquivos pode ser montado por outras pessoas em outros sistemas, e eles um surpreendente Nenhum espaço deixado no dispositivo ).

    
por Ole Tange 08.01.2013 / 10:04

2 respostas

2

Quick & Exemplo sujo (remova comentários embutidos, ajuste números):

# select filesystem
find / -xdev -type f -print0 | \
  xargs -0r -I{} \
    # execute xfs_bmap on every file (and prefix output with path for later processing)
    sh -c "xfs_bmap -v {} | awk '{gsub(/\.\./,\" \"); print \"{}: \" \
# select filesystem
find / -xdev -type f -print0 | \
  xargs -0r -I{} \
    # execute xfs_bmap on every file (and prefix output with path for later processing)
    sh -c "xfs_bmap -v {} | awk '{gsub(/\.\./,\" \"); print \"{}: \" \%pre%}'" | \
    # remove some cruft
    awk -F: '$4 != ""{print $1 " " $4}' | \
    # print line if last block < 1TB/512B/block and size (in 512B blocks) > 100.
    awk '$3 < 1024*1024*1024*1024/512 && $7 > 100{print}'
}'" | \ # remove some cruft awk -F: '$4 != ""{print $1 " " $4}' | \ # print line if last block < 1TB/512B/block and size (in 512B blocks) > 100. awk '$3 < 1024*1024*1024*1024/512 && $7 > 100{print}'
    
por 12.01.2013 / 10:18
3

Tente (re) montar seu sistema de arquivos com a opção -o inode64 e veja se isso já resolve seu problema, mas observe man mount :

inode64
 Indicates  that XFS is allowed to create inodes at any location in the filesystem, including those
 which will result in inode numbers occupying more than 32 bits of significance.  This is  provided
 for  backwards compatibility, but causes problems for backup applications that cannot handle large
 inode numbers.
    
por 08.01.2013 / 10:19

Tags