$ dd
$ dd if=<input> of=<output> bs=<size> [count=<how many block>] \
&& sync
dd
역할: if 로 지정된 파일을, 1번에 최대 bs 크기로 count만큼 of로 지정된 파일로 copy!!!dd
명령은 && sync
로 같이 쓰는게 좋음if=file
: 입력 파일. (default: STDIN)of=file
: 출력 파일. (default: STDOUT)dd option | description |
---|---|
bs | Bytes, 한번에 읽고 쓸 최대 바이트 크기 지정 default로 512 bs=1K , bs=1024 , bs=1M 등으로 사용 가능![]() |
cbs | Bytes, 한번에 변환 작업 가능한 바이트 크기 지정 |
ibs | Bytes, 한번에 읽어드리는 입력단위 바이트 크기 지정 입력, 출력 블록 사이즈 크기가 같으면 그냥 bs 쓰면됨 |
obs | Bytes, 한번에 작성하는 출력 단위 바이트 지정 입력, 출력 블록 사이즈 크기가 같으면 그냥 bs 쓰면됨 |
count | Blocks, 지정한 블록 수 만큼 복사 |
conv | 기호 목록에 따라 파일 변화 - ascii: EBCDIC코드를 ASCII코드로 변환 - ebcdic: ASCII코드를 EBCDIC코드로 변환 - ibm: ASCII코드를 EBCDIC코드로, EBCDIC코드를 ASCII코드로 변환 - block: cbs 단위로 변환할 때 줄바꿈 문자를 공백 문자로 변환 - unblock: cbs단위로 변환할 때 공백 문자를 줄바꿈 문자로 변환 - lcase: 영어 대문자를 소문자로 변환 - ucase: 영어 소문자를 대문자로 변환 - swab: 입력되는 두 바이트의 순서 변경 - sync: ibs크기와 obs크기가 차이날 경우 NULL 문자로 대체 - excl: 출력파일이 이미 존재하면 수행하지 않는다. - nocreat: 출력파일이 존재해야 수행한다. - notrunc: 출력파일이 자르지 않고 출력한다. - noerror: 입력데이터를 읽을 때 에러가 발생하여도 계속 진행한다. |
if | File, 지정한 파일을 입력 대상으로 한다. |
of | File, 지정한 파일을 출력 대상으로 한다. |
seek=num | N, 지정한 단위만큼 obs 크기를 건너뛰고 출력을 시작한다. |
skip=num | 입력파일이나, 스트림에서 num , 지정한 단위만큼 ibs 크기를 건너뛰고 입력을 시작한다. |
status=progress | 진행사항 확인 |
dd
사용 예이미지 파일 -> 디바이스에 쓰기
$ sudo dd bs=1K if=<input> of=<devfile> && sync
e.g.,
$ sudo dd if=./Ubuntu.iso of=/dev/sdb bs=1K && sync
$ sudo eject /dev/sdb
/var/log/dmesg
의 내용을 읽어 /tmp/test/test
파일에 쓰는 것을 10번 반복한다.
$ ls -lh /var/log/dmesg
87K Apr 26 16:53 dmesg # dmesg 파일
$ dd if=/var/log/dmesg of=/tmp/test/test bs=1024 count=10
$ dd if=/dev/null of=test.img bs=1K seek=1M
bs
: 1K, 1KB 단위 block size 설정. 실제 저장 장치의 block(sector)가 아니라, 한번에 read/write하는 단위seek
: 1M, 1M(1024K) 번째로 이동. 최종적으로 bs(1K) * seek(1M) = 1GB
du
, ls -lh
를 이용해 확인할 수 있다.fdisk
로 파티션할당도 가능하다.512Byte
이고, sector라는 개념은 하드디스크에서 읽고 쓰기를 하는 단위로 최근 SD card나 MMC에서도 대부분 논리적인 개념으로 512Byte
섹터 단위를 사용한다.0x1be
부터 16Byte 씩 4개의 파티션 정보가 들어간다.fdisk
에서 primary partition이다.512Byte
단위의 섹터를 사용하고 위치를 표시하기 위해 32bit
크기로 기록된다.