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

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

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

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

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    

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

решение1

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

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    

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

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

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

решение2

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

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

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

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

Связанный контент