img文件挂载成一个文件系统,修改树莓派的镜像文件,写入镜像———后续
昨天写了一篇文章。但是当时对于这个的理解还不够,以至于我后面又遇到了一些问题。这里再重新整理一下,供大家参考。我先重述一下我要做的事情。我电脑系统是windows,里面安装了一个Ubuntu虚拟机。我从官网上下载了一个树莓派img镜像。但是因为工作的需要,我得修改这个img镜像,然后这个img镜像可以批量的写入到tf卡中,别人拿到这个修改的镜像烧入存储卡就能用。这里知识点特别多,我一点一...
昨天写了一篇文章。但是当时对于这个的理解还不够,以至于我后面又遇到了一些问题。这里再重新整理一下,供大家参考。
我先重述一下我要做的事情。
我电脑系统是windows,里面安装了一个Ubuntu虚拟机。我从官网上下载了一个树莓派img镜像。但是因为工作的需要,我得修改这个img镜像,然后这个img镜像可以批量的写入到tf卡中,别人拿到这个修改的镜像烧入存储卡就能用。
这里知识点特别多,我一点一点说。
首先看镜像内的分区。
镜像这个时候还没被烧入(写入)存储卡中。这个时候,我们单独看一下这个镜像的分区。然后进行挂载。
查看的方式很简单,就是使用
fdisk -l ***.img(imgpath)
这里我举一个例子。
fdisk -l /home/guo/Desktop/2018-06-27-raspbian-stretch-lite.img
执行这个指令之后,我们能看到
Disk /home/guo/Desktop/2018-06-27-raspbian-stretch-lite.img: 1.8 GiB, 1862270976 bytes, 3637248 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4d3ee428
Device Boot Start End Sectors Size Id Type
/home/guo/Desktop/2018-06-27-raspbian-stretch-lite.img1 8192 96663 88472 43.2M c W95
/home/guo/Desktop/2018-06-27-raspbian-stretch-lite.img2 98304 3637247 3538944 1.7G 83 Linu
这里,我们能看到单位扇区的大小是512字节。并且,下面有两个设备。一个是img1,类型是W95,另一个是img2,类型是linux.
其实img1对应的就是boot分区,而img2,就是根分区。
boot分区和根分区
boot分区为fat32格式,挂载在/boot,存放一些系统启动需要的基本文件,包括内核、驱动、firmware、启动脚本等;根分区文件系统是ext4格式,挂载于/,存放一些安装的软件和库文件、系统配置、用户数据等等;另外当系统启动时会自动生成和挂载一些必要的其他文件夹,包括temfs、sysfs、proc、debugfs、configfs等(使用mount可以看到他们)
当然,我遇到的问题是需要对两个分区同时做修改,这样的话,就需要同时去挂载两个分区为两个文件系统,并且进行修改。
同时挂载两个分区
上一篇文章中,我讲了如何挂载根分区。很明显,boot分区也是类似的方式。但是如果你试了之后,会发现挂载了一个分区之后,另一个分区会出问题。另一个根本挂不上。
在参考了raspberrypi.org上的一个问题之后,我找到了解决的办法。
先贴出来
mount ***.img /Volumes/boot -t vfat -o rw,loop,offset=4194304,sizelimit=45297664
这里解释一下这个命令。
***.img就是要挂载的文件镜像。
/Volumes/boot就是要挂载的位置。
-t 是类型,boot分区的类型是fat32,而vfat刚好可以兼容fat32,所以用vfat. 而root盘这里会用ext4.
rw, 这里是可读写
offset是偏移量,这里的偏移量对应的就是最开始查看的img1和img2对应的start * 扇区大小。这里boot盘就是8192 * 512.
和上次唯一不同的一点是这里加了一个参数,sizelimit.这个值的计算方法是 end * 扇区大小。这里的boot盘就是96663*512=45297664.
这个值在你要区分不同的分区的时候非常有用,加上之后,就可以同时挂载两个系统了。
挂载上了之后,就可以对两个系统做修改了。
修改的方式就是进入挂载的目录下,进行修改
例子中对应的就是/Volumes/boot/
修改之后
修改了之后,首先umount 挂载的虚拟文件系统。
example
umount /Volumes/boot
卸载了两个分区之后,把tf卡(存储卡)插入到电脑上,然后准备烧制镜像到存储卡。
这里我给出linux下的烧制命令。不需要安装软件。
sudo dd bs=4M if=***.img of=/dev/sdd
这里的if就是输入,这里就是输入的镜像。
输出就是我们的硬盘设备。
这里的硬盘设备我们可以通过查看fdisk -l 来看。
除了可以根据存储卡的大小来看,我们可以看插入存储卡前后,新增了什么设备来判断。
当然,你可能看到类似sdd1和sdd2这样的,这个时候,你需要umount sdd1 和sdd2, 比如我这里就是
umount /etc/sdd1
umount /etc/sdd2
取消了这两个挂载之后,就可以使用上面的命令进行存储卡的烧制。当然,这个命令特别危险,如果没有选好输出,后果可能会格盘。一年前我就干过这事。。。
当然,还有一个特别好用的软件Etcher,感谢老大的推荐,这个软件mac, linux, window都有,特别容易上手。并且,特别安全。速度很快。
我这里整理一下Ubuntu上的安装和使用。
安装:
1.添加源
$echo "deb https://dl.bintray.com/resin-io/debian stable etcher" | sudo tee /etc/apt/sources.list.d/etcher.list
2.信任密钥
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61
3.更新并安装
sudo apt-get update
sudo apt-get install etcher-electron
因为是图形化界面的,只需要在图形化页面下搜索Etcher,然后你肯定会用。
参考:
http://conanwhf.github.io/2016/08/25/rpi-cloneimg/
https://www.raspberrypi.org/forums/viewtopic.php?t=190154
https://www.jianshu.com/p/53f7e78fd9f1
https://blog.csdn.net/qq_19175749/article/details/52700246
更多推荐
所有评论(0)