
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 count
no se especifica es copiar todo el archivo de entrada (que por defecto es stdin). bs
normalmente debe configurarse en el tamaño óptimo de lectura/escritura de los dispositivos, pero en este caso configurarlo 1
nos permite usar números legibles por humanos para seek
. Ambos seek
y count
toman sus valores en bloques definidos por bs
tal que bytes=bs*(count+seek)
.
Se crea un archivo disperso usando count=0
y en su lugar usando seek
para establecer el tamaño del archivo. La respuesta aceptada no crea ningún archivo disperso, sino que lo llena con ceros.