예전 USB 드라이브의 이미지를 만들려고 했어요. 장치에 0으로 채워진 일부 블록이 있을 것이라고 예상할 만한 충분한 이유가 있었기 때문에 공간을 절약하기 위해 conv=sparse
다음 옵션을 사용했습니다.
dd if=/dev/sdb of=myusb.img conv=sparse bs=32M
그러나 그것은 나에게 아무것도 저장하지 않았습니다.
$ ls -hls myusb.img
250M -rw-r--r-- 1 root root 250M Oct 18 21:31 myusb.img
장치에 0으로 채워진 블록이 있다고 확신합니다.왜 dd conv=sparse
공간을 절약하지 않았나요?
참고 나는 이미 답을 알고 있습니다. 아래에 게시하고 있습니다. 질문은 나중에 참조하기위한 것입니다.
답변1
0으로 채워진 블록이 있다고 확신한다면 공간을 절약하지 못한 이유는 사용한 큰 버퍼 때문입니다. 에서 man dd
:
sparse
NUL 입력 블록에 대한 출력을 작성하는 대신 탐색을 시도합니다.
을 사용했으므로 옵션이 단 한 번만 해당 작업을 수행 bs=32M
하려면 오른쪽 오프셋에 전체 32MiB의 0 블록이 필요했습니다 .conv=sparse
옵션은 (입력 블록 크기) 및 (출력 블록 크기)를 bs
설정합니다 . 설명서에 언급되어 있는 동안ibs
obs
입력 블록, 실제로 중요한 것은입니다 obs
.
다음은 몇 가지 테스트 결과입니다. (저는 OP이기 때문에 동일한 장치로 테스트를 진행했습니다.) 각 파일의 이름은 <obs_used>.img
패턴에 따라 지정됩니다. 첫 번째 열에 주의하세요.
$ ls -hlst *.img
250M -rw-r--r-- 1 root root 250M Oct 18 22:02 4M.img
250M -rw-r--r-- 1 root root 250M Oct 18 22:02 2M.img
249M -rw-r--r-- 1 root root 250M Oct 18 22:02 1M.img
248M -rw-r--r-- 1 root root 250M Oct 18 22:01 512K.img
248M -rw-r--r-- 1 root root 250M Oct 18 22:01 256K.img
247M -rw-r--r-- 1 root root 250M Oct 18 22:00 128K.img
247M -rw-r--r-- 1 root root 250M Oct 18 21:57 64K.img
247M -rw-r--r-- 1 root root 250M Oct 18 21:56 32K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:55 16K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:54 8K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:53 4K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:52 2K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:51 1K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:44 512.img
결론은: 옵션 obs
과 함께 대형을 사용해서는 안 된다는 것입니다 conv=sparse
. 일반적인 섹터 크기는 512바이트이므로 bs=512
딱 맞는 것 같습니다. 귀하의 명령은 다음과 같았어야 합니다:
dd if=/dev/sdb of=myusb.img conv=sparse bs=512