Em uma veia semelhante à resposta @ maxschlepzig , você pode analisar a saída de filefrag
para classificar arquivos na ordem em que seus primeiros fragmentos aparecem no disco:
find . -maxdepth 1 -type f |
xargs -d'\n' filefrag -v |
sed -n '
/^ 0: 0../ {
s/^.\{28\}\([0-9][0-9]*\).*//
h
}
/ found$/ {
s/:[^:]*$//
H
g
s/\n/ /p
}' |
sort -nk 1,1 |
cut -d' ' -f 2- |
cpio -p dest_dir
MMV com o script sed
acima, portanto, teste com cuidado.
Caso contrário, o que você fizer, filefrag
(parte de e2fsprogs
) será muito mais rápido de usar do que hdparm
, pois pode levar vários argumentos de arquivo. Apenas a sobrecarga de executar hdparm
1,000,000 vezes adicionará muita sobrecarga.
Além disso, provavelmente não seria tão difícil escrever um script perl
(ou programa C), para um FIEMAP
ioctl
para cada arquivo, criar uma matriz ordenada dos blocos que devem ser copiados e os arquivos pertencem e copiam tudo em ordem, lendo o tamanho de cada bloco do arquivo correspondente (tenha cuidado para não ficar sem os descritores de arquivos).