본문 바로가기
프로그래밍/OS

dd command를 이용하여 Linux OS 시스템을 USB로 복사하기

by 남생 namsaeng 2022. 5. 10.
반응형

dd command를 이용하여 리눅스(Red Hat Enterprise Linux 8) 시스템 전체를 부팅 가능 USB로 복사한다.

dd는 data duplication에서 유래했지만, 매우 강력하기 때문에 디스크 파괴자 또는 데이터 파괴자라고 불리기도 한다. 왜냐하면 input과 output 순서를 바꿔서 사용할 경우에 데이터가 다 날아가기 때문이다.

 

 

Linux OS 시스템을 SSD 혹은 USB로 복사하는 경우는 다음과 같다.

  • 시스템 설정상태 및 패키지 버전의 관리 이유로 전체 백업
  • 시스템 해킹에 대비하는 복구 차원의 백업
  • 제품 양산시 SD card에 시스템 자체를 복제해야 할 경우

 

1. 환경구성

 

  • source_disk : SATA NAND Flash 59 GiB used for Linux
  • target_disk: USB available 114.6 GiB

 

2. dd command 사용

 

  • dd command는 "dd if=[source_disk] of=[target_disk] [옵션]"으로 구성된다. 여기에서 부팅 가능한 USB로의 Linux OS 시스템(MBR)을 복사하기 위해서는 bs=512 옵션을 사용한다.

 

1) 디스크 크기가 동일할 때

[root@localhost ~]# dd if=/dev/sda of=/dev/sdb bs=512 status=progress

 

 

2) 디스크 크기가 동일하지 않을 때 1)의 명령어를 사용한 경우에는 다음과 같은 에러가 발생한다.

GPT PMBR size mismatch (123731967 != 240328703) will be corrected by write.

 

3) 디스크의 크기가 다를 경우에는 아래의 명령어를 사용한다.

  • 여기에서 count는 source_disk의 End 끝부분 123729919에 1을 더한 값이다.
[root@localhost ~]# dd if=/dev/sda of=/dev/sdb bs=512 count=123729920 status=progress
63337071104 bytes (63 GB, 59 GiB) copied, 10046 s, 6.3 MB/s
123729920+0 records in
123729920+0 records out
63349719040 bytes (63 GB, 59 GiB) copied, 10064.4 s, 6.3 MB/s

 

source_disk
source_disk

 

target_disk
target_disk

 

 

4) 디스크 복사가 잘 이루어진 것을 확인한다.

[root@localhost ~]# fdisk -l
Disk /dev/sda: 59 GiB, 63350767616 bytes, 123731968 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CE1499BB-2BD6-483F-937D-9A621F46392D

Device			Start		End		Sectors		Size	Type
/dev/sda1		 2048	1230847		1228800		600M	EFI System
/dev/sda2	  1230848	3327999		2097152		  1G	Linux filesystem
/dev/sda3	  3328000 123729919	  120401920	   57.4G	Linux LVM

GPT PMBR size mismatch (123731967 != 240328703) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.
Disk /dev/sdb: 114.6 GiB, 123048296448 bytes, 240328704 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CE1499BB-2BD6-483F-937D-9A621F46392D

Device			Start		End		Sectors		Size	Type
/dev/sdb1		 2048	1230847		1228800		600M	EFI System
/dev/sdb2	  1230848	3327999		2097152		  1G	Linux filesystem
/dev/sdb3	  3328000 123729919	  120401920	   57.4G	Linux LVM

 

 

5) target_disk의 파티션 정보를 수정하기 위하여 source_disk의 파티션 정보를 저장한다.

[root@localhost ~]# sfdisk -d /dev/sda > partition_table.txt

 

 

6) partition_table.txt(파티션 정보)를 수정한다.

  • last-lba는 총 sectors에서 first-lba를 뺀 값이다. source_disk의 last-lba 값을 target_disk의 last-lba 값으로 수정한다.
  • source_disk의 last-lba는 123731968 - 34 = 123731934
  • target_disk의 last-lba는 240328704 - 34 = 240328670
[root@localhost ~]# vi partition_table.txt
label: gpt
label-id: CE1499BB-2BD6-483F-937D-9A621F46392D
device: /dev/sda
unit: sectors
first-lba: 34
last-lba: 123731934	// to be 240328670

/dev/sda1 : start = 2048, size= 1228800, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=7AC06DEC-8B8E-4407-8CFB-8A05D505113A, name="EFI System Partition"
/dev/sda2 : start = 1230848, size= 2097152, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A6525F47-4E52-4041-A109-07D4F314DA2F
/dev/sda3 : start = 3328000, size= 120401920, type=E6D6D379-F507-44C2-A23C-238F2A3DF928, uuid=0CFA3CFE-0585-41AE-BD69-13B90D7BC176

 

 

7) 수정된 파티션 정보를 target_disk에 overwrite한다.

[root@localhost ~]# sfdisk /dev/sdb < partition_table.txt
GPT PMBR size mismatch (123731967 != 240328703) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.
Checking that no-one is using this disk right now ... OK

Disk /dev/sdb: 114.6 GiB, 123048296448 bytes, 240328704 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CE1499BB-2BD6-483F-937D-9A621F46392D

Old situation:

Device       Start       End   Sectors  Size Type
/dev/sdb1     2048   1230847   1228800  600M EFI System
/dev/sdb2  1230848   3327999   2097152    1G Linux filesystem
/dev/sdb3  3328000 123729919 120401920 57.4G Linux LVM

>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Created a new GPT disklabel (GUID: CE1499BB-2BD6-483F-937D-9A621F46392D).
/dev/sdb1: Created a new partition 1 of type 'EFI System' and of size 600 MiB.
Partition #1 contains a vfat signature.
/dev/sdb2: Created a new partition 2 of type 'Linux filesystem' and of size 1 GiB.
Partition #2 contains a xfs signature.
/dev/sdb3: Created a new partition 3 of type 'Linux LVM' and of size 57.4 GiB.
Partition #3 contains a LVM2_member signature.
/dev/sdb4: Done.

New situation:
Disklabel type: gpt
Disk identifier: CE1499BB-2BD6-483F-937D-9A621F46392D

Device       Start       End   Sectors  Size Type
/dev/sdb1     2048   1230847   1228800  600M EFI System
/dev/sdb2  1230848   3327999   2097152    1G Linux filesystem
/dev/sdb3  3328000 123729919 120401920 57.4G Linux LVM

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

 

 

8) target_disk에 overwrite한 파티션 정보를 반영한다.

  • BIOS: grub2-mkconfig -o /boot/grub2/grub.cfg
  • EFI: grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
[root@localhost ~]# dracut --regenerate-all -f && grub2-mkconfig -o /boot/grub2/grub.cfg && grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
Generating grub configuration file ...
  WARNING: Not using device /dev/sdb3 for PV zWczRQ-na3U-6XmT-weAC-Cc8y-Kcqu-HTRVqh.
  WARNING: PV zWczRQ-na3U-6XmT-weAC-Cc8y-Kcqu-HTRVqh prefers device /dev/sda3 because device is used by LV.
  WARNING: Not using device /dev/sdb3 for PV zWczRQ-na3U-6XmT-weAC-Cc8y-Kcqu-HTRVqh.
  WARNING: PV zWczRQ-na3U-6XmT-weAC-Cc8y-Kcqu-HTRVqh prefers device /dev/sda3 because device is used by LV.
  WARNING: Not using device /dev/sdb3 for PV zWczRQ-na3U-6XmT-weAC-Cc8y-Kcqu-HTRVqh.
  WARNING: PV zWczRQ-na3U-6XmT-weAC-Cc8y-Kcqu-HTRVqh prefers device /dev/sda3 because device is used by LV.
  WARNING: Not using device /dev/sdb3 for PV zWczRQ-na3U-6XmT-weAC-Cc8y-Kcqu-HTRVqh.
  WARNING: PV zWczRQ-na3U-6XmT-weAC-Cc8y-Kcqu-HTRVqh prefers device /dev/sda3 because device is used by LV.
Adding boot menu entry for EFI firmware configuration
done
반응형

댓글