Como fazer um arquivo esparso no Android com terminal

Como fazer um arquivo esparso no Android com terminal

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 countnão é especificado é copiar todo o arquivo de entrada (cujo padrão é stdin). bsnormalmente deve ser definido para o tamanho ideal de leitura/gravação dos dispositivos, mas neste caso configurá-lo para 1nos permite usar números legíveis por humanos para seek. Ambos seeke countassumem seus valores em blocos conforme definido por bstal que bytes=bs*(count+seek).

Um arquivo esparso é criado usando count=0e em vez disso usando seekpara definir o tamanho do arquivo. A resposta aceita não cria um arquivo esparso, mas preenche o arquivo com zeros.

informação relacionada