Как сделать разреженный файл на 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чтобы установить размер файла. Принятый ответ вообще не создает разреженный файл, а вместо этого заполняет его нулями.