自制树莓派Linux最小系统,生成树莓派的最小系统镜像

本文介绍了一个用于在Raspberry Pi 3B上运行的脚本,该脚本利用`dd`、`fdisk`和`parted`等工具,将TF存储卡的数据备份到USB设备上生成img文件。脚本接受一个参数指定备份目录,生成的镜像文件名为`backup_当前日期与时间.img`,大小与TF卡已用空间相符。备份过程包括创建镜像、分区、格式化、挂载和备份系统目录。
摘要由CSDN通过智能技术生成

开发 / 测试环境树莓派:Raspberry Pi 3b

TF 存储卡:SanDisk Ultra 16GB Class 10 A1

操作系统:2018-06-27-raspbian-stretch-lite

程序:使用apt-get安装的最新版本(2018年7月15日)

脚本

脚本raspberrypi-backup.sh用于生成树莓派的最小系统镜像。

该脚本能够将位于 TF 存储卡上的数据备份到通过USB连接的存储设备上。镜像的大小取决于 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

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

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值