Linuxのブートとファイルシステムについて

Linuxではハードディスクをパーティションに分割して利用します。それぞれのパーティションにはアクセスするためのデバイスファイルが割り当てられ、各パーティションはそれぞれ独立したファイルシステムを持ちます。ファイルシステムには ext2、ext3、ext4、XFS などがあります。

第一パーティションは bootファイルシステムです。Linuxを起動すると(電源を入れると)ROM内のBIOSがPOST(Power On Self Test:ハードウェアの種々のチェックや初期化を行うこと)をし、ディスクの先頭にあるブートローダーと呼ばれるプログラムを実行します。この領域はMBR(Master Boot Record)と呼ばれ、bootファイルシステムに属しています。MBRにはブートローダーの他に各パーティションの情報を保持したテーブル(パーティションテーブル)が格納されています。

起動されたブートローダーはパーティションテーブルからOSが置かれているパーティションを検索します。そしてそのパーティションの先頭(ブートブロック)にあるプログラムを実行します。この領域はPBR(Partition Boot Record)と呼ばれます。このプログラムがOSを起動させています。

ただ、BIOSによる起動(MBR方式)では以下の問題があります。

  1. パーティションテーブルに格納できるエントリは4個まで
  2. MBRで扱えるハードディスクの容量は2TBまで

これらを解消するためにUEFI(GPT方式)が導入されました。GPT(GUID Partition Table)では2TBの制限はなくなりパーティションテーブルのエントリも128個まで拡張されています。UEFIでは「EFI System Partition」と呼ばれるパーティション領域を作成し、そこにブートローダーやパーティションテーブルを格納します。マザーボードに組み込まれたファームウェアがEFIシステムパーティションの内容を読み込み、ブートローダーがOSの起動まで行っています。EFIシステムパーティションはFATベースのファイルシステムでフォーマットされています。

LinuxのブートローダーにはGRUBがあります。GRUBはいくつかのコンポーネントで出来ており、bootファイルシステム(EFIシステムパーティション)、および、ブートブロックに格納されています。

ここからはファイルシステムについて書いてみます。

ファイルシステムはブートブロック、スーパーブロック、iノードリスト、データブロックで構成されています。各パーティションのファイルシステムを確認するには「df -T」コマンドで確認できます。ブートブロックにはOSを起動するプログラムが入っています。

スーパーブロックですが、この領域にはファイルシステムを管理する以下のような情報が格納されています。

  • ファイルシステムの大きさ
  • 空きブロックに関する情報
  • iノードに関する情報
  • スーパーブロックが修正されたことを示すフラグなど

2点目の空きブロックに関する情報ですが「空きブロック数」、「使用可能な空きブロックのリスト」、「空きブロックリスト内における次の空きブロックへのポインタ」などがあります。スーパーブロックの詳細を確認したい場合は「dumpe2fs -h デバイスファイル名」のコマンドで確認できます(ただし、root権限が必要)。

3点目のiノードに関する情報ですが、そもそもiノードとは「1つのファイルを管理するのに必要な情報の入れ物」です。この入れ物に関する情報をスーパーブロックで保持しています。具体的には「iノードリストの大きさ(入れ物がいくつあるか)」、「使用可能な空きiノードの数」、「空きiノードのリスト」、「空きiノードリスト内における次の空きiノードへのポインタ」などです。iノードを区別するためにiノードにはiノード番号と呼ばれる番号が割り当てられています。iノードが枯渇するとディスク容量に空きがあったとしてもファイルを作成することはできません。ディスクに空き容量があるのに「空き容量が足りない」旨のメッセージが出た場合は空きiノード数を確認してみてください。iノードに関する情報は「df -i」コマンドで確認できます。ちなみにiノードは「index node」を短縮したものです。

最後のスーパーブロックが修正されたことを示すフラグですが、スーパーブロックの情報はメモリ上で管理されていて定期的にディスクに書き込まれています。システムが正常な手段で停止しなかった場合、スーパーブロックのフラグが立ったままになるので次のシステム起動時にシステムがそのフラグをチェックして不整合を修復するのに使われます。

スーパーブロックの次の領域には、iノードリストがあります。先に説明したようにファイルを管理する入れ物がリスト形式でここに格納されています。この入れ物の中身(すなわち、ファイルを管理するための情報)ですが、以下のものがあります。

  • ファイルの種類(一般ファイル、ディレクトリファイル、デバイスファイル)
  • ファイルへのリンク数
  • ファイルの所有権
  • ファイルのアクセス権
  • 時間(最終アクセス時刻、最終変更時刻、ステータス変更時刻(iノード自体が最後に変更された時刻))
  • バイト単位でのファイルサイズ
  • データブロックへのポインタなど

iノードの中身には「ファイル名」も「ファイルのデータ自体」も含まれていません。ファイル名はディレクトリファイルに格納されており、この仕組みは次回書こうと思います。ファイルのデータはiノードリストの次の領域にあるデータブロックに格納されています。

最後に、、この記事を書くにあたり以下の書籍を参考にさせていただきました。僕がずいぶん前に読んだ本ですが読み返してみました。

レンタルサーバーとVPS(Virtual Private Server)の違い

ブログを始めるにあたりレンタルサーバーを借りようと思ったのだけど、レンタルサーバーとVPS(Virtual Private Server)の違いが初めよくわからなかったので、他の方の参考になればと思い書いておこうと思います。

まず提供される機能(インフラ、OS、アプリケーションなど)の面から分類すると、レンタルサーバーはPaaS(Platform as a Service)、VPSはIaaS(Infrastructure as a Service)に該当します。

IaaSはインフラ(CPU、メモリ、ストレージ、ネットワーク等)のみの提供でOSやミドルウェア、アプリケーションはユーザー自身でインストールと設定を行う必要があります。ただOSのインストールについては管理画面から好みのOSを選択して自動でインストールしてくれるところが多いです。

PaaSはインフラ部分、および、OSとミドルウェア(Webサーバ、データベース等)まで提供されます。ブログサービスを行うCMS(Content Management System)はユーザーがインストール、設定を行います。代表的なCMSとして、WordPress、concrete5、Joomra! などがあります。CMSのインストールは管理画面で操作して自動でインストールしてくれるところがほとんどです。

SaaS(Software as a Service)はインフラからブログサービスまですべて提供されます。ユーザーは提供されたブログサービスを使うだけです。代表的なブログサービスとして、「Amebaブログ」とか「はてなブログ」などがあります。

僕の場合はCMSにWordPressを使い好きなテーマを選びたかったのと、自由にアフィリエイトをやりたかったためSaaS型のブログサービスは検討から外していました。SaaS型のブログサービスは手軽で一番簡単に始められるのですが、いろいろと制約があるからです。ただ情報発信をメインに考えている方であればSaaS型のブログサービスは良いかと思います。

リソースの面でレンタルサーバーとVPSを比べると、レンタルサーバーでは他の利用者とネットワークの帯域、メモリ、CPUなどを共有します。1台のサーバに自分のユーザーを作成してもらい、みんなでそのサーバーを使うのです。そのため、そのサーバーの利用者の誰かが人気ブロガーでそのサイトにアクセスが集中してサーバーに負荷をかけるようなことがあったら、自分のサイトも重くなってしまうかもしれません。その点、VPSの場合は自分専用のリソースを割り当てられます。だいたい契約するときに「CPUは2コア、メモリ1Gのプラン」等、どのスペックで契約するかを選びます。そのためVPSであれば契約したときのスペックは保証されます。

ここらへんの話はレンタルサーバーの提供会社のサイトの説明にあるのですが、僕が一番知りたかったのは「root権限があるのか?」でした。結論を言うと、レンタルサーバーではroot権限はなく通常のユーザー権限のみですが、VPSではroot権限がもらえます。ではVPSのほうがよいのか?というとそうではなくて、VPSを契約した場合はOSの自動インストールのサポートはあるものの、それ以降(それ以外)は全て自分でやらなくてはならないということです。WordPressを使う場合だと、WEBサーバ(Apache)、データベース(MySQL)、PHPのインストールも自分でやる必要があります。それ以外にもセキュリティの設定(iptablesとか)などもそうです。なので、もしWordPressでブログを始めようとするならレンタルサーバーの方をお勧めします。

僕はブログとは別にC言語で作られたプログラムもそのサーバーで動かしたかったのですが、それにはコンパイルをサーバー上で行う必要があり、コンパイラ(gcc)をインストールする必要がありました。始めからgccがサーバに入っていればいいですが、悪意あるプログラムをサーバ上で動かされては困るだろうからサービス提供会社としてはC言語プログラムの実行は許可していなかったです。そうなると、root権限があればあとは好き勝手にできるので「root権限がもらえるサーバーはどこか?」で探して、VPSのことを知った感じです。

具体的に、さくらインターネット株式会社が提供する「さくらのレンタルサーバー」と「さくらVPS」とで比較します。

レンタルサーバーだと、WEBサーバ、メールサーバ、FTPサーバ、シェル(SSH)ログイン、データベース、PHP、Perl 等、必要と思われるものはだいたい提供されます。管理画面から「インストール」ボタンを押すだけです。

これがVPSになると、選べるOSの説明があるだけで他の資料はないです。上級者向けです(初心者では無理だと思う)。なので、ブログをVPSで始めるのはよほどの理由がない限りやめたほうが良いかと思います。

最後に、僕が使ってみた(もしくは使ってみたい)レンタルサーバー/VPSの提供元のバナーを載せておきます。参考にしてみてください。

レンタルサーバーの提供元

[エックスサーバー株式会社]
エックスサーバーはレンタルサーバーを借りようとしたときの第一候補だったのですが、1ヶ月の値段で以下のさくらインターネットにしました。もし支払えるならエックスサーバーにしていたと思います。

[さくらインターネット株式会社]
エックスサーバーかさくらかで迷いましたがこちらにしました。今のところ、使ってみて特に問題はないです。

VPSの提供元

[さくらインターネット株式会社]
サーバー構築から自分で行う必要がありますが、さくらのホームページのサポート情報が充実していたので問題なかったです。

[GMOクラウド株式会社]

GMOクラウドが推しているPleskは使っていません。特に問題はないですが、ホームページのサポート情報はさくらのほうが見やすい感じがします。

さくらインターネットとGMOクラウドを使ってみてサーバー性能は特に不満はないです。サポートにはメールや電話はしたことがないのでオペレーターの親切度はわからないのですが、ホームページの情報でなんとかなりました。