linux写入img树莓派,【树莓派】制做树莓派所使用的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-getinstall dosfstools

sudo apt-getinstall dump

sudo apt-getinstall parted

sudo apt-get install kpartx

内容以下:工具

#!/bin/sh

sudo ddif=/dev/zero of=raspberrypi.img bs=1MB count=4000sudo 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 -1loopdevice=`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

f4871bf764747a09f7d4d9e38f321186.png

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

买树莓派的时候只想到存储空间大能多存的东西因而买了个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-getinstall dosfstools

sudo apt-getinstall dumpsudo apt-getinstall parted sudo apt-getinstall kpartx

2、生成新的img文件

先df -h查看下树莓派实际使用空间而后在决定生成文件大小,下面命令生成块大小为1MB总大小为2500MB的镜像文件

sudo dd if=/dev/zero of=raspberrypi.img bs=1MBcount=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 8192s122879ssudo 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命令备份文件

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

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 ddif=/dev/zero of=raspberrypi.img bs=1MB count=2500sudo 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 -1loopdevice=`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

其他参考:

制做树苺派SD卡备份镜像——树苺派系统备份与还原指南:http://blog.lxx1.com/1450

使用GHO方式制做镜像:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值