Por que o número de arquivos é diferente?
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 devem 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. (uma)
- Leia do disco a entrada do diretório para o 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 gratuitos, aloque-os e atualize a tabela novamente. d)
- Leia os dados do arquivo e copie para o arquivo de destino (ou seja, copie o "arquivo").
- Atualize a entrada de diretório para o 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 no 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.
(b) No mínimo, isso significa pesquisar no 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 prosseguir ou abortar. Se o arquivo de destino não existir, será necessário criar uma nova entrada de diretório, e talvez isso envolva a expansão do diretório (ou seja, a sobrecarga de alocação do bloco de arquivos (também conhecido como cluster) ).
(c) Se o diretório precisar ser expandido, aloque um novo bloco localizando um bloco livre, modifique a tabela de alocação com a nova alocação e, em seguida, grave 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ório do disco, modifique -o com a nova entrada de diretório do arquivo copiado e, em seguida, grave o bloco no disco.
(d) Para copiar o arquivo, aloque blocos localizando blocos livres, modifique a tabela de alocação com as novas alocações e, em seguida, grave 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. Para manter a integridade dos dados, o sistema de arquivos pode não tentar unir (atrasar e mesclar) operações de gravação em disco para diretórios e tabelas de alocação, mas executar as operações de gravação imediatamente, à medida que os novos arquivos são criados e os blocos são alocados.
(e) Uma vez que copiar os dados é complele, atualizar a nova entrada de diretório para o arquivo copiado com o comprimento de arquivo adequado e marcas de tempo, e em seguida, escreva o bloco de diretório para o disco.
(f) Atualize a entrada do diretório de origem com um novo registro de data e hora de "acesso" e, em seguida, grave o bloco do diretório no disco.
Então, em vez de apenas um arquivo, sua pergunta é perguntar se fazer todo esse material para mil arquivos pode aumentar o tempo necessário para copiar apenas a parte dos dados dos arquivos? Se você copiar apenas um arquivo de 24 MB, terá algo para comparar com o tempo de cópia de mil arquivos.
Ao fazer backup de um sistema de arquivos, a cópia dos arquivos individuais para outro sistema de arquivos em um disco ou partição raramente é empregada porque é um processo bastante lento, como você descobriu. Um método mais rápido é criar e gravar um único arquivo que contém 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 gerar um arquivo desse tipo. (Observe que 'tar' apenas lida com arquivos compactados e não usa compactação como utilitários de arquivo + 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 seja ignorado (tratado como mais dados) e uma cópia de imagem bloco a bloco do dispositivo de origem pode ser executada.