5. 高度なストレージ管理
5.1. RAID
RAIDはハードディスクを組み合わせて使用できる技術のこと。 ハードディスクをまとめて扱うことで高い信頼性とパフォーマンスを実現することを目指すものといえる。
5.1.1. LinuxにおけるRAID
LinuxでRAIDを利用する際はソフトウェアRAIDとハードウェアRAIDの2種類を利用できる。 Kernel2.4以降ではソフトウェアRAIDが実装されていてハードディスクのパーティションを複数使うことでRAIDアレイを実現する。 ハードウェアRAIDアレイはLinuxからはSCSIデバイスのように見える。
RAIDアレイ
複数のディスクもしくはパーティションを束ねたもののこと
5.1.2. RAIDの種類
RAID0(ストライピング)
RAID0は複数のディスクに分散してデータを書き込み1台のディスクのように扱うRAID構成。
特徴は以下の通り。
- データ消失が許されない用途には不向き
- 書き込みのパフォーマンスが高い
- ディスク容量をフル利用できる
RAID1(ミラーリング)
RAID1は複数のディスクに全く同じ内容を並列して書き込み扱うRAID構成。
特徴は以下の通り。
- RAIDアレイを構成する1台がクラッシュしても、残りのディスクで復旧が可能
- ディスクサイズが1台当たりのディスクサイズ以上にはならない
RAID4
RAID4はRAID0のようにストライピングの機能にエラー訂正用のパリティ情報を保存する専用ディスクを用意したRAID構成。 つまり最低3台のディスクが必要。
特徴は以下の通り。
- データが保存されているディスクがクラッシュしてもパリティ情報から復旧できる
- パリティ情報を保存するためパフォーマンスが良くない
RAID5
RAID5はRAID4と同じようにパリティ情報により冗長性を確保する構成でパリティ専用ディスクを使用しないRAID構成。 パリティ情報はデータと同様に複数のディスクに分散して保存される。 RAID5も最低3台のディスクが必要となる。
その他のRAID構成
RAID | 説明 |
---|---|
RAID LINEAR | ディスクを論理的に結合してサイズの大きな1つのディスクに見せる |
RAID0+1 | RAID0でストライピング構成を複数作りそれをミラーリングする |
RAID1+0 | RAID1でミラーリング構成を複数作りそれをストライピングする |
RAID6 | RAID5に加えてパリティ情報をもう1台余分に2重パリティを行い冗長構成を高める |
5.1.3. RAIDの構成と運用
LinuxでRAIDを構成するパーティションを作成する際はパーティションタイプを0xfdに設定する必要がある。
fdisk -l デバイスファイル名
で確認可能。
mdadmコマンド
RAIDアレイの制御を行うコマンド。
RAIDアレイの作成はCREATEモードで行う。
/proc/mdstat
の確認でも可能。
オプション | 説明 |
---|---|
CREATEモードのオプション | - |
-C md デバイス名 | RAIDアレイを指定して作成する |
-a | 必要であればデバイスファイルを自動的に作成する |
-c サイズ | チャンクサイズの指定(KB単位) |
-l レベル | RAIDレベルの指定 |
-n 数 | アクティブな構成デバイス数を指定する |
-x 数 | スペアデバイスの数を指定する |
MANAGEDモードのオプション | - |
--manage | MANAGEモードにする |
-a | 構成デバイスの追加 |
-r | 構成デバイスの削除 |
-f | 構成デバイスに不良マークを付ける |
MISCモード | - |
--misc | MISCモードにする |
-Q | RAIDの状態を表示 |
-D | RAIDの詳細情報の表示 |
-E | 構成デバイスの状態表示 |
--readonly | 読み取り専用にする |
--readwrite | 書き込み可能にする |
--stop | -S md デバイス名 |
--stop -scan | すべてのRAIDアレイの停止 |
Assembleモード | - |
RAIDアレイの状態は/proc/mdstat
ファイルで確認可能。
使用例は以下の通り。
# RAID1のRAIDアレイmd0を/dev/sdc5~sdc7で構成(アクティブは2つ、1つは予備)
mdadm -C /dev/md0 --level 1 --raid-devices 2 --spare-devices 1 /dev/sdc5 /dev/sdc6 /dev/sdc7
# /dev/md0の状態確認
mdadm --query /dev/md0
RAID構成デバイスに障害が発生した場合は以下手順でディスクを交換する。
例では/dev/sdc5
が壊れたとする。
- デバイスに障害を通知するために不良マークをつける
mdadm --manage /dev/md0 -f /dev/sdc5
- この際 予備デバイスがあれば自動的に予備デバイスに切り替わる(確認は
cat /proc/mdSATA
で可能) - 構成デバイスをRAIDアレイから削除する
mdadm --manage /dev/md0 -r /dev/sdc5
- 予備デバイス(例では/dev/sdc7)を追加する
mdadm --manage /dev/md0 -a /dev/sdc7
またmdadmの設定ファイルは/etc/mdadm/mdadm.conf
となる。
このファイルにあらかじめ設定を記述するとRAIDアレイをシステム起動時に自動認識できる。
5.2. LVM
LVM(論理ボリューム管理機能)はディスク管理を柔軟に行える機能のこと。 ディスクのパーティションを直接操作は行わず、仮想的なパーティションの論理ボリュームを動的に管理する。 以下のメリットがLVMにはある。
- パーティションのサイズを変更できる(通常は一度決めるとできない)
- 別ディスクにパーティションを移動させることができる
- ディスクサイズを超える大きさのパーティションを作成できる
LVMでは仮想的なブロックデバイスの機能はデバイスマッパーと呼ばれる機能によって実現されている。
これらの仮想的なデバイスは/dev/mapper/VG名-LV名
というデバイス名で扱われる。
まあカーネル内では/dev/dm-*
という形で、LVMでは/dev/VG名/LV名
というデバイス名も扱われる。
5.2.1. LVMの仕組み
LVMの概要は以下の通り。 ボリュームグループは仮想的ディスク、論理ボリュームは仮想的パーティションといえる。
- 1台のハードディスクや1つのパーティションを物理ボリューム(PV)にする
- 物理ボリュームは一定サイズの物理エクステント(PE)から構成される
- 1つ以上の物理ボリュームからボリュームグループ(VG)が構成される
- VG内でPEから論理ボリューム(LV)が構成される
- 論理ボリュームは従来のパーティション同様ブロックデバイスとして扱える
- LVのサイズ変更や他ディスクへの移動が可能
- LVは複数ディスクにまたがって作成できる
- VGは後からサイズ変更ができる
5.2.2. LVMの作成
LVM利用手順は以下の通り。
- パーティションの作成(
fdisk
) - 物理ボリュームを用意(
pvcreate
) - 物理ボリュームを束ねてボリュームグループを作成(
vgcreate
) - ボリュームグループから論理ボリュームを切り出す(
lvcreate
) - ファイルシステムの作成(
mkfs
) - マウント(
mount
)
/dev/sdd1,/dev/sde1を使用した例
- LVM用のパーティションの用意 初めにLVMを作成するためのパーティションまたはハードディスクを用意する。 パーティションを利用する場合はタイプを8eに設定する
pvcreate
コマンドでデバイスを物理ボリュームとして初期化する
3. ボリュームグループの作成
vgcreate
コマンドでボリュームグループを作成する(例の名称ではgroup1)
なお-s
オプションで物理エクステントのサイズを指定可能(省略した場合デフォルトで4MB)
4. 論理ボリュームの作成
lvcreate
コマンドで論理ボリュームを作成する(例の名称ではlv1)
なおlvscan
コマンドで論理ボリュームの状態を確認可能
5. ファイルシステムの作成/マウント
ファイルシステムを作成してマウントを行う。例ではext4で/mntにマウントする
なおdf -T
コマンドで確認可能。
5.2.3. LVMの管理
LVM関連のコマンドを記載する。
pvdisplay/pvscanコマンド
物理ボリュームの詳細情報の表示を行うコマンド。
vgextendコマンド
ボリュームグループに物理ボリュームを追加するコマンド。
pvmoveコマンド
物理ボリュームを別の物理ボリュームに移動させるコマンド。
vgreduceコマンド
ボリュームグループから物理ボリュームを削除するコマンド。
pvremoveコマンド
物理ボリュームを削除するコマンド。
vgdisplayコマンド
ボリュームグループの詳細を表示するコマンド。
lvdisplayコマンド
論理ボリュームの詳細情報の表示するコマンド。
lvextendコマンド
論理ボリュームを拡張するコマンド。
このコマンドだけではファイルシステムまで拡張されない。
そのためresize2fs
コマンドやxfs_growfs
コマンドでファイルシステムのサイズも拡張する必要がある。
resize2fs/xfs_growsfsコマンド
resize2fs
コマンドはext2~ext4ファイルシステムの場合ファイルシステムを広げるコマンド。
xfs_growfs
コマンドはXFSの場合にファイルシステムを広げるコマンド。
lvremoveコマンド
論理ボリュームを削除するコマンド。
スナップショット機能
スナップショット機能を使用するとファイルシステムをマウントせずにバックアップすることができる。 具体的にはスナップショットの作成ではファイルシステムを書き込み禁止やアンマウントせずにバックアップができる。
スナップショットをsnap0という名前でとる例
スナップショットの特性上、スナップショットの作成後にファイルシステムに変更が加われば加わるほどスナップショット領域は大きくなる。 そのためバックアップ取得後は、スナップショットを削除したほうが良い。
5.2.4. LVMの関連コマンド
物理ボリューム関連コマンド
コマンド | 説明 |
---|---|
pvcreate | PVの作成 |
pvdisplay | PVの情報の表示 |
pvmove | PV内のPEを移動 |
pvremove | PVの削除 |
pvscan | PVの検索 |
pvs | PVの情報出力 |
ボリュームグループ関連のコマンド
コマンド | 説明 |
---|---|
vgcreate | VGを作成 |
vgchange | VGの属性を変更 |
vgdisplay | VGの情報を表示 |
vgextend | VGの拡張(PVの追加) |
vgreduce | VGの縮小(PVの削除) |
vgremove | VGの削除 |
vgimport | VGのインポート |
vgexport | VGのエクスポート |
vgmerge | 2つのVGを統合する |
vgrename | VG名の変更 |
vgscan | VGの検索 |
vgs | VGの情報表示 |
論理ボリューム関連のコマンド
コマンド | 説明 |
---|---|
lvcreate | LVの作成 |
lvdisplay | LVの情報表示 |
lvextend | LVの拡張(PEの追加) |
lvreduce | LVの縮小(PEの削除) |
lvremove | LVを削除 |
lvrename | LV名を変更 |
lvscan | LVの検索 |
lvs | LVの情報表示 |
5.3. 記憶装置へのアクセス
5.3.1. デバイスファイル
記憶装置のデバイスファイルは以下の通り。
デバイスファイル | 説明 |
---|---|
/dev/hda | IDEプライマリマスタに接続されたドライブ |
/dev/hdb | IDEプライマリスレーブに接続されたドライブ |
/dev/hdc | IDEセカンダリマスタに接続されたドライブ |
/dev/hdd | IDEセカンダリスレーブに接続されたドライブ |
/dev/sda | 1番目のSCSI/SATA/USB/IEEE1394デバイス |
/dev/sdb | 2番目のSCSI/SATA/USB/IEEE1394デバイス |
/dev/sdc | 3番目のSCSI/SATA/USB/IEEE1394デバイス |
/dev/sdd | 4番目のSCSI/SATA/USB/IEEE1394デバイス |
/dev/sr0 | 1番目のSCSI/SATA/USB CD/DVDドライブ |
/dev/sr1 | 2番目のSCSI/SATA/USB CD/DVDドライブ |
/dev/st0 | 1番目のSCSIテープドライブ |
/dev/st1 | 2番目のSCSIテープドライブ |
カーネル2.6.21以降はIDEデバイスもSCSIデバイスと同じ扱いになったため、IDEハードディスクも/dev/sdN
といったデバイス名になる。
5.3.2. ハードディスクの管理
ハードディスクは5つのタイプに分かれる。
- SATA(Serial ATA)
- SCSI
- SAS
- USB
- IEEE1394
Linuxの場合、SATAハードディスクもSCSIハードディスクとして扱われる。
なおKernel 2.6.21以降では基本的にすべてのハードディスクは/dev/sd*
と扱われる。
IDEの転送モードにはメインメモリとハードディスクとの転送方式としてPIOモードとDMAモードがある。
- PIOモード ... CPUがハードディスクに直接命令してデータを転送する方式。欠点はデータ読み書き中はCPUは他の処理を実行できない点がある
- DMAモード ... CPUとは異なり専用のコントローラがデータの伝送を管理する。現在一般的な手法。
Ultra DMA は従来のDMAを拡張した企画で高速転送速度をサポートしている。 なおUltra DMAの利用はハードディスク/マザーボードのチップ/BIOSが対応している必要がある。
hdparmコマンド
DMAモード、IDEハードディスクのパラメータを確認/設定できるコマンド。 オプションなしでは適用されているパラメータを表示する。
オプション | 説明 |
---|---|
-i | ハードディスクの詳細情報確認 |
-I | ドライブから直接情報を得る |
-c数値 | 32bit I/Oサポート(0:無効化、1:有効化、3:同期シーケンス付きで有効化) |
-d数値 | DMAモードの使用不使用を指定 (0:無効化,1:有効化) |
-W数値 | ライトキャッシュのON/OFF(0:無効化,1:有効化) |
-t | バッファキャッシュを使わずに読み込み速度を計測する |
-T | バッファキャッシュの読み込み速度をテストする |
sdramコマンド
SCSI/SATA/USBディスクに対してDMAモード、IDEハードディスクのパラメータを確認/設定できるコマンド。 オプションなしでは適用されているパラメータを表示する。
sdparm [オプション] [デバイスファイル]
sdparm --conmmand=stop [デバイスファイル] # ディスク回転の停止
sdparm --clear=WCE [デバイスファイル] # ディスクキャッシュの無効化
scsi_idコマンド
SCSI接続の記憶装置のWWIDの確認を行えるコマンド。
5.3.3. SSDの管理
SSDはHDDと異なりフラッシュメモリであるためHDDと削除動作が異なる。 SSDはデータを削除しても削除フラグが付けられるだけでデータは削除されない。 削除した箇所に再度書き込みを行う場合は、データを消去して書き込みを行う必要がある。 そのため長時間SSDを利用すると再利用ブロック(削除フラグが付いたブロック)が増えていくにつれてパフォーマンスが低下する。
なおNVMeという新しい規格がSSDでは利用できる。 またNVMeはPCI Express バスから SSD に接続するための規格である。
Trimという機能を使うことでブロックデータも削除するため速度低下が起こりにくくなる。
Trimの実行にはfstrim
コマンドを実行する。
Trimの確認は以下コマンドで行う。
また、SSDには書き換え回数の上限があるため頻繁に書き込まないように以下内容に注意する。
- スワップ領域をSSD上に作成しない
- noatimeオプションをつけてファイルシステムにマウントする
- 頻繁に書き込まれる
/tmp
などはRAMディスクを利用する
fstrimコマンド
Trimの実行を行うコマンド。 ファイルシステムで使用していない領域を破棄できる。
NVMe
NVMeはSSD接続のための PCI Expressベースのインターフェイス規格。 AHCIと比べ、SSDの性能を十分に発揮できる。
AHCI
AHCIは、IDEに比べてはるかに高速なSATAを活かせるインターフェース仕様として登場した規格。 インテルが策定している。 IDEとの互換性を重視したSATAの規格SATA1.0では速度より互換性が重視され、性能は犠牲となったが、SATA2.0でAHCIは規格化され、SATA本来の機能・性能を満たすことができるようになった。
5.3.4. iSCSI
iSCSIはTCP/IP上でSCSIプロトコルを利用できるようにする仕組み。 クライアント/サーバモデルを採用している。 iSCSIによりネットワーク上のストレージをローカルストレージのように利用できる。 SANを構築できる。
LinuxにおいてはIETやLIO TargetでiSCSIターゲット(iscSIストレージ)を構築できる。 なおデータの要求端末(クライアント)はiSCSIイニシエータと呼ばれる。
用語 | 説明 |
---|---|
ターゲット | iSCSIストレージ |
イニシエータ | iSCSIクライアント |
LUN | ストレージ内の論理ドライブ番号(記憶装置の識別番号) |
HBA | NICに相当するインターフェイスアダプタ |
WWID / WWN | MACAddressに相当する識別ナンバー |
なお設定ファイルはiscsid.conf
となる。
iscsiadmコマンド
オプション | 説明 |
---|---|
-m / --mode [モード] | モードの指定(discovery: 接続先のiSCSIターゲットの取得, node: 登録済みisCSIターゲットの取得, session: セッション一覧の取得) |
-l / --login | iscsiターゲットにログイン |
-u / --logout | iscsiターゲットからログアウト |
-t / --type | タイプの指定 |
-p / --portal=IPアドレス[:ポート] | 接続先の指定 |
-T / --targetname=IQN | iSCSIターゲットの指定 |
SAN
SAN(Storage Area Network)はストレージ専用のネットワークを使用してストレージにアクセスする技術。 物理接続にファイバチャネル、接続にSANスイッチが使用される。