最終更新日 … $Date: 2002-07-12 03:09:16+09 $
操作ミスや機器の故障等でファイルが失われると困る,
というのは誰にでも想像できるだろう.
しかし,その真の悲劇性はまさに体験した者にしかわからない.
# 修論,博論の〆切まぎわになってファイルを失い,1年を棒にふったという伝説はよく聞くところだ.
特に unix では「いったん失われたファイルは回復できない」ため,
windows などの OS よりもその危険性は間近にあるといえる.
そうした悲劇の主人公にならないために,
ファイルのコピーを事前に(別の場所に)保存しておくのが
「バックアップ」である.
本講義では,バックアップに使われる通常の手順,方法について学習し,
いざというときに泣かないだけの能力を身につけることを目的とする.
バックアップの基本は,
「コピーは物理的に隔離せよ」
である.
これは,ファイルを失う要因の一つに火事や地震などの災害による機器故障があるから,
ということを考えれば分かりやすい.
実際,ちょっとした規模の企業はどこもコンピュータ上のデータを日本の各地に分散してバックアップしている.
さて,では物理的にはどのような機器にバックアップすれば良いのだろうか.
もちろん,データを格納できるのならば何でも良いのである.
紙に鉛筆で,というのだって,それで間に合う情報ならばそれで良いのである.
ここでは,阪大教育用計算機システムで用いることのできる記憶媒体を中心に,
バックアップに使えるものを解説する.
名称 | 解説 |
---|---|
ハードディスク |
大量のデータを格納するには,現在はハードディスクがもっとも割安だというのは良く知られた事実である.
よって,大量のデータを「異なる」ハードディスクに格納して バックアップとする,というのは良い手段である. 例えば自宅の PC のハードディスクなどは, 大学から物理的にも隔離されているので,十分によいバックアップ先である. ただし,ハードディスクは「消耗品」であり,ある程度使用すると ほぼ必ず壊れるという点には注意が必要である. 大学のシステムは物理的にいじることができないため,異なるハードディスクへのデータ転送は ネットワーク経由か,別の記憶媒体経由ということになる. ネットワーク経由のデータ転送法については,後の講義で示す. |
CD-R, MO, ZIP 等の(光)磁気媒体 |
ハードディスクについで割安なバックアップが可能な記憶媒体である.
普及率が高く,媒体が入手しやすいのも魅力である. ただし,一枚あたりの記憶容量が数百MB 〜数GB 程度であり, 大量のデータをバックアップするにはつらいことがある. 阪大教育用計算機システムでは, CD-ROM には /mnt/cdrom で,MO には /mnt/mo で,ZIP には /mnt/zip で,アクセスできるだろう. 例えば具体的には, cp -p ファイル /mnt/mo
で MO へファイルをコピーできる… と思われる.
が, こうしたリムーバブルディスク関係はシステムに依存するところが非常に大きいので, 安全に使うためには, 「利用の手引」の リムーバブルディスクの使い方 を参照し,それに従うのが良いだろう. |
磁気テープ |
個人ユーザで使うには高価であるが,
一本あたりの記憶容量が 数百GB クラスのものもあるため,
大量データのバックアップに適している記憶媒体.
プロ用の媒体とも言える.
ただし,テープの性質上,細かい操作性は期待できない. 一定の時間をおいて全ファイルをバックアップする等の定期的なバックアップに向いている. 個人ユーザで使うことはほぼ無いだろうから,使い方の解説は省略する. ただし,歴史的にはもっとも良く使われてきた媒体であるため,unix 関連の参考資料には非常に頻繁に解説が掲載されている. |
フロッピーディスク |
価格も安く,入手しやすいため,お手軽な媒体である.
しかし,通常は 1.44MB,特殊なものでもやっと 120MB 程度の容量しかないため,
本格的な記憶媒体には向かない.
環境の設定ファイル,小さめのテキストファイル(TeXファイルや html ファイル) などには十分なので,うまく使えばそれなりに役に立つ. 阪大教育用計算機システムでは, /mnt/floppy でアクセスできるだろう.
例えば具体的には,
cp -p ファイル /mnt/floppy
でフロッピーディスクへファイルをコピーできる… と思われる.
が,これもやはり安全に使うためには, 「利用の手引」の リムーバブルディスクの使い方 を参照し,それに従うのが良いだろう. また,フロッピーディスクの使い方については, フロッピーを用いたデータ交換について に詳しい解説があるので,一読しておくと良い. |
紙(と鉛筆) |
古典的であるが,意外と馬鹿にできない媒体である.
少量のデータを高速に記録するには実はもっとも適した媒体かも知れない.
使い方は説明するまでもないだろう(^-^). |
脳みそ | うまく使えれば最高の記憶媒体である. 格納したデータをコンピュータに入出力するのには時間がかかるのと, データが簡単に失われたり変質したりするのが欠点である. |
ファイルのバックアップなど,大量のファイルに対する同一の処理を施す際には 一つのファイルにまとめてから処理する,というのが unix でよく用いられる手法である. これには,
という利点がある. そこで,複数のファイルを一つのファイルにまとめる方法について解説する.
ファイルを一つにまとめるには,unix では伝統的に
tar
コマンドが用いられる.
そこで,典型的な tar の使い方の例を示そう.
詳しくはマニュアルで調べること.
tar cvf backup.tar ./dummy
.tar
という拡張子をつけるのが習慣である.
tar xvpf backup.tar
tar xvpf backup.tar ./dummy/dd.tex
(日本では) windows や dos で良く使われる lha
というコマンドも,
最近は unix でも使えることが多い.
lha は,ファイルを一つにまとめる機能とファイル圧縮機能の両方を持つため,
手軽に良い結果が得られるということで人気がある.
windows とファイルをやり取りするのだ,というときは lha の方が tar
よりも適していることも多い.
そこで,lha についても記しておく.
lha a backup.lzh ./dummy
.lzh
という拡張子をつけるのが習慣である.
lha x backup.lzh
lha a backup.lzh ./dummy/dd.tex
ファイルを一つにまとめると扱いが便利になるというのは既に学習した.
しかし,これだけでは,ファイルサイズの無駄はあまり削られない.
もし,データを失うことなくファイルサイズを小さくすることができれば,バックアップでは何かと都合が良い.
この希望は実現されている.
この技術,つまり,
情報理論の結果を駆使してデータはそのままでファイルサイズを小さくする技術がファイル圧縮である.
unix でファイル圧縮に用いるツールは,
compress
,
gzip
,
lha
などが挙げられよう.
このうち,もっとも良く使われるのは
gzip
である.
よって,unix では
「tar でひとまとめにしてから gzip で圧縮する」
というのが主流の方法であり,これはよく
「tar + gzip」 などと表記されるので覚えておくと良い.
# ファイル圧縮技術は情報理論技術の精華であるため,
現在でも多くの研究者やソフトウェア開発者がしのぎを削って
日々新しいソフトウェアを開発,発表している.
# 最新のものの方がもちろん全体的な性能は良いのだが,
これまでの圧縮ファイルと互換性が無いため,
ツールの乗り換えはタイミングが難しい.
まず,非常に古典的な compress の 使い方を例で示そう. 圧縮するファイル名は dummy.txt とする.
compress dummy.txt
dummy.txt.Z
という圧縮されたファイルができるはずである.
uncompress dummy.txt
.Z
は指定しなくても良い.
次に,比較的新しいがその優秀さからたちまち広く使われるようになった gzip の使い方を例で示そう. 圧縮するファイル名は dummy.txt とする.
gzip dummy.txt
dummy.txt.gz
という圧縮されたファイルができるはずである.
gunzip dummy.txt.gz
Computer をしばらく使っていると気づくだろうが,
われわれは一つのファイルを何度も修正することがある.
このファイルが大きかったり内容が複雑だったりする場合,
修正は常に「改善」であるとは限らず,「改悪」であるかもしれない.
修正作業そのもののミスにより,意図しない修正を施してしまうこともある.
また,修正によって大事な情報を削除しないといけないというケースも存在するだろう.
こうしたとき,以前の状態のファイルを全てバックアップして保存しておけば,
こうした問題は解決できる.
つまり,「ファイルのバージョン違い版を管理する」ことが適切に行えれば良いのだ.
こうした,ファイルのバージョン変更にまつわる情報を管理するツールを
「バージョン管理ソフト」と呼ぶ.
本講義では,バージョン管理ソフトとして「RCS」を学ぶことにする.
この RCS は個人ユーザが使うのに適しており,比較的使いやすく,かつ,
unix の歴史上も由緒正しいものであり,最初に学ぶには最適である.
現在,学ぶに値するバージョン管理ソフトとしては他に RCS の進化版とも言える「CVS」がある.
CVS は,ネットワークを越えて使うことができ,複数の人間で使うのに適した機能が多い
など,
優れたツールであるが,その分,使い始めるにはやや敷居が高く,また,
個人ユーザにはやや over spec な感がある.
そこで,RCS を使いこなせるようになった者は個人的に CVS を学習するのが良い.
なお,本講義では RCS を一人で単独で使うことを前提に解説する.
複数の人間で同一ファイルを編集する際にはまた異なった注意が必要であるが,
そうした目的には CVS がより適しているので,そうした場合には CVS
を使うのが良かろう.
RCS は 1982 年には既に姿を見せていたバージョン管理ソフトであり, 古くからよく知られている. 概念はシンプルで,使うコマンドもそう複雑ではないが, 参考となる資料があればより理解も深まるだろう.
man rcsintro
RCS を理解するには,おおざっぱに言って バージョン, バージョン管理ファイル,チェックイン,チェックアウト,ロック という概念が分かれば良い. それらについて説明しよう.
dummy.tex,v
という名前になるのが普通である.
つまり,元のファイル名の末尾に ",v"
をつけたファイルがバージョン管理ファイルであると思えば良い.
rcs -l ファイル名
とするとファイルがロックされ,チェックインできるようになる.
詳しくは
rcs
を参照すること.
RCS を個人一人で用いる時は,通常は上の図にあるように
「ロックつき」でチェックイン,チェックアウトしていればまず問題はないだろう(ちょっと邪道だが).
流れをもう少し詳しく書くと,RCS では
という繰り返しで用いるのが普通である.
何か特別なことをしたい時だけ,別のことをすればよい.
極端な話,下で示す
ci -l -zLT
だけ覚えておけば他は忘れてもなんとかなる
ということである.
Sample File My name is hogehoge. なんでもいいから書け. $Id$
← この行はこのサンプルには必ず書いておくこと.$Date$
← この行はこのサンプルには必ず書いておくこと.
RCS
を作っておく.
mkdir RCS
とするだけの話だ.
ci -l dummy.txt
ci -l
は,「チェックインした後,自動的にロック付きでチェックアウト」
するという便利なコマンドである.
dummy.txt,v <-- dummy.txt enter description, terminated with single '.' or end of file: NOTE: This is NOT the log message! >>ここでは 「このファイルの内容を記述せよ」と言われているので, 後々のためにも(英語で)きちんと記入する. なお,記入し終わったら, " . "(ピリオド)のみの行を記入すれば「記入終わり」となる.
initial revision: 1.1 doneという表示が出て,バージョン 1.1 という真新しいバージョンでこのファイルが登録されたことが分かる.
RCS
の中にバージョン管理ファイルができているか確認する.
ls RCS
とすればよいだろう.
ci -l
の自動チェックアウトがうまくいったか,つまり,
チェックアウトされたファイル dummy.txt が存在するか確認する.
ls dummy.txt
とすればよいだろう.
less dummy.txt
とすればよいだろう.
どこがどう変わったかよく見てみよ.
時間がどう記述されているか,自分の腕時計などと比べてみよ.
-zLT
という特別なオプションをつけて
ci -l -zLT dummy.txt
-zLT
は,「ローカル時間を用いて時間表示を記述する」というオプションである.
RCS/dummy.txt,v <-- dummy.txt new revision: 1.2; previous revision: 1.1 enter log message, terminated with single '.' or end of file: >>という表示が出る. ここでは 「このファイルをどう変更したか記述せよ」と言われているので, 後々のためにもこれも(英語で)きちんと記入する. なお,記入し終わったら, " . "(ピリオド)のみの行を記入すれば「記入終わり」となるのも先と同様である. 今度は終了は単なる
doneと表示されるだけである.
less dummy.txt
とすればよいだろう.
どこがどう変わったかよく見てみよ.
時間の記述がどう変わったか,自分の腕時計などと比べてみよ.
rm dummy.txt
としてみれば良いだろう.
co -l -zLT dummy.txt
co
は特に指定しなければ最新バージョンのファイルを取り出す.
rcsdiff -zLT -r1.1 dummy.txt
rlog -zLT dummy.txt
ident dummy.txt
rcs
自身にはどのようなキーワードが埋め込まれているのだろうか.
調べてみよ.
上の 簡単に使ってみる の最後にも出てきたように, $Id$ や $Date$ などとファイルのなかに決まったキーワードを埋め込んでおくことで, RCS の様々な情報を自動的に記述することができる. 以下に,どのようなキーワードがあるのかを示しておく.
キーワード | 意味 |
---|---|
$Id$ |
ファイルの名前,バージョン,日時,作成者,状態,ロックした者
という情報. 大体はこれで十分だろう. |
$Header$ |
$Id$ とほぼ同じ情報になるが,ファイル名が「フルパス」
で記述される.
情報が無駄に長くなるだけなので一般にあまり使われないが, 使いたい場面もあるかも知れない. |
$Date$ | そのバージョンがチェックインされた日時. |
$Revision$ | バージョン. |
$Author$ | そのバージョンをチェックインしたユーザ名. |
$Locker$ | 現在そのファイルをロックしているユーザ名. |
$RCSfile$ | ファイル名. |
$Source$ | ファイル名.ただし,フルパス. |
$State$ |
そのバージョンの「状態」.
通常は Exp になっているだろう.
|
$Log$ |
そのチェックインの際の「変更点記述」を表示する.
ファイルが大きくなってしまうのと, rlog
で同じことができるということから,あまり使われない.
|
以下に,RCS のコマンドについて簡単な一覧を載せよう. 詳しくは man コマンドで調べれば良いが,通常はこれぐらい知っていれば十分なはずである.
-l
チェックイン後,自動的に「ロック付きで」チェックアウトする.
-u
チェックイン後,自動的に「ロックなしで」チェックアウトする.
-zLT
時間表記を「ローカル時間」で行う.
これが無いときは,グリニッジ標準時で時間表記される.
-rリビジョン番号
指定したリビジョン番号でチェックインする.
リビジョンを大きくあげたい,というときなどに用いる.
-f
ファイルが変更されていなくても強制的にチェックインする.
-l
「ロック付きで」チェックアウトする.
-u
「ロックなしで」チェックアウトする.
-zLT
時間表記を「ローカル時間」で行う.
これが無いときは,グリニッジ標準時で時間表記される.
-rリビジョン番号
指定したリビジョン番号のバージョンのファイルをチェックアウトする.
-f
既にファイルが存在していても,チェックアウトして強制的に上書きする.
-L
ロックされているファイルだけを対象とする.
-R
バージョン管理ファイル名を表示する.
-h
関連情報を表示する.
-t
関連情報を表示する.
-h オプションよりも少しだけ情報が多い.
-rリビジョン番号
指定されたリビジョン番号のファイルの情報のみを表示する.
番号1 と番号2 が与えられている
各々の二つのバージョンのファイルを比較する.
番号1 のみが与えられている
番号1 のバージョンのファイルと,現在存在するファイルとを比較する.
番号は一つも与えられていない
登録済みの最新バージョンと,現在存在するファイルとを比較する.
-l
ファイルをロックする.
-u
ファイルをロック解除する.
-L
ロックを厳密に行うモードにする(普通はデフォルト).
-U
ロック機構がほぼ無効なモードにする.
このモードでは,ロックされていないファイルでもチェックインできる…
があまりお勧めしない.