Linuxにおけるメディア保存・復旧ツールの使い方 (ddrescueとFdutils)

Linuxにおけるメディア保存・復旧ツールの使い方 (ddrescueとFdutils)

Linuxにおけるメディア保存・復旧ツールの使い方 (ddrescueとFdutils)

Linuxでは、損傷が想定されるレトロコンピューターのハードディスクやフロッピーディスクを取り扱うのに便利な、ddrescue[1][2]とFdutils[3]コマンドが提供されています。今回は、ddrescue[1][2]とFdutils[3]を活用する上で必須となるパラメータや、補助スクリプトとなるFdutils-aux-jp[12]を紹介します。

ddrescue

UNIXの標準的なディスク複製のコマンドとしてはdd[5]があります。ただし、ddは正常なデバイスには有効ですが、不良セクタによる読み取りエラーが発生が想定されるデバイスへの想定が不十分[6]であり、損傷が想定されるレトロコンピューターのハードディスクやフロッピーディスクのバックアップ、リストアには不適切です。

GNUのddrescue[1][2]は、デバイスの読み取りエラーを前提としたコマンドであり、不良セクタに対しての再読み込みやディスク損傷に対してアルゴリズムが最適化されています[1][2][6]。基本的にddの上位互換として利用できるため、物理やSCSIエミュレーターのハードディスクのバックアップやリストアにはddrescueを定期的に利用しています。

ddrescueには豊富なコマンドラインオプション[1][2]がありますが、ここではレトロコンピューターのデバイスを対象にする上で、有効なオプションについて列記します。

-r (--retry-passes=n)

rオプションは不良セクタが正常に読み取れるまでの再試行回数で、-1を指定すると成功するまで再試行を続けます。標準(無指定)での試行回数は0ですので、目的に応じて、適切に設定したいパラメーターです。

フロッピーディスクが対象の場合には、ディスクドライブ側を損傷を与えるような可能性がない(例:カビがない)場合、再試行により読み取れる可能性もあります。極端に言えば、再試行回数を無制限(-1)にして一晩寝て待ってみても良いでしょう。

ただし、ハードディスクが対象、特に異音がしている場合には、物理的な故障の可能性も高いため、指定する再試行回数は考慮すべきです。ある程度妥当と思われる回数を設定して、ddrescue完了後に各プラットフォームのディスク修復プログラムを実行します。

-d (--idirect)

dオプションは、直接デバイスにアクセスすることにより、復元率の向上を目的とします。ただし、ddrescueはデバイスのセクタサイズを認識できないため、後述するbオプションの指定が合わせて必要です。

-b (--sector-size=byte)

対象デバイスの管理データの最小単位であるセクタサイズを指定します。標準(無指定)では512(バイト)となりますので、フロッピーディスクである場合には、対象のセクタサイズ(256, 512, 1024)を指定します。

Fdutils

レトロコンピューターにおいても、SCSIなどの標準的なハードディスクデバイスは、ddrescue単体で運用できます。しかしながら、フロッピーディスクにおいては、IBM-PC標準以外は、基本的にメディア情報の指定が必要です。

Fdutils[3]はLinuxでのフロッピーディスク関連ツールを集めたパッケージであり、その中にフロッピーディスクコントラーを制御するsetfdprmコマンドが含まれています。ddrescueをフロッピーディスクで利用するには、このsetfdprmでのパラメータ設定の併用が必要です。

setfdprm

海外の主要機種においては、Fdutilsと一緒に配布されている「/etc/mediaprm」で定義済のため、setfdprmで簡易的な指定が可能です。しかし、残念ながら、日本のレトロコンピューターについては、一部の機種(FM-8/16など)しか含まれていません。

従って、日本のレトロコンピューターにおいては、より詳細なパラメーターを直に指定する必要があります。以下に、日本の主要なレトロコンピューターでの標準的なフォーマットを取り扱うために必要な、setfdprmのパラメーター一覧を示します。

Computer Structure Media density head cyl sect ssize stretch
FM-77 3.5 2D dd 2 40 16 256 1
FM77AV 3.5 2DD dd 2 80 16 256 -
TOWNS 3.5 2HD hd 2 77 8 1024 -
X1 5.25 2D dd 2 40 16 256 -
5.25 2HD hd 2 77 16 256 -
MZ-2500 3.5 2DD dd 2 80 16 256 -
X68000 5.25 2HD hd 2 77 8 1024 -
6601 3.5 1D dd 1 35 16 256 1
8801 5.25 2D dd 2 40 16 256 -
5.25 2HD hd 2 80 26 256 -
9801 5.25/3.5 2HD hd 2 77 8 1024 -
MSX 3.5 2DD dd 2 80 9 512 -
3.5 1DD dd 1 80 9 512 -
SMC-777 3.5 1DD dd 1 70 16 256 -
PC/AT 5.25 2HD hd 2 80 15 512 -
3.5 2HD hd 2 80 18 512 -

日本のレトロコンピューターのフロッピーディスクに対して実行するには、事前にsetfdprmで対象ディスクのパラメータを設定してから、以下のようにddrescueを実行します。

指定する必要があるのは、主に密度(density)、シリンダ数(cyl)、セクタ数(sect)、セクタサイズ(ssize)の4つです。更にレトロコンピュータによっては、メディアの片面/両面を示すヘッド数(head)、ヘッドの物理的なトラック移動幅を制御するストレッチ(stretch)の指定が必要となります。

最後に - Fdutils-auxの紹介

Linuxで、ddrescueやFdutilsは標準的なパッケージとして配布されています。例えば、Ubuntuでは以下のようにaptコマンドでインストールします。

apt intall -y fdutils gddrescue

基本的な、ddrescueとFdutilsの使い方は以上です。また、日本のレトロコンピューターのフロッピーディスクの操作を簡便にするために、補助となるコマンドをFdutils-aux-jpとして公開しましたので、ご活用ください。

また、補足になりますがFdutilsは物理フロッピディスクコントローラーを対象としたツールであり、USBフロッピードライブに利用できないこと、また上記のsetfdprmパラメーターは標準的ものであり、非標準なプロテクトされたメディアでは利用できない点は、ご了承ください。

参考資料

この記事およびFdutils-aux-jp[12]は、以下の資料および先行調査を元にしています。有難うございました。