터미널을 사용하여 Android에서 스파스 파일을 만드는 방법

터미널을 사용하여 Android에서 스파스 파일을 만드는 방법

안드로이드에서 스파스 파일을 만들려고 합니다. 이를 위해 Android Terminal Emulator를 사용하고 있습니다. dd 명령을 사용할 수 있도록 Busybox를 설치했습니다. truncate와 같은 다른 명령은 설치되지 않습니다. 내 질문: 안드로이드 터미널로 스파스 파일을 만드는 방법을 아는 사람이 있나요?

인터넷에서 찾은 몇 가지 명령을 시도했습니다.

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를 선택했다. 다음은 512MB 스파스 파일을 만드는 작업 명령입니다.

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

탐색 사용은 선택 사항입니다.

답변2

다음 명령은 내 장치에 5GB의 스파스 파일을 생성합니다.
dd of=sparse.img bs=1 count=0 seek=5G

dd는 바이트 블록을 복사하는 프로그램입니다.
if=입력 파일을 지정하는 데 사용됩니다. 여기서는 필요하지 않습니다.
of=출력 파일을 지정하는 데 필요합니다.
bs=블록 크기, 즉 읽기 또는 쓰기당 바이트를 지정하는 데 필요합니다.
seek=건너뛸 출력 블록 수를 지정하는 데 필요합니다.
count=복사할 블록 수를 지정하는 데 사용됩니다.

지정되지 않은 경우의 기본 동작 count은 전체 입력 파일(기본값은 stdin)을 복사하는 것입니다. bs일반적으로 장치의 최적 읽기/쓰기 크기로 설정되어야 하지만 이 경우 로 설정하면 에 1사람이 읽을 수 있는 숫자를 사용할 수 있습니다 seek. seek및 둘 다 다음과 같이 count정의된 대로 블록의 값을 취합니다 .bsbytes=bs*(count+seek)

스파스 파일은 count=0대신 을 사용하여 seek파일 크기를 설정하여 생성됩니다. 허용되는 답변은 스파스 파일을 전혀 생성하지 않고 대신 파일을 0으로 채웁니다.

관련 정보