40.4. ファイルシステムの種類と作成

現在の Linux は様々なファイルシステムに対応しています。Turbolinux 10 Server が標準のファイルシステムに採用しているのは Ext3 です。以前、最も標準的に使用されてきたファイルシステムに Ext2 がありますが、Linux が大規模な基幹系システムやデータベースシステムなどに利用され始めるにつれ、Ext2 ファイルシステムの限界が問題となりました。このような背景から、カーネル 2.4 以降、Ext2 ファイルシステムの欠点を補う次世代ファイルシステムが相次いでサポートされてきました。その中で特に注目されているファイルシステムが、Ext3、ReiserFS、JFS、XFS です。

Ext2 ファイルシステムが持つ欠点の 1 つは、ファイルシステムの最大サイズ、およびファイルシステムが扱える1つのファイルサイズの制限です。Ext2 は、本来、ファイルシステムの最大サイズが 4TB、ファイルの最大サイズが 2GB という限界があります。これらの制限は、Ext2 とカーネルが 32 ビットでデータを管理していることに起因していますが、LFS(Large File Summit)という機構により、ファイルの取り扱いを 32 ビットから 64 ビットに変更することで、現在では最大約 2TB のファイルを作成することができます(パーティションのブロックサイズが 4096 バイトの場合)。これにより、ファイルサイズの制限からしばしば問題となっていた大規模システムへの対応は以前と比較すると容易となりました。しかし、32 ビットでデータを取り扱う Ext2 ファイルシステムを使用する限り、近い将来、このサイズでも足りなくなる可能性はあります。それに対し、JFS と XFS は、64 ビットアーキクチャに対応しているため、PB クラスのデータですら扱うことが可能です。しかし、そのためにはファイルシステムのみならず、カーネルやプロセッサなどが相互に 64 ビットアーキテクチャに対応している必要があります。

次に、Ext2 ファイルシステムの可用性の問題があげられます。Ext2 ファイルシステムは、システムが正常に終了しなかった場合(正常にアンマウントされなかった場合など)、次のシステム起動時に fsck プログラムを実行します。これは、ファイルシステムと実際のハードディスクとのデータの整合性をチェック、修復するためのものです。しかし、これはパーティション全体を探索することにより行われるので、その実行時間はパーティションのサイズが大きければ大きいほど長くかかることになります。つまり、その間システムは全く稼働しない状態になります。これは、24 時間稼働することが求められるサーバーにとっては、大きな問題となります。次世代ファイルシステムでは、ジャーナリングと呼ばれる機能によりこの欠点を克服しています。ジャーナルとは、ファイルシステムに対する変更などを記録するデータベースのことです。システムの障害時は、このジャーナルからファイルシステムの整合性を確認することにより、スムーズな復旧を促します。Ext2 では fsck コマンドで長時間に渡りファイルシステムをチェックしていましたが、ジャーナリングファイルシステムでは通常の起動と変わらない時間で起動します。また、Ext2 ファイルシステムは、パフォーマンスや断片化の問題なども指摘されています。これらの欠点もまた次世代ファイルシステムでは、改良されています。

Turbolinux 10 Server は、これらの次世代ファイルシステムに対応しています。インストール時のパーティション設定では、標準のファイルシステムである Ext3 に加え、ReiserFS、JFS、XFS を選択することも可能です。ここでは、各ファイルシステムの簡単な概要と、実際に Turbolinux 10 Server のインストール後にファイルシステムを作成する基本的な手順を解説します。

40.4.1. Ext3

Ext3 ファイルシステムは、従来の Ext2 ファイルシステムにジャーナル機能を追加したものです。よって、Ext2 ファイルシステムの欠点も引き継ぎますが、従来の Ext2 ファイルシステムの安定性や実績はそのままに、ジャーナル機能が追加されたことで、システムのスムーズな復旧が可能です。このように、Ext3 ファイルシステムの最も大きな特徴は、Ext2 ファイルシステムの上位互換であることです。既存の Ext2 ファイルシステムを再フォーマットすることなく、簡単に Ext3 ファイルシステムへ移行することが可能です。また、Ext3 をアンマウントし、単に Ext2 としてマウントすることも可能です。

Ext3 ファイルシステムの作成

パーティションに新たに Ext3 ファイルシステムを作成する方法を解説します。作成するには、以下のコマンドを実行します(作成するパーティションが /dev/sdb1 の場合)。

# mke3fs /dev/sdb1
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1121664 inodes, 2241059 blocks
112052 blocks (5.00%) reserved for the super user
First data block=0
69 block groups
32768 blocks per group, 32768 fragments per group
16256 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

作成されたファイルシステムが正常かどうかを検証するために fsck または fsck.ext3 コマンドを実行します。

# fsck.ext3 /dev/sdb1
e2fsck 1.35 (28-Feb-2004)
/dev/sdb1: clean, 11/1121664 files, 43415/2241059 blocks

作成した Ext3 のパーティションをマウントします。以下のコマンドを実行します(マウントポイントが /data の場合)。

# mount -t ext3 /dev/sdb1 /data

df コマンドを実行し、Ext3 としてマウントされていることを確認します。

# df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda3     ext3     4127108   2836428   1081032  73% /
/dev/sda1     ext2       54416     12089     39518  24% /boot
/dev/sda4     ext3     4047936     32952   3809352   1% /home
/dev/sdb1     ext3     8823404     32828   8342368   1% /data

システム起動時にファイルシステムがマウントされるように、必要に応じて /etc/fstab を編集します。

/dev/sdb1               /data                   ext3    defaults        1 3

作成したファイルシステムの情報は、dumpe2fs コマンドで確認することができます。

# dumpe2fs /dev/sdb1
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          cf7eaf27-47fe-4946-b5ba-62a065dc3872
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal filetype needs_recovery sparse_super
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              1121664
Block count:              2241059
Reserved block count:     112052
Free blocks:              2197644
Free inodes:              1121653
First block:              0
Block size:               4096
Fragment size:            4096
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         16256
Inode blocks per group:   508
Filesystem created:       Sat Sep  4 19:51:49 2004
Last mount time:          Sat Sep  4 19:53:40 2004
Last write time:          Sat Sep  4 19:53:40 2004
Mount count:              2
Maximum mount count:      31
Last checked:             Sat Sep  4 19:51:49 2004
Check interval:           15552000 (6 months)
Next check after:         Thu Mar  3 19:51:49 2005
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   tea
Directory Hash Seed:      d063f169-7914-400a-8222-0c7b864b7253
Journal backup:           inode blocks


Group 0: (Blocks 0-32767)
  Primary superblock at 0, Group descriptors at 1-1
  Block bitmap at 2 (+2), Inode bitmap at 3 (+3)
  Inode table at 4-511 (+4)
  24049 free blocks, 16245 free inodes, 2 directories
  Free blocks: 8719-32767
  Free inodes: 12-16256

省略...
Ext2 から Ext3 への変換

既存の Ext2 ファイルシステムのパーティションを Ext3 ファイルシステムに変換する方法を解説します。作業を開始する前に、変換したいパーティションのバックアップを必ず行ってください。

最初に、変換したいパーティションをアンマウントします。

次に、以下のコマンドを実行して Ext3 ファイルシステムへ変換します。-j オプションを指定することで、Ext3 のジャーナルをファイルシステムに追加することができます。(変換するパーティションが /dev/sdb1 の場合)。

# tune2fs -j /dev/sdb1
tune2fs 1.35 (28-Feb-2004)
Creating journal inode: done
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

再び、変換したパーティションをマウントし、Ext3 でマウントされていることを確認します。

# mount -t ext3 /dev/sdb1 /data
# df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda3     ext3     4127108   2836428   1081032  73% /
/dev/sda1     ext2       54416     12089     39518  24% /boot
/dev/sda4     ext3     4047936     32952   3809352   1% /home
/dev/sdb1     ext3     8823404     32828   8342368   1% /data

なお、Ext3 を Ext2 としてマウントするのであれば、マウントオプションを変更するだけで可能です。

# mount -t ext2 /dev/sdb1 /data

40.4.2. ReiserFS

ReiserFS(http://www.namesys.com/)は、ブロック割り当てに B-ツリー から派生したアルゴリズムを用いた新しいタイプのファイルシステムです。ジャーナリング機能も実装しているため、高い耐障害性を見込むことができます。また、Ext2 と比較すると、特に小さなファイルがたくさんある場合のディスク領域の使用効率が高くなります。これは i ノードブロック空間を静的に確保するのではなく、動的に確保するためです。

ReiserFS の作成

パーティションに新たな ReiserFS ファイルシステムを作成する手順を解説します。作成するには、以下のコマンドを実行します(作成するパーティション名が /dev/sdb1 の場合)。

# mkreiserfs /dev/sdb1
mkreiserfs 3.6.17 (2003 www.namesys.com)

A pair of credits:
SuSE (www.suse.com)  pays for continuing work on journaling for version 3, paid
for much of the previous version 3 work, and is paying for Chris and Jeff to do
V3 maintenance. Reiserfs integration in their distro is consistently solid, and
they were key to our becoming widely used.

Lycos Europe  (www.lycos-europe.com)  had  a  support  contract  with  us  that
consistently came in just when we would otherwise have missed payroll, and that
they kept doubling every year. Much thanks to them.


Guessing about desired format.. Kernel 2.6.8-0.8smp is running.
Format 3.6 with standard journal
Count of blocks on the device: 2241056
Number of blocks consumed by mkreiserfs formatting process: 8280
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 3bfcb3e0-1402-41a9-9f12-3cdf81a40e7c
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
        ALL DATA WILL BE LOST ON '/dev/sdb1'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok

Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.

ReiserFS is successfully created on /dev/sdb1.

対象デバイス上のデータを消去する警告と確認プロンプトが表示されます。y を入力してファイルシステムを作成します。

作成した ReiserFS のパーティションをマウントします。以下のコマンドを実行します(マウントポイントが /data の場合)。

# mount -t reiserfs /dev/sdb1 /data

df コマンドを実行し、ReiserFS としてマウントされていることを確認します。

# df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda3     ext3     4127108   2836436   1081024  73% /
/dev/sda1     ext2       54416     12089     39518  24% /boot
/dev/sda4     ext3     4047936     32952   3809352   1% /home
/dev/sdb1 reiserfs     8963944     32840   8931104   1% /data
ReiserFS 関連コマンド

ReiserFS 関連のコマンドを紹介します。詳細については、man ページを参照してください。

表 40-4. ReiserFS - 関連コマンド

/sbin/debugreiserfsファイルシステムのデバッグ
/sbin/mkreiserfsファイルシステムの作成
/sbin/reiserfsckファイルシステムの整合性チェック
/sbin/resize_reiserfsファイルシステムのサイズ変更

40.4.3. JFS

JFS(http://www-124.ibm.com/developerworks/oss/jfs/)は、IBM の OS/2 や商用 UNIX である AIX などの OS に採用していたファイルシステムを Linux へ移植したジャーナリングファイルシステムです。JFS の最大の特徴としては、64 ビットに対応していることがあげられます。これにより、JFS 自体はファイルシステムの最大サイズは理論上 32PB(4KB ブロック時)、1 つのファイルの最大サイズは 4PB(4KB ブロック時)ものデータを扱うことが可能です。ただし、32 ビットの Linux の場合、2TB が実際の上限となります。JFS は AIX に採用されていたファイルシステムで信頼性が要求される大規模システムやデータベースシステムなどでの利用実績もあることから、Linux での利用も期待されています。

JFS ファイルシステムの作成

パーティションに新たな JFS ファイルシステム を作成する手順を解説します。作成するには、以下のコマンドを実行します(作成するパーティション名が /dev/sdb1 の場合)。

# jfs_mkfs /dev/sdb1
jfs_mkfs version 1.1.7, 22-Jul-2004
Warning!  All data on device /dev/sdb1 will be lost!

Continue? (Y/N) Y
   |

Format completed successfully.

425691 kilobytes total disk space.

対象デバイス上のデータを消去する警告と確認プロンプトが表示されます。Y を入力してファイルシステムを作成します。

作成したファイルシステムをマウントします。以下のコマンドを実行します(マウントポイントが /data の場合)。

# mount -t jfs /dev/sdb1 /home/data

df コマンドを実行し、JFS としてマウントされていることを確認します。

# df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda3     ext3     4127108   2836436   1081024  73% /
/dev/sda1     ext2       54416     12089     39518  24% /boot
/dev/sda4     ext3     4047936     32952   3809352   1% /home
/dev/sdb1      jfs     8963944     32840   8931104   1% /data
JFS 関連コマンド

JFS 関連のコマンドを紹介します。詳細については、man ページを参照してください。

表 40-5. JFS - 関連コマンド

/sbin/jfs_debugfsファイルシステムのデバッグ
/sbin/jfs_fsckファイルシステムのチェック
/sbin/jfs_fscklog指定したデバイスの fsck ログを出力
/sbin/jfs_logdumpファイルシステムのジャーナルログをバックアップ
/sbin/jfs_mkfsファイルシステムの作成
/sbin/jfs_tuneファイルシステムのパラメータ設定

40.4.4. XFS

XFS(http://oss.sgi.com/projects/xfs/)は、Silicon Graphics の商用 UNIX である IRIX に採用していたファイルシステムを Linux へ移植したジャーナリングファイルシステムです。XFS の特徴としては、64 ビットに対応していることがあげられます。これにより、XFS 自体は、ファイルシステムの最大サイズは理論上 18000PB、1 つのファイルの最大サイズは 9000PB ものデータを取り扱うことが可能です。XFS は特に動画をリアルタイムに配信するストリーミングサーバーでの実績があり、特にファイルサイズの大きいメディアファイルを効率よく取り扱えることも大きな特徴の 1 つです。

XFS ファイルシステムの作成

パーティションに新たな XFS ファイルシステム を作成する手順を解説します。作成するには、以下のコマンドを実行します(作成するパーティション名が /dev/sdb1 の場合)。

# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=16, agsize=140066 blks
         =                       sectsz=512
data     =                       bsize=4096   blocks=2241056, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096
log      =internal log           bsize=4096   blocks=2560, version=1
         =                       sectsz=512   sunit=0 blks
realtime =none                   extsz=65536  blocks=0, rtextents=0

作成したファイルシステムをマウントします(マウントポイントが /home/data の場合)。

# mount -t xfs /dev/sdb1 /data

df コマンドを実行し、XFS としてマウントされていることを確認します。

# df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda3     ext3     4127108   2836448   1081012  73% /
/dev/sda1     ext2       54416     12089     39518  24% /boot
/dev/sda4     ext3     4047936     32952   3809352   1% /home
/dev/sdb1      xfs     8953984       272   8953712   1% /data
XFS 関連コマンド

XFS に関連するコマンドを紹介します。詳細については、man ページを参照してください。

表 40-6. XFS - 関連コマンド

/sbin/mkfs.xfsファイルシステムの作成
/usr/sbin/xfs_adminファイルシステムの属性を変更
/usr/sbin/xfs_bmapファイルが使用しているディスクブロックの表示
/usr/sbin/xfs_checkファイルシステムの整合性チェック
/usr/sbin/xfs_dbファイルシステムのデバッグ
/usr/sbin/xfs_freezeファイルシステムへのアクセスを停止/再開
/usr/sbin/xfs_growfs既存のファイルシステムを拡大
/usr/sbin/xfs_infoファイルシステムの情報を表示
/usr/sbin/xfs_ioファイルシステムの I/O パスをデバッグ
/usr/sbin/xfs_logprintファイルシステムのログを表示
/usr/sbin/xfs_mkfile指定したサイズのファイルを作成
/usr/sbin/xfs_ncheckファイルの inode とパス名を表示
/usr/sbin/xfs_rtcpXFS のリアルタイムパーティションへファイルをコピー