本期的《开源软件佳软介绍》,我们讨论直接写盘。
前言:略谈各种开发板常用的“系统镜像”
树莓派(Raspberry Pi)的用户经常提出这样一个问题[注A]:
为什么不能把.img镜像拷贝到SD卡中,而必须要用专门的刷卡软件?
这个问题,我们从磁盘结构讲起。磁盘内部所有的存储区域,必然分为分区表和数据区域两大块。而数据区域按分区表分区后,每个分区还被文件系统封装和管理[注B]:
分区表占据磁盘最前端的少量存储区,存储了磁盘后边广大的数据区域如何分区的重要信息。
数据区域按照分区表的规定,分割成互不影响的若干个区域。
每个分区的内部,由文件系统封装并规定了文件的存储方法。读写文件全部都在文件系统这一层的约束下。
SD卡一般是全盘一个主分区的结构。但Raspberry Pi等Linux开发板要求SD卡上有自定义的分区结构(一般是一个小FAT32一个大Ext4)。要求用户自己分区这很麻烦(甚至不可能),所以系统分发往往采用磁盘镜像文件的方式。
磁盘镜像文件就是绕过上述所有的分层结构,直接从磁盘底层原始数据的第1个字节开始一个一个读取并制成.img文件。这样所备份的原始数据,自然也就包含了分区表、上层文件系统等所有复杂的信息。
安装系统时,只要用逆向的方法,仍然绕开磁盘的上层结构,把镜像文件的内容直接写入磁盘底层,就能得到一块和镜像制作者完全一致的SD卡。从这个意义上讲,传播.img文件其实和直接转借、传递、分享SD卡本身是完全等效的。
这个逆向的写入操作就叫直接写盘。如果只把.img文件拷贝到SD卡中,那只是在文件系统这一层折腾,而没有修改磁盘前面的分区表部分,得到的卡必然和分发者的原样不一致