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.