10 04 2008
用命令验证光盘的md5
刻录后发现光盘刻错了是非常郁闷的事,刻录后最好验证一下,一般刻录软件都有验证功能(k3b,Brasero都有),如果忘记开启就得手动验证。
- 完整性要就不高的,比如图片音频视频的光盘,损坏几个字节问题不大,一般刻录后复制会硬盘象征性打开一下就好,忽略掉也没问题。
- 如果系统安装盘,例如Ghost的,有个别重要文件,把那个gho复制回来验证md5就好了。
- 如果光盘里很多文件都很重要或者零零碎碎不知道哪个重要,比如自制n合一光盘,虚拟机测试不够全面。又或者手头有一只光盘不知道是不是某个镜像刻的,全盘用md5验证一下就最好。
方法如下:
- 刻录一个光盘镜像,我用了Brasero。或者放入需要验证的光盘
- 把光盘内容抓成iso镜像。按这篇文章的方法用dd命令抓回镜像
从 CD 驱动器抓取 iso 镜像:
prompt@shell$ dd if=/dev/cdrom of=/path/to/cdcopy.iso
DVD 则是:
prompt@shell$ dd if=/dev/dvd of=/path/to/dvdcopy.iso
dd命令if部分的“/dev”路径是光盘设备路径,不确定可以用命令查看
mount | grep cdrom我的命令是
dd if=/dev/scd0 of=/media/sda6/cdcopy.iso无论 cd 还是 dvd 都是“/dev/scd0”,反正Ubuntu自动挂载的。耐心等待dd抓取。
- 然后后用md5sum命令校验源iso镜像和dd抓取的md5,
md5sum /path/to/cdcopy.iso /path/to/source.iso我验证 CD 镜像,发现一样,证明没有刻录错误,光盘可以放心使用,或者用sha1sum其它命令。不过前提是刻录软件“忠实”地刻录。但是我刻录验证另一只 DVD 却失败了,刻录错误?经过研究,未必,可能刻录软件刻录时填充了一些空白数据,比如未刻满光盘封装数据之类的操作。
- 找到一个wiki页面,警告不要用这种命令
md5sum <device>
dd if=<device> | md5sum“<device>”就是“/dev/cdrom”这种路径。运行这些或许会出错,说如果添加了一些空白填充数据(padding bytes)就会出错。
- 所以要忽略掉后边的数据多余的填充数据,现计算一下源iso的大小
stat --format=%s /path/to/source.iso“path/to/source.iso”就是源iso镜像的路径,然后显示一个数字,例如123456
- 然后执行命令
head -c 123456 cdcopy.iso | md5sum把“123456”,和“cdcopy.iso”分别替换成上一条命令计算的数字和dd抓取的iso路径。再对比一下源iso的md5就行了
一次搞定
嫌上述步骤麻烦,也可以不抓取iso,通过管道一条命令搞定,不过验证dvd会很久的,修改命令后就要重新读取光驱。
dd if=/dev/cdrom | head -c `stat --format=%s /path/to/source.iso` | md5sum
一些补充:
Ubuntu的一个wiki页还有一个方法
$ dd if=/dev/cdroms/cdrom0 count=5953476 | md5sum
e41c0631f6f2c138a417b59bcb880fce
直接发dd后的数据通过管道扔给md5sum程序,这里多了个参数count,是源iso大小,所以还得自己计算block什么的,麻烦,不试了,还是抓成iso再验证好。
