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