Sequência de cópia dos arquivos a serem fisicamente colocados consecutivamente no disco rígido

1

Eu tenho uma seqüência de arquivos de imagem que precisa ser lida tão rápido quanto possível, desde que eles sejam realmente um vídeo dividido em quadros. Portanto, quando a seqüência de imagens não é gravada no disco rígido consecutivamente, o desempenho é ruim porque o braço do disco movimenta continuamente a cabeça em busca de cada arquivo. Eu preciso saber como forçar arquivos para escrever na ordem correta fisicamente no disco rígido ao copiar. Os procedimentos do OSX, Linux e Windows são necessários. Obrigado.

    
por Abraham 01.10.2018 / 10:30

2 respostas

2

O utilitário contig de Sysinternals é especificamente projetado para fazer isso para um arquivo por vez em sistemas Windows com armazenamento HDD. Nenhum equivalente a contig foi encontrado para MacOS ou Linux.

No entanto, se você usar um SSD, observe que os dados são armazenados dentro das células do SSD onde quer que seu firmware decida colocá-los, portanto, qualquer benefício do arquivo contíguamente escrito como por NTFS pode ser negado.

    
por 01.10.2018 / 19:11
0

Eu não acho que você possa realmente responder isso, especialmente para Linux, Windows e Mac de uma só vez. Porque:

  • Cada sistema de arquivos diferente pode colocar arquivos em um lugar diferente no disco. Tente criar um sistema de arquivos ext3 / 4 e dê uma olhada onde um arquivo facilmente identificável (que contém, por exemplo, todos os a ) acaba - provavelmente será gravado em "listras" no dispositivo.
  • Cada disco rígido diferente pode ter um número desconhecido de bandejas & cabeças, e uma maneira desconhecida que eles mapeiam para setores
  • O sistema operacional ou a própria unidade de disco rígido podem "remapear" os setores em um local diferente no disco

Em geral, parece que você só quer evitar a fragmentação de arquivos, e você pode fazer isso com o sistema de arquivos vazio (ou quase vazio) quando você escreve os arquivos.

Se você quiser apenas escrever um arquivo específico após o outro na ordem que preferir (mas o SO ainda decidirá onde colocá-los no disco), você pode usar um loop como (por exemplo, no Linux)

while read filename
cp filename destination
sync
done

Ou tenha dd pulando o cache do buffer e faça alguma sincronização também:

dd if=filename of=destination/filename oflags=direct,sync
    
por 01.10.2018 / 10:52