Cómo crear un archivo disperso en Android con terminal

Cómo crear un archivo disperso en Android con terminal

Estoy intentando crear un archivo disperso en Android. Para esto estoy usando el emulador de terminal de Android. He instalado Busybox para poder usar el comando dd. Otros comandos como truncar no están instalados. Mi pregunta: ¿alguien sabe cómo hacer un archivo disperso con terminal android?

Probé algunos comandos que encontré en Internet:

dd if=/dev/zero of=/sdcard/file.img bs=1 count=0 seek="wanted size"    

Pero no se haría ningún expediente. También probé:

dd if=/dev/zero of=/sdcard/file.img bs="wanted size" count=1.   

Pero me saldría el siguiente error:

dd "path of if" invalid argument    

¿Alguien sabe cómo hacerlo bien?

Respuesta1

Yo mismo ya encontré la respuesta.

dd if=/dev/zero of=/sdcard/file.img bs=1 count=0 seek="wanted size"    

No crearía un archivo ya que el tamaño de la unidad está determinado por el tamaño y el recuento del bloque. Al establecer el recuento en 0, el archivo tendría 0 bytes y, de ser así, no existiría.

dd if=/dev/zero of=/sdcard/file.img bs="wanted size" count=1    

Daría el siguiente error:

dd "path of if" invalid argument    

El problema aquí es que hay un límite para el tamaño del bloque. No se puede poner tan grande. Necesitaba calcular el recuento del tamaño de bloque deseado. Elegí 64k. Este es el comando de trabajo para crear un archivo disperso de 512 MB:

dd if=/dev/zero of=/sdcard/file.img bs=64k count=8192    

Usar la búsqueda es opcional.

Respuesta2

El siguiente comando creará un archivo disperso de 5 gigabytes en mi dispositivo
dd of=sparse.img bs=1 count=0 seek=5G

dd es un programa para copiar bloques de bytes.
if=se utiliza para especificar el archivo de entrada. No es necesario aquí.
of=es necesario para especificar el archivo de salida.
bs=es necesario para especificar el tamaño del bloque, también conocido como bytes por lectura o escritura.
seek=Es necesario especificar el número de bloques de salida que se van a omitir.
count=se utiliza para especificar el número de bloques a copiar.

El comportamiento predeterminado cuando countno se especifica es copiar todo el archivo de entrada (que por defecto es stdin). bsnormalmente debe configurarse en el tamaño óptimo de lectura/escritura de los dispositivos, pero en este caso configurarlo 1nos permite usar números legibles por humanos para seek. Ambos seeky counttoman sus valores en bloques definidos por bstal que bytes=bs*(count+seek).

Se crea un archivo disperso usando count=0y en su lugar usando seekpara establecer el tamaño del archivo. La respuesta aceptada no crea ningún archivo disperso, sino que lo llena con ceros.

información relacionada