다음은 64기가 sdcard메모리의 os 이미지를 백업하는 방법을 정리한 것입니다.

리눅스에서 Jetson nano의 64기가 sdcard를 인식시키고 df -h 명령을 하면 다음과 같이 표시됨

df -h
Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sda1        30G   23G  5.1G  82% /media/khy2/d560620b-561b-4021-b9ab-ac421ab6e1cc

dd명령으로 sda의 이미지를 jetson.img 파일로 복사한다.

sudo dd if=/dev/sda of=jetson.img status=progress

생성된 jetson.img의 파일 권한을 변경하기 위해 chown 명령어 사용

sudo chown {사용자이름}.{사용자이름} jetson.img

이제 이 이미지를 마운트 하기 위해 losetup -f 명령으로 마운트 가능한 경로(loopX) 확인

$ losetup -f
/dev/loopX

이 경로로 이미지 마운트 하고 gparted로 보기

sudo losetup /dev/loopX jetson.img
sudo partprobe /dev/loopX
sudo gparted /dev/loopX

그러면 아래와 같이 표시됨 (Unallocated 영역을 여기서 삭제할 수 없음)

Screenshot from 2022-09-04 23-11-52.png

이제 다시 마운트 해제

sudo losetup -d /dev/loopX

fdisk -l 명령으로 img의 섹터 영역 확인

fdisk -l jetson.img
GPT PMBR size mismatch (62333951 != 125106175) will be corrected by write.
Disk jetson_r1mini_melodic_220904.img: 59.67 GiB, 64054362112 bytes, 125106176 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: C066C102-48BC-423D-8133-E2F90E371708

Device                             Start      End  Sectors  Size Type
jetson_r1mini_melodic_220904.img1  28672 62332927 62304256 29.7G Linux filesystem
jetson_r1mini_melodic_220904.img2   2048     2303      256  128K Linux filesystem
jetson_r1mini_melodic_220904.img3   4096     4991      896  448K Linux filesystem
jetson_r1mini_melodic_220904.img4   6144     7295     1152  576K Linux filesystem
jetson_r1mini_melodic_220904.img5   8192     8319      128   64K Linux filesystem
jetson_r1mini_melodic_220904.img6  10240    10623      384  192K Linux filesystem
jetson_r1mini_melodic_220904.img7  12288    13055      768  384K Linux filesystem
jetson_r1mini_melodic_220904.img8  14336    14463      128   64K Linux filesystem
jetson_r1mini_melodic_220904.img9  16384    17279      896  448K Linux filesystem
jetson_r1mini_melodic_220904.img10 18432    19327      896  448K Linux filesystem
jetson_r1mini_melodic_220904.img11 20480    22015     1536  768K Linux filesystem
jetson_r1mini_melodic_220904.img12 22528    22655      128   64K Linux filesystem
jetson_r1mini_melodic_220904.img13 24576    24735      160   80K Linux filesystem
jetson_r1mini_melodic_220904.img14 26624    26879      256  128K Linux filesystem

Partition table entries are not in disk order.

여기서 유효한 파일시스템의 끝지점은 62332927 이므로 truncate 명령으로 (62332927 + 1)*512 바이트 만큼을 남기고 삭제할 수 있다.

단, gpt 파일 시스템의 경우 디스크 영역에 대한 정보를 처음과 끝부분에 저장하므로 파티션의 끝에서 삭제하면 파일시스템이 손상된 것으로 인식된다.

GPT includes both a main partition table at the start of the disk and a backup partition table at the end of the disk. (Literally the end of the disk -- the final few sectors of the disk.) Thus, when you truncated the disk image, you removed the backup partition table. What's more, some of the pointers and metadata in the main partition table became invalid, since they were pointing past the end of the (virtual) disk. That's most of what the v command in gdisk was complaining about.