Imagen de copia de seguridad de Raspberry Pi 4B + y grabación por lotes
Original: https://www.cooooder.com/archives/20200114
Antes de escribir este artículo, encontré algunos scripts de código abierto por mí mismo, pero puede deberse a que los parámetros reales son inconsistentes con la configuración del script, lo que provocó que no se ejecutaran, así que ajusté los comandos paso a paso y resolví el siguientes pasos. Si también se encuentra conmigo para el mismo problema, espero que siga los pasos a continuación paso a paso, y se explicarán y marcarán algunos comandos complicados en consecuencia. Creo que también puede implementar con éxito la duplicación de copia de seguridad de la tarjeta SD.
0. Preparación
alrededores
- Frambuesa Pi 4B +
- Tarjeta SD Raspberry Pi (instalada con el sistema Buster Raspbian)
- Lector de tarjetas SD
- Entorno de PC Ubuntu
- Máquina virtual VMware (instale el sistema operativo de escritorio Ubuntu)
Listo
- Omita la instalación de VMware, proceso de instalación de Ubuntu
- Inserte la tarjeta SD en el lector de tarjetas, inserte la interfaz USB de la computadora
- Monte la tarjeta SD, la máquina virtual general reconocerá y montará automáticamente
- Si la tarjeta SD no se monta automáticamente, puede montarla manualmente, seleccione Máquina virtual> Dispositivo extraíble> Conectar
- Después de montar con éxito, puede ver dos carpetas
Recursos
- VMware Workstation 15 Pro versión en chino Código de extracto: t1ip
- ubuntu-20.04.1-desktop-amd64.iso código de extracción: mj7k
Todo está listo, inicia la copia de seguridad.
1. Instale las herramientas necesarias
parted es una herramienta para particionar el disco duro o cambiar el tamaño de la partición
sudo apt-get install -y dosfstools dump parted kpartx
2. Crea un directorio de trabajo
mkdir ~/backupimg
cd ~/backupimg
3. Uid y gid se determinan de acuerdo con el nombre de usuario actual del sistema.
uid=edward
gid=edward
4. Determine el tamaño de la imagen IMG creada.
Calcule el tamaño de la imagen aquí (1.2G + 53M). Por razones de seguridad, cree un archivo IMG de imagen en blanco de 1.5G (1600M)
# 查看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. Crea una imagen IMG en blanco
# 大小1600M
sudo dd if=/dev/zero of=raspberrypi.img bs=1M count=1600
6. Verifique el tamaño de la imagen
Confirme el tamaño del archivo de imagen, debe ser un múltiplo entero de 512byte, de lo contrario debería ser un error en la operación del paso 5.
ls -l raspberrypi.img
# -rw-r--r-- 1 root root 1677721600 Jan 13 19:29 raspberrypi.img
# 1677721600 = 1024 * 1024 * 1600
7. Ver la tabla de particiones
El archivo de imagen debe particionarse como bootfs y rootfs (bootfs es de tipo FAT32 y rootfs es de tipo 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. Espejo de partición de archivos
# 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. Verifique si la partición es exitosa
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. Refleje el archivo IMG y asocie el dispositivo de bucle
Para montar el archivo de imagen en el sistema, debe utilizar el dispositivo de bucle para montar el archivo en el sistema.
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. Formato de IMG espejo
sudo mkfs.vfat -n boot /dev/mapper/loop6p1
sudo mkfs.ext4 -L rootfs /dev/mapper/loop6p2
12. Monte el dispositivo de bucle en el sistema.
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. Copia de seguridad: arranque de copia de seguridad
sudo cp -rfp /media/${uid}/boot/* ./tgt_boot/
14. Copia de seguridad: raíz de copia de seguridad
# 设置权限,并把文件夹清空
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. Ver 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. Modificar./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. Desmontar la partición
sudo umount tgt_boot tgt_Root
sudo kpartx -d /dev/loop6
sudo losetup -d /dev/loop6
rmdir tgt_boot tgt_Root
19. Grabar imagen
Raspberry Pi utilizando la herramienta de grabación de imágenes incorporada para grabar Raspberry Pi Imager, raspberrypi.img se grabará en la tarjeta SD.
20. Extiende la partición raíz
Inserte la tarjeta SD en la Raspberry Pi para arrancar, ejecute df -h para verificar el espacio en disco, y encontrará que el tamaño total es de solo 1.5G, debe ejecutar el comando sudo raspi-config para configurar, Opciones avanzadas = > Expanda el sistema de archivos, expanda la partición raíz a toda la tarjeta SD.
sudo raspi-config
21. Reinicie para reiniciar la Raspberry Pi para que surta efecto
reboot
referencia: