高度なストレージとデバイスの管理
RAID の構築と管理
RAID (Redundant Arrays of Independdent Disks / Redundant Arrays of Inexpensive Disks) は複数のハードディスクを連結して 1 台の仮想的なディスクを構成する。 ハードウェアによる独立したデバイスとしてのハードウェア RAID と、OS によって管理するソフトウェア RAID がある。
RAID の動作状態は /proc/mdstat
ファイルに格納される。 RAID を構成するディスクパーティションのメタデータに RAID の構成と状態が格納される。 RAID のスーパーブロックは RAID を構成する各デバイスにある。 システム起動時には udev により mdadm コマンドが実行され、デバイスファイアルが作成されて自動的に RAID が編成、開始される。
RAID レベル
Linux ではカーネルの md (Multiple Devices) ドライバーによって次の RAID レベルがサポートされる。
RAID レベル | 必要ディスク数 | ディスク容量利用効率 | 説明 |
---|---|---|---|
RAID 0 | 2 | 100 % | ストレイピング。書き込み単位であるブロック (チャンク / ストライプ) を複数のディスクに分散することでアクセスを高速化する。冗長性がなく耐障害性はない |
RAID 1 | 2 | 50 % | ミラーリング。2 台以上のディスクに同じデータを同時に書き込む。1 台のディスクに故障が発生しても他のディスクで稼働できる |
RAID 4 | 3 | (n – 1)/n % | RAID 0 にパリティディスクを追加した構成である。1 台のディスクに故障が発生しても、パリティを利用してデータを復旧できる |
RAID 5 | 3 | (n – 1)/n % | パリティを複数のディスクに分散して記録するため、最低 3 台のディスクが必要である。1 台のディスクに故障が発生してもパリティを利用してデータ計算できるが、計算中はパフォーマンスが低下する。2 台以上のディスクが故障すると復旧できない。パリティ用の領域は 1/ディスク台数 となる |
RAID 6 | 4 | (n – 2)/n % | 2 種類のパリティを複数のディスクに分散して記録する。最低 4 台のディスクが必要である。2 台のディスクが同時に故障してもパリティを利用してデータを計算できる |
RAID 10 (1+0) | 4 | 50 % | 複数の RAID 1 デバイスを組み合わせて RAID 0 を構成する。冗長性と高速化の両方を実現する |
mdadm コマンド
カーネル 2.6 以降で RAID を構築する。
mdadm [モード] <RAID デバイス> [オプション] <デバイス>
モード
モード | 説明 |
---|---|
Assemble モード | 作成済みの RAID アレイを編成し開始するモード |
Create モード | RAID アレイを新規に作成し開始するモード |
Manage モード | デバイスの追加や削除を行うモード |
Monitor モード | RAID アレイを定期的にモニターし、syslog で報告するモード |
Misc モード | RAID デバイスの問い合わせ、設定、停止を行うモード |
主なオプション
モード | オプション | 説明 |
---|---|---|
Assemble | -A, –assemble | Assemble モードの指定。第 1 引数に指定する |
Assemble | -s, –scan | 設定ファイルを参照し、記述がなければ未使用のデバイスをスキャンする |
Create | -C, –create | Create モードの指定。第 1 引数に指定する。構成情報を格納するメタデータが各デバイスの先頭あるいは最後部に作成される |
Create | -l, –level | RAID レベルを指定する (0, 1, 4, 5, 6, 10, linear, multipath, mp, faulty, container) |
Create | -n, –raid-devices | RAID アレイのデバイスの個数を指定する |
Create | -x, –spare-devices | スペアデバイスの個数を指定する |
Manage | -a, –add | デバイスを RAID アレイ、あるいはホットスペアに追加する。RAID アレイが稼働中でも可能 |
Manage | -f, –fail | デバイスに faulty フラッグを設定する |
Manage | -r, –remove | デバイスを RAID アレイから取り出す |
Monitor | -F, –follow, –monitor | Monitor モードの指定。第 1 引数に指定する |
Monitor | -m, –mail | 障害発生時に警告メッセージを指定したメールアドレスに送信する |
Monitor | -f, –daemonise | mdadm はバックグラウンドプロセスとしてモニターを行う |
Monitor | -t, –test | RAID 開始時にテスト用の警告メッセージを送信する |
Misc | -S, –stop | RAID アレイを停止する。–scan オプションを付加した場合はアクティブな RAID アレイをすべて停止する |
Misc | -E, –examine | 引数に絵ばいすを指定した場合はデバイスのメタデータ情報を表示する。–scan オプションを付加した場合は設定ファイル mdadm.conf の書式で 1 行のエントリーを表示する |
Misc | -D, –detail | アクティブな RAID アレイの詳細情報を表示する。–scan オプションを付加した場合は設定ファイル mdadm.conf の書式で 1 行のエントリーを表示する |
Misc | –zero-superblock | 既存のスーパーブロックの内容を 0 で上書きする。RAID ディスクを新しく初期化して使う際に使用する |
LVM の構築と管理
LVM (Logical Volume Manager) は複数のディスクパーティションからなる、伸縮可能な論理ボリューム (LV: Logical Volume) を構成する。
- VG: 複数の PV をグループにまとめたもの
- PV: 物理ディスク内に構成されたパーティション
- PE: PV を一定サイズの領域に分割したもの
- LV: 複数の PE を仮想的にまとめたボリューム
- PV: 物理ディスク内に構成されたパーティション
Linux 2.6 からはデバイスマッパーを利用した LVM2 を採用している。 デバイスマッパーは論理デバイスと物理デバイスのマッピングを行い、linux カーネルの dm ドライバーとして実装される。
LVM 管理コマンド
コマンド | 説明 |
---|---|
pvcreate | 物理ボリュームの作成 |
pvremove | 物理ボリュームの削除 |
pvdisplay | 物理ボリュームの表示 |
vgcreate | ボリュームグループの作成 |
vgextend | ボリュームグループの拡張 |
vgreduce | ボリュームグループの縮小 |
vgremove | ボリュームグループの削除 |
vgdisplay | ボリュームグループの表示 |
lvcreate | 論理ボリュームの作成、スナップショットの作成 |
lvextend | 論理ボリュームの拡張 |
lvreduce | 論理ボリュームの縮小 |
lvremove | 論理ボリュームの削除 |
lvdisplay | 論理ボリュームの表示 |
LVM の構築手順
- pvcreate コマンドにより PV を作成
- vgcreate コマンドにより PV から VG を作成
- lvcreate コマンドにより VG から LV を作成
- mkfs コマンドにより LV 上にファイルシステムを作成
- 作成したファイルシステムをマウント
vgextend コマンド
ボリュームグループに物理ボリュームを追加することによりボリュームグループの容量を拡張する。
vgextend [オプション] ボリュームグループ 物理ボリューム
lvextend コマンド
論理ボリュームを拡張する。 論理ボリュームを拡張したらファイルシステムを resize2fs コマンドで拡張する。
lvextend [オプション] 論理ボリューム
- -L (–size) [+] サイズ: サイズの指定。+ をつけた場合は拡張サイズの指定
vgreduce コマンド
ボリュームグループから物理ボリュームを削除する。
vgreduce [オプション] ボリュームグループ [物理ボリューム...]
論理ボリュームのスナップショット
- スナップショットの作成: lvcreate -s(–snapshot)
- スナップショットのバックアップ: dump
- スナップショットへのアクセス: mount
- スナップショットの削除: lvremove
udev
デバイスにアクセスするための /dev
配下デバイスファイルを動的に作成、削除する。 カーネルは接続あるいは切断を検知したデバイスを /sys
配下のデバイス情報に反映させ、uevent を udevd デーモンに送る。 /sys
配下のデバイス情報を首都きし、/etc/udev/rules.d
と /lib/udev/rules.d
配下の .rules ファイルに記述されたデバイス作成ルールに従って /dev
配下のデバイスファイルを作成あるいは削除する。
- SysV init:
/etc/rc.sysinit
- sytemd:
systemd-udevd.service
udevadm コマンド
udev の管理コマンド。
サブコマンド
サブコマンド | 説明 |
---|---|
info | udev に対するデバイス情報の問い合わせを行う |
trigger | カーネルイベントをリクエストする |
settle | イベントキューを監視する |
control | udevd デーモンの内部ステートを変更する |
monitor | カーネルの uevent と udev ルールによって処理されるイベントをモニターし、デバイスパスを表示する |
test | イベントのシミュレートを行う |
デバイスの管理
SCSI CD-ROM デバイスドライバー
SCSI CD-ROM のデバイスドライバーではデバイス名は sr と記述される。 USB CD-ROM やSATA CD-ROM も SCSI CD-ROM デバイスドライバーによって制御される。
SCSI テープドライバー
/dev/st0
: コマンド実行後、テープを巻き戻す/dev/nst0
: コマンド実行後、そのままの位置に停止する
mt コマンド
読み書きせずにテープを操作するコマンド。
- fsf count: count で指定した数の EOF まで移動し、次のファイルの先頭に位置する
- bsf count: count で指定した数の EOF まで戻り、次のファイルの先頭に位置する
- rewind: BOT のいちまでテープを巻き戻す
- status: ステータスを表示する
UUID
/dev/disk/by-uuid
ディレクトリには UUID でディスクパーティションを識別するためのシンボリックリンクファイルが作成される。 128 ビットの UUID をファイル名とするデバイスファイルへのシンボリックリンクファイルが作成される。
USB ストレージデバイス
SCSI エミュレーションを使用するので、デバイス名は SCSI ディスクと同じく sd となる。
hdparm コマンド
ハードディスクのパラメーターを表示、設定する。 IDE と SATA ディスクに対応している。
hdparm [オプション] デバイス名
- -l: ディスクの詳細情報を表示
- -t: 読み込み時の転送速度を測定
- -A: 先読み機能のオンオフ (-A0 でオフ、-A1 でオン)
- -d: DMA モードのオンオフ (-d0 でオフ、-d1 でオン)
- -W: Write Cache のオンオフ (-W0 でオフ、-W1 でオン)
sdparm コマンド
SCSI デバイスのモードページの表示、設定、及び重要な製品データ (VPD: Vital Product Data) を表示する。 SCSI ディスクのほか、 SCSI CD-ROM/DVD ドライブや SCSI テープにも対応している。
sdparm [オプション] [デバイス名]
- -a, –all: 検知したモードページの全てのフィールドを表示する
- -C, –command=CMD: 送信する SCSI コマンドを CMD に指定する
- -e, –enumerate: モードページの生薬名、16 進数、説明をリスト表示する
- -i, –inquiry: VPD ページを問い合わせてその結果を表示する
- -p, –page=PG: -i オプションを指定しない場合は、モードページを省略名あるいは 16 進数で PG 指定する
- -l, –long: 情報をロングリストで表示する
SSD デバイス
SSD ではファイルを削除したときに使用していたデータブロックが消去されるわけではない。 消去済みの領域にしかデータを書き込めないので、書き込み時にデータを消去してから実行する必要がある。 事前にデータを消去してパフォーマンスを最適化するには次の 2 通りの方法がある。
- fstrim コマンドの実行 (推奨)
- dscard オプションをつけてファイルシステムをマウント (非推奨)
NVMe
NVMe (Non-Volatile Memory Express) は PCI Express バスからフラッシュメモリストレージを接続するインタフェース規格である。 対応するドライバー名は nvme、デバイスファイル名は /dev/nvme*
となる。 カーネルバージョン 3.3 から対応する。
コメント