2017年12月30日 星期六

複製、備份樹莓派主板SD卡開機片並進行容量瘦身,SD-32G to SD-16G

一、安裝所需工具程式
sudo apt-get update

sudo apt-get install dosfstools dump parted kpartx rsync

環境說明與準備:
Raspberry Pi 3 Linux raspberrypi 4.4.21-v7+ x1
SD容量:32G x1 、16Gx1
外接式USB 16G

二、進行備份
        進行備份工作前須先確認本機已使用容量是否超過總容量的50%,如超過時必須將備份空白檔案產生於外部磁碟空間,否則備份過程將會失敗,本範例是預設本機磁區使用空間已超過50%為示範。

確認已使用容量  (root + boot)
df -lh





先掛載外部空間並切換至掛載目錄後再進行產生空白檔案
sudo mount /dev/sda1 /mnt/pi
cd /mnt/pi

產生空白image檔案,大小為9.5G(需大於已使用空間)
sudo dd if=/dev/zero of=raspberrypi.img bs=1M count=9500
確認Boot & Root磁區大小 
sudo fdisk -l /dev/mmcblk0





分割虛擬磁碟
第一磁區為boot,格式FAT32,由sector 8192開始到sector 137215 第二磁區為root,格式EXT4,由sector 137215開始到空白img結尾。
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 137215s
sudo parted raspberrypi.img --script -- mkpart primary ext4 137216s -1

掛載虛擬磁碟
loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partBoot="${device}p1"
partRoot="${device}p2"

格式化虛擬磁碟
sudo mkfs.vfat $partBoot
sudo mkfs.ext4 $partRoot

開始複製檔案
sudo mount -t vfat $partBoot /media
sudo cp -rfp /boot/* /media/
sudo umount /media

跳過raspberry.img檔案不備份
sudo chattr +d raspberrypi.img
sudo mount -t ext4 $partRoot /media/
cd /media

sudo rsync -aP --exclude="raspberrypi.img" --exclude=/media/* --exclude=/sys/* --exclude=/proc/*  --exclude=/tmp/* / ./
cd
sudo umount /media

卸載虛擬磁碟
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice

三、回存檔案至SD卡
完成後將raspberrypi.img檔案透過Win32 Disk Imager工具寫入16G SD卡。

寫入16G SD卡的容量狀況,總容量僅為9G。


        因為此備份檔案僅有9.5G,寫入16G的SD卡後,本機總容量會呈現為9.5G,此時必須用raspi-config工具中的Expand Filesystem功能,將空間況展為實際空間16G。


況展後總容量回復為16G之空間檢視。








沒有留言:

張貼留言