使用linux裁剪树莓派完整sd卡镜像
2016-01-06 17:26
1151 查看
解决了最小镜像的制作问题以后,就发现手里已经积攒了不少用Win32DiskImager制作的完整sd卡镜像。虽然压缩过了以后很小,但是在恢复镜像时32G大小的写入速度简直慢到龟速,所以我通过Ubuntu来裁剪一下完整的sd卡镜像。
首先,准备镜像与系统。我用的是Ubuntu 14。
然后安装必要的软件
一、挂载img
在系统中将镜像挂载到loop设备中
二、挂载boot分区与root分区
创建img_temp文件夹将镜像文件挂载到该文件夹
这时候可以看到镜像的分区这时候我们需要将boot与root加载到临时文件夹中。
boot分区的结尾为12880,root分区为磁盘结尾。
三、初始化空白img
boot分区固定大小为57344KB
root分区大小可以通过du命令来查看
这里注意:boot 【size】+linux【Used】+分区损耗【因为格式转换,所以会损耗5%~10%】=镜像实际大小
四、格式化空白img
首先建立虚拟磁盘并分区
第一个分区为boot分区,采用FAT32格式,由sector 8192开始到sector 12879
第二个分割区采用EXT4,由sector 122880开始到空白img结尾。
然后格式化虚拟磁盘分区
loopdevice:执行 losetup 连接 img 文件的 loop device
device:执行完 kpartx 后,虚拟磁盘代号。
partBoot:由 device 加上 p1 组合而成的 FAT32 虚拟磁盘分区。
partRoot:由 device 加上 p2 组合而成的 EXT4 虚拟磁盘分区。
五、开始备份
boot分区为fat32格式,可以直接利用cp命令直接拷贝
linux分区为ext4格式,需要利用dump & restore备份
六、备份完毕,卸载所有虚拟磁盘
裁剪前
裁剪后
裁剪完之后只剩3G左右
此时,镜像已经裁剪完毕,可以通过dd或者Win32DiskImager将裁剪后生成的raspberrypi.img写入sd卡。
另外贴出在树莓派内部生成镜像的方法
首先,准备镜像与系统。我用的是Ubuntu 14。
然后安装必要的软件
sudo apt-get install dosfstools dump parted kpartx
一、挂载img
在系统中将镜像挂载到loop设备中
sudo losetup /dev/loop0 shumeipai.img
二、挂载boot分区与root分区
创建img_temp文件夹将镜像文件挂载到该文件夹
mkdir -p img_temp/boot/ mkdir -p img_temp/root/ sudo kpartx -av /dev/loop0
这时候可以看到镜像的分区这时候我们需要将boot与root加载到临时文件夹中。
boot分区的结尾为12880,root分区为磁盘结尾。
#loop0p6、loop0p7根据实际情况修改 boot="/dev/mapper/loop0p6" root="/dev/mapper/loop0p7" sudo mount $boot img_temp/boot/ sudo mount $root img_temp/root/
三、初始化空白img
boot分区固定大小为57344KB
root分区大小可以通过du命令来查看
这里注意:boot 【size】+linux【Used】+分区损耗【因为格式转换,所以会损耗5%~10%】=镜像实际大小
#df为镜像实际大小 df=`sudo du -shk img_temp/root/|awk '{print $1}'` df=`echo $df |awk '{print int($1*1.1+57344)}'` sudo dd if=/dev/zero of=raspberrypi.img bs=1K count=$df
四、格式化空白img
首先建立虚拟磁盘并分区
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
第一个分区为boot分区,采用FAT32格式,由sector 8192开始到sector 12879
第二个分割区采用EXT4,由sector 122880开始到空白img结尾。
然后格式化虚拟磁盘分区
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[1-9])p.*/\1/g' | head -1` device="/dev/mapper/${device}" partBoot="${device}p1" partRoot="${device}p2" sudo mkfs.vfat $partBoot sudo mkfs.ext4 $partRoot
五、开始备份
boot分区为fat32格式,可以直接利用cp命令直接拷贝
sudo mount -t vfat $partBoot /media sudo cp -rfp img_temp/boot/* /media/ sudo umount /media
linux分区为ext4格式,需要利用dump & restore备份
sudo mount -t ext4 $partRoot /media/ cd /media sudo dump -h 0 -0uaf - $root | sudo restore -rf - cd sudo umount /media
六、备份完毕,卸载所有虚拟磁盘
sudo kpartx -d $loopdevice sudo losetup -d $loopdevice sudo umount img_temp/boot sudo umount img_temp/root sudo rm -rf img_temp sudo kpartx -d /dev/loop0 sudo losetup -d /dev/loop0
裁剪前
裁剪后
裁剪完之后只剩3G左右
此时,镜像已经裁剪完毕,可以通过dd或者Win32DiskImager将裁剪后生成的raspberrypi.img写入sd卡。
另外贴出在树莓派内部生成镜像的方法
相关文章推荐
- Percona XtraBackup(CENTOS,REDHAT)
- Linux学习笔记:printf
- CentOS 配置mysql允许远程登录
- 【Linux】Ubuntu下C语言访问MySQL数据库入门
- CentOS 修改mysql的密码
- 轻松学习之Linux教程一 ubuntu14.04+windows双系统安装
- Backup and restore the disk table on linux
- centos启动流程
- 根据centos系统启动过程定位故障位置
- CentOS系统启动流程和系统初始化
- linux system函数返回值问题
- linux下的stdin,stdout和stderr理解
- CentOS 6.X 关闭不需要的 TTY 方法
- linux怎么更改屏幕分辨率?linux屏幕分辨率的设置教程
- centos修改DNSresolv.conf后重启系统恢复原状
- linux下小记
- linux下tty,控制台,虚拟终端,串口,console(控制台终端)详解
- 64位程序core分析
- Linux进程间通信方式
- Linux常用的压缩与归档命令