私は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
利用可能なすべてのスペースにゼロを記録して、高い圧縮率を提供します。次に、Raspberry PiのmicroSDをUbuntuを実行しているデスクトップなどの他のシステムに置き、次を実行します.
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
。
あなたはそれを使用することができます
rsync
。これにより、単一のイメージファイルではなくバックアップメディアにファイルシステムのコピーが提供されます。rsync -avzHP --exclude '/proc/' --exclude '/sys/' root@pi:/ /backup/pi.$(date +'%Y%m%d')
--fake-super
ローカルアカウントがルートでない場合は、バックアップと復元のオプションを含める必要があります。 (リモート所有権の詳細を保存しますが、実際にはローカルバックアップには適用できません。)このパスを選択することにした場合は、余分な
rsnapshot
ディスク容量をあまり使用せずにGFSバックアップを検討することをお勧めします。tar
またはpax
他のアーカイブツールを使用できます。これにより、圧縮された画像が提供されます。ssh root@pi 'cd / && tar --exclude '/proc/' --exclude '/sys/' -czvf - .' > /path/to/backup.pi.$(date +'%Y%m%d').tgz
利用可能な他のオプションもあります。たとえば、
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です。