Ao copiar arquivos esparsos usando io.Copy(), eles geralmente aumentam dramaticamente em tamanho no destino.
io.Copy() transfere bytes brutos, o que mascara a presença de lacunas em um arquivo esparso – os espaços onde não há dados realmente reside. Esta informação não é acessível através de syscalls padrão como read(2). Como tal, io.Copy() é incapaz de preservar a dispersão dos arquivos.
Para resolver isso, precisamos nos aprofundar usando o pacote syscall e o tratamento manual. Chamadas de sistema Lseek(2), com valores especiais SEEK_HOLE e SEEK_DATA, podem ser usadas para manipular falhas em arquivos.
Se você deseja manter a dispersão de um arquivo durante a transferência, a situação é mais complicada. Fallocate(2) pode ser empregado para tentar criar buracos em sistemas de arquivos suportados. No entanto, alguns sistemas de arquivos carecem inerentemente de suporte a furos, como a família FAT.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3