
Estou tentando criar um arquivo esparso no Android. Para isso estou usando o Android Terminal Emulator. Instalei o Busybox para poder usar o comando dd. Outros comandos como truncate não estão instalados. Minha pergunta: alguém sabe como fazer um arquivo esparso com terminal Android?
Eu tentei alguns comandos que encontrei na internet:
dd if=/dev/zero of=/sdcard/file.img bs=1 count=0 seek="wanted size"
Mas nenhum arquivo seria feito. Eu também tentei:
dd if=/dev/zero of=/sdcard/file.img bs="wanted size" count=1.
Mas eu receberia o seguinte erro:
dd "path of if" invalid argument
Alguém sabe como acertar?
Responder1
Eu mesmo já encontrei a resposta.
dd if=/dev/zero of=/sdcard/file.img bs=1 count=0 seek="wanted size"
Não criaria um arquivo, pois o tamanho da unidade é determinado pelo tamanho e contagem do bloco. Ao definir a contagem como 0, o arquivo teria 0 bytes e, sendo assim, não existiria.
dd if=/dev/zero of=/sdcard/file.img bs="wanted size" count=1
Daria o seguinte erro:
dd "path of if" invalid argument
O problema aqui é que há um limite para o tamanho do bloco. Não pode ser definido tão grande. Eu precisava calcular a contagem do tamanho do bloco desejado. Eu escolhi 64k. Este é o comando funcional para criar um arquivo esparso de 512 MB:
dd if=/dev/zero of=/sdcard/file.img bs=64k count=8192
Usar a busca é opcional.
Responder2
O comando a seguir criará um arquivo esparso de 5 gigabytes no meu dispositivo
dd of=sparse.img bs=1 count=0 seek=5G
dd é um programa para copiar blocos de bytes.
if=
é usado para especificar o arquivo de entrada. Não é necessário aqui.
of=
é necessário para especificar o arquivo de saída.
bs=
é necessário para especificar o tamanho do bloco, também conhecido como bytes por leitura ou gravação.
seek=
é necessário para especificar o número de blocos de saída a serem ignorados.
count=
é usado para especificar o número de blocos a serem copiados.
O comportamento padrão quando count
não é especificado é copiar todo o arquivo de entrada (cujo padrão é stdin). bs
normalmente deve ser definido para o tamanho ideal de leitura/gravação dos dispositivos, mas neste caso configurá-lo para 1
nos permite usar números legíveis por humanos para seek
. Ambos seek
e count
assumem seus valores em blocos conforme definido por bs
tal que bytes=bs*(count+seek)
.
Um arquivo esparso é criado usando count=0
e em vez disso usando seek
para definir o tamanho do arquivo. A resposta aceita não cria um arquivo esparso, mas preenche o arquivo com zeros.