【树莓派】制作树莓派所使用的img镜像(一)
最近一直在折腾树莓派,前几天装了10台设备,最近又来了15台开发板子。基本每台设备都需要进行如下操作:
1.安装树莓派OS,并配置键盘、时区、语言编码格式等;
2.新增组、用户、配置静态IP地址;
3.配置应用,并配置2个自启动的服务;
而这些都是重复性配置,工作量巨大;之前采用了一种方式,直接使用树莓派官方的USB工具,采用备份还原的方式,clone镜像;
但存在问题:SD卡为32GB,每次还原得很长时间,所以想减小镜像大小;
参考后文方式,做一个backup.sh文件,然后安装相关工具,并增加可执行权限,并sudo ./backup.sh运行;
安装所需工具组件:
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=
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 - loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-15])p.*/\1/g' | head -`
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
执行之后,等待一段时间,就可以看到相应的镜像文件:

-------------------------
参考下文:(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中。下面看详细步骤(不想看可以直接跳到最后的脚本)
一、安装需要的软件
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
二、生成新的img文件
先df -h查看下树莓派实际使用空间然后在决定生成文件大小,下面命令生成块大小为1MB总大小为2500MB的镜像文件
sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=2500
三、分割虚拟磁盘
利用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
四、挂载虚拟磁盘并格式化
- 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
五、开始备份
fat32虚拟磁盘分区建立好后直接用cp命令备份文件
- sudo mount -t vfat $partBoot /media
- sudo cp -rfp /boot/* /media/
- 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
六、卸载虚拟磁盘
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/
【树莓派】制作树莓派所使用的img镜像(一)的更多相关文章
- 【树莓派】使用树莓派制作img镜像(二)
树莓派制作的镜像,需要如何使用,这里直接引用目前树莓派官方的文章,不再重复描述: 参考:http://shumeipai.nxez.com/2013/08/31/usb-image-tool.html ...
- 【树莓派】使用树莓派制作img镜像(一)
最近一直在折腾树莓派,前几天装了10台设备,最近又来了15台开发板子.基本每台设备都需要进行如下操作: 1.安装树莓派OS,并配置键盘.时区.语言编码格式等: 2.新增组.用户.配置静态IP地址: 3 ...
- 【树莓派】制作树莓派最小镜像:img裁剪瘦身
制作树莓派镜像,可以参考这篇文章:http://blog.csdn.net/talkxin/article/details/50456282 摘录部分要点内容如下(如果作者不允许转载,请联系即删除): ...
- 【树莓派】制作树莓派所使用的img镜像(二)
树莓派制作的镜像,需要如何使用,这里直接引用目前树莓派官方的文章,不再重复描述: 参考:http://shumeipai.nxez.com/2013/08/31/usb-image-tool.html ...
- 【树莓派】树莓派与XBMC及Kodi、LibreELEC插件(一)
网上高人多. 高手在民间,饭桶在机关. 越用树莓派,越发现这玩意儿的潜力,我想,未来我们用它,可以做很多事情. 最近在看树莓派的应用场景,看到网上有人用它做电视盒子. 参考相关文章,简单实践了一下,整 ...
- 制作OpenStack用的RHEL7系统镜像
制作OpenStack使用的RHEL7系统镜像,并进行相关设置,安装XRDP以进行远程访问. 1.在KVM中安装RHEL7.2客户机: 2.设置网卡为dhcp并onboot=yes,使得虚拟机能自动获 ...
- 制作openstack用的centos6.5镜像
目的: 在centos6.5操作系统环境下制作一个centos6.5的kvm镜像,安装cloud-init,能自己主动扩展根分区 一.制作环境: 操作环境是在openstack平台开一个实例.装的是c ...
- 【树莓派】树莓派与XBMC及Kodi、LibreELEC插件(二)
之前的相关文章参考: [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(一) [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(二) [树莓派]树莓派与XBMC及Kodi.Li ...
- 制作macOS10.12系列的系统镜像文件
制作macOS10.12系列的系统镜像文件步骤,过程也比较简单,十来个命令.以10.12.6为例,首先,在苹果商店下载系统安装包APP,或者网上下载后把安装APP复制到 应用程序 文件夹. 然后打 ...
随机推荐
- SnackDown Longest Increasing Subsequences 构造题
Longest Increasing Subsequences 题目连接: https://www.codechef.com/SNCKPA16/problems/MAKELIS Description ...
- Codeforces Round #196 (Div. 2) A. Puzzles 水题
A. Puzzles Time Limit: 2 Sec Memory Limit: 60 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem ...
- bmp图像数据转jpg图像的C语言实现
bmp图像格式协议 jpg图像格式协议 Bmp转jpg图像代码 密码:nmaj
- weblogic部署异常: cvc-enumeration-valid: string value '3.0' is not a valid enumeration value for web-app-versionType in namespace http://java.sun.com/xml/ns/javaee:<null>
尝试使用weblogic部署一个Demo应用,在选择应用目录后,报出下面的异常: VALIDATION PROBLEMS WERE FOUND problem: cvc-enumeration-val ...
- C++使用autoreconf -vi出现error: possibly undefined macro: AC_LIBTOOL_WIN32_DLL If this token and others are legitimate, please use m4_pattern_allow. See the Autoconf documentation.
安装这个:libtool libsysfs yum install -y libtool libsysfs 参考: https://blog.csdn.net/yusiguyuan/article/ ...
- HDU 4649 Professor Tian(反状态压缩dp,概率)
本文出自 http://blog.csdn.net/shuangde800 题目链接:点击打开链接 题目大意 初始有一个数字A0, 然后给出A1,A2..An共n个数字,这n个数字每个数字分别有一 ...
- 关于myBatis的问题There is no getter for property named 'USER_NAME' in 'class com.bky.model.实例类'
现在流行的 ssm(spring + struts2 + myBatis) 持久层的mybatis是需要配置映射器的,找了个demo连接的数据库是MySQL 于是就修改了一下弄成了连接Oracle的 ...
- C#程序集系列12,C#编译器和CLR如何找寻程序集
本篇体验C#编译器和CLR运行时如何查找程序集,并自定义CLR运行时查找程序集的方式. □ C#编译器和CLR运行时如何查找程序集 C#编译器在哪里?--在C:\Windows\Microsoft.N ...
- 算法:基于 RingBuffer 的 Deque 实现
背景 前两篇文章介绍了 Queue 的实现,很多类库都引入了 Deque,Deque 可以两头添加和删除,然后在 Deque 之上构建 Queue 和 Stack. Deque 代码 using Sy ...
- python笔记26-命令行传参sys.argv实际运用
前言 平常我们在用别人写好的python包的时候,在cmd输入xx -h就能查看到帮助信息,输入xx -p 8080就能把参数传入程序里,看起来非常酷. 本篇就来讲下如何在python代码里加入命令行 ...