Esta ferramenta escrita em C pode ser útil para você. Não é uma ferramenta padrão, mas é muito simples e fácil de compilar.
Você está certo de que cp
não suporta saída esparsa para bloquear dispositivos (confirmado na man page).
Eu tenho um arquivo esparso de imagem do sistema cujo tamanho real é de apenas alguns MBs, mas o "tamanho aparente" é de cerca de 1GB. Eu estou tentando escrevê-lo para um dispositivo de bloco de forma eficiente (sem os buracos). Aqui estão algumas soluções que eu tentei:
dd if=sparse_file of=/dev/some_dev
processa o arquivo inteiro incluindo os furos, então, no final, estou obtendo algo como 1007869952 bytes (1,0 GB) copied, 22,0301 s, 45,7 MB/s
cp --sparse=always sparse_file /dev/some_dev
parece que também não está funcionando, pois leva muito tempo para alguns MBs (~ 13s) ddrescue --sparse --force sparse_file /dev/some_dev
falha com uma mensagem ddrescue: Only regular files can be sparse.
(Nota: funciona na direção oposta conforme Existem 2 outras formas cobertas aqui mas gostaria de usar apenas as ferramentas padrão que fazem parte da distribuição Linux.
Então existe uma maneira de escrever o arquivo esparso para uma imagem de bloco ignorando os buracos?
Esta ferramenta escrita em C pode ser útil para você. Não é uma ferramenta padrão, mas é muito simples e fácil de compilar.
Você está certo de que cp
não suporta saída esparsa para bloquear dispositivos (confirmado na man page).
Tags dd sparse-files ddrescue