Skip to content
Published on

[オペレーティングシステム] 11. 大容量ストレージ構造

Authors

大容量ストレージ構造

オペレーティングシステムにおいて、大容量ストレージはファイルシステム、仮想メモリ、スワップ空間など様々な目的で使用されます。 この記事では、HDDとSSDの物理構造、ディスクスケジューリングアルゴリズム、RAID構成、 そして現代的なオブジェクトストレージとクラウドストレージを解説します。


1. HDD(Hard Disk Drive)構造

HDDは磁気ディスクを回転させてデータを読み書きする機械式ストレージデバイスです。

物理的構成要素

┌─────────────────────────────────────┐
HDD 内部構造                │
│                                     │
│   ┌───────────────────┐             │
│   │  Platter (円盤)    │  ← 磁気    │
│   │   ┌─────────┐     │   コーティング│
│   │   │ Spindle │     │  ← 回転軸   │
│   │   └─────────┘     │             │
│   └───────────────────┘             │
│                                     │
│   ─────── Actuator Arm ───────      │
│                        ▼            │
Read/Write Head│                                     │
Track: 同心円状のデータ経路       │
Sector: Trackの細分化単位Cylinder: 同じ位置のTrackの集合   │
└─────────────────────────────────────┘
  • プラッタ(Platter): 磁性体でコーティングされた円形ディスク
  • スピンドル(Spindle): プラッタを回転させるモーター(5,400~15,000 RPM)
  • 読み書きヘッド: プラッタ表面の磁気パターンを読み書きする装置
  • アクチュエータアーム(Actuator Arm): ヘッドを目的のトラックに移動

ディスクアクセス時間の構成

総アクセス時間 = シーク時間(Seek Time) + 回転遅延(Rotational Latency) + 転送時間(Transfer Time)
構成要素説明一般的な時間
シーク時間ヘッドを目標トラックに移動3~12 ms
回転遅延目標セクタがヘッド下に来る2~6 ms
転送時間データの実際の読み書き数十 us

2. ディスクスケジューリングアルゴリズム

ディスクI/O要求がキューに溜まると、処理順序がパフォーマンスに大きく影響します。 主な目標はシーク時間を最小化することです。

FCFS(First-Come, First-Served)

最も単純な方式で、要求が到着した順に処理します。

要求キュー: 98, 183, 37, 122, 14, 124, 65, 67
ヘッド開始位置: 53

移動順序: 539818337122141246567
総ヘッド移動: 640 シリンダ

SCAN(エレベータアルゴリズム)

ヘッドが一方向に端まで移動しながら要求を処理し、反対方向に戻ります。

要求キュー: 98, 183, 37, 122, 14, 124, 65, 67
ヘッド開始: 53, 方向: 増加

移動順序: 53656798122124183[199]3714
                                                 端に達した後反転

C-SCAN(Circular SCAN)

一方向のみサービスし、端に到達すると反対側の端に即座に移動して、再び同じ方向で処理します。 待ち時間の均一性を向上させます。

要求キュー: 98, 183, 37, 122, 14, 124, 65, 67
ヘッド開始: 53, 方向: 増加

移動順序: 53656798122124183[199][0]1437
                                                  端 → 先頭にジャンプ

スケジューリング比較表

アルゴリズム利点欠点
FCFS実装が簡単、公平ヘッド移動が多い
SCAN効率的、飢餓なし両端の要求待ち不均等
C-SCAN待ち時間が均一一方向のみサービス
LOOKSCAN改善、不要な移動を排除実装がやや複雑

C言語によるSCANシミュレーション

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

void scan(int requests[], int n, int head, int disk_size) {
    int total_movement = 0;
    int sorted[n + 1];

    for (int i = 0; i < n; i++)
        sorted[i] = requests[i];
    sorted[n] = head;

    qsort(sorted, n + 1, sizeof(int), compare);

    int head_idx = 0;
    for (int i = 0; i <= n; i++) {
        if (sorted[i] == head) {
            head_idx = i;
            break;
        }
    }

    // 오른쪽으로 이동
    for (int i = head_idx; i <= n; i++) {
        printf("서비스: %d\n", sorted[i]);
        total_movement += abs(sorted[i] - head);
        head = sorted[i];
    }

    // 디스크 끝까지 이동
    total_movement += abs(disk_size - 1 - head);
    head = disk_size - 1;

    // 왼쪽으로 이동
    for (int i = head_idx - 1; i >= 0; i--) {
        printf("서비스: %d\n", sorted[i]);
        total_movement += abs(sorted[i] - head);
        head = sorted[i];
    }

    printf("총 헤드 이동: %d\n", total_movement);
}

int main() {
    int requests[] = {98, 183, 37, 122, 14, 124, 65, 67};
    int n = sizeof(requests) / sizeof(requests[0]);
    scan(requests, n, 53, 200);
    return 0;
}

3. NVM(Non-Volatile Memory)デバイス - SSD

SSD(Solid State Drive)はNANDフラッシュメモリベースのストレージデバイスで、HDDと異なり機械的部品がありません。

SSD内部構造

┌──────────────────────────────────────┐
SSD 構造                 │
│                                      │
│  ┌──────────┐  ┌──────────┐          │
│  │ Channel 0│  │ Channel 1...│  │ ┌──────┐ │  │ ┌──────┐ │          │
│  │ │Die 0 │ │  │ │Die 0 │ │          │
│  │ │┌────┐│ │  │ │┌────┐│ │          │
│  │ ││Blk ││ │  │ ││Blk ││ │          │
│  │ ││Page││ │  │ ││Page││ │          │
│  │ │└────┘│ │  │ │└────┘│ │          │
│  │ └──────┘ │  │ └──────┘ │          │
│  └──────────┘  └──────────┘          │
│                                      │
FTL (Flash Translation Layer)- 論理アドレス → 物理アドレスマッピング│
- ガベージコレクション管理           │
- ウェアレベリング(摩耗均等化)     │
└──────────────────────────────────────┘

SSD vs HDD 比較

特性HDDSSD
読み取り速度~200 MB/s~3,500 MB/s (NVMe)
書き込み速度~150 MB/s~3,000 MB/s (NVMe)
ランダムI/O数百 IOPS数十万 IOPS
レイテンシ数 ms数十 us
耐久性機械的摩耗書き込み回数制限 (TBW)
価格/GB低い高い

NANDフラッシュの特性

  • 読み取り: ページ単位(4~16 KB)
  • 書き込み: ページ単位(空のページにのみ可能)
  • 消去: ブロック単位(数百ページ)
  • 書き込み増幅(Write Amplification): 実際のデータよりも多くの物理的書き込みが発生

4. RAID(Redundant Array of Independent Disks)

RAIDは複数のディスクを組み合わせて、パフォーマンス、信頼性、またはその両方を向上させる技術です。

RAIDレベル別構造

RAID 0 (ストライピング)
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
A1  │ │ A2  │ │ A3  │ │ A4A5  │ │ A6  │ │ A7  │ │ A8└─────┘ └─────┘ └─────┘ └─────┘
Disk 0   Disk 1  Disk 2  Disk 3
→ 性能向上、耐障害性なし

RAID 1 (ミラーリング)
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
A1  │ │ A1  │ │ A2  │ │ A2A3  │ │ A3  │ │ A4  │ │ A4└─────┘ └─────┘ └─────┘ └─────┘
Disk 0   Disk 1  Disk 2  Disk 3
→ ミラーコピー、高い耐障害性

RAID 5 (分散パリティ)
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
A1  │ │ A2  │ │ A3  │ │ ApB1  │ │ B2  │ │ Bp  │ │ B3C1  │ │ Cp  │ │ C2  │ │ C3Dp  │ │ D1  │ │ D2  │ │ D3└─────┘ └─────┘ └─────┘ └─────┘
Disk 0   Disk 1  Disk 2  Disk 3
→ パリティ分散、1台のディスク障害許容

RAID 6 (二重パリティ)
RAID 5 + 追加パリティ、2台のディスク障害許容

RAIDレベル比較

RAID最小ディスク容量効率耐障害性読み取り性能書き込み性能
02100%なし非常に高い非常に高い
1250%1台障害高い普通
53(N-1)/N1台障害高い普通
64(N-2)/N2台障害高い低い
10450%各ミラー1台非常に高い高い

5. オブジェクトストレージ(Object Storage)

従来のブロックストレージやファイルシステムとは異なり、オブジェクトストレージはデータをオブジェクト単位で管理します。

構造比較

ブロックストレージ:   ファイルシステム:      オブジェクトストレージ:
┌────┐            /home/               ┌──────────────────┐
│Blk1│            ├── user/Object ID: abc123│
│Blk2│            │   └── file.txtData: [binary]│Blk3│            └── etc/Metadata:│Blk4│                └── config       │   size: 1024└────┘                                 │   type: image    │
固定サイズブロック  階層的ディレクトリ   │   created: ...                                       └──────────────────┘
                                       フラットネームスペース

オブジェクトストレージの特性

  • フラットネームスペース: ディレクトリ階層なしに一意のIDでアクセス
  • 豊富なメタデータ: オブジェクトごとにユーザー定義メタデータを保存可能
  • HTTP REST API: GET、PUT、DELETEなどのHTTPメソッドでアクセス
  • 大規模スケーラビリティ: ペタバイト以上のデータ保存が可能
  • 代表的なサービス: Amazon S3、Google Cloud Storage、Azure Blob Storage

6. クラウドストレージ

クラウド環境でのストレージは、用途に応じて複数のタイプに分かれます。

クラウドストレージの種類

┌─────────────────────────────────────────────┐
│         クラウドストレージ分類                │
│                                             │
│  ┌───────────┐ ┌───────────┐ ┌───────────┐  │
│  │ ブロック   │ │ ファイル   │ │ オブジェクト│ │
│  │ ストレージ │ │ ストレージ │ │ ストレージ │ │
│  │           │ │           │ │           │  │
│  │ EBS       │ │ EFS       │ │ S3        │  │
│  │ 高性能    │ │ 共有      │ │ 大規模    │  │
│  │ 低レイテンシ│ │ アクセス   │ │ HTTP      │  │
│  │           │ │ NFS互換   │ │ アクセス  │  │
│  └───────────┘ └───────────┘ └───────────┘  │
│                                             │
│  ┌───────────────────────────────────────┐   │
│  │ ストレージティア: HotWarmCold   │   │
│  │ アクセス頻度に応じたコスト最適化       │   │
│  └───────────────────────────────────────┘   │
└─────────────────────────────────────────────┘

7. まとめ

大容量ストレージはオペレーティングシステムのコアサブシステムです。

  • HDD: 機械式デバイスでシーク時間がパフォーマンスのボトルネック。スケジューリングアルゴリズム(SCAN、C-SCANなど)で最適化
  • SSD: NANDフラッシュベースでランダムI/O性能に優れる。FTL、ウェアレベリング、TRIMなどの管理が必要
  • RAID: 複数のディスクを組み合わせてパフォーマンスと信頼性を確保。レベルによりトレードオフが異なる
  • オブジェクトストレージ: 大規模な非構造化データに最適。REST APIベースのアクセス
  • クラウドストレージ: オンデマンドスケーリング、ティアリングによるコスト最適化
クイズ:ディスクスケジューリングとRAID

Q1. SCANアルゴリズムとC-SCANアルゴリズムの違いは何ですか?

A1. SCANはヘッドが一方の端に到達すると方向を反転し、双方向でサービスします。 C-SCANは一方向のみサービスし、端に到達すると反対側の端に即座に移動します。 C-SCANは待ち時間の均一性がより優れています。

Q2. RAID 5でディスクが1台故障した場合、どのようにデータを復旧しますか?

A2. RAID 5は分散パリティを使用します。故障したディスクのデータは、 残りのディスクのデータとパリティ情報をXOR演算して復旧できます。 ただし、復旧中に追加のディスク障害が発生するとデータを失います。

Q3. SSDにおける書き込み増幅(Write Amplification)とは何ですか?

A3. SSDは書き込み前にブロック単位で消去する必要があるため、有効なデータを別のブロックにコピーした後 消去する過程で、実際のユーザーデータよりも多くの物理的書き込みが発生します。 これを書き込み増幅といい、SSDの寿命に直接的に影響します。