Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

ext3 ファイルシステムを作成して、RAID ストレージおよびダイレクト I/O アプリケーションに対して最適化する方法

Solution Unverified - Updated -

Environment

Red Hat Enterprise Linux 3、4、5

Issue

ext3 ファイルシステムを作成して、RAID ストレージおよびダイレクト I/O アプリケーションに対して最適化する方法は?

Resolution

RAID レベル 0、4、5、および 6 は、大きな塊 (通常 64KB) でドライブをまたがるデータをストライプにします。特に、ダイレクト I/O を使用するアプリケーションで、パーティションおよびファイルシステムをこれらのストライプに調整するとパフォーマンスを向上することができます。

他のオペレーティングシステムおよびユーティリティに最大限の互換性を保証するために、 fdisk は、レガシーシリンダー/ヘッド/セクター (C/H/S) ジオメトリを使用して、シリンダー境界に調整されたパーティションを作成します。ただし、このジオメトリは通常、RAID アレイのストライプに沿うようには調整されません。RAID ボリュームは、LBA (Logical Block Addressing) を完全にサポートするオペレーティングシステムおよびユーティリティだけがアクセスする場合には、C/H/S アライメントは必要ありません。そしてストライプ調整は parted ツールで作成することができます。

注意: これらのすべての例は、既存のパーティションおよびファイルシステムを破壊します。この手法は、新しいファイルシステムを作成するためだけに使用する必要があります。

例 1: fdisk で作成された、/dev/sdb 上の整列されていないパーティション

[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel.Changes will remain in memory only,
until you decide to write them.After that, of course, the previous
content won't be recoverable.

The number of cylinders for this disk is set to 60799.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4):1
First cylinder (1-60799, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-60799, default 60799):
Using default value 60799

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# parted -s /dev/sdb unit s print

Model:APPLE Xserve RAID (scsi)
Disk /dev/sdb:976748543s
Sector size (logical/physical):512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 63s 976735934s 976735872s primary

[root@localhost ~]#

parted は、fdisk がパーティションの 63 セクター (32,256 バイト) をボリュームの最初のストライプに作成したことを示しています。これは、レガシー C/H/S ジオメトリに準拠していますが、RAID パフォーマンスを最適にはしません。RAID アレイは 64KB ストライプを使用するため、パーティションの開始をセクター 128 に移動する必要があります。これは、セクター 0 への移動がパーティションテーブルを上書きすることになるからです。大部分の RAID アレイは 512 バイトセクターを使用しますが、それ以上の 2 の階乗のバイトセクターでも可能です。

注意: parted はデフォルトではサイズユニットの接頭辞として、丸められた人間が読むことができる SI 接頭辞 (1000 の階乗) を使用します。2 の階乗で調整することはほとんどないため、parted は、セクターの調整を読み取りまたは設定する際にはセクターモード (ユニット) で利用されます。

例 2: /dev/sdb1 を削除して、セクター 128 で開始するように再作成します。

[root@localhost ~]# parted /dev/sdb
GNU Parted 1.8.1
Using /dev/sdb
Welcome to GNU Parted!Type 'help' to view a list of commands.
(parted) unit s
(parted) print

Model:APPLE Xserve RAID (scsi)
Disk /dev/sdb:976748543s
Sector size (logical/physical):512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 63s 976735934s 976735872s primary

(parted) rm 1
(parted) mkpart primary 128 976735934
(parted) print

Model:APPLE Xserve RAID (scsi)
Disk /dev/sdb:976748543s
Sector size (logical/physical):512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 128s 976735934s 976735807s primary

(parted) quit
[root@localhost ~]#

注意: parted の move および resize コマンドは、パーティション内のファイルシステムのコンテンツを保存しようとしますが、パーティション内にファイルシステムが存在しない場合には完了することを拒否します。

調整された ext3 ファイルシステムは調整されたパーティション、または調整された物理ボリュームで構成される論理ボリュームに直接作成することができます。LVM は、物理エクステント (PE) サイズが RAID のストライプサイズよりも大きい場合には、アライメントには影響を与えません。RAID ストライプのサイズは通常 64KB で、PE サイズのデフォルトは 4MB です。

mke2fs ユーティリティは、stride パラメータが RAID アレイに対するファイルシステムのメタデータの配列を最適化することを許可します。このパラメータは、ファイルシステムのブロック単位で指定します。これは、ほとんどの環境で 4KB にデフォルト設定されています。このブロックサイズは通常は理想的ですが、ストライドの計算が正しいことを確認するために明示的に設定することもできます。

例 3: 64KB RAID ストライプに対して最適化されている /dev/sdb1 に ext3 ファイルシステムを作成します。

[root@localhost ~]# mke2fs -j -b 4096 -E stride=16 /dev/sdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type:Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
61046784 inodes, 122091975 blocks
6104598 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
3726 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000

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

This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first.Use tune2fs -c or -i to override.
[root@localhost ~]#

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments