将当前 openwrt 系统打包成 img 的过程

openwrt,img

准备工作

  1. 2台虚拟机(虚拟机A 为没有任何操作系统的虚拟机,虚拟机B 为已完成安装的 openwrt 系统)
  2. 一个支持在线启动或者类似于U盘启动的系统,如 lubuntu 系统

镜像制作

扩容镜像

由于现有 openwrt 系统应当已经被使用,系统内有各种后装的软件,磁盘空间被增大。由于官方默认的磁盘空间仅有 256M,因此,需要将未安装任何软件的 openwrt 系统的基础磁盘空间扩大,以防后续拷贝现有 openwrt 系统时空间不足从而导致失败。

操作步骤

  • 打开使用 lubuntu 的虚拟机 A,进入 lubuntu 操作系统
  • 下载 openwrt 系统
  • 扩容操作可参考以下命令
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 查看当前磁盘状况
$ lsblk

# 解压文件(这里的 .gz 不是使用 tar 压缩得到的,而是通过 gzip 命令得到)
$ gunzip openwrt-xxx.img.gz 

# 通过 dd 命令将镜像文件拷贝到磁盘中,这时,在执行 lsblk 命令,会发现磁盘设备 /dev/sda 多出来两个磁盘分区。其实就是将 img 文件的分区格式完全拷贝到了 dev/sda 设备中。在此之前,也可以执行 sudo fdisk -l openwrt-xxx.img 命令,查看 img 文件的分区格式
$ sudo dd if=openwrt-xxx-xxx-xxx.img of=/dev/sda

# 这里对磁盘 dev/sda 下的 sda2 进行扩容,默认情况下 sda1 中存放的是启动所需文件。
# 分区时先记住 sda2 分区的起始 block 值,然后删除重新创建 sda2 分区,此时可以将 sda2 分区的值扩大到 1G 你想扩容的空间,且不删除 signature
$ sudo fdisk /dev/sda 

# 扩容 sda2 的文件系统,下面的命令适用于 openwrt 文件为 ext4 格式时。其他格式是否使用该命令记得去查询一下。
$ resize2fs /dev/sda2

# 拷贝回 img 文件,完成扩容,注意这里的 bs 和 count 的大小应保持和上面扩容的的两个磁盘大小之和一致。如果不适用 bs 和 count 来规定大小,那么 dd 默认拷贝的是 sda 磁盘的全部空间大小,也包含未使用的磁盘。
$ sudo dd if=/dev/sda of=openwrt-xxx.img.gz bs=1M count=1024

拷贝当前系统内容到已扩容的 img 文件中

  • 将上述扩容后的镜像保存到当前 openwrt 系统中
  • 将当前系统除了存放上述扩容后的 img 文件和 proc 以及 sys 以外的文件拷贝到 img 文件中
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 随便创建的用于存放 img 文件的目录,起这个名字纯粹是为了方便后续的拷贝
$ mkdir -p /zzz/img

# 将 img 文件的第二个分区挂载出来,使用 offset 的方式设置偏移量,不设置会报错。
$ sudo mount -t ext4 -o loop,offset=$((33792*512)) openwrt-xxx.img /zzz/img

# 如果有其他特殊文件可以单独拷贝...拷贝完成后取消挂载即可。
$ cp -r /[a-o]* /zzz/img
$ cp -r /[q-r]* /zzz/img
$ cp -r /[t-y]* /zzz/img
Built with Hugo
Theme Stack designed by Jimmy