2

本期的《开源软件佳软介绍》,我们讨论直接写盘

前言:略谈各种开发板常用的“系统镜像”

树莓派(Raspberry Pi)的用户经常提出这样一个问题[注A]

为什么不能把.img镜像拷贝到SD卡中,而必须要用专门的刷卡软件?

这个问题,我们从磁盘结构讲起。磁盘内部所有的存储区域,必然分为分区表数据区域两大块。而数据区域按分区表分区后,每个分区还被文件系统封装和管理[注B]

  • 分区表占据磁盘最前端的少量存储区,存储了磁盘后边广大的数据区域如何分区的重要信息。
  • 数据区域按照分区表的规定,分割成互不影响的若干个区域。
  • 每个分区的内部,由文件系统封装并规定了文件的存储方法。读写文件全部都在文件系统这一层的约束下。

SD卡一般是全盘一个主分区的结构。但Raspberry Pi等Linux开发板要求SD卡上有自定义的分区结构(一般是一个小FAT32一个大Ext4)。要求用户自己分区这很麻烦(甚至不可能),所以系统分发往往采用磁盘镜像文件的方式。

磁盘镜像文件就是绕过上述所有的分层结构,直接从磁盘底层原始数据的第1个字节开始一个一个读取并制成.img文件。这样所备份的原始数据,自然也就包含了分区表、上层文件系统等所有复杂的信息。

安装系统时,只要用逆向的方法,仍然绕开磁盘的上层结构,把镜像文件的内容直接写入磁盘底层,就能得到一块和镜像制作者完全一致的SD卡。从这个意义上讲,传播.img文件其实和直接转借、传递、分享SD卡本身是完全等效的。

这个逆向的写入操作就叫直接写盘。如果只把.img文件拷贝到SD卡中,那只是在文件系统这一层折腾,而没有修改磁盘前面的分区表部分,得到的卡必然和分发者的原样不一致。这就是这个新手问题的答案

请输入图片描述
▲ 用图片说明直接写盘与拷贝文件的区别。
上:只拷贝文件得到的错误结果 中:直接写盘对磁盘的影响 下:直接写盘的结果(即镜像作者期待的磁盘原样)

警告:直接写盘是一项系统特权操作,错误使用可能导致意外抹除或覆盖磁盘数据。我们关心您的数据安全,确认了软件有防止错误的必要技术手段,也在本文中提供如何安全使用的提示。但仍然必须声明:软件和本文的作者均不对使用本软件可能产生的任何损害负责。[注C]

专门针对USB存储器的直接写盘工具USB Image Tool

对于Raspberry Pi等开发板,几乎所有的新手教程都推荐使用Win32DiskImager作为系统安装工具。但这个工具问题不少:

  1. 不支持中文目录名(文件或目录有中文,会出现123错误)
  2. 只使用盘符区分不同USB设备,用户需要自行核实,不方便。
  3. 浏览文件,记不住最后使用的目录,找常用的文件很麻烦。
  4. 不支持zip或gz格式的压缩档案。
  5. 必须先插好SD卡,再开软件。
  6. 其它小问题:界面风格简陋;MD5在XP下乱码等

所以我一直推荐在Windows环境下使用USB Image Tool做USB设备的直接写盘。

usb image tool界面

使用与特色

通常使用

左侧选定磁盘后,按Restore选择一个磁盘镜像写卡。按Backup读取卡的内容制作成磁盘镜像文件。

RestoreBackup命令能够记住上次使用的文件夹位置。

如果是先开启软件再插入磁盘,可能磁盘不会立即显示出来。这时请点击Rescan刷新左侧磁盘列表。

压缩支持

读卡和写卡都支持zip和gzip压缩的.img镜像。注意.imz并非一个专门的格式,其实只是仅含有一个.img的zip压缩包。
USB Image Tool实际上也可以正确识别.zip的压缩包。(虽然没有提供这个选项。需要先选择All files (*.*)以便能够选中.zip文件。)

支持的压缩格式

收藏夹

USB Image Tool提供了Favorites标签页,可以收藏一些常用的镜像文件一键刷写,无需寻找。

请输入图片描述

重置SD卡

USB Image Tool提供了Reset功能,可以把磁盘的分区表部分全部写成0x00

这个功能用来把为树莓派等系统重新分区过(在电脑上看到容量缩小成几十MB)的卡恢复原状。重置SD卡后,拔出并重新插入,Windows就会发现分区表被全部清空,而提示用户格式化磁盘,恢复磁盘全部空间分配为一个FAT32分区的原始结构。

安全性保证

USB Image Tool的安全保证主要是两点:

  • 以设备名称区别磁盘而不是盘符。可以直接看到读卡器、U盘的设备名称和磁盘容量。
  • 默认只显示存储卡和U盘,不显示移动硬盘和本地磁盘。(Options中提供选项突破这一点)

使用软件提供的机制,简单检查就可以避免刷写错误。

但我们仍然建议您:使用直接写盘工具时,请最好保证计算机上只连入了1个需要写入的USB存储设备。(防止数据灾难,戒之慎之)

其他

  1. 中文文件和路径名称没有问题。
  2. 一个软件窗口内,多个读卡器就可以并行读写,互不干扰,无需开多个窗口
  3. 自动请求管理员特权,不会出现软件正常启动但写入时才提示权限不足

推荐给在Windows下开发Raspberry Pi等Linux开发板的用户使用。

对于Linux

Linux下使用dd命令或SUSE Image Writer图形化工具直接写盘。

遗憾

USB Image Tool是免费软件(Freeware)而非开源软件。会不会将来有人会促成作者将此软件开源,或干脆做出一个开源的等效工具呢?

项目主页与下载:http://www.alexpage.de/usb-image-tool/

注:Windows XP下运行需要.net Framework 2.0


注解

[注A] 其实是三个问题,另一个是“为什么不能直接使用台式机的Linux操作系统安装盘?”。这个问题的答案是:系统架构不同(台机=x86,开发板=ARM/MIPS),造成位于系统最最底层的机器指令层都不通用,上层的就全都更不用说了。
[注B] 这是个简略的说法。
[注C] 软件的免责条款,由许可协议中的AS IS条款规定。文章的免责条款,由CC知识共享许可协议规定。

《开源硬件佳软介绍》系列文章

《开源硬件佳软介绍》系列文章,介绍调试Raspberry Pi等开源硬件板卡,所用到的各种优秀软件。每周五更新,敬请期待!
上一篇:MobaXterm:“十项全能”的远程终端登录软件 【开源硬件佳软介绍 #1】
下一篇:待定中 :D


《USB Image Tool:Windows下的直接写盘利器》 http://segmentfault.com/a/1190000000492510
SegmentFault原创内容。部分内容使用了作者自己的旧创作。
转载使用请遵守本站相关声明。
本文作者与责任:沙渺


沙渺
21.8k 声望1.1k 粉丝

1998年入行,普通的电脑老玩家。Web、嵌入式Linux和电子产品设计研究者。


引用和评论

0 条评论