zoukankan      html  css  js  c++  java
  • 使用 loop device 制作安装镜像

    看了下,手上的镜像中,文件系统才 100 多兆,但是整个镜像居然要 4G, 这意味着,我每次安装这个镜像到 SD 卡都要花很多没必要的时间。

    所以,我提取了一些关键内容,然后,准备重新打包镜像。

    1.新建空文件。因为文件系统只有 100M,加上其它杂七杂八内容,顶多 200M,所以,先生成一个 200M 的空文件:

    $dd if=/dev/zero of=test.img bs=1M count=200

    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 (252:0): 0 129025 linear /dev/loop0 2048
    add map loop0p2 (252:1): 0 276480 linear /dev/loop0 133120

    如此,我们就准备好了用来安装镜像的 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=130
    
    $ mkfs.ext4 -q new.img

    $
    e2label new.img rootfs

    $ sudo mount -o loop new.img /media/test/

    $ cp /media/iso/* /media/test/ -r -P
  • 相关阅读:
    【leetcode】590. N-ary Tree Postorder Traversal
    【leetcode】589. N-ary Tree Preorder Traversal
    【leetcode】402. Remove K Digits
    【leetcode】42. Trapping Rain Water
    【leetcode】32. Longest Valid Parentheses
    【leetcode】870. Advantage Shuffle
    【leetcode】22. Generate Parentheses
    BEC translation exercise 2
    New Concept English three (50)
    BEC translation exercise 1
  • 原文地址:https://www.cnblogs.com/pied/p/7798586.html
Copyright © 2011-2022 走看看