gzip 압축을 사용하여 SSH를 통해 Raspberry Pi 백업

gzip 압축을 사용하여 SSH를 통해 Raspberry Pi 백업

gzip 압축을 사용하여 SSH를 통해 다른 Linux 시스템에서 Raspberry Pi "라이브"를 백업하고 있습니다. 나는 다음 스크립트를 사용합니다.

#!/bin/bash
dt=`date +%y%m%d`
ssh [email protected] "sudo dd if=/dev/mmcblk0 bs=1M | gzip -" | dd of=./pibackup-$dt.gz

잘 작동하지만 결과 파일은 26GB로 너무 많은 것 같습니다. 유휴 클러스터가 아닌 시스템의 내용만 백업하고 싶습니다. dd가 유휴 클러스터를 포함하여 전체 항목을 백업한다는 것을 알고 있지만 gzip을 사용하면 결과 파일의 크기를 줄일 수 있다고 생각했습니다.

따라서 df -h를 입력하면 내 시스템을 살펴보세요.

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G  3.1G   24G  12% /
devtmpfs        459M     0  459M   0% /dev
tmpfs           464M     0  464M   0% /dev/shm
tmpfs           464M   49M  415M  11% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           464M     0  464M   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   52M  201M  21% /boot
tmpfs            93M     0   93M   0% /run/user/1000
/dev/sda1       932G  184G  749G  20% /media/HDD

답변1

"콜드" 백업은 "라이브" 백업보다 훨씬 더 안전합니다.

실행 중인 PI에서 다음 명령을 실행합니다.

cd $HOME; dd if=/dev/zero of=zero bs=8M; rm zero

사용 가능한 모든 공간에 0을 기록하여 높은 압축률을 제공합니다. 그런 다음 Raspberry Pi의 microSD를 우분투를 실행하는 데스크탑과 같은 다른 시스템에 놓고 다음을 실행하십시오.

fdisk -l

microSD를 /dev/sdb로 처리하고 다음 명령은 다음을 사용하여 전체 SD를 압축합니다.

gzip -c /dev/sdb > /backup/raspberry-pi.gz

복원하려면 다음 명령을 실행하십시오.

gzip -cd /backup/raspberry-pi.gz > /dev/sdb

위 과정을 시도하기 전에 전체 백업을 해두는 것이 좋습니다.

답변2

의견에서 제안한 대로 Pi 백업을 ​​위한 다양한 파일 시스템 수준 옵션이 있습니다. 이렇게 하면 가상 파일 시스템 /proc/sys.

  1. 당신은 그것을 사용할 수 있습니다 rsync. 이렇게 하면 단일 이미지 파일이 아닌 백업 미디어에 파일 시스템 복사본이 제공됩니다.

    rsync -avzHP --exclude '/proc/' --exclude '/sys/' root@pi:/ /backup/pi.$(date +'%Y%m%d')
    

    --fake-super로컬 계정이 루트가 아닌 경우 백업 및 복원 옵션을 포함해야 할 수도 있습니다 . (원격 소유권 세부 정보를 저장하지만 실제로 로컬 백업에 적용할 수는 없습니다.)

    이 경로를 선택하기로 결정했다면 rsnapshot추가 디스크 공간을 너무 많이 사용하지 않고 GFS 백업도 고려하는 것이 좋습니다.

  2. tar또는 pax다른 보관 도구를 사용할 수 있습니다 . 그러면 압축된 이미지가 제공됩니다.

    ssh root@pi 'cd / && tar --exclude '/proc/' --exclude '/sys/' -czvf - .' > /path/to/backup.pi.$(date +'%Y%m%d').tgz
    
  3. 사용할 수 있는 다른 옵션도 있습니다. 예를 들어 duplicity진지하게 사용하지 않았으므로 사용 방법에 대한 예를 제시할 자격이 없다고 생각합니다.


파일 시스템 백업이 있으면 최소 부팅 이미지를 복원할 수도 있습니다.

내 Pi에는 다음 구조가 있습니다(파티션 3은 무시합니다. 파티션이 있을 수도 있지만 아마도 파일 시스템의 일부로 백업되었을 것입니다).

fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 29.7 GiB, 31914983424 bytes, 62333952 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: 0x42913321

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1         8192   137215   129024   63M  c W95 FAT32 (LBA)
/dev/mmcblk0p2       137216  8388607  8251392    4G 83 Linux

/boot디스크 시작부터 파티션 1()의 시작까지 모든 것이 필요합니다 . 이 특정 디스플레이에서 섹터는 512바이트 블록이지만 4KiB 블록(SSD 블록 크기)으로 읽어야 하므로 모든 숫자를 8로 나눕니다.

# Copy the boot segment from the beginning of the disk
dd bs=4k count=$((8192/8)) if=/dev/mmcblk0 | gzip >img0.gz

/dev/mmbclk0다음 명령을 사용하여 저장된 세그먼트를 SSD 카드에 복원할 수 있습니다. 대상 장치를 영구적으로 덮어쓰게 되므로, 사용하기 전에 여러 번 확인하시기 바랍니다.이 예를 맹목적으로 복사하지 마십시오:

zcat img0.gz | dd bs=4k iflag=fullblock of=/dev/mmcblk0
partprobe /dev/mmcblk0

답변3

다음은 (간단한) dd 기반 Raspberry Pi SD 카드 이미지 백업 스크립트입니다(다른 컴퓨터에서 실행).

#!/bin/sh

in=$1
out=$2

echo "Copying . . ."
time -p dd if=$in of=$out bs=4M status=progress

echo "Checking Source . . ."
set $(md5sum $in)
sum_in=$1
echo $sum_in

echo "Checking Destination . . ."
set $(md5sum $out)
sum_out=$1
echo $sum_out

if [ $sum_in = $sum_out ]
then
    echo "Compressing . . . "
    xz -6 --threads=2 --verbose $out && echo "DONE"
else
    echo "Checksum mismatch!"
fi

예를 들어 sd-verify-compress로 저장하세요.

실행 가능하게 만드세요:

$ chmod +x sd-verify-compress

실행해 보세요(예:).

$ ./sd-verify-compress /dev/sdx bookworm64

lsblk를 사용하여 /dev/sdx 대신 무엇을 사용할지 알아보세요.

$ lsblk -fmp

생성되는 파일은 다음과 같습니다.

-rw-r--r-- 1 pi pi 2.8G Nov 13 12:38 bookworm64.xz

내 SD 카드는 32GB입니다.

관련 정보