BigAdmin System Administration Portal
特集記事: Linux の使用法: CD への書き込みと ISO イメージの妥当性検査
Print-friendly VersionPrint-friendly Version

Linux の使用法: CD への書き込みと ISO イメージの妥当性検査

執筆者: Bob Netherton (2004 年 11 月)

この説明書は、ノートブックユーザーが ISO イメージを CD に書き込み、その内容の妥当性検査を行えるようにすることを目的としています。

ISO イメージを CDR に書き込む作業は Linux 文化の一部ですが、このプロセスの妥当性検査は、すべてのディストリビューションで同じ方法で処理できるわけではありません。 ISO イメージを書き込む際には、さらに統一性を持たせる必要があります。また、これらのイメージは、Linux または Solaris OS を実行しているプラットフォームから書き込む場合があります。 このため、プロセスを確認する時間を少しとって、光ディスクに実際に書き込まれるビットの妥当性を検査するためにできることを調べましょう。

基本的な課題は、書き込みに成功したことをどうやって知るかです。

平凡な答えは、ネットワークからダウンロードした ISO イメージの妥当性検査とまったく同様に、MD5 チェックサムを使用する方法でしょう。 しかしあいにく、答えはそれほど単純ではありません。 つまり、問題がかなりあいまいなために、この方法では CDR の妥当性検査ができない場合があり、非常に失望する可能性があります。

最初に、Sun Java Desktop System ベータドキュメントの ISO イメージを書き込む例を示します。 読みやすくするために、重要でない行は削除しています。

まず、CD-RW デバイスを選択しましょう。

# cdrecord --scanbus
Cdrecord 2.0 (i686-pc-linux-gnu) Copyright (C) 1995-2002 Jörg Schilling
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.7'

scsibus2:
        2,0,0   200) 'SONY    ' 'DVD RW DRU-510A ' '1.0a' Removable CD-ROM
        2,1,0   201) 'SAMSUNG ' 'CD-R/RW SW-248F ' 'R602' Removable CD-ROM

次に、ISO イメージを CDR に書き込みましょう。 4 つの重要な cdrecord オプションを使用すると、より便利に操作できます。

  • speed=<n>: 書き込みの速度を設定します。 強制されない限り、cdrecord は、検出できればメディア速度によってこれを制限します。 この例では、40 倍速 CDR と、48 倍速対応の IDE ライターを使用しています。
  • driveropts=burnfree: バッファーのアンダーランを防止できます。 バッファーのアンダーランは、書き込みに失敗する原因としてもっとも多く見られるため、愛情を込めて「コースター」と呼んでいます。 最新のほとんどのドライブにはアンダーラン防止機能が付いており、このコマンドオプションはそのサポートを有効にします。 cdrdao などのほかの多くのツールでは burnfree がデフォルトで有効になりますが、cdrecord では有効になりません。
  • -dao: cdrecord に対して、「セッションアットワンス」モードでディスクを書き込むよう指示します。「ディスクアットワンス」と呼ばれることもあります。 このモードは、リードアウト領域を書き込むようレーザーに指示し、デバイスにそれ以上データを書き込めないようにします。これにより、デバイスが事実上永久に閉ざされます。 burnfree と同様に、デフォルトはお勧めしません。これについてはあとで説明します。 差し当たって、-dao を使用し、何が起きるかを見てみましょう。
  • -eject: 書き込み操作の終わりに CD-ROM メディアを取り出します。 取り出すのを忘れると、正確な MD5 チェックサムを計算できず、CD の書き込みに問題があると誤って考え続けることになってしまいます。

ここで、CD に書き込みます。

# cdrecord -v dev=2,1,0 speed=40 driveropts=burnfree -dao -eject MadHatter-Beta-Docs.iso

Cdrecord 2.0 (i686-pc-linux-gnu) Copyright (C) 1995-2002 Jörg Schilling
TOC Type: 1 = CD-ROM
scsidev: '2,1,0'

Starting to write CD/DVD at speed 40 in real SAO mode for single session.
BURN-Free was 11 times used. cdrecord: fifo had 1760 puts and 1760 gets. cdrecord: fifo was 0 times empty and 911 times full, min fill was 95%.

それでは、チェックサムを比較してみましょう。

# md5sum /dev/cdrom3 MadHatter-Beta-Docs.iso
8831242df75ea5bdc2c56e7f0e9830d3  /dev/cdrom3
8831242df75ea5bdc2c56e7f0e9830d3  MadHatter-Beta-Docs.iso

大成功です。 コースターはありません。

何か問題はあるのでしょうか。

セッションアットワンスモードの -dao を指定せず、デフォルト記録モード、トラックアットワンスの cdrecord を指定した場合は、次のような問題が発生します。

# md5sum /dev/cdrom
md5sum: /dev/cdrom: Input/output error

さらに念入りに検証を試みると、次のような結果が生成されることがあります。

# dd if=/dev/cdrom bs=2048 | md5sum
dd: reading `/dev/cdrom': Input/output error
269860+0 records in
269860+0 records out
7c996f932254bfae7a24a1fba14e57bb  -

そして、コースターがあることがわかります。

問題は、最後のブロックがリードアウト領域と混同される場合があることで、一部のドライブではこれを正しく読み取れません。 このため、MD5 チェックサムが失敗します。 cdrecord-pad オプションを使用して最後のブロックを埋めることができますが、それでもチェックサムは一致しません。元の ISO イメージには存在しないデータを CD に追加したからです。

もちろん、元の ISO イメージをループバックマウントして、新規に書き込まれた CDR をマウントし、次のような処理を行うことはできます。

# mount -o ro,loop -t iso9660 `pwd`/MadHatter-Beta-Docs.iso /mnt
# mount -o ro -t iso9660 /dev/cdrom /media/cdrom
# diff -r /media/cdrom /mnt

何もレポートされない場合は成功です。 単一の ATA ドライブがあるラップトップで十分なメモリーがない場合、この処理は頻繁に行いたくありません。 これは、ISO イメージの妥当性検査を行う方法としては、消費するリソースが多すぎます。 やはり、本来の正しい指定方法が必要なことがわかるでしょう。

つまり、この話の教訓は、-pad で最後のブロックを忘れずに埋めるか、またはさらによい方法としては、-dao を使用して CDR を「セッションアットワンス」モードで書き込み、md5sum を使用して元の ISO バイナリイメージと比較することです。

ここまで、Linux について説明してきました。Solaris OS ではどうでしょうか。

Solaris 7 OS のパッチ 107645 は、部分的な最終ブロックの読み取りの問題を修正しています。 このパッチは Solaris 8 OS に統合されるので、将来のリリースではこの問題は発生しません。

Solaris プラットフォーム上の MD5 チェックサムについては、gmd5sum のコピーを探してください。これは Companion CD 上にあります。

最後の注意点は、CD ライターデバイスで、DMA モードを必ず有効にすることです。 Java Desktop System をはじめ、ほとんどの Linux ディストリビューションでは、DMA がデフォルトでオフになります。 DMA は、ブートオプション、Yast2 設定、または /etc/sysconfig/hardware 内の DEVICES_FORCE_IDE_DMA_ON 変数を使用して有効にできます。

32 ビット EIDE サポートを有効にし、割り込みをマスク解除することで、ラップトップの応答性を高めることができます。

# hdparm -d1 -c1 -u1 /dev/hdc

これにより、DMA および 32 ビット EIDE サポートが有効になり、ディスク割り込みに割り込むことができます。


Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin
  
 
BigAdmin Upgrade Hub