生成樹莓派的最小系統鏡像

開發 / 測試環境

  • 樹莓派: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

參考資料

製作樹莓派最小鏡像-img裁剪瘦身

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章