久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

制作樹(shù)莓派最小鏡像 SD卡系統(tǒng)備份

 beginnow1 2017-07-31

修改記錄
2016年7月28日修改腳本,,動(dòng)態(tài)支持樹(shù)莓派鏡像

最近剛做了一套OpenCV攝像頭監(jiān)控的程序,想將這套程序做一個(gè)鏡像備份起來(lái),,但發(fā)現(xiàn)用Win32DiskImager或dd命令來(lái)制作鏡像,,都是將sd卡整盤(pán)進(jìn)行備份,,造成了巨大的硬盤(pán)浪費(fèi),同時(shí),,會(huì)局限sd卡本身,,也就是說(shuō)32g卡制作的鏡像無(wú)法恢復(fù)到16g或8g的卡上,即便軟件沒(méi)有占用那么大空間,,所以希望將鏡像瘦身,,做一套最小占用空間的鏡像,且不損害鏡像本身,。

前不久在csdn上看到 liuwei000000的博文與我所希望的結(jié)果差不多,,所以試著進(jìn)行一次img瘦身。
不過(guò)該博文也有缺點(diǎn)“該方法制作的鏡像不能用raspi-config擴(kuò)展分區(qū)”所以即便我們能夠?qū)mg瘦身也不能輕松的利用raspi-config擴(kuò)展樹(shù)莓派了,,所以我提煉了奮斗博客博文親身制作了一把img,,并把遇到的問(wèn)題記錄了下來(lái)

我使用的的是raspberry pi 2+32G高速tf卡,因?yàn)槿讨辉跇?shù)莓派中操作所以不需要額外的Linux系統(tǒng),。

若樹(shù)莓派所占空間小于sd卡空間的50%即可以使用第一種方法,,在樹(shù)莓派內(nèi)部直接生成鏡像,。
若樹(shù)莓派所占空間大于sd卡空間的50%,可以使用第二種方法,,先生成sd卡鏡像,,然后再其他linux系統(tǒng)中進(jìn)行裁剪。

在文后,,我會(huì)提供一鍵腳本,。


樹(shù)莓派內(nèi)部生成鏡像

一、查看當(dāng)前系統(tǒng)所占容量
用Win32DiskImager來(lái)制作鏡像時(shí)是將sd卡正卡全部做成鏡像,,是因?yàn)闊o(wú)法讀取到linux分區(qū)的原因,,所以我們?cè)谥谱麋R像前,先要確定我們當(dāng)前系統(tǒng)所占用了多少系統(tǒng)空間,,即備份鏡像的大小,。

#查看當(dāng)前系統(tǒng)所占用的空間
df -h

這里寫(xiě)圖片描述
可以看到,樹(shù)莓派是有兩個(gè)分區(qū),,所以boot 【size】+linux【Used】+分區(qū)損耗【因?yàn)楦袷睫D(zhuǎn)換,,所以會(huì)損耗5%~10%】=鏡像實(shí)際大小,所以若used使用百分比超過(guò)50%那么就無(wú)法在sd中創(chuàng)建此鏡像,。

二,、安裝需要的軟件
dosfstools:fat32分區(qū)格式化工具
dump:dump & restore 備份工具
parted & kpartx:虛擬磁盤(pán)工具

sudo apt-get install dosfstools dump parted kpartx

三、生成空白img
根據(jù)一里面系統(tǒng)所占用的空間,,生成空白的img,。

#df為磁盤(pán)占用空間
sudo dd if=/dev/zero of=raspberrypi.img bs=1K count=$df

這也是錯(cuò)誤比較多的地方,,有人不理解原文中count=2500參數(shù)的意義,,此參數(shù)是用dd命令創(chuàng)建一個(gè)大約2.5G的空白鏡像,若不使用第一步來(lái)算出實(shí)際鏡像大小的話,,制作出來(lái)的鏡像就會(huì)出錯(cuò)

此處注意
dd命令中【1k=1024b;1KB=1000b;1M=1024kb;1MB=1000kb】

四,、分割虛擬磁盤(pán)
我們已將空白的img創(chuàng)建完畢,現(xiàn)在需要通過(guò)parted將磁盤(pán)分為boot與root區(qū)
通過(guò)sudo fdisk -l /dev/mmcblk0得知
這里寫(xiě)圖片描述
第一個(gè)分區(qū)為boot分區(qū),,采用FAT32格式,,由sector 8192開(kāi)始到sector 12879
第二個(gè)分割區(qū)采用EXT4,由sector 122880開(kāi)始到空白img結(jié)尾,。

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

五,、掛載虛擬磁盤(pán)并格式化

loopdevice:執(zhí)行 losetup 連接 img 文件的 loop device
device:執(zhí)行完 kpartx 后,虛擬磁盤(pán)代號(hào),。
partBoot:由 device 加上 p1 組合而成的 FAT32 虛擬磁盤(pán)分區(qū),。
partRoot:由 device 加上 p2 組合而成的 EXT4 虛擬磁盤(pán)分區(qū)。

首先建立虛擬磁盤(pán)并分區(qū)

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"

然后格式化虛擬磁盤(pán)分區(qū)

#boot分區(qū)用fat32進(jìn)行格式化
sudo mkfs.vfat $partBoot
sudo mkfs.ext4 $partRoot

六,、開(kāi)始備份
boot分區(qū)為fat32格式,,可以直接利用cp命令直接拷貝

sudo mount -t vfat $partBoot /media
sudo cp -rfp /boot/* /media/
sudo umount /media

linux分區(qū)為ext4格式,,需要利用dump & restore備份

#跳過(guò)raspberrypi.img不備份
sudo chattr +d raspberrypi.img
sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -h 0 -0uaf - / | sudo restore -rf -
cd
sudo umount /media

這里原文中也有一點(diǎn)bug,用dump進(jìn)行磁盤(pán)備份時(shí),,會(huì)將之前創(chuàng)建的空白img一并備份進(jìn)去,,通過(guò)chattr跳過(guò)raspberrypi.img

七、備份完畢,,卸載虛擬磁盤(pán)
此時(shí),,已將所有數(shù)據(jù)備份至空白img,此時(shí)就可以卸載虛擬磁盤(pán),,將img拷貝出保存了,。
然后利用Win32DiskImager或者df命令即可將該raspberrypi.img恢復(fù)至sd卡上。

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

這里是整理后的腳本,,編輯sudo vi backup.sh,,復(fù)制以下內(nèi)容,sudo chmod 777 backup.sh,,然后sudo ./backup.sh就可以在當(dāng)前腳本目錄中生成樹(shù)莓派的SD卡鏡像了,。

腳本經(jīng)過(guò)以下固件版本測(cè)試

2015-02-16-raspbian-wheezy

#!/bin/sh
sudo apt-get install -y dosfstools dump parted kpartx
df=`df -P | grep /dev/root | awk '{print $3}'`
df=`echo $df |awk '{print int($1*1.1+57344)}'`
sudo dd if=/dev/zero of=raspberrypi.img bs=1K count=$df
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 chattr +d raspberrypi.img
sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -h 0 -0uaf - / | sudo restore -rf -
cd
sudo umount /media
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice
  • 1

腳本經(jīng)過(guò)以下固件版本測(cè)試:

2016-05-27-raspbian-jessie

#!/bin/sh
sudo apt-get install -y dosfstools parted kpartx rsync
df=`df -P | grep /dev/root | awk '{print $3}'`
dr=`df -P | grep /dev/mmcblk0p1 | awk '{print $2}'`
df=`echo $df $dr |awk '{print int(($1+$2)*1.2)}'`
sudo dd if=/dev/zero of=raspberrypi.img bs=1K count=$df
sudo parted raspberrypi.img --script -- mklabel msdos
start=`sudo fdisk -l /dev/mmcblk0| awk 'NR==10 {print $2}'`
start=`echo $start's'`
end=`sudo fdisk -l /dev/mmcblk0| awk 'NR==10 {print $3}'`
end2=$[end+1]
end=`echo $end's'`
end2=`echo $end2's'`

sudo parted raspberrypi.img --script -- mkpart primary fat32 $start $end
sudo parted raspberrypi.img --script -- mkpart primary ext4 $end2 -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 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
如果以上比較簡(jiǎn)單的腳本還是不行的話,可以用以下終極解決方案,。
http://bbzoh.cn/content/17/0805/03/40492717_676751545.shtml

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多