RaspberryPiバックアップイメージとバッチ書き込み

Raspberry Pi 4B +バックアップイメージとバッチ書き込み

オリジナル:https//www.cooooder.com/archives/20200114

この記事を書く前に、自分でいくつかのオープンソーススクリプトを見つけましたが、実際のパラメーターがスクリプト設定と一致せず、実行に失敗したためである可能性があるため、コマンドを段階的に調整し、同じ問題について、以下の手順を1つずつ実行して、いくつかの複雑なコマンドを説明し、それに応じてマークを付けてください。SDカードのバックアップミラーリングも正常に実装できると思います。

0.準備

周囲
  • ラズベリーパイ4B +
  • Raspberry Pi SDカード(Raspbianバスターシステムとともにインストール)
  • SDカードリーダー
  • UbuntuPC環境
  • VMware仮想マシン(Ubuntuデスクトップオペレーティングシステムをインストール)
準備ができました
  1. VMwareのインストール、Ubuntuのインストールプロセスを省略します
  2. SDカードをカードリーダーに挿入し、コンピューターのUSBインターフェイスを挿入します
  3. SDカードをマウントすると、一般的な仮想マシンが自動的に認識してマウントします
  4. SDカードが自動的にマウントされない場合は、手動でマウントできます。[仮想マシン]> [リムーバブルデバイス]> [接続]を選択します。
  5. 正常にマウントすると、2つのフォルダが表示されます
    ubuntu
リソース

すべての準備が整いました。バックアップを開始してください

1.必要なツールをインストールします

partedは、ハードディスクのパーティション分割またはパーティションのサイズ変更のためのツールです

sudo apt-get install -y dosfstools dump parted kpartx

2.作業ディレクトリを作成します

mkdir ~/backupimg
cd ~/backupimg

3. Uidとgidは、システムの現在のユーザー名に従って決定されます

uid=edward
gid=edward

4.作成されたイメージIMGのサイズを決定します

ここで画像のサイズを見積もります(1.2G + 53M)。安全上の理由から、1.5G(1600M)の空白の画像IMGファイルを作成します。

# 查看SD卡已用空间大小,从而确定待备份的镜像IMG大小
df -h
# Filesystem   Size    Used   Avail   Use%   Mounted on
# /dev/sdb1    253M    53M    200M    21%    /media/edward/boot
# /dev/sdb2    15G     1.2G   13G     9%     /media/edward/rootfs

5.空白の画像IMGを作成します

# 大小1600M
sudo dd if=/dev/zero of=raspberrypi.img bs=1M count=1600

6.画像サイズを確認します

画像ファイルのサイズを確認します。512バイトの整数倍である必要があります。そうでない場合は、手順5の操作でエラーになります。

ls -l raspberrypi.img
# -rw-r--r-- 1 root root 1677721600 Jan 13 19:29 raspberrypi.img
# 1677721600 = 1024 * 1024 * 1600

7.パーティションテーブルを表示します

イメージファイルは、bootfsおよびrootfsとしてパーティション分割する必要があります(bootfsはFAT32タイプで、rootfsはext4タイプです)

# 执行sudo fdisk -l ,查看分区表,确定bootfs扇区的起始,获取三个后面需要用到的参数值:8192,532479,532480
sudo fdisk -l
# Device      Start       End     Sectors    Size   Type
# /dev/sdb1    8192    532479      524288    256M   W95 FAT32(LBA)
# /dev/sdb2  532480  31116287    30583808   14.6G   Linux

ここに画像の説明を挿入します

8.ファイルパーティションをミラーリングします

# mklabel msdos:定义分区表格式,msdos不支持2TB以上容量的磁盘,大于2TB的磁盘选gpt分区表格式
# mkpart primary start end:primary指分区类型为主分区
# 这里的值需要手动执行步骤7,来设定
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 532479s
sudo parted raspberrypi.img --script -- mkpart primary ext4 532480s -1

9.パーティションが成功したかどうかを確認します

sudo parted raspberrypi.img

# 在(parted)后面输入print free

# Number  Start   End     Size    Type     File system  Flags
#        16.4kB  4194kB  4178kB           Free Space
# 1      4194kB  273MB   268MB   primary               lba
# 2      273MB   1677MB  1404MB  primary
#        1677MB  1678MB  1049kB           Free Space

# 输入quit退出

10. IMGファイルをミラーリングし、ループデバイスを関連付けます

イメージファイルをシステムにマウントするには、ループデバイスを使用してファイルをシステムにマウントする必要があります

sudo losetup -f --show raspberrypi.img
# 注意这里的输出 /dev/loop6

# 这里包括后面的loop6根据上一步命令获取,实际使用要根据实际获取的值进行替换
sudo kpartx -va /dev/loop6
# 查询挂载位置
ls /dev/mapper/loop6p*
# /dev/mapper/loop6p1  /dev/mapper/loop6p2
# loop6p1对应的是img文件分区上的 /boot,loop6p2对应的是 /root

11.ミラーIMG形式

sudo mkfs.vfat -n boot /dev/mapper/loop6p1
sudo mkfs.ext4 -L rootfs /dev/mapper/loop6p2

img

12.ループデバイスをシステムにマウントします

mkdir tgt_boot tgt_Root
sudo mount -t vfat -o uid=${uid},gid=${gid},umask=0000 /dev/mapper/loop6p1 ./tgt_boot/
sudo mount -t ext4 /dev/mapper/loop6p2 ./tgt_Root/

13.バックアップ:バックアップブート

sudo cp -rfp /media/${uid}/boot/* ./tgt_boot/

14.バックアップ:バックアップルート

# 设置权限,并把文件夹清空
sudo chmod 777 tgt_Root
sudo chown ${uid}.${uid} tgt_Root
sudo rm -rf ./tgt_Root/*
cd tgt_Root/
sudo dump -0uaf - /media/${uid}/rootfs/ | sudo restore -rf -
# 注意!注意!
cd ../

投げ捨てる

15.PARTUUIDを表示する

# Raspbian启动要对应分区的PARTUUID
# 镜像文件对应的loop device的两个分区的PARTUUID
sudo blkid
# /dev/mapper/loop6p1: SEC_TYPE="msdos" LABEL_FATBOOT="boot" LABEL="boot" UUID="ED9A-5B01" TYPE="vfat" PARTUUID="816d8bf0-01"
# /dev/mapper/loop6p2: LABEL="rootfs" UUID="88f021e9-d2bc-4a0b-b8f2-778d8adbc76a" TYPE="ext4" PARTUUID="816d8bf0-02"
# boot对应816d8bf0-01,root对应816d8bf0-02
# 被替换的PARTUUID
opartuuidb=`sudo blkid -o export /dev/sdb1 | grep PARTUUID`
opartuuidr=`sudo blkid -o export /dev/sdb2 | grep PARTUUID`
# 用于替换的PARTUUID
npartuuidb=`sudo blkid -o export /dev/mapper/loop6p1 | grep PARTUUID`
npartuuidr=`sudo blkid -o export /dev/mapper/loop6p2 | grep PARTUUID`

16.Modify./tgt_boot/cmdline.txt

# 用 $npartuuidr 替换 $opartuuidr => PARTUUID=816d8bf0-02 替换 PARTUUID=738a4d67-02 
sudo sed -i "s/${opartuuidr}/${npartuuidr}/g" ~/backupimg/tgt_boot/cmdline.txt

17.変更します。/tgt_Root/etc/fstab

sudo sed -i "s/${opartuuidb}/${npartuuidb}/g" ~/backupimg/tgt_Root/etc/fstab
sudo sed -i "s/${opartuuidr}/${npartuuidr}/g" ~/backupimg/tgt_Root/etc/fstab

18.パーティションのマウントを解除します

sudo umount tgt_boot tgt_Root
sudo kpartx -d /dev/loop6
sudo losetup -d /dev/loop6
rmdir tgt_boot tgt_Root

edit_fstab

19.画像を書き込む

組み込みの画像書き込みツールを使用してRaspberryPi Imagerを書き込むRaspberryPiは、raspberrypi.imgをSDカードに書き込みます

ラズベリーパイイメージャー

20.ルートパーティションを拡張します

SDカードをRaspberryPiに挿入して起動し、df -hを実行してディスク容量を確認すると、合計サイズがわずか1.5Gであることがわかります。構成するには、sudoraspi-configコマンドを実行する必要があります。詳細オプション= > [ファイルシステム]を展開し、ルートパーティションをSDカード全体に展開します。

sudo raspi-config

21.再起動してRaspberryPiを再起動し、有効にします

reboot

参照:

オリジナル:https//www.cooooder.com/archives/20200114

おすすめ

転載: blog.csdn.net/zszangy/article/details/114395448