感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

【この本がすごい!】「プロのためのLinuxシステム構築・運用技術」に感動した!

<スポンサーリンク>

2年ぶりに「プロのためのLinuxシステム構築・運用技術」を読んだ。

プロのための Linuxシステム構築・運用技術 (Software Design plus)

プロのための Linuxシステム構築・運用技術 (Software Design plus)


この本はスゴイ。
正直に言うと、2年前、僕が社会人1年目のときにこの本を買った時は意味がわからなかった。さっぱりだった。
なんか良い事書いてあるんじゃないかなぁと思って読んでもまるで頭に入らず、結局意味不明のまま2年が経った。

2年の間に色々と経験した。
会社では業務用サーバをイチから構築したり、VMware ESXiをインストールしてハイパーバイザの仮想環境を構築してみたり。
家では新しいPCを買って速攻で潰してLinuxをインストールしたり、VMware Playerで仮想環境を作ってみたり。
色々と悩んで色々と経験した後、久しぶりにこの本を開くた。

目から鱗が落ちた。

今まで手順に従ってやっていた部分の裏側で、何がどう動いていたのかを詳細に詳細に説明してくれている。まさに"プロのための"Linuxシステム構築・運用技術の本だ。

わからなかったことがわかるようになること。
できなかったことができるようになることを成長というならば、僕はこの2年でずいぶん成長したように思うが、その成長をさらに深めてくれる本であると感じた。

今日から少しずつ、この本の内容を吟味してまとめていきたい。
こんなまとめをもし読んでくれる人がいたとしたら、実物の本を迷わず買うべきだと思う。
僕のメモ書き程度のまとめよりも100倍詳しく書いてある。
感動した。
1ページ1ページが濃すぎるため、何回も繰り返して読みたい。

■まずコラムの『プロのシステム管理作業』が秀逸

プロのLinuxサーバ管理者は、サーバに向かう前に、実施するすべての作業を1つ1つのコマンドのレベルで洗い出して、それぞれのコマンドの実行結果がどうなるべきか確認する。

これはいわゆる「作業手順書」だ。サーバの前で作業するときには「何も考えないレベル」になっていないといけないと言う。
あらゆる可能性を想定して万全を期すのがプロの仕事だという。検証用サーバで作業しているなら、検証用サーバと本番サーバの違いから、起こりうる事態すらも想像する。

当たり前のことだが、作業は必ずターミナルのロギング機能を使ってすべてログファイルに記録しておく。
windowsを使ってる人はteratermを使う人が多いかと思うけれど、デフォルトでログが出力されるように設定しておくといいかもしれない。


■システム起動時の処理の流れ

電源を入れるとLinuxが起動して、処理を開始する。
その裏側で何が起こっているのかというと、Linux本体のプログラム・コードである「カーネル」がメモリに格納され、これがCPUによって実行されていく。

さらに裏側に遡ると、CPUが処理を開始する前にシステムBIOSというものが動き出す。
だいたいの場合はパソコンの電源を入れた瞬間に「delete」とか「F12」とかを押せばBIOSの設定画面が出てくる。

簡単に示すと、以下の順番でシステムは起動される。
システムBIOS→ブートストラップ・ローダ→ブートローダ→/boot以下を読み込み、カーネル起動

ちなみにGRUBとは、Linuxで用いられるブート・ローダのことである。GRUBに関連するファイルは/boot以下に置いてある。
実際にCentOSを見てみると・・・

$ cd /boot
$ ls -ltr
total 19679
-rwxr-xr-x. 1 root root  3791040 May 19  2011 vmlinuz-2.6.32-71.el6.x86_64  ★カーネル
-rw-r--r--. 1 root root  2226490 May 19  2011 System.map-2.6.32-71.el6.x86_64
-rw-r--r--. 1 root root    97862 May 19  2011 config-2.6.32-71.el6.x86_64
-rw-r--r--. 1 root root   160542 May 19  2011 symvers-2.6.32-71.el6.x86_64.gz
drwxr-xr-x. 2 root root     1024 Mar  9 04:29 grub  ★たしかにあった!!
drwx------. 2 root root    12288 Mar  9 13:15 lost+found
drwxr-xr-x. 3 root root     1024 Mar  9 13:24 efi
-rw-r--r--. 1 root root 13850048 Mar  9 13:29 initramfs-2.6.32-71.el6.x86_64.img  ★初期RAMディスク

ブートストラップ・ローダがブート・ローダをメモリに読み込んで実行する。
ブートストラップ・ローダはシステムBIOSがハードウェア・コンポーネントの状態確認が終わった後に読み込むものである。

★★
ページは進み・・・。
これは非常に重要な話だと思うのだが、システムBIOSはハードディスクのある容量より後ろの部分にアクセスすることができない。
これにより、マルチブート構成を採用した場合、1台のハードディスクの後半部分にインストールしたOSが起動しない問題が起きる。

著者の中井さんがおっしゃるように、安易にマルチブート構成を採用してはいけない由縁だ。
以前Windows8パソコンを潰してLinuxをインストールする際、買ったばかりのwindows8との別れを少しばかり惜しんでいたら、
ツイッターで友人に安易にマルチブート構成を勧められた。
彼はこの「○○ギガバイトの壁」問題を知らなかったのだろう。
ちなみに僕も初めて知った。この本は本当に素晴らしい。

Linuxのカーネル・モジュール/lib/modules/<カーネル・バージョン>/以下のディレクトリに、Linuxのカーネル・モジュール一式が格納されている。
実際に見てみる。

# cd /lib/modules/
# ls -ltr
total 4
drwxr-xr-x. 8 root root 4096 Mar  9 13:28 2.6.32-71.el6.x86_64

# cd 2.6.32-71.el6.x86_64/
# ls -ltr
total 2956
-rw-r--r--.  1 root root  65072 May 19  2011 modules.order
drwxr-xr-x.  2 root root   4096 May 19  2011 weak-updates
drwxr-xr-x.  2 root root   4096 May 19  2011 updates
drwxr-xr-x.  2 root root   4096 May 19  2011 extra
-rw-r--r--.  1 root root   1560 May 19  2011 modules.networking
-rw-r--r--.  1 root root     29 May 19  2011 modules.modesetting
-rw-r--r--.  1 root root     68 May 19  2011 modules.drm
-rw-r--r--.  1 root root   1280 May 19  2011 modules.block
lrwxrwxrwx.  1 root root     45 Mar  9 13:23 build -> ../../../usr/src/kernels/2.6.32-71.el6.x86_64
drwxr-xr-x. 11 root root   4096 Mar  9 13:23 kernel
lrwxrwxrwx.  1 root root      5 Mar  9 13:23 source -> build
drwxr-xr-x.  2 root root   4096 Mar  9 13:23 vdso
drwxr-xr-x.  2 root root   4096 Mar  9 13:28 misc
-rw-r--r--.  1 root root 172664 Mar  9 13:28 modules.dep
-rw-r--r--.  1 root root 253564 Mar  9 13:28 modules.dep.bin
-rw-r--r--.  1 root root 342987 Mar  9 13:28 modules.pcimap
-rw-r--r--.  1 root root 725999 Mar  9 13:28 modules.usbmap
-rw-r--r--.  1 root root     69 Mar  9 13:28 modules.ccwmap
-rw-r--r--.  1 root root    774 Mar  9 13:28 modules.isapnpmap
-rw-r--r--.  1 root root    141 Mar  9 13:28 modules.inputmap
-rw-r--r--.  1 root root    221 Mar  9 13:28 modules.ieee1394map
-rw-r--r--.  1 root root   6259 Mar  9 13:28 modules.seriomap
-rw-r--r--.  1 root root     74 Mar  9 13:28 modules.ofmap
-rw-r--r--.  1 root root 492881 Mar  9 13:28 modules.alias
-rw-r--r--.  1 root root 474744 Mar  9 13:28 modules.alias.bin
-rw-r--r--.  1 root root 180382 Mar  9 13:28 modules.symbols
-rw-r--r--.  1 root root 231239 Mar  9 13:28 modules.symbols.bin

これって何?と思うけれど、
①カーネルが起動する
②起動ディスクにアクセスして、各種のファイルシステムをマウントする必要がある。

ちょっと待て、「②」の「起動ディスクにアクセス」ってどうやるの?
そう、デバイスドライバが必要になるのです。

起動ディスク用のデバイス・ドライバがどこにあるかというと、上で見た

/lib/modules/2.6.32-71.el6.x86_64

以下にあるということ。なるほど〜。

初期RAMディスクに組み込まれたデバイス・ドライバを確認するには以下のコマンドを実行する。

# mkinitrd -v -f /boot/initramfs-2.6.32-71.el6.x86_64.img 2.6.32-71.el6.x86_64
I: Installing ///lib/modules/2.6.32-71.el6.x86_64/kernel/drivers/ata/pata_sis.ko
I: Installing ///lib/modules/2.6.32-71.el6.x86_64/kernel/drivers/ata/sata_sis.ko
I: Installing ///lib/modules/2.6.32-71.el6.x86_64/kernel/drivers/ata/pata_hpt366.ko
省略
23500	/tmp/initramfs.XnAFjo/lib/modules
28640	/tmp/initramfs.XnAFjo/lib
41196	/tmp/initramfs.XnAFjo
41196	total

まだ1章読み終わらず。コツコツ読み進めていきたい。
読み終わったら中井悦司さんの別の本も買おうと思う。

プロのための Linuxシステム・10年効く技術 (Software Design plus)

プロのための Linuxシステム・10年効く技術 (Software Design plus)

                                                          • -

今回で感謝のプログラミングは【189時間目】
10000時間まで、あと【9811時間】