Por que copiar a mesma quantidade de dados demora mais se for distribuído em vários arquivos separados?

9

Percebi que copiar 24 MB de dados de uma pasta para outra demorava cerca de 30 segundos porque (suponho que essa seja a razão) eram mais de 1.000 arquivos separados. Copiar 24Mb não deve demorar muito. Por que o número de arquivos é diferente?

Estou executando o Windows 7 em um MacBook (processador de 4 GB, Intel (R) Core ™ 2 Duo CPU P7450 a 2.13 GHz, sistema operacional de 32 bits)

EDIT: NTFS é o sistema de arquivos usado na unidade

    
por Trindaz 09.10.2011 / 04:53

4 respostas

4

O disco rígido não tem uma taxa de transferência exata, depende da manutenção adequada, ou seja, que não é fragmentado, nem tem setores defeituosos, etc ...

Se o HDD é SATA 2 e é a mesma partição, é apenas a velocidade da transferência de dados.

Se houver duas partições no mesmo HDD, não é necessária a transferência de dados entre o barramento e a placa-mãe, isto é, ele é carregado no buffer. (então depende do tamanho do buffer do hdd.)

Mas para cada arquivo copiado, o sistema deve manter seu índice na MFT (Master File Table) do HDD, o que torna o processo de cópia mais lento se você copiar muitos arquivos. E se você tiver algum antivírus, ele verificará cada arquivo copiado. E se você tiver ativado a indexação do arquivo de pesquisa da Microsoft (ou qualquer outro serviço de indexação de arquivos), o resultado será pior.

Eu acho que deve haver muitas outras razões pelas quais a cópia de muitos arquivos é mais lenta, mas estes devem ser os principais.

    
por 09.10.2011 / 06:35
25

Why does the number of files make a different?

Aparentemente, você está se concentrando apenas no aspecto "copiar os dados" de "copiar um arquivo". Um arquivo é mais do que apenas os dados; é uma entidade em um sistema de arquivos . Um arquivo tem um nome e atributos e permissões. Todas essas informações adicionais sobre o arquivo precisam ser duplicadas junto com os dados quando o "arquivo é copiado". Há uma quantidade significativa de E / S de disco para executar essa sobrecarga do sistema de arquivos.

O procedimento para copiar um (1) arquivo em um sistema de arquivos genérico seria algo como:

  • Encontre o arquivo de origem no sistema de arquivos. (a)
  • Ler do disco a entrada de diretório do arquivo de origem.
  • Verifique as permissões de leitura.
  • Encontre o arquivo de destino no sistema de arquivos. (b)
  • Verifique as permissões de gravação no diretório de destino.
  • Expanda o diretório, se necessário, para acomodar o novo arquivo. (c)
  • Atualize o diretório no disco. (c1)
  • Encontre blocos livres, aloque-os e atualize a tabela novamente. (d)
  • Leia os dados do arquivo e copie no arquivo de destino (por exemplo, copie o "arquivo").
  • Atualize a entrada de diretório do novo arquivo com (tamanho e hora). (e)
  • Atualize o tempo de acesso da entrada do diretório de origem. (f)

(a) No mínimo, isso significa pesquisar o diretório atual. Ou o caminho pode começar na raiz do sistema de arquivos, e vários níveis de diretórios precisam ser atravessados.

(b) No mínimo, isso significa pesquisar o diretório atual. Ou o caminho pode começar na raiz do sistema de arquivos e vários níveis de diretórios precisam ser percorridos. Se o arquivo de destino já existir, determine como a cópia deve continuar ou abortar. Se o arquivo de destino não existir, uma nova entrada de diretório deverá ser criada, e talvez isso envolva a expansão do diretório (ou seja, bloco de arquivos (também conhecido como cluster) sobrecarga de alocação ).

(c) Se o diretório tiver que ser expandido, aloque um novo bloco encontrando um bloco livre, modifique a tabela de alocação com a nova alocação, e então < em> escreva o (s) bloco (s) no disco. Como a maioria dos sistemas de arquivos mantém várias cópias da tabela de alocação, isso significa várias gravações no disco.
(c1) Quando o diretório de destino estiver localizado, leia o bloco de diretórios do disco, modifique-o com a nova entrada de diretório para o arquivo copiado, e então escreva o bloco em disco.

(d) Para copiar o arquivo, aloque blocos encontrando blocos livres, modifique a tabela de alocação com as novas alocações e, em seguida, escreva o (s) bloco (s) para o disco. Como a maioria dos sistemas de arquivos mantém várias cópias da tabela de alocação, isso significa várias gravações no disco. Para manter a integridade dos dados, o sistema de arquivos não pode tentar coalescer (atrasar e mesclar) as operações de disco gravar para diretórios e tabelas de alocação, mas sim executar as operações de gravação imediatamente quando os novos arquivos são criados e bloquear alocado.

(e) Quando a cópia de dados estiver completa, atualize a nova entrada de diretório para o arquivo copiado com o comprimento de arquivo e registros de tempo adequados, e então escreva o bloco de diretórios para o disco.

(f) Atualiza a entrada de diretório de origem com um novo registro de data e hora de "acesso" e então escreve o bloco de diretório em disco. / p>

Então, em vez de apenas um arquivo, a sua pergunta é se fazer tudo isso para mil arquivos pode aumentar o tempo que leva para copiar apenas a parte de dados dos arquivos? Se você copiar apenas um arquivo de 24MB, você terá algo para comparar com o tempo de cópia de mil arquivos.

Quando faz backup de um sistema de arquivos, copiar os arquivos individuais para outro sistema de arquivos em um disco ou partição raramente é empregado porque é um processo lento, como você descobriu. Um método mais rápido é criar & escreva um único arquivo arquivo que contenha as entradas do diretório de origem e o conteúdo do arquivo em um formato de arquivo especial; programas de backup e o comando * nix 'tar' podem produzir um arquivo assim. (Observe que 'tar' apenas manipula arquivos archive e não usa compactação como utilitários de arquivamento + compactação.) O método mais rápido de backup é gravar em um dispositivo de bloco (em vez de um sistema de arquivos em um dispositivo), para que o sistema de arquivos de origem ignorado (tratado como mais dados) e uma cópia de imagem bloco a bloco do dispositivo de origem pode ser executada.

    
por 10.10.2011 / 08:44
-1

Aqui está uma analogia conceitual:

(por favor, lembre-se querida internet, que as analogias são falhas. Sinta-se à vontade para apontar como nos comentários.)

Suposições:

  • O agente de transferência de informações == alguma criança, vamos chamá-lo de Sam, está movendo os ovos de uma cesta para outra.
  • O meio de transferência de informação == ar, eu acho. Não é realmente importante aqui.
  • Os ovos vêm de várias espécies, incluindo como ... dinossauros ... & seabeasts sub-aquáticos míticos & dragões. (os ovos podem ser realmente grandes)
  • Tamanho do arquivo == volume do ovo. Pense em ovo de Robbin vs. ovo de Dragão.

Analogia:

Então Sam tem que mover ovos de uma cesta para outra porque ele trabalha em uma fazenda & quem lhe dá tarefas é mau. Existem vários animais que poem ovos nesta fazenda, incluindo dragões & míticas bestas marinhas; Sam acha isso incrível por vários motivos. (não é realmente importante, mas esta é a minha analogia)
Sam está relaxando no rio com suas duas cestas, uma das cestas é a que tem ovos dentro dela. Os ovos na cesta variam em tamanho de

  • o ovo de um robbin ocupando 100 bytes do espaço na cesta

para

  • Kraken-eggs, dimensionados em torno de 2.7Gb .

Sam precisa começar a mover os ovos, então ele começa a pegar ovos e movê-los. Vamos dizer que ele decide primeiro mover um ovo de dragão. Agora o ovo é extremamente volumoso e denso, então leva um tempo para puxar a coisa para a outra cesta.
Sam pega o ovo do dragão na outra cesta & ele está chateado. Isso foi difícil porque a coisa ocupou tanto espaço; o movimento levou muito tempo para apenas um único ovo.

Sam é um tolo.

Sam volta para a primeira cesta para pegar outro ovo. Ele percebe que ele realmente só tinha 1 grande. No entanto, restam 100.000.000.000 de ovos de robbin.

Como você pode ver, a tarde de Sam está arruinada. Sua inclinação natural seria que o ovo de dinossauro fosse muito pior para ele se mover. Isso faz sentido quando falamos de ovos & cestas, mas os computadores lidam em números como 100.000.000.000.

Resumindo:

A resposta sobre por que demora muito mais para mover vários arquivos pequenos em comparação com alguns grandes, tem a ver com o custo associado à ação de movê-los. Quanto mais arquivos pequenos você tiver, mais vezes essa ação precisará ser pré-formada. Outra maneira de ver isso seria falar sobre densidade de informação.

    
por 11.06.2017 / 01:43
-2

Leia FAT, reposicione cabeçalhos, abra o arquivo na troca de arquivo - é tudo que você precisa de tempo

    
por 09.10.2011 / 05:50