树莓派系统镜像一键瘦身备份脚本, 生成最小化镜像img(一)

2 篇文章 0 订阅
2 篇文章 0 订阅

开发 / 测试环境

  • 树莓派:Raspberry Pi 3b+
  • TF 存储卡:32GB
  • 操作系统:2020-05-27-raspios-buster-full-armhf(官方版本)
  • 程序:使用apt-get安装的最新版本(2022年10月10日)

    脚本

  • 脚本raspberrypi-backup.sh用于生成树莓派的最小系统镜像。
  • 该脚本能够将位于 树莓派TF 存储卡上的数据备份至本地,镜像的大小取决于 TF 存储卡的已用空间  备份本地需剩余空间大于已用空间。
  • 脚本接受1个必要参数:存放镜像的目录。每次执行,脚本会在该目录中生成一个img文件,文件名为backup_当前日期与时间.img

#!/bin/bash

set -e

# start
if [ -z $1 ]; then
  echo "Backup directory not set, required."
  exit 1
fi
BACK_UP_DIR=$1
echo

# install
echo "Installing package ..."
apt-get install dosfstools dump parted kpartx -y
echo "Finish."
echo

# create image
echo "Creating image ..."
ROOT=`df -P | grep /dev/root | awk '{print $3}'`
MMCBLK0P1=`df -P | grep /dev/mmcblk0p1 | awk '{print $2}'`
ALL=`echo $ROOT $MMCBLK0P1 |awk '{print int(($1+$2)*1.2)}'`
TIME=`date "+%Y%m%d%H%M%S"`
FILE=$BACK_UP_DIR/backup_$TIME.img
dd if=/dev/zero of=$FILE bs=1K count=$ALL
echo "Finish."
echo

# part
echo "Parting image ..."
P1_START=`fdisk -l /dev/mmcblk0 | grep /dev/mmcblk0p1 | awk '{print $2}'`
P1_END=`fdisk -l /dev/mmcblk0 | grep /dev/mmcblk0p1 | awk '{print $3}'`
P2_START=`fdisk -l /dev/mmcblk0 | grep /dev/mmcblk0p2 | awk '{print $2}'`
parted $FILE --script -- mklabel msdos
parted $FILE --script -- mkpart primary fat32 ${P1_START}s ${P1_END}s
parted $FILE --script -- mkpart primary ext4 ${P2_START}s -1
parted $FILE --script -- quit
echo "Finish."
echo

# mount
echo "Mounting ..."
LOOP_DEVICE=`losetup -f --show $FILE`
kpartx -va $LOOP_DEVICE
PART_BOOT="/dev/dm-0"
PART_ROOT="/dev/dm-1"
echo "Finish."
echo

# format
echo "Formating ..."
mkfs.vfat $PART_BOOT
mkfs.ext4 $PART_ROOT
echo "Finish."
echo

# backup prepare
MOUNT_POINT=/media/backup_$TIME/
if [ ! -d "$MOUNT_POINT" ];then
  mkdir $MOUNT_POINT
fi

# backup /dev/boot
#磁盘备份时跳过raspberrypi.img
sudo chattr +d $FILE
echo "Backing up disk /dev/boot ..."
mount -t vfat $PART_BOOT $MOUNT_POINT
cp -rfp /boot/* $MOUNT_POINT
umount $MOUNT_POINT
echo "Finish."
echo

# backup /dev/root
echo "Backing up disk /dev/root ..."
mount -t ext4 $PART_ROOT $MOUNT_POINT
cd $MOUNT_POINT
dump -h 0 -0uaf - / | sudo restore -rf -
cd
umount $MOUNT_POINT
echo "Finish."
echo

# unmount
echo "Unmounting ..."
kpartx -vd $LOOP_DEVICE
losetup -d $LOOP_DEVICE
rm -fr $MOUNT_POINT
echo "Finish."
echo

# end
echo "Back-up image $FILE is successfully created."
echo

 跑完后备份的新镜像

保存备份文件

img文件比较大, 如果需要长期保存,可以压缩后保存备用: 

xz -zkv xxxxx.img

或者

tar -czvf xxxx.img.tar.gz xxxx.img


参考博客:linux - 生成树莓派的最小系统镜像_个人文章 - SegmentFault 思否

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值