저는 rsync를 사용하여 Raspberry Pi에서 실행되는 Ubuntu를 백업하고 있습니다. 어쨌든, 시작 후에만 콘텐츠가 생성되는 모든 공통 디렉터리를 제외했습니다.
rsync는 파티션 형식을 쓰고 장치에 장착된 백업 이미지를 반복하며 연결된 외부 USB 드라이브에 이미지를 씁니다. USB 저장 드라이브의 데이터는 소스 SD 카드의 데이터보다 훨씬 더 많은 공간을 차지합니다. 약 5325MB 대 3881MB.
디버깅을 시도해보세요
소스에 없는 대상에 알 수 없는 추가 파일이 생성되었는지 또는 소스에 있는 파일과 비교하여 대상에서 동일한 파일이 점점 커지고 있는지 다시 확인하기 위해 이 rsync 명령을 실행했습니다.
sudo rsync -nrlpgoDv --delete --exclude-from='/home/ubuntu/exclude-list.txt' / /mnt/dst_root/
그러나 파일 수나 소스와 대상에서 차지하는 크기 측면에서 소스와 대상 사이에는 큰 차이가 없다고 생각합니다.
내 질문
왜 이런거야? 섹터 크기와 관련이 있나요?
내 소스 Ubuntu OS를 사용하면 fdisk -l
다음이 있습니다.
Disk /dev/mmcblk0: 29.54 GiB, 31719424000 bytes, 61952000 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: dos
Disk identifier: 0x12345678
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
/dev/mmcblk0p2 526336 61951966 61425631 29.3G 83 Linux
외부 저장소 드라이브의 이미지 파일에 백업을 씁니다. 백업 이미지를 다음과 같이 분할합니다.
echo "label: dos" | sfdisk "${IMGFILE}" > /dev/null
sfdisk "${IMGFILE}" <<EOF > /dev/null
,256MiB,c
,+,83
EOF
그런 다음 다음과 같은 스크립트로 해당 백업 이미지 파일의 루트 파티션을 포맷합니다.
mkfs.ext4 -q -b 4096 "${LOOP}p2" > /dev/null
이제 백업 이미지가 연결된 루프 장치의 fdisk는 다음을 제공합니다.
Disk /dev/loop6: 5.62 GiB, 6035603456 bytes, 11788288 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: dos
Disk identifier: 0x12345678
Device Boot Start End Sectors Size Id Type
/dev/loop6p1 2048 526335 524288 256M c W95 FAT32 (LBA)
/dev/loop6p2 526336 11788287 11261952 5.4G 83 Linux
fdisk -l
백업 이미지가 저장된 외부 저장소 드라이브에서:
Disk /dev/sda: 3.64 TiB, 4000752599040 bytes, 7813969920 sectors
Disk model: My Passport 2627
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: B5B6FD62-945C-466D-7T49-YU5D4RRE7087
Device Start End Sectors Size Type
/dev/sda1 2048 7813967871 7813965824 3.6T Linux filesystem
섹터 크기와 I/O 크기의 차이로 인해 데이터가 USB 드라이브에서 더 많은 공간을 차지합니까?
resize2fs
또한 내 백업 스크립트는 (파일 시스템을 마운트 해제한 후)을 사용하여 백업 이미지의 루트 파일 시스템을 축소하려고 시도합니다. 오류는 없지만 resize2fs
백업 루트 파일 시스템의 여유 공간을 제거하는 작업이 매우 불량합니다. 모든 공백을 제거하지 않으며 때로는 아무것도 제거하지 않는 경우도 있습니다. 어쩌면 이것은 섹터 크기와도 관련이 있습니까?
고쳐 쓰다
몇 가지 조사 결과, 이 문제는 - snap과 관련이 있을 수 있다고 생각됩니다. 내 우분투 시스템에 설치되어 있습니다. 읽어보면 스냅 애플리케이션이 압축된 squashfs 파일 시스템에 저장되어 있는 것으로 보입니다. 어쩌면 rsync할 때 대상 ext4 파일 시스템에서 더 많은 공간을 차지할까요?
어떤 제안이라도 대단히 감사하겠습니다!
답변1
답변
저는 rsync를 사용하여 Pi에서 Ubuntu를 실행하는 SD 카드의 전체 시스템 백업을 수행하고 SD 카드와 동일한 부팅(fat32) 및 루트(ext4) 파일 시스템으로 파티션을 나누고 포맷했습니다. 내 rsync 명령은 내용을 복사할 뿐만 아니라 /var/lib/snapd
복사도 했습니다 /snap
. 이는 불필요한 것으로 나타났습니다.
Snap 애플리케이션은 squashfs 이미지로 존재하지만 /var/lib/snapd
시작 시 읽기 전용 파일 시스템으로 dir에 마운트되기도 합니다./snap
결국 내 백업 이미지의 rootfs는 실행 중인 Ubuntu OS의 rootfs보다 더 많은 공간을 차지하지 않습니다. 문제는 df command
점유된 공간을 보고하는 데 사용하고 있다는 것입니다. df command
이와 같이 장착된 물체의 크기를 포함하지 않기 때문에 이는 잘못된 선택입니다 du command
.
이것은 df command
실행 중인 Ubuntu Pi OS에서 발생합니다. rootfs가 3885MB를 차지하고 있다고 보고됩니다.
ubuntu@ubuntu:~$ df -BMB
Filesystem 1MB-blocks Used Available Use% Mounted on
tmpfs 398MB 5MB 393MB 2% /run
/dev/mmcblk0p2 31312MB 3885MB 26120MB 13% /
tmpfs 1988MB 0MB 1988MB 0% /dev/shm
tmpfs 6MB 0MB 6MB 0% /run/lock
/dev/mmcblk0p1 265MB 155MB 110MB 59% /boot/firmware
/dev/sda1 3936879MB 1386199MB 2350626MB 38% /media/4TB1
이제 du command
내 Pi에서 Ubuntu Pi OS를 실행하고 있으므로 rootfs에 사용된 공간이 4.7GiB(5046MB)라고 보고됩니다. 이는 /snap
내 백업 이미지에서 rootfs가 차지하는 공간과 거의 같습니다. .
ubuntu@ubuntu:/usr/local/bin$ sudo du -hs /
du: cannot access '/proc/6297/task/6297/fd/4': No such file or directory
du: cannot access '/proc/6297/task/6297/fdinfo/4': No such file or directory
du: cannot access '/proc/6297/fd/3': No such file or directory
du: cannot access '/proc/6297/fdinfo/3': No such file or directory
4.7G /
대조적으로, Pi에서 SD 카드를 꺼냈을 때... 이것은 du command
내 노트북에 연결된 SD 카드에서 rootfs를 실행한 결과입니다.
[flex@flex ~]$ sudo du -hs /media/writable/
3.3G /media/writable/
이는 Pi에서 실행되는 Ubuntu 운영 체제가 없기 때문에 스냅 응용 프로그램이 더 이상 sd 카드의 /snap 디렉터리에 설치되지 않기 때문입니다.