看了下,手上的镜像中,文件系统才 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

使用 loop device 制作安装镜像的更多相关文章

  1. 【树莓派】使用树莓派制作img镜像(一)

    最近一直在折腾树莓派,前几天装了10台设备,最近又来了15台开发板子.基本每台设备都需要进行如下操作: 1.安装树莓派OS,并配置键盘.时区.语言编码格式等: 2.新增组.用户.配置静态IP地址: 3 ...

  2. 【转载】Linux 通过mount -o loop 配置本地.iso镜像为yum源(yum仓库)

    原文地址:https://www.jb51.net/os/RedHat/2682_all.html 如果拷贝到本地,可以使用mount mount fileName mountPoint -o loo ...

  3. 【树莓派】使用树莓派制作img镜像(二)

    树莓派制作的镜像,需要如何使用,这里直接引用目前树莓派官方的文章,不再重复描述: 参考:http://shumeipai.nxez.com/2013/08/31/usb-image-tool.html ...

  4. [转]如何制作tizen镜像文件(图文教程)?

    http://blog.csdn.net/flydream0/article/details/9163119 之前已讲解了如何下载及编译tizen源码(http://blog.csdn.net/fly ...

  5. 使用kvm制作Eucalyptus镜像(CentOS 6.5为例)

    1.前言 Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) ...

  6. 使用kvm制作Eucalyptus镜像(Windows Server 2008r2为例)

    1.前言 Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) ...

  7. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(4)--用OZ工具制作openstack镜像

    在部署openstack云平台环境的时候,需要上传镜像到glance. 首先下载iso镜像,这里下载了centos6.5镜像,放到/usr/local/src目录下然后用OZ工具制作openstack ...

  8. OpenStack Nova 制作 Windows 镜像

    OpenStack Nova 制作 Windows 镜像   windows虚拟机ubuntuimage防火墙云计算 本贴转自http://www.vpsee.com 上次 VPSee 给 OpenS ...

  9. 制作docker-jdk7-zookeeper镜像(非集群版)

    ## 准备工作 用到的工具, Xshell5, Xftp5, jdk-7u79-linux-x64.tar.gz, zookeeper-3.4.9.tar.gz, docker.io/centos:l ...

随机推荐

  1. java 8 stream特性

    在Java 8的新功能特性中,最棒的特性就是允许我们去表达我们想要完成什么而不是要怎样做.这正是循环的不足之处.要确保循环的灵活性是需要付出代价的.return.break 或者 continue都会 ...

  2. Android系统机制解析-公共服务

    创建一个公共服务类后有两种使用方式,第一种将公共服务放到自己的项目中执行,这样外界无法訪问和控制这个公共服务类.这个服务的全部变量.函数都在自己的项目中执行.能够直接通过startIntent(Ser ...

  3. Notification详解(含工具类)

                                                                     昨天一天只写了两篇文章,效率超低.追其原因呢,其实我一直在研究noti ...

  4. Java命令学习系列(零)——常见命令及Java Dump介绍

    一.常用命令: 在JDK的bin目彔下,包含了java命令及其他实用工具. jps:查看本机的Java中进程信息. jstack:打印线程的栈信息,制作线程Dump. jmap:打印内存映射,制作堆D ...

  5. Eclipse国内镜像源配置方法

    Table of Contents 我们在国内从官网下载Eclipse以及插件非常慢,那么,有没有方法变快呢? 有,那就是使用国内的公开镜像源替换官方源. 1 下载Eclipse 首先,我们看一个链接 ...

  6. maven配置sqlServer的依赖

    配置sqlServer的依赖 <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifac ...

  7. 用JQuery 判断某个属性是否存在hasAttr的解决方法

    在jquery编码中,我们会判断元素是否存在某个属性.比如是否包含 class="new" 的样式呢.JQuery判断就非常简单了,因为有 hasClass这个方法 $(" ...

  8. 微信小程序通过api接口将json数据展现到小程序示例

    这篇文章主要介绍了微信小程序通过api接口将json数据展现到小程序示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧实现知乎客户端的一个重要知识前提就是,要知道怎么通过 ...

  9. java多线程之间的顺序问题

    java 多线程: 这样写有问题的:这样写可以的: package com.test; import java.util.concurrent.CountDownLatch; import java. ...

  10. [Functional Programming] Arrow Functor with contramap

    What is Arrow Functor? Arrow is a Profunctor that lifts a function of type a -> b and allows for ...