以下の問答集は,著者のもとにしばしばよせられる質問のうちFAQに適したものを集 めたものです.ここに追加した方がいいと思われる質疑応答がございましたら,どう か著者までお知らせ下さい.(ただし,「答え」の方も同信してくださいね!)
ftape を使用した場合のバックアップ・復旧速度はかなりのものです.
著者は Colorado DJ-20/Adaptec 1542CF コントローラーを使用していますが, sustained データ (非圧縮,IDE ディスク上のファイルをテープへ転送.70M バイト tar アーカイブ作成時) の転送速度で毎分 4.25M バイトという数字を達成しています. ftape の速度を決定する最大の要素は FDC の転送速度です.AHA1542CF は post-1991 82077 と称する FDC を使用しており,テープドライブ転送速度 1Mbit/sec を実現 しています.500Kbit/sec しかサポートしていない FDC を使っている場合には, 転送速度は上述した数字の約半分程度にまで低下することでしょう.
方法は二つあります.トレースレベルの初期値を変更し (ftape-rw.c
にある
tracing
という変数を変更する) コンパイルをやりなおすというのが
一つの方法です.もう一つの方法は,以下のコマンドを実行するというやり方です.
mt -f /dev/ftape fsr <tracing-level>
mt のコマンドである fsr を利用するのはいささかハッカー的手法です.このコマン ドは恐らくいつのまにかなくなってしまうか,変更されてしまうものと思われます.
できません.DOS 用ソフトは DOS ファイルシステムのレイアウトに適した形に QIC-80 の特性を設定します.従って,DOS フォーマットを読み書きできるような プログラムを作成するのには (恐らく) 若干の困難がつきまといます. 使いやすいユーザーインターフェースを作ろうとしたりすれば, 困難は一層大きくなるにちがいありません.
これこそtarに関する質問の極めつけと言えましょう.マニュアルページとインフォ
ページをお読みください.もしどちらもお持ちでない場合には,
tar --help 2>&1 |more
をやってみましょう.
お使いの tar が v1.11.1 以前のバージョンの場合には,v1.11.2 へのバージョン
アップを検討してください.このバージョンは GNU zip を直接呼び出す機能を
備えています (つまり,-z
オプションが使えるのです).また強力な
ヘルプ機能も内蔵しています.
誠に遺憾ながら「SVGA カード及びイーサネットカードの一部には,自分自身のアドレ スを正確にデコードできないものがある」と申し上げなければなりません.これが問 題となるのは,ftape のバッファが 0x1a0000 と 0x1c0000 の間にある場合です.DMA の書き込みサイクルが clobbered し,それ以外の書き込みバイトが不正な値 (0xff) となってしまいます.この問題が報告されているのは,SVGA, ethernet カードです. ATI の 16 ビット VGA カードの一種がこの問題を引きこすことがすでに知られて います.
最も安直な解決法は,元凶となっているカードを8ビットスロットに差し替えること です(カードのトランスファーを8ビットに変更するだけでは不十分な場合が多いよ うです).ftape のバッファ域を VGA の範囲から移動するというのは部分的な解決にし かなりません.Linux が使用する全 DMA バッファがこの問題を引き起こす可能性がある からです.次の一点をはっきりさせておきましょう「これは ftape とは一切関係のな いトラブルです」
insmod
が「the kernel version is wrong」というエラー
メッセージを発行します.insmod
というプログラムは,現行カーネルのバージョンと ftape を
コンパイルしたときのカーネルバージョンを次の二つの方法でチェックする機能を
備えています.ftape のモジュールに記録されているカーネルバージョンと
現行カーネルのバージョンを直接比較するというのが一つの方法です.カーネルと
ftape のいずれもがバージョンシンボルを使ってコンパイルされている場合には,
「使用されているシンボルを比較する」という今ひとつの方法が用いられます.
v2.7.0 以降の GCC をお使いの場合には,モジュールユーティリティを gcc v2.7.x で 再コンパイルする必要があります.
新しいバージョンの insmod なら,バージョンが正しくない場合にもモジュールを強 制的にカーネルに挿入することができます.
make config
を実行する際の質問の一つである CONFIG_MODVERSIONS
を yes にしておくと,カーネルが外に送り出すシンボル (つまり,
ローダブルモジュールが「見る」ことのできるシンボル) はすべて,call/return
パラメーターのタイプに関らず checksum を含む分だけ大きくなります.
こうしておくと insmod によって,カーネル内の変数・関数の定義が ftape の
コンパイル時以降変化したかどうかを確認することが可能になります.
こうしておけば,安全性は高まります.古いモジュールを使っても,カーネルがクラ ッシュすることはなくなるからです.
カーネルに ksyms.c
というパッチを当てていますか?まだなら,上記の
「カーネルのコンパイル 早分かり」の節を参照してください.
このエラーが出るのは,フォーマットしたてのテープを消去していないからです.
ftape は独自の方法でへッダセグメントを解釈するので,テープ上に 'magic header'
が必要なのです (つまり,ファイルマーク).この問題は, '
mt -f /dev/nftape erase
' を実行すれば解決します.
以下のツール類はいずれも GNU プロジェクトが開発したものです.従って,ソース及 びマニュアルページは,世界各地の ftp サイトで入手できます (ftp.funet.fi, tsx-11.mit.edu, sunsite.unc.eduを含む).また,GNUの公式ホームサイトである prep.ai.mit.edu [18.71.0.38]:/pub/gnu. からも取得できます.
1996年1月10日現在の最新版は以下の通りです.
cpio: 2.4.1 (cpio-2.4.1.tar.gz)
dd: 3.12 (fileutils-3.12.tar.gz)
mt: 2.4.1 (cpio-2.4.1.tar.gz)
tar: 1.11.8 (tar-1.11.8.tar.gz)
gzip: 1.2.4 (gzip-1.2.4.tar.gz)
上記ツールはいずれも,Linux v1.0.4/ libc v4.5.19/ gcc v2.5.8 という環境でコ ンパイルするためのものです. mt 用パッチは ftape 配布に同梱してあります.この パッチは mt のステータスコマンドから ftape ドライブに関する有用な情報を得られ るようにするためのものです.
ftape の開発に加わろうという方,テープフォーマットプログラムなどのユーティリ ティを作ってみようという方には,該当する QIC 規格に関する情報が必要です. QIC-80, -117, -3010, and 3020. QIC-117 の各規格は,いずれもテープドライブへ 命令を転送する方法(タイミング等を含む)を規定しています.しかし,こうした情 報はおそらく必要ないでしょう.これに対し QIC-80/3010/3020 の各規格は テープレ イアウト・ECC コード・標準ファイルシステムといった「上位レベル」の部分を規定 したものです.QIC 規格の入手先を以下に掲げます.
Quarter Inch Cartridge Drive Standards, Inc.
311 East Carrillo Street
Santa Barbara, California 93101
Phone: (805) 963-3853
Fax: (805) 962-1541
注:電話帳には「Freeman Associates, Inc」の名前で掲載されています.
圧縮する場合,また一般的に考えても,出力を細かい部分に分割して tar を利用する
のには利点があります.ftape はデータを 29Kbyte のブロックに分割するので,
-b58
と指定するのが最適の解となります.
「どうして 29Kbyte なんだ」とおたずねですか? QIC-80 規格は,すべてのデータを エラー訂正コード (ECC) で保護するよう定めています.QIC-80 規格が採用している この独自のコードは「Read-Solomon (R-S) code」の名前で知られています.R-S コード は,29 バイト分の情報を受け取り,更に 3 バイトのパリティ部分を生成します. ECC コードの効率を高めるために,パリティバイトは 1K バイトのセクターを 29 個 受け取ってからのちに初めて生成されます.つまり,ftape は 29K バイトのデータと 3K バイトのパリティ情報を受け取り,総計 32K バイトを一気にテープに書き込む のです.ftape が常時 32K バイト大のブロックを読み書きし,エラーの検出・訂正を 行うようになっているのには,こうした理由があるのです.
もっと詳しいことをお知りになりたい方は,ecc.c
, ecc.h
の
両ファイルをお読みください.ここにはコードの説明と共に,R-S コードの参考書
に関する情報が記載されています.
両者の違いを知るためには,ftape は常に DOS より多い 2784 セクターを検出し ているという事情を了解しておく必要があります.
ftape が報告してくる数字は厳密なものです(もちろんですよね).正常に初期化さ れた QIC-3020 テープには 2784 の固定位置セクタがあります.各セクタの位置は, 不良セクタマップに記入してあります.定格表には次のように書かれています.
「EOT/BOT 4 セグメント中にあるトラック 5,7,9,11,13,15,17,19,21,23,25,27 は エラー発生率が高くなっています.従ってこの部分は,フォーマット時に不良セクタ としてマップし,"同じセグメントから内の全セクタが不良である" 旨を付記した上, 不良セクタマップに登録しています」
12トラックx2x4セグメントx29セクタ=2784セクタ という計算です.
ftape はテープ上に存在する利用不能セクタの実数を報告するように設計されていま す.これに対し DOS は,より楽観的な数字を報告してくるので,テープの質が優れて いるかのような印象を受けるのです.(将来的には ftape の仕様を変更し,正確な フォーマットを検出し,別々の数字を表示するようにするかもしれません.しかし,こ うした作業には低い先順位しか与えられていません.)
QIC-3010 の場合も QIC-3020 と全く同様です.