第9章 システムに関するティップ

目次

9.1. screenプログラム
9.1.1. screen(1)の使い方のシナリオ
9.1.2. screenコマンドのキーバインディング
9.2. データーの記録と表現
9.2.1. ログデーモン
9.2.2. ログアナライザー
9.2.3. シェルの活動を綺麗に記録
9.2.4. テキストデーターのカスタム化表示
9.2.5. 時間と日付のカスタム化表示
9.2.6. 着色化されたシェル出力
9.2.7. 着色化されたコマンド
9.2.8. Xアプリケーションの画像イメージの記録
9.2.9. 設定ファイルの変更記録
9.3. データー保存のティップ
9.3.1. ディスクパーティション設定
9.3.2. UUIDを使ってパーティションをアクセス
9.3.3. ファイルシステム設定
9.3.4. ファイルシステムの生成と整合性チェック
9.3.5. マウントオプションによるファイルシステムの最適化
9.3.6. スーパーブロックによるファイルシステムの最適化
9.3.7. ハードディスクの最適化
9.3.8. SMARTを用いたハードディスクの破壊の予測
9.3.9. LVMを使う使用可能なストレージ空間の拡張
9.3.10. 他パーティションをマウントする使用可能なストレージ空間の拡張
9.3.11. シムリンクを使う使用可能なストレージ空間の拡張
9.3.12. aufsを使う使用可能なストレージ空間の拡張
9.4. データー暗号化ティップ
9.4.1. dm-crypt/LUKSを使ったリムーバブルディスクの暗号化
9.4.2. dm-cryptを使ってswapパーティションを暗号化
9.4.3. eCryptfsを使って自動的にファイルを暗号化
9.4.4. eCryptfsを自動的にマウント
9.5. プログラム活動の監視と制御と起動
9.5.1. プロセスの時間計測
9.5.2. スケジューリングのプライオリティー
9.5.3. psコマンド
9.5.4. topコマンド
9.5.5. プロセスによって開かれているファイルのリスト
9.5.6. プログラム活動の追跡
9.5.7. ファイルやソケットを使っているプロセスの識別
9.5.8. 一定間隔でコマンドを反復実行
9.5.9. ファイルに関してループしながらコマンドを反復実行
9.5.10. GUIからプログラムをスタート
9.5.11. スタートするプログラムのカスタム化
9.5.12. プロセスの停止
9.5.13. タスク1回実行のスケジュール
9.5.14. タスク定期実行のスケジュール
9.5.15. Alt-SysRqキー
9.6. システム管理ティップ
9.6.1. だれがシステム上にいる?
9.6.2. 全員への警告
9.6.3. ハードウエアーの識別
9.6.4. ハードウエアー設定
9.6.5. システムとハードウエアーの時間
9.6.6. ターミナルの設定
9.6.7. 音のインフラ
9.6.8. スクリーンセーバーの無効化
9.6.9. ブザー音の無効化
9.6.10. 使用メモリー
9.6.11. システムのセキュリティーと整合性のチェック
9.7. カーネル
9.7.1. Linuxカーネル2.6
9.7.2. カーネル変数
9.7.3. カーネルヘッダー
9.7.4. カーネルと関連モジュールのコンパイル
9.7.5. カーネルソースのコンパイル: Debian標準手法
9.7.6. モジュールソースのコンパイル: Debian標準手法
9.7.7. カーネルソースのコンパイル:古典的方法
9.7.8. Non-freeハードウエアードライバー
9.8. 仮想化システム
9.8.1. 仮想化ツール
9.8.2. 仮想化の業務フロー
9.8.3. 仮想ディスクイメージファイルをマウント。
9.8.4. Chrootシステム
9.8.5. 複数のデスクトップシステム

主にコンソールからシステムを設定や管理する基本的なティップを次に記します。

9.1. screenプログラム

screen(1)は、ネットワーク接続中断をサポートするので信頼性が低く断続的な接続経由でリモートサイトをアクセスする人にとっては非常に有用なツールです。

表9.1 ネットワーク切断の中断をサポートするプログラムのリスト

パッケージ ポプコン サイズ 説明
screen * V:11, I:33 952 VT100/ANSIターミナルエミュレーションを使ってのターミナルマルチプレクサ

9.1.1. screen(1)の使い方のシナリオ

screen(1)は複数のプロセスを1つのターミナルウィンドウでうまく動作させるのみならず、接続が中断してもリモートシェルプロセスを生き延びさせる事もできます。screen(1)の使われ方の典型的シナリオは次です。

  1. リモート機器にログインします。
  2. 単一のコンソール上でscreenを起動します。
  3. ^A c ("Control-A"に続いて"c")によって作られたscreenのウィンドウ中で複数のプログラムを実行します。
  4. ^A n ("Control-A"に続いて"n")によって、複数のscreenのウィンドウ間を切り替えます。
  5. 突然ターミナルを離れる必要ができたけれども、接続を継続してあなたが実行中の作業を失いたくありません。
  6. 次のようないかなる方法ででも、screenのセッションをデタッチできます。

    • 暴力的にネットワーク接続を引き抜く
    • ^A d ("Control-A"に続いて"d")とタイプしてリモート接続から手動でログアウト
    • ^A DD ("Control-A"に続いて"DD")とタイプしてscreenをデタッチしてログアウト
  7. 同じリモート機器に(たとえ異なるターミナルからでも)再びログインします。
  8. screenを"screen -r"として起動します。
  9. screenは全アクティブなプログラムが実行されている過去の全screenウィンドウを魔法のようにリアタッチします。
[ティップ] ティップ

screenを使うと、切断してもプロセスをアクティブにしておけその後で再接続した時にリアタッチできるので、ダイヤルアップやパケット接続のような計量されたネットワーク接続での接続料金の節約ができます。

9.1.2. screenコマンドのキーバインディング

screenセッションではコマンドキーストローク以外の全てのキーボード入力は現在のウィンドウに送られます。全てのscreenコマンドキーストロークは^A("Control-A")と単一キー[プラス何らかのパラメーター]をタイプすることによって入力されます。次に覚えておくべき重要なコマンドキーストロークを記します。

表9.2 screenキーバインディングのリスト

キーバインディング 意味
^A ? ヘルプスクリーンを表示(キーバインディングを表示)
^A c 新規ウィンドウを作成しそれに切り替える
^A n 次のウィンドウに切り替える
^A p 前のウィンドウに切り替える
^A 0 0番のウィンドウに切り替える
^A 1 1番のウィンドウに切り替える
^A w ウィンドウのリストを表示
^A a Ctrl-Aを現在のウィンドウにキーボード入力として送る
^A h 現在のウィンドウのハードコピーをファイルに書く
^A H 現在のウィンドウのファイルへのロギングを開始/終了する
^A ^X ターミナルをロック(パスワードで保護)
^A d ターミナルからscreenのセッションをデタッチ
^A DD screenのセッションをデタッチしてログアウト

詳細はscreen(1)を参照下さい。

9.2. データーの記録と表現

9.2.1. ログデーモン

多くのプログラムは"/var/log/"ディレクトリーの下にそれぞれの活動を記録します。

  • カーネルログデーモン: klogd(8)
  • システムログデーモン: syslogd(8)

「システムメッセージ」「カーネルメッセージ」を参照下さい。

9.2.2. ログアナライザー

注目すべきログアナライザー(aptitude(8)で"~Gsecurity::log-analyzer")を次に記します。

表9.3 システムログアナライザーのリスト

パッケージ ポプコン サイズ 説明
logwatch * V:2, I:3 2592 綺麗な出力のPerlで書かれたログアナライザー
fail2ban * V:3, I:4 660 複数回の認証エラーを発生させるIPを使用禁止にします
analog * V:1.2, I:16 4612 ウェッブサーバーのログアナライザー
awstats * V:1.7, I:3 5100 強力で機能の多いウェッブサーバーのログアナライザー
sarg * V:1.8, I:1.9 1448 squidの分析レポートジェネレター
pflogsumm * V:0.3, I:0.7 156 Postfixログ項目サマライザー
syslog-summary * V:0.2, I:1.0 84 syslogログファイルの内容をまとめる
lire * V:0.16, I:0.18 5056 機能豊富なログアナライザーとレポートジェネレター
fwlogwatch * V:0.11, I:0.2 420 ファイアウォールログアナライザー
squidview * V:0.11, I:0.7 200 squidのaccess.logファイルのモニターと分析
visitors * V:0.08, I:0.3 228 ウェッブサーバーの高速ログアナライザー
swatch * V:0.07, I:0.2 112 正規表現マッチ、ハイライト、フック機能付きログファイルビューワー
crm114 * V:0.07, I:0.2 1300 制御可能な正規表現切断機とスパムフィルター(CRM114)
icmpinfo * V:0.05, I:0.3 84 ICMPメッセージの解釈

[注記] 注記

CRM114TRE正規表現ライブラリーを使うファジーなフィルターを書く言語インフラを提供します。そのよくある応用はスパムメールのフィルターですが、ログアナライザーとしても使えます。

9.2.3. シェルの活動を綺麗に記録

単にscript(1)を使ってシェル活動を記録すると(「シェル活動の記録」参照)、コントロール文字の入ったファイルが生成されます。このような事は次のようにしてcol(1)を使うことで避けられます。

$ script
Script started, file is typescript

何なりとします … そしてscriptから脱出するためにCtrl-Dを押します。

$ col -bx <typescript >cleanedfile
$ vim cleanedfile

(例えば、initramfs中のブートプロセスの途中のように)scriptが無い場合には、その代わりに次のようにすれば良いです。

$ sh -i 2>&1 | tee typescript
[ティップ] ティップ

gnome-terminalのような一部のx-terminal-emulatorは記録できます。スクロールバック用バッファーを拡大するのが良いかもしれません。

[ティップ] ティップ

screen(1)を"^A H"と一緒に使っても(「screenコマンドのキーバインディング」参照)コンソールの記録が録れます。

[ティップ] ティップ

emacs(1)を"M-x shell"か"M-x eshell"か"M-x term"と一緒に使ってもコンソールの記録が録れます。後で"C-x C-w"とするとバッファーをファイルに書き出せます。

9.2.4. テキストデーターのカスタム化表示

more(1)やless(1)等のページャーツール(「ページャー」参照)や、ハイライトやフォーマット用のカスタムツール(「プレーンテキストデーターをハイライトとフォーマット」参照)はテキストデーターを綺麗に表示できますが、汎用エディター(「テキストエディター」参照)が最も汎用性がありカスタム化が可能です。

[ティップ] ティップ

vim(1)やそのページャーモードのエリアスview(1)では、":set hls"とするとハイライトサーチが可能になります。

9.2.5. 時間と日付のカスタム化表示

"ls -l"コマンドによる時間と日付のデフォールトの表示形式はロケール(値は「タイムスタンプ」を参照)に依存します。"$LANG"変数が最初に参照され、それを"$LC_TIME"変数によりオーバーライドする事ができます。

実際の各ロケールでのデフォールトの表示形式は使われた標準Cライブラリー(libc6パッケージ)のバージョンに依存します。つまりDebianの異なるリリースは異なるデフォールトです。

ロケール以上にこの時間や日付の表示フォーマットをカスタム化したいと真摯に望むなら、"--time-style"引数か"$TIME_STYLE"値を使って時間スタイル値を設定するべきです(ls(1)とdate(1)と"info coreutils 'ls invocation'"を参照下さい)。

表9.4 lennyでの"ls -l"コマンドによる時間と日付の表示例

時間スタイル値 ロケール 時間と日付の表示
iso any 01-19 00:15
long-iso any 2009-01-19 00:15
full-iso any 2009-01-19 00:15:16.000000000 +0900
locale C Jan 19 00:15
locale en_US.UTF-8 2009-01-19 00:15
locale es_ES.UTF-8 ene 19 00:15
+%d.%m.%y %H:%M any 19.01.09 00:15
+%d.%b.%y %H:%M Cまたはen_US.UTF-8 19.Jan.09 00:15
+%d.%b.%y %H:%M es_ES.UTF-8 19.ene.09 00:15

[ティップ] ティップ

例えば"alias ls='ls --time-style=+%d.%m.%y\ %H:%M'"とするコマンドエリアスを使うことでコマンドライン上に長いオプションを入力しなくてよくなります(「コマンドエリアス」を参照下さい)。

[ティップ] ティップ

このような isoフォーマットはISO 8601に準拠しています。

9.2.6. 着色化されたシェル出力

殆どの現代的なターミナルへのシェル出力はANSIエスケープコードを使って着色化できます("/usr/share/doc/xterm/ctlseqs.txt.gz"を参照)。

例えば、次を試してみて下さい:

$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"

9.2.7. 着色化されたコマンド

着色化されたコマンドは対話環境で出力を検査するのに便利です。私は、私の"~/.bashrc"に次を含めています。

if [ "$TERM" != "dumb" ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=always'
    alias ll='ls --color=always -l'
    alias la='ls --color=always -A'
    alias less='less -R'
    alias ls='ls --color=always'
    alias grep='grep --color=always'
    alias egrep='egrep --color=always'
    alias fgrep='fgrep --color=always'
    alias zgrep='zgrep --color=always'
else
    alias ll='ls -l'
    alias la='ls -A'
fi

エリアスを使うことで色効果を対話コマンド使用時に限定します。こうするとless(1)等のページャープログラムの下でも色を見られるので、環境変数"export GREP_OPTIONS='--color=auto'"をエキスポートするより都合が良いです。他のプログラムにパイプする際に色を使いたくないなら、先ほどの"~/.bashrc"例中で代わりに"--color=auto"とします。

[ティップ] ティップ

このような着色するエリアスは、対話環境でシェルを"TERM=dumb bash"として起動することで無効にできます。

9.2.8. Xアプリケーションの画像イメージの記録

xtermの表示を含めた、Xアプリケーションの画像イメージを記録するにはいくつか方法があります。

表9.5 画像の操作ツールのリスト

パッケージ ポプコン サイズ コマンド
xbase-clients * V:7, I:52 140 xwd(1)
gimp * V:12, I:47 13472 GUIメニュー
imagemagick * V:14, I:34 316 import(1)
scrot * V:0.3, I:1.4 80 scrot(1)

9.2.9. 設定ファイルの変更記録

DVCSシステムを使って設定ファイルの変更を記録する専用ツールがあります。

表9.6 VCS中に設定の履歴を記録するパッケージのリスト

パッケージ ポプコン サイズ 説明
etckeeper * V:0.6, I:1.0 372 Git (デフォールト)かMercurialBazaarを使って設定ファイルとそのメタデーターを保存(新規)
changetrack * V:0.07, I:0.10 152 RCSを使って設定ファイルを保存(旧式)

git(1) which put entire "/etc"全てをVCSのコントロール下に置くように、git(1)とともにetckeeperパッケージを使うことをお薦めします。そのインストール案内とチュートリアルは"/usr/share/doc/etckeeper/README.gz"にあります。

本質的に"sudo etckeeper init"を実行すると、"/etc"に関するgitレポジトリーが、徹底的な手順を踏む特別のフックスクリプト付きでちょうど「設定履歴記録のためのGit」と同様に初期化されます。

あなたが設定を変える毎に、普通にgit(1)を使って記録できます。パッケージ管理コマンドを使うと、変更に関して上手に毎回自動記録もします。

[ティップ] ティップ

"/etc"の変更履歴を閲覧するには、"sudo GIT_DIR=/etc/.git gitk"と実行すると、新規インストールされたパッケージや削除されたパッケージやパッケージのバージョンの変化が一目瞭然です。

9.3. データー保存のティップ

Linuxのlive CDsとかレスキューモードでdebian-installer CDsであなたのシステムをブートすることでブートデバイス上のデーターストレージの再設定が簡単にできるようになります。「バイナリーデーター」も参照下さい。

9.3.1. ディスクパーティション設定

ディスクのパーティションの設定に関して、fdisk(8)は標準と考えられてきていますが、parted(8)も注目に値します。"ディスクパーティションデーター"や"パーティションテーブル"や"パーティションマップ"や"ディスクラベル"は全て同意語です。

殆どのPCでは、ディスクのパーティションデーターが最初のセクターつまりLBAセクター 0 (512バイト)に保持される、古典的なマスターブートレコード(MBR)方式が使われています。

[注記] 注記

新規のIntelベースのMacのような拡張ファームウェアインターフェイス(EFI)付きの一部PCでは、ディスクパーティションデーターをセクターの最初以外に保持するGUID Partition Table (GPT)方式が使われています。

fdisk(8)はディスクパーティションツールの標準でしたが、parted(8)がそれを置き換えつつあります。

表9.7 ディスクパーティション管理パッケージのリスト

パッケージ ポプコン サイズ GPT 説明
util-linux * V:90, I:99 2292 非サポート fdisk(8)とcfdisk(8)を含む雑多なシステムユーティリティー
parted * V:1.1, I:8 164 サポート GNU Parted ディスクパーティションとリサイズのプログラム
gparted * V:3, I:37 3404 サポート libpartedベースのGNOMEパーティションエディター
qtparted * V:0.18, I:1.3 764 サポート libpartedベースのKDEパーティションエディター
gptsync * V:0.01, I:0.15 72 サポート 古典的MBRパーティションテーブルをGPTパーティションテーブルと同期
kpartx * V:1.2, I:2 132 サポート パーティション用のデバイスマッピングを作成するプログラム

[注意] 注意

parted(8)はファイルシステムを生成やリサイズも出きるということですが、そのようなことはmkfs(8) (mkfs.msdos(8)とmkfs.ext2(8)とmkfs.ext3(8)と…)とかresize2fs(8)等の最もよくメンテされている専用ツールを使って行う方がより安全です。

[注記] 注記

GPTMBR間で切り替えるには、ディスクの最初数ブロックの内容を直接消去し(「ファイル内容の消去」参照)、"parted /dev/sdx mklabel gpt"か"parted /dev/sdx mklabel msdos"を使ってそれを設定する必要があります。ここで"msdos"がMBRのために使われていることを覚えておきます。

9.3.2. UUIDを使ってパーティションをアクセス

あなたのパーティションの再設定やリムーバブルストレージメディアの起動順序はパーティションの名前を変えることになるかもしれませんが、それに首尾一貫してアクセスできます。もしディスクが複数ありあなたのBIOSがそれに首尾一貫したデバイス名をつけない時にも、これは役に立ちます。

  • "-U"オプションを使ってmount(8)を実行すると"/dev/sda3"のようなファイル名を使うのではなくUUIDを使ってブロックデバイスをマウントできます。
  • "/etc/fstab"(fstab(5)参照)はUUIDを使えます。
  • ブートローダー(「2段目: ブートローダー」)もまたUUID を使えます。
[ティップ] ティップ

ブロックスペシャルデバイスのUUIDvol_id(8)を使って見極められます。

[ティップ] ティップ

リムーバブルストレージメディア等のデバイス名は、必要ならudev rulesを使って静的になります。「udevシステム」を参照下さい。

9.3.3. ファイルシステム設定

ext3ファイルシステム用にe2fsprogsパッケージは次を提供します。

  • 新規のext3ファイルシステムを作成するためのmkfs.ext3(8)
  • 既存のext3ファイルシステムをチェックと修理するためのfsck.ext3(8)
  • ext3ファイルシステムのスーパーブロックを設定するためのtune2fs(8)

mkfs(8)とfsck(8)コマンドは各種ファイルシステム依存プログラム(mkfs.fstypefsck.fstype)のフロントエンドとしてe2fsprogsにより提供されています。ext3ファイルシステム用は、mkfs.ext3(8)とfsck.ext3(8)で、それぞれmke2fs(8)とe2fsck(8)にハードリンクされています。

類似コマンドがLinuxによってサポートされる各ファイルシステム用にあります。

表9.8 ファイルシステム管理用パッケージのリスト

パッケージ ポプコン サイズ 説明
e2fsprogs * V:59, I:99 2104 ext2/ext3/ext4ファイルシステムのためのユーティリティー
reiserfsprogs * V:3, I:10 1200 Reiserfsファイルシステムのためのユーティリティー
dosfstools * V:3, I:27 224 FAT ファイルシステムのためのユーティリティー(Microsoft: MS-DOS, Windows)
xfsprogs * V:2, I:11 3036 XFSファイルシステムのためのユーティリティー(SGI: IRIX)
ntfsprogs * V:2, I:14 676 NTFSファイルシステムのためのユーティリティー(Microsoft: Windows NT, …)
jfsutils * V:0.6, I:3 1112 JFSファイルシステムのためのユーティリティー(IBM: AIX, OS/2)
reiser4progs * V:0.08, I:0.7 1268 Reiser4ファイルシステムのためのユーティリティー
hfsprogs * V:0.07, I:0.7 284 HFSHFS Plusファイルシステムのためのユーティリティー(Apple: Mac OS)
btrfs-tools * V:0.04, I:0.2 1024 btrfsファイルシステムのためのユーティリティー
zerofree * V:0.07, I:0.6 56 ext2/3ファイルシステムのフリーブロックをゼロにセットするプログラム

[ティップ] ティップ

Ext3ファイルシステムはLinuxシステムのデフォールトので、特段使わない理由が無い限りそれを使うことを強くお薦めします。Linuxカーネル2.6.30(Debian squeeze)以降、ext4ファイルシステムが使えるようになり、Linuxシステムのデフォールトのファイルシステムとなると期待されています。btrfsファイルシステムは、Linuxシステムのext4ファイルシステムの次のデフォールトのファイルシステムとなると期待されています。

[警告] 警告

まだ新しいのでext4を使うと色々制約があるかもしれません。例えば、ext4パーティションのサイズ変更をするにはLinuxカーネルが2.6.30以降でなければいけません。

[ティップ] ティップ

一部のツールはファイルシステムへのアクセスをLinuxカーネルのサポート無しでも可能にします(「ディスクをマウントせずに操作」参照)。

9.3.4. ファイルシステムの生成と整合性チェック

mkfs(8)コマンドはLinuxシステム上でファイルシステムを生成します。fsck(8)コマンドはLinuxシステム上でファイルシステムの整合性チェックと修理機能を提供します。

[注意] 注意

一般的にfsckマウントされているファイルシステムに行うことは安全ではありません。

[ティップ] ティップ

ブートスクリプトから実行されるfsck(8)コマンドの結果を"/var/log/fsck/"中のファイルからチェックします。

[ティップ] ティップ

"shutdown -F -r now"を使うことでリブートの際に強制的にルートファイルシステムを含む全てのファイルシステムに関してfsck(8)コマンドを安全に実行します。詳細はshutdown(8)マンページを参照下さい。

9.3.5. マウントオプションによるファイルシステムの最適化

ファイルシステムのパーフォーマンスや性格はそれに使われるマウントオプションによって最適化できます(fstab(5)とmount(8)参照)。

  • "defaults"オプションはデフォールトのオプションが次の意味です: "rw,suid,dev,exec,auto,nouser,async"。(一般的)
  • "noatime"もしくは"relatime"オプションは読出しアクセスを高速化するのに非常に効果的です。(一般的)
  • "user"オプションは通常ユーザーがファイルシステムをマウント出来るようにします。このオプションは"noexec,nosuid,nodev" オプションの組み合わせの意味です。(一般的、CDやfloppyに使用)
  • "noexec,nodev,nosuid"generalオプションの組み合わせはセキュリティーの強化に使われます。(一般的)
  • "noauto"オプションは明示的操作のみにマウントを制限します。(一般的)
  • ext3fsへの"data=journal"オプションは、書込み速度を犠牲ににしますが、停電時のデーター整合性を強化します。
[ティップ] ティップ

ルートファイルシステムに非デフォールトのジャーナルモードを設定するには、例えば"rootflags=data=journal"等の、カーネルブートパラメーター(「2段目: ブートローダー」参照)を与える必要があります。lennyの場合、デフォールトのジャーナルモードは"rootflags=data=ordered"です。squeezeの場合、デフォールトのジャーナルモードは"rootflags=data=writeback"です。

9.3.6. スーパーブロックによるファイルシステムの最適化

tune2fs(8)コマンドを用いてファイルシステムのスーパーブロックによってファイルシステムを最適化できます。

  • "sudo tune2fs -l /dev/hda1"を実行するとそのファイルシステムスーパーブロックを表示します。
  • "sudo tune2fs -c 50 /dev/hda1"を実行するとファイルシステムのチェック(ブートアップ時のfsck実行)の頻度を50回のブート毎に変更します。
  • "sudo tune2fs -j /dev/hda1"の実行はext2からext3へとファイルシステム変換してファイルシステムにジャーナリングの機能を追加します。(アンマウントしたファイルシステムに対して実行します。)
  • "sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1"の実行はファイルシステムをext3からext4に変換します。(アンマウントしたファイルシステムに対して実行します。)
[警告] 警告

ext4ファイルシステムへのブートデバイスのファイルシステム変換はGRUBブートローダーがext4ファイルシステムをよくサポートしインストールされたLinuxカーネルバージョンが2.6.30以降となるまではしないでおくべきです。

[ティップ] ティップ

tune2fs(8)は、その名前にもかかわらず、ext2ファイルシステムに機能するだけでなくext3とかext4ファイルシステムに関しても機能します。

9.3.7. ハードディスクの最適化

[警告] 警告

ハードディスクの設定はデーターの整合性にとって非常に危険な事なので、その設定をさわる前にお使いのハードウエアーをチェックしhdparam(8)のマンページをチェックします。

例えば"/dev/hda"に対して"hdparm -tT /dev/hda"とするとハードディスクのアクセス速度をテストできます。(E)IDEを使って接続された一部のハードディスクでは、"(E)IDE 32ビットI/Oサポート"を有効にし"using_dmaフラグ"を有効にし"interrupt-unmaskフラグ"を設定し"複数16セクターI/O"を設定するように、"hdparm -q -c3 -d1 -u1 -m16 /dev/hda"とすると高速化できます(危険です!)。

例えば"/dev/sda"に対して"hdparm -W /dev/sda"とするとハードディスクの書込みキャッシュ機能をテストできます。"hdparm -W 0 /dev/sda"とするとハードディスクの書込みキャッシュ機能を無効にできます。

不良プレスのCDROMを現代的な高速CD-ROMドライブで読むには、"setcd -x 2"としてそれを減速して使えば読めるかもしれません。

9.3.8. SMARTを用いたハードディスクの破壊の予測

smartd(8)デーモンを使うとSMARTに文句を言うハードディスクの監視と記録ができます。

  1. BIOSSMART機能を有効にします。
  2. smartmontoolsパッケージをインストールします。
  3. df(1)を使ってリストすることであなたのハードディスクを識別します。

    • 監視対象のハードディスクを"/dev/hda"と仮定します。
  4. SMART機能が実際に有効となっているかを"smartctl -a /dev/hda"のアウトプットを使ってチェックします。

    • もし有効でない場合には、"smartctl -s on -a /dev/hda"として有効にします。
  5. 次のようにしてsmartd(8)デーモンを実行します。

    • "/etc/default/smartmontools"ファイル中の"start_smartd=yes"をアンコメントします。
    • "sudo /etc/init.d/smartmontools restart"としてsmartd(8)デーモンを再実行します。
[ティップ] ティップ

smartd(8)デーモンは、警告の通知の仕方を含めて/etc/smartd.confファイルを用いてカスタム化できます。

9.3.9. LVMを使う使用可能なストレージ空間の拡張

インストール時に論理ボリュームマネージャー(LVM)(Linux機能)上に作られたパーティションは、大掛かりなシステムの再設定無しに複数のストレージデバイスにまたがるLVM上のエクステントを継ぎ足したりその上のエクステントを切り捨てることで簡単にサイズ変更が出きます。

[注意] 注意

現行のLVMシステムを採用すると、ハードディスクの書込みキャッシュ機能を無効にしてパーフォーマンスを犠牲にしないと、ext3fs等のジャーナルファイルシステムによって提供されるファイルシステムの破壊に対する保証を劣化させるかもしれません。

9.3.10. 他パーティションをマウントする使用可能なストレージ空間の拡張

空のパーティションがあれば(例えば"/dev/sdx")、それをmkfs.ext3(1)を使ってフォーマットし、それをあなたが空間をより必要とするディレクトリーにmount(8)することができます。(元来あったデーター内容はコピーする必要があります。)

$ sudo mv work-dir old-dir
$ sudo mkfs.ext3 /dev/sdx
$ sudo mount -t ext3 /dev/sdx work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
[ティップ] ティップ

上記の代わりに、空のディスクイメージファイル(「空のディスクイメージ作成」参照)をループデバイスとしてマウントする(「ディスクイメージファイルをマウント」参照)事もできます。実際のディスク使用は実際にデーターを溜め込むとともに成長します。

9.3.11. シムリンクを使う使用可能なストレージ空間の拡張

使える空間がある他のパーティション中に空のディレクトリーがあれば(例えば"/path/to/emp-dir")、そのディレクトリーへln(8)を使ってシムリンクを作成することができます。

$ sudo mv work-dir old-dir
$ sudo mkdir -p /path/to/emp-dir
$ sudo ln -sf /path/to/emp-dir work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
[注意] 注意

一部のプログラムは"ディレクトリーへのシムリンク"ではうまく機能しないかもしれません。

9.3.12. aufsを使う使用可能なストレージ空間の拡張

他のパーティション中に使える空間があれば(例えば"/path/to/")、その中にディレクトリーを作りaufsを使って空間を必要とするディレクトリー上に積み重ねることができます。

$ sudo mv work-dir old-dir
$ sudo mkdir work-dir
$ sudo mkdir -p /path/to/emp-dir
$ sudo mount -t aufs -o br:/path/to/emp-dir:old-dir none work-dir
[注意] 注意

aufsを長期間のデーターのストレージに使うのは、まだ開発中でそのデザイン変更が問題を引き起こすかもしれないので感心しません。

[ティップ] ティップ

aufsを使うには、そのユーティリティーパッケージaufs-toolsaufs-modules-2.6-amd64等のaufsのためのカーネルモジュールパッケージをインストールする必要があります。

[ティップ] ティップ

aufsは多くの現代的ライブCDプロジェクトによって書込み可能なルートファイルシステムを提供するのに使われています。

9.4. データー暗号化ティップ

あなたのPCへの物理的アクセスがあると、誰でも簡単にroot特権を獲得できあなたのPCの全てのファイルにアクセスできます(「rootパスワードのセキュリティー確保」参照)。これが意味するところは、あなたのPCが盗まれた場合にログインのパスワードではあなたのプライベートでセンシティブなデーターを守れないと言うことです。それを達成するにはデーターの暗号化技術を適用しなければいけません。GNUプライバシーガード (「データーセキュリティーのインフラ」参照)はファイルを暗号化できますが、少々手間がかかります。

dm-crypteCryptfsは最小限のユーザー努力でできる自動的なデーターの暗号化をLinuxのカーネルモジュールその物を使って提供します。

表9.9 データー暗号化ユーティリティーのリスト

パッケージ ポプコン サイズ 説明
cryptsetup * V:3, I:5 952 暗号化されたブロックデバイス(dm-crypt / LUKS)のためのユーティリティー
cryptmount * V:0.15, I:0.5 308 ノーマルユーザーによるマウント/アンマウントに焦点を当てた暗号化されたブロックデバイス(dm-crypt / LUKS)のためのユーティリティー
ecryptfs-utils * V:0.16, I:0.2 464 暗号化されたスタックドファイルシステム(eCryptfs)のためのユーティリティー

Dm-cryptdevice-mapperを使う暗号学的ファイルシステムです。Device-mapperは1つのブロックデバイスをもう1つのブロックデバイスにマップします。

eCryptfsはスタックドファイルシステムを使うもう1つのファイルシステムです。スタックドファイルシステムはマウントされたファイルシステム上の既存のディレクトリーの上に重ね合わせます。

[注意] 注意

データーの暗号化にはCPU時間等の負担がかかります。その利益と負担の両天秤をします。

[注記] 注記

debian-installer (lenny以降)を使うと、dm-crypt/LUKSとinitramfsを使って、全Debianシステムを暗号化したディスク上にインストールできます。

[ティップ] ティップ

ユーザー空間での暗号化ユーティリティーに関しては「データーセキュリティーのインフラ」を参照下さい: GNUプライバシーガード

9.4.1. dm-crypt/LUKSを使ったリムーバブルディスクの暗号化

例えば"/dev/sdx"にあるUSBメモリースティックのようなリムーバブルストレージデバイスの内容をdm-crypt/LUKSを使って暗号化できます.それを単に次のようにフォーマットします。

# badblocks -c 10240 -s -w -t random -v /dev/sdx
# shred -v -n 1 /dev/sdx
# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup luksOpen /dev/sdx1 sdx1
...
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root  10, 60 2008-10-04 18:44 control
brw-rw---- 1 root disk 254,  0 2008-10-04 23:55 sdx1
# mkfs.vfat /dev/mapper/sdx1
...
# cryptsetup luksClose sdx1

こうすると暗号化されたディスクは、現代的なGNOMEのようなデスクトップ環境ではgnome-mount(1)を使ってパスワードを聞く以外は通常のディスクと同様に"/media/<disk_label>"にマウントできます(「リムーバブルストレージデバイス」参照)。全て書込まれるデーターが暗号化されている点が相違点です。上記と違い、例えば"mkfs.ext3 /dev/sdx1"を使ってext3等の異なったフォーマットで記録メディアをフォーマットしても良いです。

[注記] 注記

もしデーターのセキュリティーが本当に偏執狂的に気になるなら、上記例で複数回の重ね書きをする必要があるかもしれません。でもこの操作は非常に時間がかかります。

9.4.2. dm-cryptを使ってswapパーティションを暗号化

オリジナルの"/etc/fstab"が次の内容と仮定します。

/dev/sda7 swap sw 0 0

dm-cryptを使ってswapパーティションの暗号化を次のようにして有効にします

# aptitude install cryptsetup
# swapoff -a
# echo "cswap /dev/sda7 /dev/urandom swap" >> /etc/crypttab
# perl -i -p -e "s/\/dev\/sda7/\/dev\/mapper\/cswap/" /etc/fstab
# /etc/init.d/cryptdisks restart
 ...
# swapon -a

9.4.3. eCryptfsを使って自動的にファイルを暗号化

eCryptfsecryptfs-utilsパッケージを使うことで、"~/Private/"の下に書かれるファイルを自動的に暗号化できます。

  • ecryptfs-setup-private(1)を実行してプロンプトに従って"~/Private/"を設定します。
  • ecryptfs-mount-private(1)を実行して"~/Private/"を有効にします。
  • センシティブなデーターファイルを"~/Private/"に移動し、必要に応じてシムリンクを作成します。

    • 候補: "~/.fetchmailrc"、"~/.ssh/identity"、"~/.ssh/id_rsa"、"~/.ssh/id_dsa"、"go-rwx"を持つ他のファイル
  • センシティブなデーターディレクトリーを"~/Private/"中のサブディレクトリーに移動し、必要に応じてシムリンクを作成します。

    • 候補: "~/.gnupg"、"go-rwx"を持つ他のディレクトリー
  • デスクトップ操作がしやすいように"~/Desktop/Private/"から"~/Private/"までのシムリンクを作成します。
  • ecryptfs-umount-private(1)を実行して"~/Private/"を無効にします。
  • 暗号化されたデーターが必要な際に"ecryptfs-mount-private"を実行して"~/Private/"を有効にします。
[ティップ] ティップ

eCryptfsはセンシティブなファイルのみを選択的に暗号化するので、そのシステムへの負担はdm-cryptを全ルートとか"/home"デバイスとかに使うよりはるかに少ないです。eCryptfsは特段のディスク上のストレージの割り当て努力の必要はありませんが、全てのファイルシステムメタデーターを秘匿することはできません。

9.4.4. eCryptfsを自動的にマウント

もしあなたのログインパスワードを暗号化キーを包むのに使っている場合には、"/etc/pam.d/common-auth"中の"pam_permit.so"のすぐ前に次に記す行があるようにすることでPAM (プラグ可能な認証モジュール: Pluggable Authentication Modules)を使ってeCryptfsを自動的にマウントできます。

stableシステムのための"/etc/apt/sources.list"ファイルに次の行を追加します。

auth required pam_ecryptfs.so unwrap

"/etc/pam.d/common-session"中の最後のに次の行を挿入します。

session optional pam_ecryptfs.so unwrap

"/etc/pam.d/common-password"の最初の有効行を次の行を挿入します。

password required pam_ecryptfs.so

これは非常に便利です。

[警告] 警告

PAMの設定エラーをすると、あなた自身のシステムからあなたを締め出すかもしれません。4章認証を参照下さい。

[注意] 注意

もしあなたのログインパスワードを暗号化キーを包むのに使っている場合には、あなたの暗号化されたデーターのセキュリティーはあなたのユーザーログインパスワードと同程度です(「良好なパスワード」参照)。注意深く強力なパスワードを設定していないと、あなたのラップトップを誰かが盗んだ後にパスワード破りソフトを実行すれば、あなたのデーターは危険にさらされます(「rootパスワードのセキュリティー確保」参照)。

9.5. プログラム活動の監視と制御と起動

プログラム活動は専用ツールを用いて監視と制御できます。

表9.10 プログラム活動の監視と制御のツールのリスト

パッケージ ポプコン サイズ 説明
coreutils * V:91, I:99 11792 nice(1): スケジューリングの優先順位の変更してプログラムを実行
bsdutils * V:72, I:99 184 renice(1): 実行中プロセスのスケジューリングの優先順位を変更
procps * V:86, I:99 656 "/proc"ファイルシステムのユーティリティー: ps(1)とtop(1)とkill(1)とwatch(1)等
psmisc * V:49, I:86 548 "/proc"ファイルシステムのユーティリティー: killall(1)とfuser(1)とpstree(1)とpstree(1)
time * V:6, I:85 152 time(1): 時間に関するシステムリソース使用状況を報告するためにプログラムを実行
sysstat * V:3, I:7 1172 sar(1)、iostat(1)、mpstat(1)、…: Linux用のシステムパーフォーマンスツール
isag * V:0.05, I:0.4 152 sysstatの対話型システムアクティビティーグラフ化ソフト
lsof * V:17, I:91 444 lsof(8): "-p" を使い実行中のプロセスが開いているファイルをリスト
strace * V:6, I:51 376 strace(1): システムコールやシグナルを追跡
ltrace * V:0.3, I:2 188 ltrace(1): ライブラリーコールを追跡
xtrace * V:0.03, I:0.17 344 xtrace(1): X11のクライアントとサーバーの間の通信を追跡
powertop * V:0.8, I:12 424 powertop(1): Intelを使ったラップトップのシステムの電力情報
cron * V:91, I:99 324 cron(8)デーモンからバックグランドでスケジュール通りプロセスを実行
anacron * V:42, I:46 120 1日24時間動作でないシステム用のcron類似のコマンドスケジューラー
at * V:50, I:83 220 at(1)とbatch(1)コマンド: 特定の時間や特定のロードレベル以下でジョブを実行

[ティップ] ティップ

procpsパッケージはプログラム活動の監視と制御と起動の基本中の基本を提供します。このすべてを習得するべきです。

9.5.1. プロセスの時間計測

コマンドが起動したプロセスにより使われた時間を表示します。

# time some_command >/dev/null
real    0m0.035s       # 壁時計の時間(実経過時間)
user    0m0.000s       # ユーザーモードの時間
sys     0m0.020s       # カーネルモードの時間

9.5.2. スケジューリングのプライオリティー

ナイス値はプロセスのスケジューリングのプライオリティーを制御するのに使われます。

表9.11 スケジューリングのプライオリティーのためのナイス値のリスト

ナイス値 スケジューリングのプライオリティー
19 最低優先順位プロセス(ナイス)
0 ユーザーにとっての非常に高優先順位プロセス
-20 rootにとっての非常に高優先順位プロセス(非ナイス)

# nice  -19 top                                      # 非常にナイス
# nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # 非常に高速

極端なナイス値はシステムに害を与えるかもしれません。本コマンドは注意深く使用下さい、

9.5.3. psコマンド

Debian上のps(1)コマンドはBSDとSystemV機能の両方をサポートしプロセスの活動を静的に特定するのに有用です。

表9.12 psコマンドのスタイルのリスト

スタイル 典型的コマンド 特徴
BSD ps aux %CPU %MEMを表示
System V ps -efH PPIDを表示

ゾンビ(動作していない)子プロセスに関して、"PPID"フィールドで識別される親プロセスIDを使ってプロセスを停止できます。

pstree(1)コマンドはプロセスの木(ツリー)を表示します。

9.5.4. topコマンド

Debian上のtop(1)は機能が豊で、どのプロセスがおかしな動きをしているかを動的に識別することに役立ちます。

表9.13 topのコマンドのリスト

コマンドキー レスポンスの説明
h? ヘルプの表示
f ディスプレーフィールドのセットとリセット
o 表示フィールドの順番変更
F ソートキーフィールドの設定
k プロセスを停止
r プロセスのナイス値を変更
q topコマンドを終了

9.5.5. プロセスによって開かれているファイルのリスト

プロセスID (PID)、例えば1を使うプロセスによって開かれている全ファイルは次のようにしてリストできます。

$ sudo lsof -p 1

PID=1は通常initプログラムです。

9.5.6. プログラム活動の追跡

プラグラムの活動状況は、システムコールとシグナルはstrace(1)で、ライブラリーコールはltrace(1)で、X11のクライアントとサーバーの通信はxtrace(1)でプラグラムの活動状況を追跡できます。

lsコマンドのシステムコールを次のようにして追跡できます。

$ sudo strace ls

9.5.7. ファイルやソケットを使っているプロセスの識別

ファイルかソケットを使っているプロセスはfuser(1)によって次のようにして識別できます。

$ sudo fuser -v /var/log/mail.log
                     USER        PID ACCESS COMMAND
/var/log/mail.log:   root       2946 F.... syslogd

"/var/log/mail.log"ファイルがsyslogd(8)コマンドによって書込みのために開かれている事が分かります。

ファイルかソケットを使っているプロセスはfuser(1)によって次のようにして識別できます。

$ sudo fuser -v smtp/tcp
                     USER        PID ACCESS COMMAND
smtp/tcp:            Debian-exim   3379 F.... exim4

SMTPポート(25)へのTCP接続を処理するためにあなたのシステムではexim4(8)が実行されている事がこれで分かります。

9.5.8. 一定間隔でコマンドを反復実行

watch(1)はプログラムを一定間隔で反復実行しながらフルスクリーンでその出力を表示します。

$ watch w

こうすると2秒毎更新でシステムに誰がログオンしているかを表示します。

9.5.9. ファイルに関してループしながらコマンドを反復実行

例えばグロブパターン"*.ext"へのマッチ等の何らかの条件にマッチするファイルに関してループしながらコマンドを実行する方法がいくつかあります。

for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
  • find(1)とxargs(1)の組み合わせ:
find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
  • コマンド付きの"-exec"オプションを使ってfind(1):
find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • 短いシェルスクリプト付きの"-exec"オプションを使ってfind(1):
find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

上記の例はスペースを含む等の変なファイル名でも適切に処理できるように書かれています。find(1)に関する上級の使用法の詳細は「ファイル選択の慣用句」を参照下さい。

9.5.10. GUIからプログラムをスタート

グラフィカルユーザーインターフェース(GUI)からプロセスをスタートできるように設定できます。

GNOMEデスクトップ環境下では、ローンチャアイコンを ダブルクリックしたり、ファイルアイコンをローンチャアイコンへドラッグアンドドロップしたり、ファイルアイコンを右クリックで"Open with …"メニューとしたりしてプログラムを適切な引数とともにスタートできます。KDEでも同様の事ができます。

次はgnome-terminal(1)中でmc(1)をスタートさせるローンチャアイコンを作るGNOME下での例です。

実行可能プログラム"mc-term"を次のように作成。

# cat >/usr/local/bin/mc-term <<EOF
#!/bin/sh
gnome-terminal -e "mc \$1"
EOF
# chmod 755 /usr/local/bin/mc-term

ディレクトリーを次のように作成します。

  1. デスクトップを右クリックして"Create Launcher …"を選択
  2. "Type"を"Application"と設定します。
  3. "Name"を"mc"と設定します。
  4. "Command"を"mc-term %f"と設定します。
  5. "OK"をクリックします。

open-withとの関連付けを作成します。

  1. フォルダを右クリックして"Open with Other Application …"を選択します。
  2. "Use a custom command"ダイアログをクリックして開き、"mc-term %f"を入力します。
  3. "Open"をクリックします。
[ティップ] ティップ

ローンチャとは"~/Desktop"上の".desktop"と言う拡張子のファイルです。

9.5.11. スタートするプログラムのカスタム化

一部のプログラムは他のプログラムを自動的にスタートします。このプロセスをカスタム化する上でのチェックポイントを次に記します。

  • アプリケーション設定メニュー:

    • GNOMEデスクトップ: "System" → "Preferences" → "Preferred Application"
    • KDEデスクトップ: "K" → "Control Center" → "KDE Components" → "Component Chooser"
    • Iceweasleブラウザー: "Edit" → "Preferences" → "Applications"
    • mc(1): "/etc/mc/mc.ext"
  • "$BROWSER"や"$EDITOR"や"$VISUAL"や"$PAGER"といった環境変数(eviron(7)参照)
  • "editor"や"view"や"x-www-browser"や"gnome-www-browser"や"www-browser"等のプログラムに関するupdate-alternatives(8)システム(「デフォールトのテキストエディターの設定」参照)
  • MIMEタイプとプログラムと関係づける、"~/.mailcap"や"/etc/mailcap"ファイルの内容(mailcap(5)参照)
  • ファイル拡張子とMIMEタイプとプログラムと関係づける、"~/.mime.types"や"/etc/mime.types"ファイルの内容(run-mailcap(1)参照)
[ティップ] ティップ

update-mime(8)は"/etc/mailcap.order"ファイルを使って"/etc/mailcap"ファイルを更新します(mailcap.order(5)参照)。

[ティップ] ティップ

debianutilsパッケージは、どのエディターやページャーやウェッブブラウザーを呼び出すかに関してそれぞれ賢明な判断をするsensible-browser(1)やsensible-editor(1)やsensible-pager(1)を提供します。これらのシェルスクリプトを読む事をお薦めします。

[ティップ] ティップ

Xの下でmuttのようなコンソールアプリケーションをあなたの好むアプリケーションとして実行するには、次のようにしてXアプリケーションを作成し、前記の方法であなたの好む起動されるアプリケーションとして"/usr/local/bin/mutt-term"を設定します。

# cat /usr/local/bin/mutt-term <<EOF
#!/bin/sh
gnome-terminal -e "mutt \$@"
EOF
chmod 755 /usr/local/bin/mutt-term

9.5.12. プロセスの停止

kill(1)を使ってプロセスIDを使ってプロセスを停止(プロセスへシグナルを送信)します。

killall(1)やpkill(1)プロセスコマンド名や他の属性を使ってプロセスを停止(プロセスへシグナルを送信)します。

表9.14 killコマンドが良く使うシグナルのリスト

シグナル値 シグナル名 機能
1 HUP デーモンの再スタートします
15 TERM 普通に停止します
9 KILL 徹底的に停止します

9.5.13. タスク1回実行のスケジュール

at(1)コマンドを次のように実行して1回だけのジョブをスケジュールします。

$ echo 'command -args'| at 3:40 monday

9.5.14. タスク定期実行のスケジュール

cron(8)コマンドを実行して定期的タスクをスケジュールします。crontab(1)とcrontab(5)を参照下さい。

もしあなたがcrontabグループのメンバーの場合、例えばfooというノーマルユーザーとして"crontab -e"コマンドを使って"/var/spool/cron/crontabs/foo"というcrontab(5)ファイルを作成することでプロセスをスケジュールして実行する事ができます。

crontab(5)ファイルの例を次に記します。

# use /bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to paul, no matter whose crontab this is
MAILTO=paul
# Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
# run at 00:05, every day
5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 14:15 on the first of every month -- output mailed to paul
15 14 1  * *   $HOME/bin/monthly
# run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
5  4 *   * sun echo "run at 04:05 every Sunday"
# run at 03:40 on the first Monday of each month
40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args
[ティップ] ティップ

連続的に稼働していないシステムでは、機器のアップタイム上可能な限り指定間隔に近く定期的にコマンドをスケジュールするためにanacronパッケージをインストールします。anacron(8)とanacrontab(5)を参照下さい。

[ティップ] ティップ

スケジュールされたシステムメインテナンススクリプトは、そのようなスクリプトを"/etc/cron.hourly/"か"/etc/cron.daily/"か"/etc/cron.weekly/"か"/etc/cron.monthly/"中に置くことでrootアカウントからそれらを定期的に実行できます。これらのスクリプトの実行時間は"/etc/crontab"と"/etc/anacrontab"でカスタム化できます。

9.5.15. Alt-SysRqキー

システム異常に対する保険はカーネルコンパイルオプションの"マジックSysRqキー"(SAKキー)によって提供されま、現在のDebianカーネルではデフォールトです。Alt-SysRqに続いて次のキーの中から1つを押すことでシステムのコントロールを救済するマジックが起きます。

表9.15 SAKコマンドキーのリスト

Alt-SysRqに続くキー アクションの説明
r Xクラッシュの後でキーボードをraw(生コード発生)モードから復旧
0 エラーメッセージを減らすべくコンソールログレベルを0と変更
k 全ての現仮想ターミナル上の全てのプロセスを停止(Kll)
e init(8)以外の全てのプロセスに、SIGTERMを送信
i init(8)以外の全てのプロセスに、SIGKILL を送信
s 全てのマウントされたファイルシステムを同期(Sync)
u 全てのマウントされたファイルシステムを読出し専用で再マウント(アンマウント、umount)
b 同期することもアンマウントする事も無しに、システムをリブート(Reboot)

"Alt-SysRq s"と"Alt-SysRq u"と"Alt-SysRq r"の組み合わせは、非常に悪い状況からの脱出に有効です。

"/usr/share/doc/linux-doc-2.6.*/Documentation/sysrq.txt.gz"を参照下さい。

[注意] 注意

Alt-SysRq機能があることはユーザーにroot特権機能をアクセスさせることになるのでセキュリティーリスクと考える事もできます。"/etc/rc.local"中に"echo 0 >/proc/sys/kernel/sysrq"とか"/etc/sysctl.conf"中に"kernel.sysrq = 0"と置くとAlt-SysRq機能を無効にできます。

[ティップ] ティップ

SSHターミナルなどからは、"/proc/sysrq-trigger"に書き込むことでAlt-SysRq機能が使えます。例えば、リモートのシェルプロンプトから"echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger"とすると、全てのマウントされたファイルシステムをsync(同期)してumount(アンマウント)します。

9.6. システム管理ティップ

9.6.1. だれがシステム上にいる?

だれがシステム上にいるかは、次のようにしてチェックできます。

  • who(1)は、誰がログオンしているかを表示します。
  • w(1)は、誰がログオンしていて何をしているかを表示します。
  • lastb(1)は、最後にログイン失敗したユーザーのリストを表示します。
  • lastb(1)は、最後にログイン失敗したユーザーのリストを表示します。
[ティップ] ティップ

"/var/run/utmp"と"/var/log/wtmp"と"/var/run/utmp"はこのようなユーザー情報を保持します。login(1)とutmp(5)を参照下さい。

9.6.2. 全員への警告

wall(1)を使うと、次のようにしてシステムにログオンしている全員にメッセージを送れます。

$ echo "We are shutting down in 1 hour" | wall

9.6.3. ハードウエアーの識別

PCI的デバイス(AGPPCI-ExpressCardBusExpressCard,等)では、 (きっと"-nn"オプションとともに使う)lspci(8)がハードウエアー識別の良いスタート点です。

この代わりに、"/proc/bus/pci/devices"の内容を読むか、"/sys/bus/pci"の下のディレクトリーツリーを閲覧することでハードウエアーの識別ができます(「procfsとsysfs」参照)。

表9.16 ハードウエアー識別ツールのリスト

パッケージ ポプコン サイズ 説明
pciutils * V:15, I:92 804 Linux PCIユーティリティー: lspci(8)
usbutils * V:40, I:98 560 Linux USBユーティリティー: lsusb(8)
pcmciautils * V:0.9, I:14 100 Linux 2.6のためのPCMCIAユーティリティー: pccardctl(8)
scsitools * V:0.19, I:1.3 484 SCSIハードウエアー管理のためのツール集: lsscsi(8)
pnputils * V:0.02, I:0.19 108 Plug and Play BIOSのためにユーティリティー: lspnp(8)
procinfo * V:0.4, I:3 164 下級管理業務のためのディレクトリー: "/usr/local"、"/home"
lshw * V:1.1, I:6 604 ハードウエアー設定に関する情報: lshw(1)
discover * V:3, I:12 928 ハードウエアー識別システム: discover(8)

9.6.4. ハードウエアー設定

GNOMEやKDEのような現代的なGUIのデスクトップ環境ではほとんどのハードウエアー設定が付随するGUI設定ツールを通じて管理できますが、それらの設定の基本的手法を知っておくのは良い事です。

表9.17 ハードウエアー設定ツールのリスト

パッケージ ポプコン サイズ 説明
hal * V:42, I:55 1680 ハードウエアーアブストラクションレイヤー: lshal(1)
console-tools * V:54, I:94 956 Linuxコンソールのフォントとキーテーブルユーティリティー
x11-xserver-utils * V:33, I:50 544 Xサーバーユーティリティー: xset(1)、xmodmap(1)
acpid * V:47, I:90 204 Advanced Configuration and Power Interface (ACPI)によって起こるイベントの管理のためのデーモン
acpi * V:4, I:33 92 ACPIデバイス上の情報を表示するユーティリティー
apmd * V:1.4, I:12 252 Advanced Power Management (APM)によって起こるイベントの管理のためのデーモン
noflushd * V:0.07, I:0.12 244 ハードディスクをスピンダウンできるようにするデーモン
sleepd * V:0.06, I:0.09 92 非使用状況のときにラップトップをスリープさせるデーモン
hdparm * V:13, I:36 284 ハードディスクアクセスの最適化(「ハードディスクの最適化」参照)
smartmontools * V:6, I:21 1028 S.M.A.R.T.を使ってストレージシステムを制御監視
setserial * V:1.9, I:4 180 シリアルポートの管理ツール集
memtest86+ * V:0.5, I:4 500 メモリーハードウエアー管理のためのツール集
scsitools * V:0.19, I:1.3 484 SCSIハードウエアー管理のためのツール集
tpconfig * V:0.4, I:0.5 208 タッチパッドデバイス設定ユーティリティー
setcd * V:0.07, I:0.4 28 コンパクトデバイスアクセス最適化
big-cursor * I:0.2 68 Xのための大きなマウスカーソール

上記で、ACPIAPMより新しい電力管理システムの枠組みです。

[ティップ] ティップ

最近のシステム上のCPUフリーケンシシースケーリングはacpi_cpufreqのようなカーネルモジュールで管理されています。

9.6.5. システムとハードウエアーの時間

以下はシステムとハードウエアーの時間をMM/DD hh:mm, CCYY (月/日 時:分, 年)に設定します。

# date MMDDhhmmCCYY
# hwclock --utc --systohc
# hwclock --show

Debianシステムでは時間は通常地域の時間が表示されますが、ハードウエアーとシステムの時間は通常UT(GMT)を使います。

ハードウエアー(BIOS)時間がUTに設定されている場合は、"/etc/default/rcS"の中の設定を"UTC=yes"と変更します。

ネットワーク経由でシステムの時間を更新したい場合には、ntpntpdatechrony等のパッケージを使ってNTPサービスを利用することを考えます。

次を参照下さい。

[ティップ] ティップ

ntpパッケージ中のntptrace(8)を使うと、NTPサービスの継がりを第一義的根源まで溯ることができます。

9.6.6. ターミナルの設定

文字コンソールとncurses(3)システム機能を設定するのはいくつかの要素があります。

  • "/etc/terminfo/*/*" ファイル(terminfo(5))
  • "$TERM"環境変数(term(7))
  • setterm(1)、stty(1)、tic(1)、toe(1)

もしxterm用のterminfoエントリーが非-Debianのxtermでうまく機能しない場合には、リモートからDebianシステムにログインする時にターミナルタイプ、"$TERM"、を"xterm"から"xterm-r6"のような機能限定版に変更します。詳細は"/usr/share/doc/libncurses5/FAQ"を参照下さい。"dumb"は"$TERM"の最低機能の共通項です。

9.6.7. 音のインフラ

現在のLinux 2.6のためのサウンドカードのためのデバイスドライバーはAdvanced Linux Sound Architecture (ALSA)で提供されています。ALSAは過去のOpen Sound System (OSS)と互換性のためのエミュレーションモードを提供します。

"dpkg-reconfigure linux-sound-base"を実行し、カーネルモジュールをブラックリストすることでALSAを使うように選択します。非常に新しいサウンドハードウエアーをお持ちで無ければudevインフラがあなたのサウンドシステムを設定します。

[ティップ] ティップ

"cat /dev/urandom > /dev/audio"かspeaker-test(1)を使ってスピーカをテストします。(^Cで停止)

[ティップ] ティップ

音が出ない場合ですが、あなたのスピーカーが消音された出力につながっているかもしれません。現代的なサウンドシステムには多くの出力があります。alsa-utilsパッケージ中のalsamixer(1)は音量や消音の設定をするのに便利です。

アプリケーションソフトはサウンドデバイスに直接アクセスするようにばかりでなく標準的なサウンドサーバーシステム経由で間接的にアクセスするように設定されているかもしれません。

表9.18 サウンドパッケージのリスト

パッケージ ポプコン サイズ 説明
linux-sound-base * V:40, I:51 136 ALSAとOSSサウンドシステムの基本パッケージ
alsa-base * V:3, I:51 480 ALSAドライバー設定ファイル
alsa-utils * V:35, I:51 1876 ALSAを設定し使用するユーティリティー
oss-compat * V:28, I:35 60 ALSAの下で"/dev/dsp not found"エラーを防ぐOSS互換性
esound-common * V:14, I:60 193 Enlightened Sound Daemon (ESD)共通(EnlightenmentとGNOME)
esound * V:1.2, I:11 48 Enlightened Sound Daemon (ESD)サーバー(EnlightenmentとGNOME)
esound-clients * V:9, I:23 140 Enlightened Sound Daemon (ESD)クライアント(EnlightenmentとGNOME)
libesd0 * V:13, I:57 60 Enlightened Sound Daemon (ESD)ライブラリー(EnlightenmentとGNOME)
arts * I:10 40 aRtsサーバー(KDE)
libarts1c2a * V:18, I:32 6064 aRtsライブラリー(KDE)
libartsc0 * V:15, I:38 76 aRtsライブラリー(KDE)
jackd * V:1.8, I:4 532 JACK Audio Connection Kit. (JACK) サーバー(低遅延)
libjack0 * V:12, I:41 504 JACK Audio Connection Kit. (JACK) ライブラリー(低遅延)
nas * V:0.17, I:0.2 328 Network Audio System (NAS)サーバー
libaudio2 * V:27, I:50 204 Network Audio System (NAS)ライブラリー
pulseaudio * V:3, I:5 4500 PulseAudioサーバー、ESD代替
libpulse0 * V:8, I:35 840 PulseAudioクライアント、ESD代替
libgstreamer0.10-0 * V:29, I:54 3168 GStreamer: GNOMEサウンドエンジン
libxine1 * V:6, I:34 36 xine: KDE旧サウンドエンジン
libphonon4 * V:1.2, I:13 548 Phonon: KDE新サウンドエンジン

各ポピュラーなデスクトップ環境では普通共通のサウンドエンジンがあります。アプリケーションに使われるそれぞれのサウンドエンジンはそれと異なるサウンドサーバーにつなぐようにもできます。

9.6.8. スクリーンセーバーの無効化

スクリーンセーバーを無効にするには、次のコマンドを使います。

表9.19 スクリーンセーバーを無効にするコマンドのリスト

環境 コマンド
Linuxコンソール setterm -powersave off
X Window(スクリーンセーバー消去) xset s off
X Window(dpms無効) xset -dpms
X Window(スクリーンセーバーのGUI設定) xscreensaver-command -prefs

9.6.9. ブザー音の無効化

PCスピーカーのコネクタを外すとブザー音は確実に無効にできます。pcspkrカーネルモジュールを削除すると同じ事ができます。

次のようにするとbash(1)が使うreadline(3)プログラムが"\a" (ASCII=7)に出会った際にブザー音を発生するのを防げます。

$ echo "set bell-style none">> ~/.inputrc

9.6.10. 使用メモリー

"/var/log/dmesg"中にあるカーネルブートメッセージに使えるメモリーの性格な全サイズが書かれています。

free(1)やtop(1)は稼働中システムのメモリーリソース情報を表示します。

$ grep '\] Memory' /var/log/dmesg
[    0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init)
$ free -k
             total       used       free     shared    buffers     cached
Mem:        997184     976928      20256          0     129592     171932
-/+ buffers/cache:     675404     321780
Swap:      4545576          4    4545572
[ティップ] ティップ

"Mem:"行の"used"のサイズが大きかったり"free"のサイズが小さかったりについて悩まないでおきます。それらの1行下の(次の例では675404と321780)を読んで安心して下さい。

1GB=1048576kのDRAM(videoシステムがこのメモリーの一部を使用)が付いている私のMacBookでは次のようになっています。

表9.20 レポートされるメモリーサイズのリスト

報告 サイズ
dmesg中の全サイズ(Total) 1016784k = 1GB - 31792k
dmesg中の未使用(free) 990528k
shell下での全(total) 997184k
shell下での未使用(free) 20256k(しかし実質は321780k)

9.6.11. システムのセキュリティーと整合性のチェック

ダメなシステム管理をするとあなたのシステムを外界からの攻撃にさらすことになるかもしれません。

システムのセキュリティーと整合性のチェックには、次の事から始めるべきです。

表9.21 システムセキュリティーや整合性確認のためのツールリスト

パッケージ ポプコン サイズ 説明
logcheck * V:3, I:4 260 システムログの異常を管理者にメールするデーモン
debsums * V:2, I:3 268 MD5チェックサムを使ってインストールされたパッケージファイルを検証するユーティリティー
chkrootkit * V:2, I:6 868 ルートキット検出ソフト
clamav * V:2, I:11 508 Unix用アンチウィルスユーティリティー - コマンドラインインターフェース
tiger * V:0.8, I:1.1 3088 システムセキュリティーの脆弱性を報告
tripwire * V:0.6, I:0.7 4608 ファイルやディレクトリーの整合性チェックソフト
john * V:0.6, I:2 532 アクティブなパスワードクラッキングツール
aide * V:0.3, I:0.5 1112 先進的進入検出環境 - 静的ライブラリー
bastille * V:0.17, I:0.5 1960 セキュリティー強化ツール
integrit * V:0.09, I:0.19 440 ファイル整合性確認プログラム
crack * V:0.04, I:0.3 204 パスワード推定プログラム

次のシンプルなスクリプトを使うと、典型的な間違いの全員書込み可のファイルパーミッションをチェックできます。

# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
[注意] 注意

debsumsパッケージはローカルに保存されたMD5チェックサムを使うので、悪意ある攻撃に対抗するセキュリティー監査ツールとしては完全には信頼できません。

9.7. カーネル

Debianはモジュール化されたLinuxカーネルをサポートされるアーキテクチャに対してパッケージとしてディストリブートしています。

9.7.1. Linuxカーネル2.6

Linuxカーネル2.4と比較して特記すべきLinuxカーネル2.6の機能がいくつかあります。

  • デバイスはudevシステムで生成されます(「udevシステム」参照)。
  • IDE CD/DVDデバイスへの読出し/書込みアクセスはide-scsiモジュールを使用しません。
  • ネットワークのパケットフィルター機能はiptableカーネルモジュールを使います。

9.7.2. カーネル変数

多くのLinuxの機能はカーネル変数を使い次のように設定されます。

linux-doc-2.6.*パッケージで供給されるLinuxカーネル文書("/usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*")中の"kernel-parameters.txt(.gz)"や関連する他の文書を参照下さい。

9.7.3. カーネルヘッダー

ほとんどの普通のプログラムはカーネルヘッダーを必要としませんし、コンパイルするのにそれらを直接用いるとコンパイルがうまくいかないかもしれません。普通のプログラムはDebianシステム上では(glibcソースパッケージから生成される)libc6-devパッケージが提供する"/usr/include/linux"や"/usr/include/asm"中のヘッダを使ってコンパイルするべきです。

[注記] 注記

外部ソースからのカーネルモジュールやオートマウンターデーモン(amd)のようなカーネル固有の一部プログラムをコンパイルする場合、例えば"-I/usr/src/linux-particular-version/include/"等の対応するカーネルヘッダーへのパスをコマンドラインで指定しなければいけません。module-assistant(8)(またはその短縮形m-a)はユーザーが1つ以上のカスタムカーネルに関するモジュールパッケージを簡単にビルドとインストールすることを援助します。

9.7.4. カーネルと関連モジュールのコンパイル

Debianにはカーネルと関連モジュールをコンパイルする独自の方法があります。

表9.22 Debianシステム上でカーネルの再コンパイルためにインストールする重要パッケージのリスト

パッケージ ポプコン サイズ 説明
build-essential * I:47 48 Debianパッケージをビルドする上で不可欠なパッケージ: makegcc、…
bzip2 * V:55, I:79 132 bz2ファイルのための圧縮と解凍ユーティリティー
libncurses5-dev * V:4, I:27 6836 ncursesのためのデベロッパ用ライブラリーと文書
git-core * V:7, I:12 15056 git: Linuxカーネルによって使われている分散型リビジョンコントロールシステム
fakeroot * V:5, I:30 376 パッケージを非rootとしてビルドするためのfakeroot環境を提供
initramfs-tools * V:41, I:97 420 initramfsをビルドするツール(Debian固有)
kernel-package * V:2, I:17 2308 Linuxカーネルパッケージをビルドするツール(Debian固有)
module-assistant * V:3, I:21 540 モジュールパッケージをビルドするツール(Debian固有)
dkms * V:1.6, I:2 416 動的カーネルモジュールサポート(DKMS) (汎用)
devscripts * V:2, I:14 1712 Debianパッケージメンテナ用ヘルパースクリプト(Debian固有)
linux-tree-2.6.* N/A N/A Linuxカーネルのソースツリーのメタパッケージ(Debian固有)

「2段目: ブートローダー」中でinitrdを使う場合、initramfs-tools(8)とupdate-initramfs(8)とmkinitramfs(8)とinitramfs.conf(5)中の関連情報をしっかり読んで下さい。

[警告] 警告

Linuxカーネルソースをコンパイルする時にソースツリー中のディレクトリー(例えば"/usr/src/linux*")から"/usr/include/linux"や"/usr/include/asm"へのシムリンクを張ってはいけません。(古くなった一部文書はまだこれをすることを提案しています。)

[注記] 注記

Debianのstable(安定版)システム上で最新のLinuxカーネルをコンパイルする際には、Debianのunstable(非安定版)システムからバックポートされた最新のツールが必要かもしれません。

[注記] 注記

動的カーネルモジュールサポート(DKMS)は、カーネル全体を変えること無く個別カーネルモジュールをアップグレードできるようにする新しいディストリビューションに依存しない枠組みです。これにsqueezeでのアウトオブツリーのモジュールの管理方法として承認されます。これはあなたがカーネルをアップグレードする際にモジュールを簡単に再構築できるようにします。

9.7.5. カーネルソースのコンパイル: Debian標準手法

カスタムカーネルパッケージを作るためにカーネルソースをコンパイルするDebianの標準手法ははmake-kpkg(1)を使います。正式の文書は"/usr/share/doc/kernel-package/README.gz"(最後の部分)にあります。カスタム化はkernel-pkg.conf(5)とkernel-img.conf(5)を参照下さい。

amd64システムの例を次に記します。

# aptitude install linux-tree-<version>
$ cd /usr/src
$ tar -xjvf linux-source-<version>.tar.bz2
$ cd linux-source-<version>
$ cp /boot/config-<oldversion> .config
$ make menuconfig
 ...
$ make-kpkg clean
$ fakeroot make-kpkg --append_to_version -amd64 --initrd --revision=rev.01 kernel_image modules_image
$ cd ..
# dpkg -i linux-image*.deb

"shutdown -r now"としてリブートし、新しいカーネルへ移行します。

[注意] 注意

1台の機器のためだけにコンパイルされた非モジュール化したカーネルを作りたい際には、initrdを使わないのでmake-kpkgを"--initrd"オプション無しで実行します。"make-kpkg kernel_image"によって"make oldconfig"と"make dep"が実行されるので、これらを別途実行する必要はありません。

9.7.6. モジュールソースのコンパイル: Debian標準手法

カスタムカーネルパッケージのためのカスタムモジュールパッケージを生成しインストールするDebian標準手法はmodule-assistant(8)とmoduleソースパッケージを使います。例えば次のようにすると、unionfsカーネルモジュールがビルドされ、それがインストールされます。

$ sudo aptitude install module-assistant
...
$ sudo aptitude install unionfs-source unionfs-tools unionfs-utils
$ sudo m-a update
$ sudo m-a prepare
$ sudo m-a auto-install unionfs
...
$ sudo apt-get autoremove

9.7.7. カーネルソースのコンパイル:古典的方法

加工されていないソースからのLinuxカーネルを今でも古典的手法でビルドできます。システムの設定の詳細は手動で面倒を見る必要があります。

$ cd /usr/src
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-<version>.tar.bz2
$ tar -xjvf linux-<version>.tar.bz2
$ cd linux-<version>
$ cp /boot/config-<version> .config
$ make menuconfig
 ...
$ make dep; make bzImage
$ make modules
# cp ./arch/x86_64/boot/bzImage /boot/vmlinuz-<version>
# make modules_install
# depmod -a
# update-initramfs -c -k <version>

ブートローダーは次のように設定します。

  • liloを使う場合には、"/etc/lilo.conf"を編集し、"/sbin/lilo"を実行します。
  • grubを使う場合には、"/boot/grub/menu.lst"を編集します。

"shutdown -r now"としてリブートし、新しいカーネルへ移行します。

9.7.8. Non-freeハードウエアードライバー

ほとんどのハードウエアードライバーはフリーソフトウエアーとして入手できDebianシステムの一部となっていますが、あなたのシステム上のWinmodemのような一部のnon-freeの外部ドライバーをロードする必要があるかもしれません。

該当リソースをチェックします。

9.8. 仮想化システム

仮想化されたシステムを利用すると単一ハード上で同時に複数のシステムのインスタンスを実行することが加能となります。

[ティップ] ティップ

http://wiki.debian.org/SystemVirtualizationを参照下さい。

9.8.1. 仮想化ツール

Debianには、単純なchrootではない仮想化エミュレーション関連のパッケージがあります。一部のパッケージはあなたがそのような環境をセットアップする事を援助します。

表9.23 仮想化ツールのリスト

パッケージ ポプコン サイズ 説明
schroot * V:1.0, I:1.6 1860 Debianバイナリーパッケージをchroot中で実行する専用ツール
sbuild * V:0.08, I:0.3 412 DebianソースからDebianバイナリーパッケージをビルドするツール
pbuilder * V:0.4, I:2 1132 Debianパッケージの個人的なパッケージビルドソフト
debootstrap * V:1.6, I:12 264 基本的なDebianシステムのブートストラップ(shで書かれている)
cdebootstrap * V:0.5, I:2 112 Debianシステムのブートストラップ(Cで書かれている)
rootstrap * V:0.03, I:0.2 156 完全なLinuxファイルシステムイメージをビルドするツール
virt-manager * V:0.2, I:1.1 5324 仮想マシンマネージャー: 仮想マシンを管理するデスクトップアプリケーション
libvirt-bin * V:0.9, I:1.5 1540 libvirtライブラリー用のプログラム
user-mode-linux * V:0.08, I:0.4 19796 User-mode Linux (kernel)
bochs * V:0.06, I:0.4 3236 Bochs: IA-32 PCエミュレーター
qemu * V:0.9, I:6 468 QEMU: 高速で汎用のプロセッサエミュレーター
qemu-system * V:0.4, I:1.7 36692 QEMU: フルシステムエミュレーションのバイナリ
qemu-user * V:0.2, I:1.8 16844 QEMU: ユーザーモードエミュレーションのバイナリ
qemu-utils * V:0.2, I:1.7 624 QEMU: ユーティリティー
qemu-kvm * V:0.14, I:0.2 3892 KVM: ハードウエア補助仮想化を利用するx86ハードウエア上のフル仮想化
virtualbox-ose * V:1.9, I:3 25236 VirtualBox: i386とamd64上でのx86仮想化解決策
wine * V:1.7, I:15 64 Wine: Windows APIの実装 (標準スイート)
dosbox * V:0.5, I:3 2584 DOSBox: Tandy/Herc/CGA/EGA/VGA/SVGAグラフィクス、サウンド、DOS付きのx86エミュレーター
dosemu * V:0.5, I:1.4 5936 DOSEMU: Linux用DOSエミュレーター
vzctl * V:0.5, I:1.0 1136 OpenVZ サーバー仮想化策 - コントロールツール
vzquota * V:0.5, I:1.1 252 OpenVZ サーバー仮想化策 - クオータツール
lxc * V:0.02, I:0.11 844 Linuxコンテナ - ユーザースペースツール

異なるプラットフォーム仮想化策の詳細な比較はWikipediaの記事Comparison of platform virtual machinesを参照下さい。

9.8.2. 仮想化の業務フロー

[注記] 注記

ここに記載された機能の一部はsqueezeでのみ利用可能です。

[注記] 注記

lenny以来のDebianのデフォルトカーネルはKVMをサポートしています

仮想化のための典型的な業務フローにはいくつかの段階があります。

9.8.3. 仮想ディスクイメージファイルをマウント。

rawディスクイメージファイルに関しては、「ディスクイメージ」を参照下さい。

他の仮想ディスクイメージに関しては、qemu-nbd(1)を使ってネットワークブロックデバイスプロトコルを用いてそれらをエクスポートしnbdカーネルモジュールを使ってそれらをマウントできます。

qemu-nbd(1)はQEMUがサポートする次のディスクフォーマットをサポートします: raw、qcow2、qcowvmdkvdibochs、cow (user-mode Linuxのcopy-on-write)、parallelsdmgcloopvpc、vvfat (virtual VFAT)、host_device。

ネットワークブロックデバイスloopデバイスと同様の方法でパーティションをサポートします(「ディスクイメージファイルをマウント」参照)。"image.img"の最初のパーティションは次のようにするとマウントできます。

# modprobe nbd max_part=16
# qemu-nbd -v -c /dev/nbd0 disk.img
...
# mkdir /mnt/part1
# mount /dev/nbd0p1 /mnt/part1
[ティップ] ティップ

qemu-nbd(8)に"-P 1"オプションを用いると、"disk.img"の最初のパーティションだけをエクスポートできます。

9.8.4. Chrootシステム

chroot(8)を使うのは、GNU/Linux環境の異なったインスタンスをリブートすることなく単一システム上で同時に実行する最も基本的な手法です。

[注意] 注意

次の例は親システムとchrootシステムが同じCPUアーキテクチャを共有していると仮定しています。

pbuilder(8) プログラムをscript(1)の下で次のように実行するとchroot(8)の設定と使い方が学べます。

$ sudo mkdir /sid-root
$ sudo pbuilder --create --no-targz --debug --buildplace /sid-root

"sid-root"の下にsid環境のためのシステムデーターをどのようにして充足するかはdebootstrap(8)かcdebootstrap(1)を見ると分かります。

[ティップ] ティップ

このdebootstrap(8)とcdebootstrap(1)は、DebianインストーラーがDebianをインストールするのに使われています。これらはDebianのインストールディスクを使わず他のGNU/LinuxディストリビューションからDebianをインストールするのにも使えます。

$ sudo pbuilder --login --no-targz  --debug --buildplace /sid-root

どのようにしてsid環境下で実行されるシステムシェルが作られるかが次で観察できます。

  1. ローカル設定のコピー("/etc/hosts"と"/etc/hostname"と"/etc/resolv.conf")
  2. "/proc"ファイルシステムのマウント
  3. "/dev/pts"ファイルシステムのマウント
  4. 常に101でプログラム終了する"/usr/sbin/policy-rc.d"を作成
  5. "chroot /sid-root bin/bash -c 'exec -a -bash bin/bash'"を実行
[注記] 注記

プログラムによっては機能するためにchrootの下でpbuilderが提供するより多くの親システムのファイルへのアクセスする必要があります。例えば、"/sys"や"/etc/passwd"や"/etc/group"や"/var/run/utmp"や"/var/log/wtmp"等がbindマウントもしくはコピーされる必要があるかもしれません。

[注記] 注記

"/usr/sbin/policy-rc.d"ファイルは、Debianシステム上でデーモンプログラムが自動的に起動されることを防ぎます。"/usr/share/doc/sysv-rc/README.policy-rc.d.gz"を参照下さい。

[ティップ] ティップ

pbuilderという特化したchrootパッケージの本来の目的は、chrootシステムを作りそのchroot中でパッケージをビルドすることです。それはパッケージのビルド依存関係が正しいことをチェックし、不必要で間違ったビルド依存関係が出来上がったパッケージに混入しないようにする理想的なシステムです。

[ティップ] ティップ

類似のschrootパッケージはi386のchrootシステムをamd64の親システムの下で実行方法を教えてくれます。

9.8.5. 複数のデスクトップシステム

仮想化を使って複数のデスクトップシステムを安全に実行するには、Debian安定版(stable)システム上でQEMUVirtualBoxを使うことをお勧めします。これらを使うと通常ありがちなリスクに晒されずにDebianテスト版(testing)や不安定版(unstable)システムのデスクトップアプリケーションを実行できるようになります。

純粋なQEMUは非常に遅いので、ホストシステムがサポートする際にはKVMを使って加速することをお勧めします。

QEMU用のDebianシステムを含む仮想ディスクイメージ"virtdisk.qcow2"はdebian-installer: 小さな CDを使って次のように作成できます。

$ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
...

更なるティップに関してはDebian wiki: QEMUを参照下さい。

VirtualBoxQtのGUIツールとして提供され非常に直感的に理解できます。そのGUIとコマンドラインツールはVirtualBox User ManualVirtualBox User Manual (PDF)で説明されています。

[ティップ] ティップ

UbuntuFedra等のGNU/Linuxディストリビューションを仮想化の下で実行するのは設定ティップを学ぶ非常に良い方法です。他のプロプライエタリなOSもこのGNU/Linuxの仮想化の下で上手く実行できます。