LPIC-1 - 101試験 - 104:デバイス、Linuxファイルシステム、ファイルシステム階層標準 - 104.1 パーティションとファイルシステムの作成

Last Update : September 18 2014 21:34:21

     

a. ハードディスク

Linuxでハードディスクを利用するには、ハードディスク上にパーティションという領域を作成し、そのパーティション内にファイルシステムを作成し、そのファイルシステムをマウントすることでデータの保存や取り出しが可能になります。

ハードディスクをコンピュータに接続する方法(インターフェイス)には、いくつかの種類があります。

  • IDE
    IDE規格はパラレルインターフェース規格でATA規格とも呼ばれ、1台のコンピュータに2系統の接続経路が備えられており、それぞれ「プライマリIDE」「セカンダリIDE」と呼ばれます。そのそれぞれについて「マスター」と「スレーブ」の2台の機器を接続できるので、合計で4台の機器が使用できます。PC/AT互換機では、OSの起動に使えるのはプライマリIDEのマスターに接続されているハードディスクのみという制限があります。
    IDE規格は今ではエンハンスドIDEとなり、ATAPIの規格と同一になっています。
    ハードディスク以外にCD-ROMやMOドライブを接続することもできます。

  • SCSI (Small Computer System Interface)
    SCSIはバス型接続のパラレルインターフェース規格で、周辺機器同士をデイジーチェーン方式で接続します。接続の終端となる部分のコネクタにはターミネータ(終端抵抗器)を設置する必要があります。 1つのインターフェースで最大16台までの機器を接続できます。SCSIに接続する各機器はSCSIデバイスと呼ばれます。各々0から7(または15)までの番号で区別されます。この番号のことをSCSI IDといいます。通常、SCSI機器は各々、明示的にSCSI IDを設定しなければならないが、SCAMという拡張仕様を用いることで、自動的に設定することも可能です。

  • SATA
    パラレル転送方式だったATAの転送方法をシリアル転送方式にしたものです。 シリアルATAとパラレルATAはプロトコルレベルで互換性を持っており、ソフトウェアレベルでは従来のパラレルATAと同様に扱うことができます。また、1本のケーブルにマスターとスレーブの2台を接続する方式から、1本のケーブルに1台のHDDを接続する方式に変更されました。その他、シリアルATAではホットプラグが可能となっており、システムを停止させることなくHDDを取り外したり交換したりすることができるようになっています。

  • SAS (Serial Attached SCSI)
    パラレル伝送であったSCSI規格を、その名の通りシリアル化したものです。 コネクタはSATAとの互換性があり、SATA規格のデバイスをそのままSASコネクタに接続する事が可能です。ただしその逆の、SATAインターフェースにSASデバイスを接続する事は不可能です。

  • USB
    周辺機器とパソコンを結ぶデータ伝送路のシリアル・インターフェース規格のひとつ。 基本的にはホットプラグ(活線抜挿)が可能で、新規ハードウェアもPlug&Playで自動的に認識します。

b. パーティションの種類

パーティション は、物理的なハードディスクドライブ(以下、HDD)の領域を複数の論理的な領域に分割したその中の1つの領域のことです。
1つのハードディスク装置に対し、パーティションは4つまでしか作成できません。
そして、作成できるパーティションの種類は3種類あります。

  1. 基本パーティション
    ディスクには、最大4つの基本パーティションを作成することができます。 パーティション内には、ファイルシステムを格納でき、基本パーティションのデバイスファイル名は、SCSIハードディスクの場合、/dev/sda1~sda4になります。

  2. 拡張パーティション
    基本パーティションの1つだけを拡張パーティションにできます。(残りは基本パーティション) 拡張パーティションの中には、ファイルシステムではなく、論理パーティションが格納されます。

  3. 論理パーティション
    論理パーティションは、拡張パーティション内に作成されたパーティションのことです。 論理パーティションのデバイスファイルは、作成済み基本パーティションの数に関係なく、/dev/sda5以降になります。
1. パーティションを分割するメリット

パーテョンに分割することで、システムに障害発生した場合、ファイルシステムの一部が壊れても、損害を1つのパーティションに抑える事ができます。


c. ルートファイルシステム

Linuxのファイルシステムは、/(ルート)を起点とした、単一の階層的なツリー構造になっています。ファイルシステムは全体でひとつの実体として表現されます。 新しいファイルシステムデバイスをマウントする場合、Linux は個々のファイルシステムをこの単一のツリー構造に付け加えます。すべてのファイルシステムは、そのタイプに関わらず、任意のディレクトリにマウントされ、マウントされたファイルシステムのファイルがそのディレクトリに現存する内容を表します。


d. パーティション管理コマンド

1. fdisk コマンド

fdisk コマンドは、ハード・ディスク領域を分割して複数のパーティションを作成・編集するためのコマンドです。fdiskコマンドを実行すると対話型のコマンド入力によって操作を行うことができます。fdiskの実行には、管理者権限(root権限)が必要です。

● fdisk コマンド構文
  fdisk [オプション] デバイス

● fdisk コマンドオプション
 -b ブロック デバイスのブロック・サイズを指定する
 -C シリンダ デバイスのシリンダ数を指定する
 -H ヘッダ デバイスのヘッダ数を指定する
 -S セクター デバイスの1トラックあたりのセクター数を指定する
 -l マウントされているデバイスのパーティション情報を表示する
 -u -l オプションを利用する際、容量をシリンダ数単位で表示する
 -s パーティション 指定したパーティションの容量を表示する。容量はブロック数

● fdisk 対話型プロンプトでのサブコマンド
 aブートの可否を切り替える
 bBSD用パーティションのディスク・ラベルを編集する
 cDOSコンパチブルの可否を切り替える
 dパーティションを削除する
 l利用可能なパーティション・タイプを表示する
 m利用可能なコマンドを一覧する
 n新しいパーティションを作成する
 oDOSパーティションを作成する
 pパーティション情報を表示する
 qパーティション情報を保存せずに終了する
 sSUN用の新しいディスク・ラベルを作成する
 tパーティション・タイプを変更する。初期値は"Linux native"(83)
 u容量の表示単位を切り替える
 vパーティションを検査する
 wパーティション情報を書き込んで、終了する


2.mkfsコマンド

mkfs コマンドは、指定したデバイスにファイル・システムを構築します。購入してきたフロッピ・ディスクを使用する前には、fdformatで物理フォーマットした後に、このコマンドでファイル・システムを作成する必要があります。

● mkfs コマンド構文
  mkfs [オプション] デバイス [ブロック]

● mkfs コマンドオプション
 -V 詳細情報を表示する
 -t type 作成するファイル・システムを指定する
 ブロック ブロックを指定する

● type (ファイルシステムタイプ)
 ext2 Linux で標準的に使用されるファイルシステム
 ext3 ext2にジャーナリング機能を追加したファイルシステム。ジャーナリングファイルシステムとは、ファイル更新履歴のパックアップを記録しておく機能をもったファイルシステムの事です。
 iso9660 CD-ROMで標準的に使用されるファイルシステム
 msdos MS-DOSのファイルシステム
 vfat Windowsファイルシステム
 nfs NFS(ネットワークファイルシステム)

●フロッピ・ディスクを論理フォーマットする
$ mkfs -t msdos /dev/fd0

mkfs.ext3コマンドがあれば、このコマンドでext3ファイルシステムを作成できます。

●mkfs.ext3コマンドがあるか確認する
# ls /sbin/mkfs.ext*
/sbin/mkfs.ext2 /sbin/mkfs.ext3 /sbin/mkfs.ext4 /sbin/mkfs.ext4dev

●mkfs.ext3コマンドがあればext3ファイルシステムを作成できる
# mkfs.ext3 /dev/sda4


3. mke2fs コマンド

mke2fs コマンドは、ディスクのパーティションを LinuxOS 標準の ext2 または ext3 形式にフォーマットするコマンドです。
いままでは、LinuxOSではext2形式が一般的に使われてきましたが、現在はこのext2に ジャーナリング機能 と呼ばれる「ディスク障害時の復旧のための情報」を追加したext3形式が使われるようになっています。
mke2fsコマンドを使ってフォーマットを行うには、先にパーティションが確保されていなければなりませんので、必要に応じて fdisk コマンドなどでパーティションを確保しておきます。

● mke2fs コマンド構文
  mke2fs [オプション] デバイス

● mke2fs コマンドオプション
 -j ext3ファイルシステムを作成する。
 -b サイズ ブロックサイズをバイト単位で指定する
 -c ファイルシステム作成前に不良ブロックのチェックを行う
 -i サイズ iノードあたりのバイト数を指定する
 -m 領域% ルートユーザ用の予約領域を%単位で指定する
 -n 実際には何もしない(パラメータ確認用)
 -t タイプ ファイルシステムの種類を指定する

● /dev/sda2にext3ファイルシステムを作成する。
$ mke2fs -j /dev/sda2


4. mkswap コマンド

スワップ領域を作成するには mkswap コマンドを使います。

● mkswap コマンド構文
  mkswap [オプション] デバイス

● mkswap コマンドオプション
 -c スワップ領域を作成する前に、デバイスに対して不良ブロックのチェックを行う。

● /dev/sda3にスワップ領域を作成する。
# mkswap -c /dev/sda3

● システム構築時にスワップ領域を構築していなかった場合でも、スワップファイルを作成することでスワップ領域を追加することも可能です。
# mkswap /var/tmp/swap.img



d. ext2/ext3/ext4ファイルシステム

ext2/ext3ファイルシステムはデータブロック、iノードブロック、スーパーブロックというブロックで管理され、ブロックグループという単位でまとめられています。

1ブロックの構造
スーパブロック iノードブロック データブロック

● データブロック
データが格納されるブロックで、1ブロックのサイズは1024バイト、2048バイト、4096バイトの中からファイルシステム作成時に作成する。ファイルシステム上では、8つのセクタ=4096バイトを、1データブロックとして管理するのが主流
※ 1バイトのデータを格納するにも1データブロックが必要になるので、小さなサイズのファイルを作成する場合には注意が必要
● iノードブロック
データブロックの格納内容がiノードに記録される
i-nodeには、管理するファイルのデータが、どのデータブロックに保存されているかの情報が保存されている。
ほかにも、ファイルタイプ、アクセス権、所有者、所有グループ、ファイルサイズ、作成日時などのメタデータが格納されている
iノードのサイズは128バイトで1ブロックが1024バイトの場合は8つのiノードが格納されている
iノードは後から追加することはできないため、iノードを使い切ってしまうと新規にファイルが作成できない
ReiserfsやXFSではiノードを動的に追加できる動的iノードという仕組みがあるため、iノードが枯渇することはない
i-nodeがいくつ必要かは事前には分からないので、4096byte×4=16,384バイトに1つの割合で、i-nodeを作る。
・ファイル種別
・ファイルサイズ
・アクセス権
・所有者
・リンク
・ディスク上の保存場所(ブロック番号)
※ファイル名の情報は、i-node上ではなく、ディレクトリのデータブロック上に収められており、そこで、i-node番号と、ファイル名が紐付けられている。
● スーパーブロック
ファイルシステムの全般的な情報(データブロックサイズ、マウント回数、iノードやデータブロック数など)が格納されている 非常に重要なためブロックグループごとにバックアップが作成される(バックアップスーパーブロック)
スーパーブロックはディスクパーティションごとに1つだけ用意されているため、複数の ディスクパーティションをmke2fsコマンドで初期化した場合、それぞれのパーティション (区画)にスーパーブロックが作成される。
・パーティション内のデータブロック数
・ブロックサイズ
・空きブロック数
・iノード数
・空きiノード数

ext2
パーティションの上限は当初2GiBでしたが、2.4系カーネルでは4TiBまで拡張されています。255バイトまでのファイル名や、可変長のディレクトリエントリに対応しています。また、一部をスーパーユーザー (root) のために予約しており、通常の領域を使い切ってもメンテナンスを行うことができます。
ext2 は、ジャーナリングを備えていないため、いったんクラッシュするとファイルシステムの復旧に時間がかかります。そのため、ext3 や ReiserFS などのジャーナリングファイルシステムの使用が進められています。
ext2 の空間はフラグメントを減らし、ディスクシークを最小化するためにブロックで分けられており、ブロックグループを作りグループ化します。
最大ファイル サイズ 2TiB
最大ファイル数 10^18
最大ファイル名長 255バイト
最大ボリューム サイズ 16TiB

ext3
ext3 は、ext2との互換性を維持したまま、ジャーナリング機能を付加した互換ファイルシステムです。
ext2に比べext3には以下の機能が加わっています。

  • ジャーナリング
  • 複数のブロックに跨るディレクトリに対してのツリーベースのディレクトリインデックス
  • オンラインファイルシステムリサイズ(拡張のみ)
  • dir_indexオプションをつけると、ディレクトリ内の検索に、hashed b-tree を使うことができ、ディレクトリ内に多数のファイルがある場合、劇的に高速化する。

 ext3の主なメリットは次のとおりです。

  • クラッシュ時の起動時間の短縮
    ext2とext3がベースとしているブロックアルゴリズムは安定している半面、起動が遅いという問題があった。ext3は、ジャーナリング機能を実装することで起動時間の短縮を実現した。
  • 互換性
    ext3とext2は基本構造が同一なので、ext2からext3への変更などを簡単に行うことができる。
  • 性能
    ブロックのアロケーションや基本的なアルゴリズムはext2と同じだが、コードはext2をそのまま利用するのではなく、スクラッチから書き直された。そのため、ext2に比べてエラー処理やロック、ファンクションの実行手順、アトミック操作など、細かい点で改善が見られる。I/Oについても、ディスクへのフラッシュと非同期に行うことで効率の良い書き込みを実現している。

最大ファイル サイズ 16GiBから2TiB
最大ファイル数 指定による
最大ファイル名長 255バイト
最大ボリューム サイズ 2TiBから32TiB

ext4
ext4 ファイルシステムは、ext3 ファイルシステムの次世代の水準として、ディスク容量の増加に伴う巨大なファイルシステム (64bit) を扱うのに必要な拡張性と信頼性を向上し、最新の機能要求に応えたものです。
1EiBまでのストレージ容量と最大16TiBまでのファイルサイズをサポートし、ファイルの断片化を防ぐ extent file writing と呼ばれるシステムが導入されいます。
最大ファイル サイズ 16TiB
最大ボリューム サイズ 1EiB

ジャーナリング
ジャーナリングは、ジャーナル(またはログ)と呼ばれるデータを定期的に記録する技術で、もともとはデータベースで用いられていました。ジャーナリングファイルシステムはこの技術を応用したもので、ファイルシステムの更新内容をジャーナルログに記録します。システム障害などが生じた際に、ログに記録された内容を確認するだけでよいので起動が速くなり、かつその情報を基にした復旧が可能となります。
データベースで用いられるジャーナリングの目的がデータの保全であるのに対して、ジャーナリングファイルシステムの目的はデータそのものではなく、ファイルシステム全体を保護することにあります。ファイルシステムの保護のためには、ファイルシステムを構成・管理する情報である「メタ・データ」の整合性が必要です。つまり、ジャーナリングファイルシステムにとっては、メタ・データを適切に保持し、更新の処理を行うことが主な目的となります。

ジャーナリングに対応したファイルシステムでは、ディスクにデータを書き込む際に、直接データを書き込むのではなくて、「ジャーナリング」(または「ログ」)と呼ばれる場所に、その操作を一旦書き込んでおきます。そして、その後、本当にディスクへのデータの書き込みを開始し、データの書き込みが完了した時点で、ジャーナリングからその操作を消します。つまりジャーナリングの領域に、これから操作する手順を書いてから、実際の操作をし、操作完了後に手順を削除するようにします。
このようにしておけば、もし、ファイルへの書き込み時にシステムが不正に終了しても、再起動後にジャーナリング内に何も残っていなければ、実際にディスクへの書き込みが完了したことを意味します。
もしジャーナリング内に何か残っていれば、ディスクへの書き込みに失敗した可能性があるということがわかります。このときジャーナリング内に記載された手順内容を見れば、どのような操作をしたかがわかるので、壊れた可能性がある箇所がわかります。よってその箇所だけを調査すればよい。すなわち強制的に全メタデータを調査するfsckコマンドによるものと違い、壊れた可能性がある箇所だけを調べることで、不正なシャットダウン後のディスクチェックの時間を短縮することができます。

メタデータ
データについてのデータ。データそのものではなく、そのデータに関連する情報のこと。データの作成日時や作成者、データ形式、タイトル、注釈などのことです。データを効率的に管理したり検索したりするために重要な情報です。


e. XFSファイルシステム

XFSはSilicon Graphics(SGI)が開発したジャーナリングファイルシステムです。XFSの開発が開始された当時、SGIはすでにEFS(Extent File System)というファイルシステムを持っていました。SGIがXFSで目指したものは、次世代の拡張性を考慮した64bitファイルシステムを新規開発することでした。
XFS開発の背景には、今後Tbytesオーダーのディスクが主流となったときに、32bitファイルシステムでは限界があるという認識がありました。32bitファイルシステムでは40億個のブロックしか作れないため、ブロックサイズを8kbytesとすると32Tbytesまでしか扱えません。
開発チームは当初からこの問題を考慮し、64bitファイルシステムやアロケーショングループという手法を採用することで巨大なファイルシステムを扱うことを可能にしました。また、サイズの大きなファイルは書き込み/読み込み領域を確保したり、ディスク上の空き領域を検索するのに時間がかかるといった問題があります。そのためXFSでは、遅延アロケーションやB+-Treeによってこれに対処しています。
XFSは64ビットのジャーナリングファイルシステムであり、ファイルシステムの整合性が保証されています。ファイルシステムサイズは最大で8EiBですが、通常ホストオペレーティングシステムの仕様によりそれよりも少ない容量に制限されます。たとえば32ビット Linuxにおいては、最大16TiBです。 削除されたファイルの復元はほぼ不可能です(これは長所でもあります)。
最大ファイル サイズ 8EiB
最大ファイル名長 255バイト
最大ボリューム サイズ 8EiB


f. ReiserFSファイルシステム

ReiserFS は従来のデータベースで実装されてきたB-Treeアルゴリズムをファイルシステムに実装する試みとしていて、開発当初よりB-Treeアルゴリズムを効率よく実装することを目指していました。
Reiser氏を中心とする開発メンバーは、このB-Treeアルゴリズムをさらにファイルシステムに適したB*-Treeとしました。B*-Treeではデータオブジェクトをツリー構造の中に収め、ノードの検索に当たる部分をキャッシュに置くことで高速な検索を実現しています。
大きなファイルの読み書きはハードなどの制約があるため差が出にくいですが、多数のファイルがあるディレクトリで目的のファイルを探す場合などは、このアルゴリズムのメリットが有効です。

ext2/ext3ファイルシステムと互換性は無い。
最大16TiBまでのボリュームサイズをサポートする。
最大8TiBのファイルをサポートする。
ext2/ext3よりもパフォーマンスに優れるとされており、特にサイズの小さいファイルを多数処理する際に優れている。
最大ファイル サイズ 8 テビバイト
最大ファイル数 232 (~42億)
最大ファイル名長 4032バイト/255バイト(VFSによる制限)
最大ボリューム サイズ 16 テビバイト


z. 出題範囲概要

●説明 ハードディスクなどのメディア上でディスクパーティションを構成し、ファイルシステムを作成する。これには、スワップパーティションの操作も含まれる。
●主要な知識範囲
各種のmkfsコマンドを使用して、パーティションの作成と設定、以下のようなさまざまなファイルシステムを作成する
ext2/ext3/ext4
xfs
reiserfs v3
vfat
●重要なファイル、用語、ユーティリティ
fdisk, mkfs, mkswap


  [ 例題 ] 
  1. 101:104.2 問01  XFSファイルシステム
  2. 101:104.1 問01  スワップパーティション
  3. 101:104.1 問02  fdisk
  4. 101:104.1 問03  スワップ領域
  5. 101:104.1 問04  ジャーナリングファイルシステム
  6. 101:104.1 問05  スワップスペースを作成する
  7. 101:104.1 問06  パーティションに分割
  8. 101:104.1 問07  ext3ファイル
  9. 101:104.1 問08  ファイルシステム
  10. 101:104.1 問09  スワップ領域


     

www.it-shikaku.jp