最終更新日 …
$Date: 2003-06-15 13:18:05+09 $
操作ミスや機器の故障等でファイルが失われると困る,
というのは誰にでも想像できるだろう.
しかし,その真の悲劇性はまさに体験した者にしかわからない.
# 修論,博論の〆切まぎわになってファイルを失い,1年を棒にふったという伝説はよく聞くところだ.
特に unix では「いったん失われたファイルは回復できない」ため,
windows などの OS よりもその危険性は間近にあるといえる.
そうした悲劇の主人公にならないために,
ファイルのコピーを事前に(別の場所に)保存しておくのが
「バックアップ」である.
本講義では,バックアップに使われる通常の手順,方法について学習し,
いざというときに泣かないだけの能力を身につけることを目的とする.
バックアップの基本は,
「コピーは物理的に隔離せよ」
である.
これは,ファイルを失う要因の一つに火事や地震などの災害による機器故障があるから,
ということを考えれば分かりやすい.
実際,ちょっとした規模の企業はどこもコンピュータ上のデータを日本の各地に分散してバックアップしている.
さて,では物理的にはどのような機器にバックアップすれば良いのだろうか.
もちろん,データを格納できるのならば何でも良いのである.
紙に鉛筆で,というのだって,それで間に合う情報ならばそれで良いのである.
ここでは,阪大教育用計算機システムで用いることのできる記憶媒体を中心に,
バックアップに使えるものを解説する.
名称 | 解説 |
---|---|
ハードディスク |
大量のデータを格納するには,現在はハードディスクがもっとも割安だというのは良く知られた事実である.
よって,大量のデータを「異なる」ハードディスクに格納して バックアップとする,というのは良い手段である. 例えば自宅の PC のハードディスクなどは, 大学から物理的にも隔離されているので,十分によいバックアップ先である. ただし,ハードディスクは「消耗品」であり,ある程度使用すると ほぼ必ず壊れるという点には注意が必要である. 大学のシステムは物理的にいじることができないため,異なるハードディスクへのデータ転送は ネットワーク経由か,別の記憶媒体経由ということになる. ネットワーク経由のデータ転送法については,後の講義で示す. |
DVD-R, CD-R, MO, ZIP 等の(光)磁気媒体 |
ハードディスクについで割安なバックアップが可能な記憶媒体である.
普及率が高く,媒体が入手しやすいのも魅力である. ただし,一枚あたりの記憶容量が数百MB 〜数GB 程度であり, 大量のデータをバックアップするにはつらいことがある. 阪大教育用計算機システムでは, CD-ROM には /mnt/cdrom で,MO には /mnt/mo で,ZIP には /mnt/zip で,アクセスできるだろう. 例えば具体的には(マウント作業を行った後 or auto-mount された後), cp -p ファイル /mnt/mo
で MO へファイルをコピーできる… と思われる.
が, こうしたリムーバブルディスク関係はシステムに依存するところが非常に大きいので, 安全に使うためには, 「利用の手引」の リムーバブルディスクの使い方 を参照し,それに従うのが良いだろう. |
磁気テープ |
個人ユーザで使うには高価であるが,
一本あたりの記憶容量が 数百GB クラスのものもあるため,
大量データのバックアップに適している記憶媒体.
プロ用の媒体とも言える.
ただし,テープの性質上,機敏な操作性は期待できない. 一定の時間をおいて全ファイルをバックアップする等の定期的なバックアップに向いている. 個人ユーザで使うことはほぼ無いだろうから,使い方の解説は省略する. ただし,歴史的にはもっとも良く使われてきた媒体であるため,unix 関連の参考資料には非常に頻繁に解説が掲載されている. |
フロッピーディスク |
価格も安く,入手しやすいため,お手軽な媒体である.
しかし,通常は 1.44MB,特殊なものでもやっと 120MB 程度の容量しかないため,
本格的な記憶媒体には向かない.
環境の設定ファイル,小さめのテキストファイル(TeXファイルや html ファイル) などには十分なので,うまく使えばそれなりに役に立つ. 阪大教育用計算機システムでは, /mnt/floppy でアクセスできるだろう.
例えば具体的には,
cp -p ファイル /mnt/floppy
でフロッピーディスクへファイルをコピーできる… と思われる.
が,これもやはり安全に使うためには, 「利用の手引」の リムーバブルディスクの使い方 を参照し,それに従うのが良いだろう. また,フロッピーディスクの使い方については, フロッピーを用いたデータ交換について に詳しい解説があるので,一読しておくと良い. |
紙(と鉛筆) |
古典的であるが,意外と馬鹿にできない媒体である.
少量のデータを高速に記録するには実はもっとも適した媒体かも知れない.
使い方は説明するまでもないだろう(^-^). |
脳みそ | うまく使えれば最高の記憶媒体である. 格納したデータをコンピュータに入出力するのには時間がかかるのと, データが簡単に失われたり変質したりするのが欠点である. |
大量のファイルに対する同一の処理(ファイルのバックアップなど)を施す際には, 一つのファイルにまとめてから処理する,というのが unix でよく用いられる手法である. これには,
という利点がある. そこで,複数のファイルを一つのファイルにまとめる方法について解説する.
ファイルを一つにまとめるには,unix では伝統的に
tar
コマンドが用いられる.
なお,tar でまとめたファイルには,
.tar
という拡張子をつけるのが習慣である.
以下に,典型的な tar の使い方の例を示そう.
詳しくはマニュアルで調べること.
tar cvf backup.tar ./dummy
tar xvpf backup.tar
tar xvpf backup.tar ./dummy/dd.tex
実習
適当なディレクトリとファイルを対象にして,
上の3つの作業を行ってみよ.
適当なファイルが見当たらない者は,次のような内容のシェルスクリプトを作って使うのもよい.
(空っぽなファイルを適当な数だけ作るスクリプト例)
#!/bin/sh
x=0
while [ $x -le 10 ]
do
touch dummy-$x.txt
x=`expr $x + 1`
done
(日本では) windows や dos で良く使われる lha
というコマンドも,
最近は unix でも使えることが多い.
lha は,ファイルを一つにまとめる機能とファイル圧縮機能の両方を持つため,
手軽に良い結果が得られるということで人気がある.
なお,lha でまとめたファイルには,
.lzh
という拡張子をつけるのが習慣である.
また,windows とファイルをやり取りするときなどは lha の方が tar
よりも適していることも多い.
そこで,lha についても記しておく.
lha a backup.lzh ./dummy
lha x backup.lzh
lha a backup.lzh ./dummy/dd.tex
実習
du -k ~/dummy
ls -lg dummy.lzh
で byte 単位でファイルサイズがみられる(圧縮後のサイズ).
ファイルを一つにまとめると扱いが便利になるというのは既に学習した.
しかし,これだけでは,ファイルサイズの無駄はあまり削られない.
もし,データを失うことなくファイルサイズを小さくすることができれば,バックアップでは何かと都合が良い.
この希望は実現されている.
この技術,つまり,
情報理論の結果を駆使してデータはそのままでファイルサイズを小さくする技術がファイル圧縮である.
注意
画像の jpeg ファイルや,音声の mp3 ファイルなどは,
それ自体が既に圧縮した形式であるので,
圧縮ツールを使って圧縮してもほとんど効果がないことがほとんどである.
むしろファイルサイズが大きくなってしまうことがあるぐらいなので,
こうしたファイルを圧縮しようという無駄なことはしないように.
unix でファイル圧縮に用いるツールは,
compress
,
gzip
,
bzip2
,
lha
などが挙げられよう.
このうち,もっとも良く使われるのは
gzip
であり,もっとも性能のよいのは(総合的に見て)
bzip2
であろう.
よって,unix では
「tar でひとまとめにしてから gzip (or bzip2)で圧縮する」
というのが主流の方法であり,これはよく
「tar + gzip(or bzip2)」 などと表記されるので覚えておくと良い.
# ファイル圧縮技術は情報理論技術の精華であるため,
現在でも多くの研究者やソフトウェア開発者がしのぎを削って
日々新しいソフトウェアを開発,発表している.
# 最新のものの方がもちろん全体的な性能は良いのだが,
これまでの圧縮ファイルと互換性が無いため,
ツールの乗り換えはタイミングが難しい.
# ちなみに,たぶんこれからは bzip2 が主流になっていくだろう.
compress は unix では非常に古くからある圧縮ツールであるが,
悪名高き某社の特許に抵触する可能性があるとされる.
また,性能も低く,そのため,現在はまったく使われないと言ってもよいツールではあるが,
古典から学ぶところもあるだろうから,学習しておこう.
なお,compress で圧縮したファイルには拡張子
.Z
が付加される.
さて,圧縮するファイル名は dummy.txt として,以下に使い方を例示しよう.
compress dummy.txt
dummy.txt.Z
という圧縮されたファイルができるはずである.
uncompress dummy.txt
.Z
は指定しなくても良い.
実習
次に,比較的新しいがその優秀さからたちまち広く使われるようになった
gzip について学習しよう.
なお,gzip で圧縮したファイルには拡張子
.gz
が付加される.
さて,圧縮するファイル名は dummy.txt として,以下に使い方を例示しよう.
gzip dummy.txt
dummy.txt.gz
という圧縮されたファイルができるはずである.
gunzip dummy.txt.gz
実習
次に,かなり新しく,たいていの場合において gzip よりも優秀である
bzip2 について学習しよう.
なお,bzip2 で圧縮したファイルには拡張子
.bz2
が付加される.
さて,圧縮するファイル名は dummy.txt として,以下に使い方を例示しよう.
bzip2 dummy.txt
dummy.txt.bz2
という圧縮されたファイルができるはずである.
bunzip2 dummy.txt.bz2
実習
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
というコマンドだけ覚えておけば他は忘れてもなんとかなるということである.
実習
以下の手順に従い,rcs を試してみながら理解せよ.
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
ロック機構がほぼ無効なモードにする.
このモードでは,ロックされていないファイルでもチェックインできる…
があまりお勧めしない.
以下に示された課題について
AppliedMath-Report-08
という題名をつけて e-mail にて教官宛にレポートとして提出せよ(教官のメールアドレスは授業中に口頭で伝える).
なお,レポートを e-mail の代わりに TeX で作成した書面にて提出してもよい.
課題内容