내 Android 휴대폰(snapdragon650 및 3GB RAM)에 chrooted debian(arm64)을 설치하려고 합니다. 나는 그것에 관한 많은 튜토리얼을 찾았습니다. 거의 모든 가이드에서는 chrooted debian용 img를 생성하기 위한 이 명령을 언급합니다.
dd if=/dev/zero of=jessie-arm64.img bs=1M count=0 seek=5120
여기서 bs=1M입니다. 나는 dd에 대해 잘 모른다. 하지만 내 생각에는 bs 매개변수가 다음에 영향을 미칠 것 같습니다.
- img 읽기/쓰기 속도
- 파일의 공간 할당 및 파일 크기
나는 arm64용 소스 코드를 컴파일하고 일부 무거운 GUI 프로그램(openbox 또는 xfce에서)을 실행하기 위해 chroot 환경을 사용할 것입니다. 나는 bs 값이 읽기/쓰기 속도와 공간 활용 모두에 최적이기를 원합니다.
답변1
매개변수 count=0
는 다음과 같습니다.매우여기서 중요한 점은 이 명령은 특정 크기의 파일을 만드는 데만 사용되며 실제로는 아무것도 복사하지 않는다는 것입니다.
그러므로 있다아니요 optimal value for bs
하드웨어 관점에서
생성된 파일의 크기는 bs * seek
. 1MB bs를 사용하면 크기가 5120MB인 파일을 생성하고 있음을 쉽게 알 수 있습니다.
시스템 호출 수준에서 이것은 단지 실행 open
및 호출 lseek
입니다 . dd는 계산을 close
수행 하고 이를 시스템 호출에 전달합니다. 그래서 생산할 것이다bs * seek
lseek
bs if=/dev/zero seek=5368709120 bs=1 of=jesse-arm64.img
정확히동일한 시스템 호출.
답변2
먼저, 명령에 대한 몇 가지 세부정보
dd if=/dev/zero of=jessie-arm64.img bs=1M count=0 seek=5120
~에서dd 매뉴얼 페이지:
if=FILE은 stdin 대신 FILE에서 읽습니다.
of=FILE은 stdout 대신 FILE에 씁니다.
bs=BYTES는 한 번에 최대 BYTES바이트를 읽고 씁니다.
count=N은 N개의 입력 블록만 복사합니다.
eek=N은 출력 시작 시 N개의 obs 크기 청크를 건너뜁니다.
count=0
복사할 입력 청크는 0개이지만 건너 뛸 seek=5120
크기의 청크는 5120개 입니다. 출력 블록 크기입니다. 우리의 경우에는 지정되지 않았습니다 .obs
obs
obs=bs=1M
원하는 경우 삭제 if=/dev/zero
하고 동일한 결과를 얻을 수도 있습니다.
dd of=jessie-arm64.img bs=1M count=0 seek=5120
이제 문제는 bs
우리가 가지고 있는 최적의 가치입니다.dd 소스코드count=0
블록이 복사 되더라도 우리는 seek=5120
( seek_records
소스 코드에서) 값을 갖고 bs
( obs
, int 소스 코드에서) 값을 사용합니다.output_blocksize
if (seek_records != 0 || seek_bytes != 0)
{
size_t bytes = seek_bytes;
uintmax_t write_records = skip (STDOUT_FILENO, output_file,
seek_records, output_blocksize, &bytes);
if (write_records != 0 || bytes != 0)
{
memset (obuf, 0, write_records ? output_blocksize : bytes);
do
{
size_t size = write_records ? output_blocksize : bytes;
if (iwrite (STDOUT_FILENO, obuf, size) != size)
{
error (0, errno, _("writing to %s"), quoteaf (output_file));
quit (EXIT_FAILURE);
}
if (write_records != 0)
write_records--;
else
bytes = 0;
}
while (write_records || bytes);
}
}
최적의 값은 bs
하드웨어에 따라 다릅니다.기사측정하는 방법을 설명합니다. 답변이 너무 길기 때문에 여기서는 자세히 설명하지 않겠습니다.
논평:
1) 다음 명령을 사용하여 16진수 형식의 이미지를 관찰할 수 있습니다.
cat jessie-arm64.img | xxd
2) 이는 dd 명령에 유효합니다.GNU 핵심 도구. BSD 스타일 dd
명령(예: macOS)을 bs=1m
사용 하는 경우 bs=1M
.