【樹莓派】製做樹莓派所使用的img鏡像(一)

最近一直在折騰樹莓派,前幾天裝了10臺設備,最近又來了15臺開發板子。基本每臺設備都須要進行以下操做:html

1.安裝樹莓派OS,並配置鍵盤、時區、語言編碼格式等;linux

2.新增組、用戶、配置靜態IP地址;git

3.配置應用,並配置2個自啓動的服務;github

 

而這些都是重複性配置,工做量巨大;以前採用了一種方式,直接使用樹莓派官方的USB工具,採用備份還原的方式,clone鏡像;ubuntu

但存在問題:SD卡爲32GB,每次還原得很長時間,因此想減少鏡像大小;windows

參考後文方式,作一個backup.sh文件,而後安裝相關工具,並增長可執行權限,並sudo ./backup.sh運行;網絡

安裝所需工具組件:app

sudo apt-get install dosfstools
sudo apt-get install dump
sudo apt-get install parted
sudo apt-get install kpartx

 

內容以下:工具

#!/bin/sh
sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=4000
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 2682879s
sudo parted raspberrypi.img --script -- mkpart primary ext4 2682880s -1

loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-15])p.*/\1/g' | head -1`
device="/dev/ram${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
sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -0uaf - / | sudo restore -rf -
cd
sudo umount /media
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice

 

執行以後,等待一段時間,就能夠看到相應的鏡像文件:oop

 

 

-------------------------

參考下文:(http://www.fendou.info/raspberry-pi-sd-card-backup-and-recovery/comment-page-1/ )

買樹莓派的時候只想到存儲空間大能多存的東西因而買了個16GB的SD卡,可實際用了2G空間不到。最開始備份樹莓派SD卡是用windwos下的Win32DiskImager,這種備份恢復樹莓派的方式最簡單,Windows+讀卡器+Win32DiskImager 就能夠對樹莓派的SD作完整的鏡像備份,可個人樹莓派用的16GB的SD卡,備份還原既浪費空間又浪費時間。

後來發現一種直接用dd備份樹莓派的方法,就是先在樹莓派上mount一個共享目錄(空間大於SD卡的便可),而後用

dd if=/dev/mmcblk0 of=raspberrypi.img bs=1M

備份成raspberrypi.img鏡像文件,恢復的方式有兩種:一是用Win32DiskImager在windows系統上直接寫到SD卡中;二是在Linux系統中用(先fdisk -l查看設備)

dd if=/path/to/image/raspberrypi.img of=/dev/sdx

這種方式要考慮網絡環境,若是你的樹莓派接的無線網卡,最好放棄這種方式,太慢!

最後介紹最終極的備份還原樹莓派的方式,利用dump 和 restore。先說明一下這種備份方式的好處:一是能夠像Windows的Ghost只dump有效數據,也就是說能夠最有效的節省備份空間,樹莓派有多少數據就生成多大的鏡像文件;二是能夠恢復到比原來SD卡空間的小的SD卡上,我原來用的樹莓派是16GB,如今能夠把鏡像恢復到8GB或者4GB的SD中。下面看詳細步驟(不想看能夠直接跳到最後的腳本)

1、安裝須要的軟件

dosfstools:fat32分區格式化工具
dump:dump & restore 備份工具
parted & kpartx:虛擬磁盤工具

執行安裝腳本

sudo apt-get install dosfstools sudo apt-get install dump sudo apt-get install parted sudo apt-get install kpartx

2、生成新的img文件
先df -h查看下樹莓派實際使用空間而後在決定生成文件大小,下面命令生成塊大小爲1MB總大小爲2500MB的鏡像文件

sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=2500

3、分割虛擬磁盤

利用parted將剛纔生成的虛擬盤分割成兩個分區

  • 第一個分割區採用FAT32格式,由sector 8192開始到sector 12879,約62.9MB
  • 第二個分割區採用EXT4,由sector 122880開始到結束。
sudo parted raspberrypi.img --script -- mklabel msdos sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1

4、掛載虛擬磁盤並格式化

  • loopdevice:執行 losetup 鏈接 img 文件的 loop device
  • device:執行完 kpartx 後,虛擬磁盤代號。
  • partBoot:由 device 加上 p1 組合而成的 FAT32 虛擬磁盤分區。
  • partRoot:由 device 加上 p2 組合而成的 EXT4 虛擬磁盤分區。

首先創建虛擬磁盤並分區

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

5、開始備份
fat32虛擬磁盤分區創建好後直接用cp命令備份文件

  1. sudo mount -t vfat $partBoot /media
  2. sudo cp -rfp /boot/* /media/
  3. sudo umount /media

ext4 linux虛擬磁盤分區用dump & restore 備份

sudo mount -t ext4 $partRoot /media/ cd /media sudo dump -0uaf - / | sudo restore -rf - cd sudo umount /media

6、卸載虛擬磁盤

sudo kpartx -d $loopdevice sudo losetup -d $loopdevice

通過以上六步樹莓派中的數據文件就所有備份到raspberrypi.img中了,你既能夠在Windows中用Win32DiskImager將鏡像恢復到SD卡,也能夠在Linux用dd還原到SD卡,並且不要求恢復SD卡的大小跟原來的同樣(不一樣品牌相同大小的SD卡實際可用空間不同的,坑!),這樣就能夠很方便的更換SD卡。當用此SD卡啓動樹莓派的時候執行raspi-config ->Expand Filesystem 便可擴展未使用的空間。

這裏就是最後的腳本,包含了以上六步,只須要編輯sudo vi backup.sh複製如下內容,sudo chmod 777 genimg.sh,而後sudo ./backup.sh就能夠在當前腳本目錄中生成樹莓派的SD卡鏡像了。

#!/bin/sh
sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=2500
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s
sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -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
sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -0uaf - / | sudo restore -rf -
cd
sudo umount /media
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice


其他參考:

【樹莓派】製做樹莓派最小鏡像:img裁剪瘦身: http://www.cnblogs.com/haochuang/p/6380839.html

製做樹苺派SD卡備份鏡像——樹苺派系統備份與還原指南:http://blog.lxx1.com/1450

使用dump和restore來製做樹莓派的img鏡像:http://www.tyrantek.com/archives/508/

樹莓派備份鏡像 製做鏡像 一鍵製做 腳本:http://www.jianshu.com/p/c6055f9545fd

(該文所附加腳本:https://github.com/Neutree/note/blob/master/tool/RaspberryPi/backup_system.sh

 

使用GHO方式製做鏡像:

使用Clonezilla對硬盤進行鏡像和克隆:https://linux.cn/article-3888-1.html

Linux下相似ghost的備份與還原系統的工具:http://www.linuxdiyf.com/linux/30498.html

如何製做Ubuntu安裝U盤:https://www.sysgeek.cn/make-ubuntu-usb-flash-drive/