Raspberry Pi 4B + image de sauvegarde et gravure par lots
Original: https://www.cooooder.com/archives/20200114
Avant d'écrire cet article, j'ai trouvé moi-même des scripts open source, mais c'est peut-être parce que les paramètres réels sont incompatibles avec les paramètres du script, ce qui a conduit à l'échec de l'exécution, j'ai donc ajusté les commandes étape par étape et trié le Si vous me rencontrez également Pour le même problème, j'espère que vous suivez les étapes ci-dessous étape par étape, et certaines commandes compliquées seront expliquées et marquées en conséquence. Je crois que vous pouvez également implémenter avec succès la mise en miroir de sauvegarde de carte SD.
0. Préparation
alentours
- Raspberry Pi 4B +
- Carte SD Raspberry Pi (installée avec le système Raspbian Buster)
- Lecteur de carte SD
- Environnement PC Ubuntu
- Machine virtuelle VMware (installer le système d'exploitation de bureau Ubuntu)
prêt
- Omettez l'installation de VMware, le processus d'installation d'Ubuntu
- Insérez la carte SD dans le lecteur de carte, insérez l'interface USB de l'ordinateur
- Montez la carte SD, la machine virtuelle générale reconnaîtra et montera automatiquement
- Si la carte SD n'est pas montée automatiquement, vous pouvez la monter manuellement, sélectionnez Machine virtuelle> Périphérique amovible> Se connecter
- Une fois le montage réussi, vous pouvez voir deux dossiers
Ressources
- Version chinoise de VMware Workstation 15 Pro Extraire le code: t1ip
- Code d'extraction ubuntu-20.04.1-desktop-amd64.iso : mj7k
Tout est prêt, lancez la sauvegarde
1. Installez les outils nécessaires
parted est un outil de partitionnement du disque dur ou de redimensionnement de la partition
sudo apt-get install -y dosfstools dump parted kpartx
2. Créez un répertoire de travail
mkdir ~/backupimg
cd ~/backupimg
3. Uid et gid sont déterminés en fonction du nom d'utilisateur actuel du système
uid=edward
gid=edward
4. Déterminez la taille de l'image IMG créée
Estimez ici la taille de l'image (1,2 G + 53 Mo). Pour des raisons de sécurité, créez un fichier IMG d'image vierge de 1,5 G (1 600 Mo).
# 查看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. Créez une image vierge IMG
# 大小1600M
sudo dd if=/dev/zero of=raspberrypi.img bs=1M count=1600
6. Vérifiez la taille de l'image
Confirmez la taille du fichier image, il doit s'agir d'un multiple entier de 512 octets, sinon il devrait s'agir d'une erreur dans l'opération de l'étape 5.
ls -l raspberrypi.img
# -rw-r--r-- 1 root root 1677721600 Jan 13 19:29 raspberrypi.img
# 1677721600 = 1024 * 1024 * 1600
7. Afficher la table des partitions
Le fichier image doit être partitionné en tant que bootfs et rootfs (bootfs est de type FAT32 et rootfs est de type 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. Partition de fichiers miroir
# 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. Vérifiez si la partition est réussie
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. Mettez en miroir le fichier IMG et associez le périphérique de boucle
Pour monter le fichier image sur le système, vous devez utiliser le périphérique de boucle pour monter le fichier sur le système
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. Format IMG miroir
sudo mkfs.vfat -n boot /dev/mapper/loop6p1
sudo mkfs.ext4 -L rootfs /dev/mapper/loop6p2
12. Montez le périphérique en boucle sur le système
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. Sauvegarde: démarrage de sauvegarde
sudo cp -rfp /media/${uid}/boot/* ./tgt_boot/
14. Sauvegarde: racine de sauvegarde
# 设置权限,并把文件夹清空
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. Afficher 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. Modify./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. Démonter la partition
sudo umount tgt_boot tgt_Root
sudo kpartx -d /dev/loop6
sudo losetup -d /dev/loop6
rmdir tgt_boot tgt_Root
19. Graver l'image
Raspberry Pi utilisant l'outil de gravure d'image intégré pour graver Raspberry Pi Imager, raspberrypi.img gravera sur la carte SD.
20. Étendez la partition racine
Insérez la carte SD dans le Raspberry Pi pour démarrer, exécutez df -h pour vérifier l'espace disque, et vous constaterez que la taille totale n'est que de 1,5G, vous devez exécuter la commande sudo raspi-config pour configurer, Options avancées = > Développez le système de fichiers, développez la partition racine sur toute la carte SD.
sudo raspi-config
21. Redémarrez pour redémarrer le Raspberry Pi pour prendre effet
reboot
référence: