命令行下制作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卡