> 文章列表 > 命令行下制作SD卡完整镜像

命令行下制作SD卡完整镜像

命令行下制作SD卡完整镜像

作为一个嵌入式linux开发人员,镜像的制作是基础的必不可少的操作;在命令行下制作一个镜像,这也就意味着可以通过脚本将这些过程进行自动化。

首先了解几个命令:mke2fs、mkfs.ext2、mkfs.ext3、mkfs.ext4

这几个命令都是用来制作文件系统,唯一的区别是mke2fs可以指定制作的文件系统格式,而mkfs.ext2/3/4则已经固定了文件系统的格式.

mke2fs命令参数与mkfs.ext2/3/4基本完全相同,下面列出几个常用的参数:

-t fs-type
指定文件系统类型(ext2, ext3, ext4)

-b block-size
指定每个块的大小,可用的block-size值为 1024, 2048 ,4096。块即文件系统分配物理空间的最小单位:尝试创建一个a.txt文件,即使文件内容为空,它仍然占据4K或者8K bytes的物理空间。

-L  new-volume-label
为当前制作的文件系统设置卷标,最大长度16个字节。可以类比windows下的盘符,例如 本地磁盘C:

-d root-directory
复制root-directory目录下的内容到你即将生成的文件系统中,这个选项就可以用来制作根文件系统

-F
强制生成文件系统

mke2fs命令的基本格式是:mke2fs [-t fs-type] [-b block-size] [-L  new-volume-label] [-d root-directory] outimage block-num

下面生成一个文件系统:

mke2fs -t ext4 -L pt1 -b 4096 image 262144 -F

回车就会生成一个名为image大小为1GB的ext4文件系统分区,大小1GB的原因是:每个块4096bytes,一共262144个块,也就是4KBytes * 262144=1048576 KBytes = 1048576/1024=1024MBytes=1GBytes

对分区进行挂载:
sudo mount image test
将image挂载到test目录下

cd test
进入image分区

touch 1.txt
sudo umount test

此时1.txt已经被写入了image

再次挂载即可看到你刚才创建的1.txt

整合多个分区到一个镜像中:

对于一个物理磁盘,SD卡,emmc卡来说,可以有多个分区,每个分区都可以格式化并指定一个文件系统类型,上面的过程仅仅制作了一个文件系统,如何制作一个多分区的镜像是下面将要讨论的问题。

目标:创建一个image镜像,镜像的总大小为1G,第一个分区是ext2文件系统,第二个分区是ext3文件系统,第三个分区是ext4文件系统;三个分区卷标分别为PT1 PT2 PT3

1、创建一个1G大小的image文件并写入分区表

sudo dd if=/dev/zero of=./image bs=1024K count=1024

2、将image文件虚拟为块设备并格式化三个分区为不同的文件系统

3、卸载image文件并将image文件写入u盘或者SD卡