[Linux] dd 명령어를 통한 USB 복제하기 (Clone USB Stick through dd command)

문연수·2022년 2월 9일
0

Linux (Fedora)

목록 보기
11/19
post-thumbnail

0. dd 명령어 소개

리눅스에는 dd 명령어가 존재한다. 이는 단순하게 데이터를 복사하여 붙여넣는 프로그램인데, 장치 파일 역시 그저 하나의 파일 로 취급하여 복사하고 붙여 넣는다. (리눅스는 모든 장치를 파일로 취급하나, cp 명령어로는 이러한 동작을 수행할 수 없다.)
따라서 해당 명령어를 사용하면 장치 파일 내부에 있는 모든 파일들(심지어 파일시스템까지)을 복사할 수 있게 된다.
비단 USB 뿐만 아니라 리눅스에서 인식 가능한 모든 장치들(e.g. USB, uSD, HDD, SSD, etc.)을 복제(clone)할 수 있다.

dd 명령어에 대한 보다 상세한 정보는 linux manpage 을 참조하길 바란다.

1. 연결된 장치 정보 확인

장치 파일의 내용을 복사하기에 앞서 우선 어떤 장치가 연결되어 있는지 확인하려 한다. 이를 위해 lshw 명령어를 사용하려 한다. lshw 프로그램은 Hardware Lister 프로그램으로 현재 컴퓨터에 연결되어 있는 하드웨어 목록을 출력한다.

sudo lshw -class disk

위 명령어를 입력하면 하드웨어의 classdisk 인 모든 장치들을 출력한다.

필자가 백업하려는 장치는 15GB 용량을 가진 SCSI Disk 이다. 논리 이름, 그러니까 파일 경로는 /dev/sda 를 가지며 섹터의 크기는 512 byte 임을 알 수 있다.

2. 데이터 백업

sudo dd if=/dev/sda of=backup.img bs=4KiB status=progress
  • if: 입력 파일
  • of: 출력 파일
  • bs: 한번에 읽고 쓸 바이트
  • status: 상태 정보 출력
    - none: 에러를 제외한 모든 메세지를 억제
    - noxfer: 최종적인 전송 메세지만 억제
    - progress: 주기적으로 전송 상태를 출력

컴퓨터 내의 메모리가 충분하다면 다음의 명령어를 입력하여 데이터를 따로 백업한다. of 를 장치 파일로 설정하여 바로 읽고 쓰는 것 역시 가능하다.

3. 데이터 쓰기

dd 명령어의 입/출력 파일명만 변경하면 저장한 파일을 반대로 덮어쓸 수 있다.

sudo dd if=backup.img of=/dev/sda bs=4KiB status=progress

프로그램의 실행이 끝났다고 해서 바로 장치를 제거해선 안된다. 데이터를 비동기적으로 옮길 경우 실제 데이터가 메모리에 쓰여지기 까지 다소 시간이 걸릴 수 있다.

따라서 아래의 명령어를 입력하여 해당 명령어가 반환되기까지 기다리는 것이 좋다

sudo sync /dev/sda

출처

[사이트] https://ko.wikipedia.org/wiki/dd_(유닉스).
[사이트] https://man7.org/linux/man-pages/man1/dd.1.html

profile
2000.11.30

0개의 댓글