메모리 카드(부트 레코드 및 시스템 파티션 포함)에서 활용도가 낮은 데이터를 더 작은 용량의 메모리 카드로 마이그레이션(시스템 디스크 기능 유지)

메모리 카드(부트 레코드 및 시스템 파티션 포함)에서 활용도가 낮은 데이터를 더 작은 용량의 메모리 카드로 마이그레이션(시스템 디스크 기능 유지)

최근에 나는 제목과 같은 요구에 직면했습니다. NVIDIA Jetson Nano의 64GB 시스템 microSD 카드(TF 카드)가 있으며 여기에는 14개의 GPT 파티션이 포함되어 있으며 그 중 13개는 매우 작고 모두 1MB 미만이며 하나의 파티션은 대용량으로 총 용량은 약 32GB. 새로운 TF 카드 시스템 디스크를 만들기 위해 위의 TF 카드에서 얻은 이미지 파일을 백업하기 위해 Linux에서 dd 명령을 사용할 때 다음이 발견됩니다.

1. 새 TF 카드가 32GB가 되는 것은 불가능합니다. 이미지 파일이 64GB이기 때문에 후반부에 파티션이 없지만 GPT 백업 파티션 테이블(Secondary Header)이 마지막 섹터에 존재하기 때문입니다. 원본 64GB TF 카드(마지막 섹터)는 이미지 파일의 끝이며 GPT 백업 파티션 테이블이 손실되어 새 시스템 디스크 생성이 실패합니다.

2. 새 64GB TF 카드를 사용하더라도 새 카드의 용량이 원래 카드의 용량보다 약간 작기 때문에 위와 동일한 문제가 발생하는 경우가 있습니다.

3. 백업 이미지를 기반으로 새로운 시스템 디스크를 만들기 위해 새로운 128GB TF 카드를 사용해야 했습니다.

64GB TF 카드를 사용하여 새 시스템 디스크를 생성할 수 있으려면 제 방법은 대략 32GB TF 카드에 원래 64GB TF 카드와 동일한 파티션 테이블을 만들고 원래 64GB 카드 파티션을 분할하는 것입니다. 32GB 카드의 내용을 32GB 카드에 복사하고 32GB 카드에서 얻은 백업 이미지를 원본으로 사용하여 새 시스템 디스크를 만듭니다. 전체 프로세스는 5단계로 나뉘며 아래에서 자세히 설명합니다.

1. fdisk를 사용하여 32GB 카드와 원래 64GB 카드의 정보 보기

두 TF 카드를 Linux PC에 연결하고 터미널에서 실행

sudo fdisk -l

시스템에 연결된 모든 디스크의 정보를 나열하고 용량에 따라 둘 다의 장치 설명 파일을 결정할 수 있습니다. 이 예에서 32GB TF 카드의 장치 설명 파일은 /dev/sdb이고 64GB TF 카드의 장치 설명 파일은 /dev/sdc입니다. 구현하다

sudo fdisk -l /dev/sdb

아래 그림과 같이 32GB TF 카드의 정보만 봅니다.

1이것은 빈 카드임을 알 수 있습니다. 구현하다

sudo fdisk -l /dev/sdc

아래 그림과 같이 64GB TF 카드의 정보만 확인하십시오.

214개의 GPT 파티션이 포함되어 있으며 그 중 /dev/sdc1만이 대용량 파티션임을 알 수 있습니다.

2. gparted를 사용하여 원래 64GB 카드에서 가장 큰 파티션 축소

이전 단계에서 우리는 /dev/sdc1의 용량이 29.7GiB로 일부 32GB TF 카드의 총 용량을 초과한다는 것을 알고 있습니다. 리더의 경우 용량이 부족한 32GB TF 카드 또는 원래 64GB 카드의 /dev/sdc1 파티션이 더 큽니다(예: 48GiB, 그 안의 모든 파일이 차지하는 공간은 여전히 ​​29GiB 미만). /dev /sdc1 파티션을 29GiB로 축소하기 위해 gparted. 구현하다

sudo apt install gparted
sudo umount /dev/sdc1
sudo gparted

gparted를 설치하고 /dev/sdc1 파티션을 마운트 해제하고(그렇지 않으면 확장만 가능하고 축소는 불가능) gparted를 시작합니다. gparted는 직관적인 조작이 가능한 GUI 프로그램으로 결과는 다음과 같습니다.

삼
gparted는 주로 두 단계를 수행합니다:
1. resize2fs를 호출하여 파일 시스템의 크기를 29.71GiB에서 29.00GiB로 조정합니다.
2. 파티션 용량을 29.00GiB로 조정합니다. 첫 번째 단계는 파일 할당 테이블을 변경하고 파티션에서 일부 파일의 배포를 조정할 수 있습니다. 즉, 콘텐츠를 29.00GiB와 29.71GiB 사이에서 앞으로 이동합니다. 두 번째 단계는 파티션 테이블을 조작하여 /dev/sdc1의 용량을 29.00GiB로 설정하는 것입니다. 이 단계는 fdisk 또는 gdisk에서 수동으로 수행할 수 있습니다(다음 단계에서 설명).

4
위의 그림은 fdisk를 사용하여 64GB 카드의 파티션 용량을 줄인 후의 파티션을 나열한 것으로, 그림 2와 비교하여 실제로 /dev/sdc1의 크기가 변경된 것을 확인할 수 있습니다.

3. gdisk를 사용하여 32GB 카드에 원래 64GB 카드와 동일한 파티션 테이블 생성

gdisk 설치

sudo apt-get install gdisk

gdisk 설치 후 실행

sudo gdisk /dev/sdc

/dev/sdc에서 gdisk를 대화식으로 실행하면 작업 과정은 아래와 같습니다. 테이블이 원래 카드 끝의 64GB에서 새 카드 끝의 32GB로 조정되었습니다.)

5
위의 과정을 거친 후 재부팅을 합니다.

sudo reboot

운영 체제가 새 파티션 테이블을 인식하도록 합니다. 그런 다음 fdisk를 사용하여 /dev/sdb를 다시 보고 그림 4와 비교합니다. 동일한 GPT 파티션 테이블이 64GB 카드 /dev/sdc에서와 같이 32GB 카드 /dev/sdb에 설정된 것을 볼 수 있습니다. 아래 그림과 같이 파티션 용량이 줄어듭니다.

6

4. dd를 사용하여 원래 64GB 카드의 내용을 파티션별로 32GB 카드 파티션에 복사합니다.

다음 14개 명령을 실행하여 원본 64GB 카드의 모든 파티션을 파티션별로 파일로 백업합니다.

sudo dd if=/dev/sdc1 status=progress | gzip -c > 1.img.gz
…
sudo dd if=/dev/sdc14 status=progress | gzip -c > 14.img.gz

운영 프로세스는 다음과 같습니다

7그런 다음 다음 14개 명령을 실행하여 백업 파일의 데이터를 32GB 카드의 해당 파티션으로 복원합니다.

gunzip -c 1.img.gz | sudo dd of=/dev/sdb1 status=progress
…
gunzip -c 1.img.gz | sudo dd of=/dev/sdb1 status=progress

운영 프로세스는 다음과 같습니다

8그런 다음 partprobe를 실행하거나 재부팅합니다. 그래서 새로운 32GB Jetson Nano 시스템 디스크를 만들었습니다.

5. 32GB 카드를 기준으로 백업 이미지를 가져와 새 시스템 디스크를 만드는 데 사용합니다.

다음으로 우리는 실행할 수 있습니다

sudo dd if=/dev/sdb status=progress | gzip -c > nano_backup.img.gz

32GB 시스템 디스크를 nano_backup.img.gz 파일로 백업한 후 실행

gunzip -c nano_backup.img.gz | sudo dd of=/dev/sdd status=progress

더 많은 시스템 디스크를 만들기 위해 백업 파일에서 향후 TF 카드로 복원합니다. 이 시점에서 우리는 128GB TF 카드를 사용하는 대신 64GB TF 카드를 사용할 수 있습니다.

추천

출처blog.csdn.net/weixin_44355653/article/details/131847187