使用 loop device 制作安装镜像
看了下,手上的镜像中,文件系统才 100 多兆,但是整个镜像居然要 4G, 这意味着,我每次安装这个镜像到 SD 卡都要花很多没必要的时间。
所以,我提取了一些关键内容,然后,准备重新打包镜像。
1.新建空文件。因为文件系统只有 100M,加上其它杂七杂八内容,顶多 200M,所以,先生成一个 200M 的空文件:
$dd if=/dev/zero of=test.img bs=1M count=
2. 将空文件关联到 loop device。然后,查看哪个 loop device 是空闲的:
$sudo losetup -f
/dev/loop0
看到 loop0 空闲,那么,我们可以放心的把 loop0 关联到 test.img 文件:
$sudo losetup /dev/loop0 test.img
3. 对 loop deivce 进行分区。因为手上的镜像中有两个 ext4 类型的分区,所以,还要新建两个分区。其中,第一个分区的起始位置还有大小,以及第二个分区的起始点,是在 boot 时要用到的,所以就直接参考原镜像了。
使用 fdisk 对 /dev/loop0 进行分区:
sudo fdisk /dev/loop0
4. 将 loopdev 上的分区 map 出来。分区完后,我们并不能直接立马看到 loop device 的分区,而是要用下面语句添加 loop0 上个分区的设备文件节点:
$ sudo kpartx -av /dev/loop0
add map loop0p1 (:): linear /dev/loop0
add map loop0p2 (:): linear /dev/loop0
如此,我们就准备好了用来安装镜像的 loop 设备,以及可以安装文件系统的两个分区。把我们需要的文件 dd 到合适位置就可以了。
这里的 /dev/loop0 相当与我们使用 U 盘或 SD 卡时候的 /dev/sdx;而 /dev/mapper/loop0p1 和 /dev/mapper/loop0p2 则相当于 /dev/sdc1 和 /dev/sdc2。
完成后,需要逆向的操作来取消关联:
sudo kpartx -dv /dev/loop0 sudo losetup -d /dev/loop0
到此,新的 image 文件就制作好了,已经可以直接 dd 到 sd 卡上用来启动系统。
ps: 文件系统重新打包
其实过程和上面一样,只不过,这个 loop device 只有一个分区:
$ dd if=/dev/zero of=new.img bs=1M count= $ mkfs.ext4 -q new.img $ e2label new.img rootfs $ sudo mount -o loop new.img /media/test/ $ cp /media/iso/* /media/test/ -r -P
最新文章
- [数据库事务与锁]详解六: MySQL中的共享锁与排他锁
- NOIP2009靶形数独[DFS 优化]
- Minimum Path Sum [LeetCode]
- centOS6.5安装SUN-jdk7
- 【zoj2562】反素数
- 多年的.NET开发,也只学会了这么几招
- 2014-5-23 s3c2440到手
- Linux的线程同步对象:互斥量Mutex,读写锁,条件变量
- 自定义错误页面mvc用法
- C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】
- ==,=和equals()区别
- 工厂方法模式(Java与Kotlin版)
- bitcms内容管理系统 3.1版源码发布
- node.js核心模块
- Spring 数据处理框架的演变
- BlockQueue 解析
- 一文读懂HTTP/2及HTTP/3特性
- ubuntu装好jupyter启动失败问题
- ftp服务器搭建及简单操作
- 在Prism 框架中,实现主程序与模块间 UI 的通信
热门文章
- 自定义的圆形ProgressBar
- Button 在布局文件中定义监听器,文字阴影,自定义图片,代码绘制样式,添加音效的方法
- Ubuntu 查找文件的方法
- 基于Otsu算法的图像自适应阈值切割
- 在linux下 用p7zip 命令行下 解压 iso文件
- tfjob的一篇文章,跟公司内使用方式类似
- go语言之进阶篇主协程先退出导致子协程没来得及调用
- libcurl库的http get和http post使用【转】
- [PowerShell Utils] Automatically Change DNS and then Join Domain
- Set Matrix Zeroes leetcode java