리눅스 하드 디스크 복제


리눅스 하드 디스크 복제 우분투 환경에서 dd 명령어 등일 사용하여 하드디스크 복사 방법에 대해 설명드립니다.
용량이 다른 디스크로 복사할 경우 추가적으로 sfdisk 명령어를 이용하여 파티션 테이블을 수정하는 방법에 대해서도 함께 설명드립니다.

Logical Volumn Manager 으로 구성된 디스크도 한번에 복사 할 수도 있습니다. LVM과 관련된 자세한 내용은 아래의 글을 참고해 주시기 바랍니다.

디스크 데이터가 유실될 가능성이 있습니다. 주의하여 실행해 주시기 바랍니다.

1. 디스크 용량이 동일할 경우

다음 이미지 처럼, 디스크 용량이 동일할 경우 입니다.

/dev/vdb 와 /dev/vdd 의 sector와 byte 용량을 확인하면 동일한 크기임을 알 수 있습니다. 디스크 용량이 정확하게 일치해야 합니다.

이 경우 다음 명령어로 간단하게 파티션 정보와 데이터등 바로 디스크를 복사 할 수 있습니다.

# dd if=/dev/vdb of=/dev/vdd status=progress

하드 디스크 외에도 파티션을 생성 한 뒤에 /dev/vdb1 과 /dev/vdd1 를 지정하면서 특정 파티션만 복사를 할 수도 있습니다.

2. 디스크 용량이 다를 경우

용량이 다를 경우 dd 명령어로 데이터를 복사 한 뒤에 파티션 정보를 수정해야 합니다.

HDD 디스크를 /dev/vdb 라하고, 용량이 적은 SSD를 /dev/vdc라고 정의하여, HDD 디스크 보다 용량이 적은 SSD 으로 디스크를 복사하는 시나리오에 대해 설명드리도록 하겠습니다.

2-1. 환경

작업을 수행하기전 /dev/vdb 파티션 전체 크기를 /dev/vdc 용량보다 줄인 뒤에, /dev/vdc 으로 복사하도록 해야 합니다. 아래의 명령어로 디스크 정보를 확인합니다.

fdisk -l [디스크경로]

/dev/vdb 정보는 위와 같고, /dev/vdc 디스크 정보는 아래와 같습니다.

2-2. 데이터 복사

2개의 디스크 용량 차이가 나기 때문에, 전체 HDD sector 데이터를 SSD 으로 복사할 수 없습니다. 따라서 데이터가 존재하는 sector 만큼만 SSD으로 복사해야 합니다. 정확한 계산이 필요합니다.

이미지에서 보시면 /dev/vdb1 테이블의 sector가 2048 위치부터 시작하고, 마지막 /dev/vdb3 테이블이 13635583 까지입니다.
/dev/vdb1 이전의 sector도 모두 복사해야 하기 때문에 총 13635583 + 1인 13635584 개의 sector 를 복사해야 합니다.

sector의 기본크기는 512 Byte으로 디스크 복사는 아래의 명령어로 수행할 수 있습니다.

# dd if=/dev/vdb of=/dev/vdc bs=512 count=13635584 status=progress

복사의 속도를 높이기 위해서 위의 명령어를 아래와 같이 수정해서, 사용가능합니다.

bs : 512 * 8 = 4096, count : 13635584÷8 = 1704448

# dd if=/dev/vdb of=/dev/vdc bs=4096 count=1704448 status=progress

2-3. 파티션 테이블 수정

dd 명령어를 실행 할 경우, 기존 디스크의 파티션 테이블이 그대로 복사가됩니다.
전체 디스크 용량이 다르기 때문에 /dev/vdc 디스크에 맞게 파티션 테이블을 수정합니다.

먼저 아래의 명령어를 이용하여, /dev/vdb 파티션 테이블을 저장합니다.

# sfdisk -d /dev/vdb > part_table.txt

저장된 part_table.txt 내용을 확인하면 last-lba 라는 값이 있습니다. 이 값은 아래와 같이 계산되어집니다.

last-lba : (/dev/vdb의 20971520 sectors) – (first-lba, 34) = 20971486

따라서, /dev/vdc 디스크 정보에 맞게 수정하여 저장합니다.

수정후 last-lba : (/dev/vdc의 16777216 sectors) – (first-lba, 34) = 16777182

그리고 마지막으로 아래의 명령어를 실행하면, /dev/vdc 디스크에 파티션 정보가 적용되게 됩니다.

# sfdisk /dev/vdc < part_table.txt

기존 파티션 테이블 정보가 그대로 복사되었지만, sfdisk 명령어 실행후 디스크 및 파티션 정보가 /dev/vdc 환경에 맞게 적용되게 됩니다.

리눅스 하드 디스크 복제 관한 내용을 설명드렸습니다. sfdisk 와 관련된 보다 자세한 명령어는 아래의 페이지를 참고해 주시기 바랍니다.

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)