A ferramenta padrão nas derivações do Debian é Disk Usage Analyser
( baobab
), mas isso não mostrará fragmentação.
A única maneira que eu sei de mostrar fragmentação é usar um processo de linha de comando em uma base arquivo a arquivo, usando uma das ferramentas descritas em esta resposta .
Para esse fim, escrevi um script usando hdparm --fibmap
: -
#!/bin/bash
#
# frags MountPoint SkipFrags Reports all files under MountPoint with more than SkipFrags fragments
# MountPoint defaults to / (root file system)
# SkipFrags defaults to 1 (report all files with more than one fragment)
# (setting to 0 will report all files, including unfragmanted)
#
# The report is sorted in fragment count order and must be run as root
#
[ "${1:0:1}" == "-" ] && \
echo 'frags MountPoint SkipFrags Reports all files under MountPoint with more than SkipFrags fragments' && \
echo ' MountPoint defaults to / (root file system)' && \
echo ' SkipFrags defaults to 1 (report all files with more than one fragment)' && \
echo ' (setting to 0 will report all files, including unfragmanted)' && \
echo 'The report is sorted in fragment count order and must be run as root' && \
{ return 1 2>/dev/null; exit 1; }
[ "$(whoami)" != "root" ] && { echo 'Must be run from "root"' >&2; return 13 2>/dev/null; exit 13; }
eof='***EOF***' ; # End-of-file marker
{ find "$1"/ -mount -type f; echo "$eof"; } | \
while read -r f; \
do [ "$f" == "$eof" ] && { echo -ne "\e[K" >&2; continue; }; \
r=$(hdparm --fibmap "$f" | grep -E "^[ 0-9]+$" | wc -l); \
[ $r -gt "${2:-1}" ] && { echo -ne "\e[K--- $r: ${f::$(($COLUMNS-${#r}-6))}\r" >&2; echo "$r: $f"; } \
done | \
sort -nt :
Observe que, embora eu tenha documentado o script como um disco inteiro do seu ponto de montagem, você pode obter os resultados classificados para um diretório específico, e eu recomendo fazer isso inicialmente em um diretório pequeno para ter certeza de que ele fornece resultados sensatos.
O processo é bastante lento, e a classificação significa que você não obtém nenhum resultado até que cada arquivo tenha sido varrido, então eu adicionei um diagnóstico em stderr
à medida que cada arquivo a ser reportado é encontrado. A seqüência de escape é para xterm
e depende de $COLUMNS
sendo definido por shopt -s checkwinsize; export COLUMNS
in ~/.bashrc
(ou outro arquivo de inicialização). Evitar feeds de linha impede que o script seja atrasado rolando.
Eu usei [ ... ] &&
em vez de if [ ... ]; then
para reduzir o aninhamento e abreviar o script. A sequência return 1 2>/dev/null; exit 1;
é um truque que eu escolhi para retornar um código de erro, independentemente de o script ser chamado normalmente ou de um comando .
/ source
.