コンテンツにスキップ

7. システムのメンテナンス

7.1. ソースからのインストール

7.1.1. ソースの展開

Linuxのソフトウェアはアーカイブ形式で配布される。 アーカイブはtarコマンドで作成された後、gzipbzip2xzを使って圧縮される。

アーカイブの展開と回答は以下の通り。

tar zxvf [圧縮ファイル] # .gzの場合
tar jxvf [圧縮ファイル] # .bz2の場合
tar Jxvf [圧縮ファイル] # .xzの場合
  • .gzの場合 ... gunzipgzip
  • .gzipの場合 ... bunzip2bzip2
  • .xzの場合 ... unxzxz

アーカイブの中には以下の内容が含まれることが多い。

  • ソースファイル ... C言語などで書かれたソースコード
  • ヘッダファイル ... C言語のヘッダファイル
  • configureファイル ... コンパイルに必要な環境をチェックするスクリプト
  • ドキュメント ... インストールの手順/注意事項が書かれたファイル

ソースファイルが含まれたアーカイブを展開した後、以下の手順でコンパイルからインストールを行う。

  1. ./configure
  2. make
  3. su (必要の場合)
  4. make install

なおインストール(make install)後にプログラムを起動するとき、環境変数LD_LIBRARY_PATHが正しく設定されていないと、プログラムの実行に必要な共有ライブラリを読み込むことができず、起動に失敗する事がある。

patchコマンド

差分ファイル(パッチファイル)を既存のソースコードに適用してソースコードをバージョンアップするコマンド。

patch [オプション] < [パッチファイル]
cat [パッチファイル] | patch [オプション]
オプション 説明
-d ディレクトリ 指定したディレクトリに移動して処理を行う
-p パッチファイル内に書かれたパス名を修正する(-p0: パス名を修正しない, -p1: 最後の/まで削除する, -p2: 次のディレクトリまで削除する)
-C どういう処理を行うかテストする
-R パッチの適用を取り消して戻す

7.1.2. Makefileの作成

Makefileはconfigureスクリプトにより、プログラムをコンパイルする際に必要な寛容をチェックし環境に合わせたファイル。 カレントディレクトリにあるスクリプトの実行はファイル名に./を付ける。

なおconfigureの主なオプションは以下の通り。

オプション 説明
--help 説明を表示する
-prefix=ディレクトリ インストール先のトップディレクトリを指定する

7.1.3. コンパイルとインストール

makeコマンド

Makefileに従ってソースコードをコンパイル、リンクするコマンド。 なおコンパイル後はsudo make installでインストールする。

この際のinstallターゲットと呼ばれる。

make [オプション] [ターゲット]
オプション 説明
-C ディレクトリ 指定したディレクトリに移動してから処理を実行する
--file=ファイル Makefileを指定する
-j N 同時にNのジョブを並行して実行する

またmakeのターゲットは以下のようなものがある。

ターゲット 説明
all コンパイルを行う(デフォルト)
install ソフトウェアのインストール
uninstall アンインストールする
clean コンパイル時に生成された一時ファイルを削除する

なおインストールしたものは/usr/local/bin/usr/localsbinなどに配置された。

7.2. バックアップ

7.2.1. バックアップの種類

完全バックアップ(フルバックアップ)

すべてのファイルを対象としてバックアップを行うもの。 特徴は以下の通り。

  • バックアップに時間がかかる
  • バックアップに必要な容量も大きい

差分バックアップ

前回のフルバックアップ以後に作成/変更されたファイルのみをバックアップする。 特徴は以下の通り。

  • フルバックアップより処理に時間がかからない
  • バックアップ後にはフルバックアップと最新の差分バックアップが必要

増分バックアップ

前回のバックアップ(フルバックアップ/差分バックアップ/増分バックアップ)以後に作成/変更されたファイルのみをバックアップする。 特徴は以下の通り。

  • 3種類で最も処理時間が短い
  • 復元にはフルバックアップ/それ以降の増分バックアップが必要

7.2.2. バックアップデバイス

バックアップに利用できるデバイスには以下のようなものがある。

CD-R/RW リムーバブルハードディスク

CD-R/RWは安価で容量が小さい。 リムーバブルハードディスクは高速で大容量で高価となる。

DVD-R/RW

DVD-R/RWはCD-R/RWより大容量なディスク。 容量は4.7GB~8.54GBほど。

BD-R/RE

BD-R/REはDVD-R/RWよりも大容量なメディア。 容量は約25GB~50GBほど。

特徴は以下の通り。

  • BD-Rは一度のみ書き込み/追記が可能
  • BD-REは繰り返し書き換えできる

磁気テープ

大容量で低価格のメディア。 容量は規格により異なり、また定期的に取り換える必要がある。

規格 容量
DDS4 40GB(圧縮時)
SuperDLT-300 320GB(圧縮時)
LTO Ultrium3 800GB(圧縮時)

7.2.3. オンサイトとオフサイト

バックアップの保管場所にはオンサイトオフサイトのバックアップがある。

  • オンサイト ... バックアップ対象のシステムと同一拠点にバックアップを保管する
  • オフサイト ... 別拠点にバックアップを保管する

ネットワーク経由のバックアップ

ツールではAMANDA, Balcula, BackupPC, Bareosなどでネットワーク経由でバックアップ可能。 またストレージ用のネットワーク構築にはSANが使用される。

  • AMANDA ... 1台のAmandaサーバでネットワーク内の複数のクライアントをテープ/ディスクドライブにバックアップ可能
  • Balcula ... 1台のBaculaサーバでネットワーク内の複数のクライアントを様々な記録メディアにバックアップ可能、CUI/GUIを使える
  • BackupPC ... いくつかの標準プロトコルを利用するのでクライアント不要のバックアップツール、WebUIを使用可能
  • Berous ... Baculaプロジェクトから派生したバックアップツール

7.2.3. ローカルのバックアップ

tarコマンド

tarコマンドはファイルやディレクトリを1つのアーカイブファイルにしたり、圧縮/展開するコマンド。 デフォルトで圧縮しないため、tarコマンドで圧縮を行うためには-zオプションや、-jオプションを指定する必要がある。

tar [オプション] [ファイル]
オプション 説明
-c アーカイブの作成
-x アーカイブからファイルの取り出し
-t アーカイブの内容の確認
-f ファイル名 アーカイブファイル名の指定
-z gzip による圧縮 ・ 展開
-j bzip2 による圧縮 ・ 展開
-J 7zip による圧縮 ・ 展開
-v 詳細な情報の表示
-u アーカイブ内にある同じ名前のファイルより新しいものだけを追加
-r アーカイブにファイルの追加
-N 指定した日付より新しいデータのみを対象とする
-M 複数デバイスへの分割
--delete アーカイブからファイルの削除

使用例は以下の通り。

tar jcf /dev/sdb1 - # USBメモリにホームディレクトリ

cpioコマンド

ファイルをアーカイブファイルにコピーしたり、アーカイブからファイルをコピーできるコマンド。

cpio [フラグ] [オプション]
フラグ 説明
-i オプション パターン アーカイブからファイルを抽出
-o オプション アーカイブの作成
-p オプション ディレクトリ ファイルを別のディレクトリにコピー
オプション 説明
-A 既存のアーカイブファイルに追加
-d 必要な場合にディレクトリの作成
-r ファイルを対話的に変更
-t コピーせず、入力内容の一覧表示
-v ファイル名の一覧表示

使用例は以下の通り。

ls | cpio -o > /tmp/backup

ddコマンド

入力側に指定したファイル内容をファイルもしくは標準出力に送るコマンド。 デバイス間のディスクコピーやブートドライブの作成に利用可能。

dd [オプション]
オプション 説明
if=入力ファイル 入力側の指定(標準は標準入力)
of=出力ファイル 出力側ファイルの指定(標準は標準出力)
bs=バイト数 入出力のブロックサイズを指定
count=回数 回数分の入力ブロックをコピーする

ddコマンドでは入力に以下のいずれかの特殊ファイルを指定してデータの上書きを行える。 格納されたデータを消去することが可能。

  • /dev/zero ... 16進数のデータ「0x00」を生成する特殊ファイル
  • /dev/urandom ... 擬似乱数を生成する特殊ファイル

dumpコマンド

ファイルシステム単位でext2/ext3/ext4ファイルシステムをバックアップするコマンド。 バックアップからファイルを取り出すときなどに使用でき、磁気テープにバックアップを取る際に適している

dump [オプション] [バックアップ対象]
オプション 説明
0~9 dumpレベルを指定する(0は完全バックアップ)
u バックアップ実装時に/etc/dumpdatesを更新する
f デバイス名 バックアップ装置のデバイスを指定する

dumpレベルの指定で増分バックアップが可能。 なお増分バックアップを行う際はuオプションの指定し、バックアップの記録を/etc/dumpdatesに記録する必要がある。

dump 0uf /dev/st0 /dev/sda4

磁気テープの命名規則には以下のような特徴がある。

  • /dev/st0 ... 自動巻き戻しをする
  • /dev/nst0 ... 自動巻き戻しをしない

restoreコマンド

dumpコマンドで作成したバックアップからファイルやディレクトリを取り出すコマンド。

restore [オプション] [ファイル名]
オプション 説明
r すべてのファイルを取り出す
i 対話的にファイルを取り出す
f デバイス名 バックアップ装置のデバイスを指定

mtコマンド

テープドライブを操作するコマンド。

mt [-f デバイス] [オペレーション]
オペレーション 説明
status テープの状態を表示
tell テープの現在地の表示
rewind テープを先頭に巻き戻す
fsf N テープをN個先のデータを先頭位置まで早送りにする
compression 1 ハードウェア圧縮を使用する
compression 0 ハードウェア圧縮を使用しない

使用例は以下の通り。

# テープの現在地から3つ先にあるデータの先頭位置までテープを早送り
mt -f /dev/st0 fsf 3

7.2.4. ネットワーク経由でのバックアップ

rsyncコマンド

リモートホスト間でファイルやディレクトリをコピーできるコマンド。

rsync [オプション] [ホスト名:] バックアップ元ディレクトリ [ホスト名:] バックアップ先ディレクトリ
オプション 説明
-v コピー中のファイルを表示
-a アーカイブモード(属性もそのままコピー)
-r ディレクトリ内を再帰的にコピーする
-u 変更/追加されたファイルのみをコピーする
-l シンボリックリンクをそのままコピーする
-H ハードリンクをそのままコピーする
-o 所有者をそのまま維持
-g 所有グループをそのまま維持
-t タイムスタンプをそのまま維持する
-n テスト
-z ファイルを圧縮する
-delete コピー元ファイル削除コピー先でも削除する

使用例は以下の通り。

# ローカルホスト内でdirディレクトリを/backupディレクトリ内にコピー
rsync -auv --delete dir /backup
# ローカルホスト内でdirディレクトリ内のファイルを/backupディレクトリ内にコピー
rsync -auv --delete dir/ /backup

# host12の/backupに差分保存する例
rsync -auvz --delete -e ssh dir host12:/backup

7.3. ユーザのシステム管理情報の通知

7.3.1. ログイン前後にメッセージの送信

ログイン後と前のメッセージ

ログイン前のメッセージ表示は/etc/issueに、ログイン後のメッセージ表示は/etc/motdを使うことで可能。

具体的にはメンテナンス予定やサービス停止連絡/新しいソフトウェア情報などを告知する際に使用する。

システム情報の表示

ログインプロンプト表示前にシステム情報やメッセージ/etc/issueに表示される。 記述する方法は「\r」でカーネルバージョン、「\m」でマシンアーキテクチャ、「\n」でホスト名、「\l」は端末名を表す。

7.3.2. ログイン中のユーザへのメッセージ送信

wallコマンド

wallコマンドによるメッセージ送信はログイン中のユーザに一斉に送信できる。

wall "コメント"

shutdown -kコマンド

shutdown -kコマンドでも指定したメッセージを伝える。

shutdown -k now "メッセージ"

mesgコマンド

使用中のターミナルへ他のユーザがwriteコマンドやtalkコマンドでメッセージを送信できるかどうかを制御できるコマンド。

mesg [y | n]

talkコマンド

指定したログイン中のユーザとチャットができるコマンド。

talk ユーザ[@ホスト]

writeコマンド

コマンドの後に入力したメッセージを指定したユーザのターミナルに1行ずつ送信するコマンド。

write ユーザ [tty]