Как сделать разреженный файл на Android с терминалом

Я пытаюсь сделать разреженный файл на Android. Для этого я использую Android Terminal Emulator. Я установил Busybox, чтобы я мог использовать команду dd. Другие команды, такие как усечение, не установлены. Мой вопрос: кто-нибудь знает, как сделать разреженный файл с терминалом Android?

Я пробовал некоторые команды, которые я нашел в интернете:

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

Но файл не будет сделан. Я также попробовал:

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

Но я бы получил следующую ошибку:

dd "path of if" invalid argument    

Кто-нибудь знает, как сделать это правильно?

2 ответа

Решение

Я уже нашел ответ сам.

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

Не сделал бы файл, так как размер на диске определяется размером блока и количеством. Если установить счетчик равным 0, файл будет иметь размер 0 байт и, следовательно, его не будет.

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

Даст следующую ошибку:

dd "path of if" invalid argument    

Проблема здесь в том, что есть ограничение на размер блока. Это не может быть установлено настолько большим. Мне нужно было рассчитать количество для желаемого размера блока. Я выбрал 64к. Это рабочая команда для создания разреженного файла размером 512 МБ:

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

Использование поиска не является обязательным.

Следующая команда создаст на моем устройстве разреженный файл размером 5 ГБ.
dd of=sparse.img bs=1 count=0 seek=5G

dd — программа для копирования блоков байтов.
if=используется для указания входного файла. Здесь не нужен.
of=необходим для указания выходного файла.
bs=необходим для указания размера блока, то есть байтов на чтение или запись.
seek=необходим для указания количества выходных блоков, которые необходимо пропустить.
count=используется для указания количества копируемых блоков.

Поведение по умолчанию, если оно не указано, — копирование всего входного файла (по умолчанию используется стандартный ввод). обычно следует установить оптимальный размер чтения/записи устройств, но в этом случае установите его на1позволяет нам использовать удобочитаемые числа для файлов . Оба иcountпринимают свои значения в блоках, как определеноbsтакой, чтоbytes=bs*(count+seek).

Разреженный файл создается с использованиемcount=0и вместо этого используяseekчтобы установить размер файла. Принятый ответ вообще не создает разреженный файл, а вместо этого заполняет его нулями.

Другие вопросы по тегам