2.1 ハードディスクのレイアウト設計
2.1.1 パーティションの分割
Linuxでは、ルートディレクトリを含めたルートパティションの他に下記の表に示したディレクトリを独自のパーティションとして構成することが多いです。
- ルートパティションと異なるパーティションとして構成する領域の例
ディレクトリ・スワップ領域 | 主な利用目的 |
---|---|
/home/ |
一般ユーザのホームディレクトリ |
/var/ |
メールボックス、Webディレクトリ、ログファイル |
/boot/ |
起動ようのファイル、カーネルイメージ |
/tmp/ |
一時ファイルの格納 |
スワップ領域 | 仮想メモリ |
- ルートパティション内に構成すべきディレクトリ
以下のディレクトリは万が一システム起動時に認識できなかった場合に、システムの起動に支障をきたす可能性があります。そのため、これらはルートパティション内に構成しなければならず、独自のパーティションとして構成することはできません。
ディレクトリ | 主な利用目的 |
---|---|
/bin/ |
一般ユーザーでも実行できる基本コマンドを格納 |
/sbin/ |
管理者ユーザーが実行できる管理用のコマンドを格納 |
/etc/ |
設定ファイルを格納 |
/lib/ |
ライブラリを格納 |
/dev/ |
デバイスファイルを格納 |
2.2 ブートローダ
Linuxカーネルを起動するために使用されるブートローダである「GRUB」の仕組みについて確認します。
2.2.1 GRUB Legacyの構成
前章で説明した通り、電源を入れると次の順番でLinuxシステムが起動します。
順番 | 内容 |
---|---|
1 | 電源投入 |
2 | ファームウェア(BIOS等) |
3 | ブートローダ |
4 | カーネル |
5 | init/systemd |
6 | ログインプロンプト |
ブートローダはファームウェアが読み込まれた後に最初に読み出されるプログラムで、起動処理の管理を行います。
Linuxで使われているブートローダにはGRUBがあります。GRUBには「GRUB Legacy」と「GRUB2」というバージョンが存在ます。まずはGRUB
Legacyから確認します。
CentOS6にはGRUB Legacyがインストールされています。GRUB Legacyの設定ファイルは/boot/grub/menu.lst
であり、設定ファイルを編集して起動処理に関する内容を編集することができます。
※その他、GRUBの設定ファイルは/boot/grub
配下にあります。
# cat -n /boot/grub/menu.lst 1 default=0 2 timeout=5 3 splashimage=(hd0,0)/grub/splash.xpm.gz 4 # hiddenmenu 5 title CentOS (2.6.18-238.el5) 6 root (hd0,0) 7 kernel /vmlinuz-2.6.18-238.el5 ro root=LABEL=/ rhgb 8 initrd /initrd-2.6.18-238.el5.img 9 10 title CentOS (2.6.38) 11 root (hd0,0) 12 kernel /vmlinuz-2.6.38 ro root=LABEL=/ rhgb 13 initrd /initrd-2.6.38.img
menu.lst
の中には以下の項目が記載されています。
- menu.lstの内容
設定項目 | 説明 |
---|---|
default |
timeoutの秒数が経過した場合、起動するエントリ、titleで指定されているエントリを一番上を0として指定 |
timeout |
システムが自動起動するまでの数秒(待機時間) |
splashimage |
起動時のGRUB設定画面の背景画像 |
hiddenmenu |
起動時、設定でGRUBメニューを非表示にする |
title |
起動するエントリの名前 |
root |
ルートデバイスの指定 |
kernel |
カーネルイメージの指定 |
initrd |
初期RAMディスクの指定 |
2.3 共有ライブラリの管理
2.3.1 共有ライブラリ
これまで実行しているコマンドは/bin/
やsbin
といったディレクトリに実行ファイルとして格納されているものが使われています。これらの実行ファイルは、元となるプログラムソースがコンパイルされて生成されたものです。
では、これらのファイルの中に全ての機能のプログラムが含まれているかというと、そうではありません。OSには共有ライブラリというものがあり、コマンドの実行時にそれらのライブラリを参照することで、機能を利用することができます。プログラムの中ではライブラリを呼び出すという命令を記述するだけでいいことになります。
プログラムを作成する際、他のプログラムでも利用するような共通の内容について個々のプログラムに記述すると無駄が生じます。そこで共有ライブラリを参照することで個々のプログラムに同じ機能を実装しなくてもいいようにするのです。
ldd
コマンドを使うと指定した実行ファイルを実行する際に参照する共有ライブラリを表示することができます。
項目 | 値 |
---|---|
書式 | ldd オプション ファイル名 |
概要 | 参照する共有ライブラリを表示する |
引数 | ファイル:実行ファイルまたはライブラリファイル |
以下は、cat
コマンドの実行時に参照する共有ライブラリを表示している例です。
[root@centos6 ~]# ldd /bin/cat linux-gate.so.1 => (0x00697000) libc.so.6 => /lib/libc.so.6 (0x00a6b000) /lib/ld-linux.so.2 (0x800b6000)
実行ファイルの他に、共有ライブラリが依存するライブラリを表示することもできます。
[root@centos6 ~]# ldd /lib/libc.so.6 /lib/ld-linux.so.2 (0x800eb000) linux-gate.so.1 => (0x00811000)