はい、miku_JK_Jbです。
今回は、自作OSの開発作業の中で勉強したり、実際に設計などで参考になった、
ファイルシステムとパーティションの基本について解説していく。
普段PCを使っていると、ファイルを保存したり、コピーしたり、削除したりするのは当たり前のようにできる。
だが、その裏側ではOSがストレージを読み取り、ファイルシステムを解釈し、ディレクトリ構造やファイルの位置を管理している。
つまり、「ファイルを開く」という一見シンプルな操作の裏には、かなり重要な仕組みがある。
エンジニアなら、アプリケーションだけでなく、その下でデータがどう管理されているのかも知っておくべきだと思う。
そこで重要になるのがファイルシステムだ!!
まずはファイルシステムとは
ファイルシステムとは、ストレージ上にあるデータを「ファイル」や「フォルダ」として管理するための仕組みだ。
SSD、HDD、USBメモリ、SDカードなどの記憶装置は、内部的にはただのデータの塊だ。
そこに適当にデータを書き込むだけでは、どこからどこまでが1つのファイルなのか、ファイル名は何なのか、どのフォルダに入っているのか、といった情報が分からない。
そのため、ストレージ上には、
- ファイル名
- ファイルサイズ
- 作成日時
- 更新日時
- データが保存されている位置
- フォルダ構造
- 空き容量の管理
などを管理するためのルールが必要になる。
このルールというのがファイルシステムだ!!
OSはファイルシステムの仕様に従って、ストレージからファイルを探し、読み込み、書き込み、削除などを行っている。
普段はOSが全部やってくれるので意識しにくいが、ファイルシステムを知らないと、ストレージまわりのトラブルや、ディスク構造、ブートまわりの理解がかなり曖昧になる。
ファイルシステムの種類
ファイルシステムにはいろいろな種類がある。
代表的なものは次の通りだ。
- FAT12 / FAT16 / FAT32
- exFAT
- NTFS
- HFS / HFS+
- APFS
- Ext系
それぞれのファイルシステムには、使われてきた時代や目的、得意な用途がある。
USBメモリでよく使われるもの、Windowsのシステムドライブで使われるもの、Linuxで使われるもの、macOSで使われるものなど、環境によって採用されるファイルシステムは変わる。
ここからは、代表的なファイルシステムをざっくり見ていく。
FAT12 / FAT16 / FAT32
FATは「File Allocation Table」の略だ。
日本語にすると「ファイル割り当て表」のような意味になる。
FAT系のファイルシステムでは、ストレージ上のデータ領域をクラスタという単位に分けて管理する。
そして、どのクラスタがどのファイルに使われているのか、次のクラスタはどこなのか、という情報をFATという表で管理している。
ざっくり言えば、FATはファイルのデータがストレージ上のどこにあるのかをたどるための管理表だ。
FAT12
FAT12はかなり古いFAT系ファイルシステムで、主にフロッピーディスクなどで使われていた。
名前の通り、FATのエントリを12ビット単位で管理する。
現在のPCで普段使うことはほとんどないが、古いブートローダーやフロッピーディスクイメージを扱う資料では出てくることがある。
FAT16
FAT16は、FAT12より大きな容量を扱えるようにしたものだ。
古いHDD、メモリカード、組み込み機器などで使われていた。
ただし、現代の大容量ストレージで使うには制限が多い。
現在ではメインで使う場面は少ないが、互換性や古い環境を理解する上では知っておいて損はない。
FAT32
FAT32は、FAT系の中でもかなり有名なファイルシステムだ。
Windows、Linux、macOS、UEFI、組み込み機器など、幅広い環境で扱える。
FAT32は構造が比較的シンプルで、対応環境も多い。
そのため、USBメモリやSDカード、UEFIのEFI System Partitionなどで見かけることがある。
ただし、FAT32には大きな制限もある。
代表的なのが、1ファイルの最大サイズが4GB未満という点だ。
正確には、1ファイルあたり最大で4GiB - 1バイトまでになる。
そのため、大きな動画ファイルや巨大なディスクイメージを扱う用途には向いていない。
また、FAT32には現代的なファイルシステムが持つような高度な機能は少ない。
たとえば、
- アクセス権限
- ジャーナリング
- スナップショット
- 暗号化
- 圧縮
といった機能は基本的に持っていない。
良く言えばシンプルで分かりやすい。
悪く言えば、現代的なOSのメインファイルシステムとしては機能が足りない。
exFAT
exFATは、FAT32の後継として作られたファイルシステムだ。
FAT32では扱いづらかった大容量ストレージや大きなファイルに対応するために設計されている。
USBメモリ、SDカード、外付けSSDなどで使われることが多い。
FAT32では4GB以上のファイルを保存できないが、exFATでは大きなファイルを扱いやすい。
そのため、動画ファイルや大きなディスクイメージ、バックアップデータなどを保存する場合は、FAT32よりexFATの方が向いている。
また、Windows、macOS、Linuxなどの主要OSでも対応が進んでいるため、異なるOS間で外部ストレージを使い回す場合にも便利だ。
ただし、FAT32ほど古くからあらゆる環境で使われていたわけではないので、古い機器や古いOSでは対応していない場合がある。
NTFS
NTFSは、Windowsで主に使われているファイルシステムだ。
現在のWindowsのシステムドライブは、基本的にNTFSでフォーマットされていることが多い。
NTFSはFAT32よりも高機能で、現代的なOS向けの仕組みを多く持っている。
たとえば、
- アクセス権限
- ジャーナリング
- 暗号化
- 圧縮
- 大容量ファイル対応
- メタデータ管理
- ハードリンク
- シンボリックリンク
などがある。
Windowsでファイルごとにアクセス権限を設定できるのも、NTFSの機能が関係している。
FAT32と比べると構造は複雑だが、その分、信頼性や管理機能が強い。
普段Windowsを使っているなら、NTFSはかなり重要なファイルシステムだ。
HFS / HFS+
HFSは、昔のMac OSで使われていたファイルシステムだ。
その後、改良版としてHFS+が使われるようになった。
macOSでは長い間HFS+が使われていたが、現在ではAPFSという新しいファイルシステムが使われることが多い。
HFSやHFS+は、Mac系の環境を理解する上で出てくるファイルシステムだ。
今から新しく使う機会は少なくなっているが、古いMac環境や古いディスクを扱う場合には関係してくる。
APFS
APFSは、Apple File Systemの略だ。
現在のmacOS、iOS、iPadOSなどで使われているAppleのファイルシステムだ。
SSDなどのフラッシュストレージを意識して設計されていて、HFS+よりも現代的な仕組みを持っている。
APFSには、
- スナップショット
- クローン
- 暗号化
- 高速なメタデータ処理
- 複数ボリューム管理
などの機能がある。
MacやiPhone、iPadのストレージ管理を理解するなら、APFSは知っておくべきファイルシステムだ。
Ext系
Ext系は、Linuxでよく使われるファイルシステムだ。
代表的なものには、
- ext2
- ext3
- ext4
がある。
ext2は比較的シンプルな構造を持つ。
ext3ではジャーナリング機能が追加され、ext4ではさらに大容量対応や性能改善などが行われた。
現在のLinux環境では、ext4が使われることが多い。
LinuxサーバーやLinuxデスクトップ、組み込みLinuxなどを触るなら、Ext系の存在は知っておいた方がいい。
特にサーバー運用では、ファイルシステムの違いが性能や信頼性、障害対応に関わってくることもある。
ジャーナリングとは
ファイルシステムの話でよく出てくるのが、ジャーナリングという仕組みだ。
ジャーナリングとは、ファイルシステムへの変更内容をいきなり本体に反映するのではなく、まず記録してから反映する仕組みのことだ。
たとえば、ファイルを書き込んでいる途中に電源が落ちた場合、ファイルシステムの情報が中途半端な状態になる可能性がある。
そうなると、ファイルが壊れたり、ディレクトリ構造がおかしくなったりする。
ジャーナリングがあると、変更の途中で問題が起きても、記録をもとに復旧しやすくなる。
NTFS、ext3、ext4、HFS+などはジャーナリングに対応している。
一方、FAT32にはジャーナリングがない。
この違いはかなり重要だ。
単に「ファイルが保存できるか」だけではなく、「異常終了したときにどれだけ壊れにくいか」もファイルシステムの大事な要素になる。
ディスク、パーティション、ファイルシステムの関係
ファイルシステムの話をする前に、まず整理しておきたいのが、
- ディスク
- パーティション
- ファイルシステム
この3つの関係だ。
この3つは混同されやすいが、それぞれ役割が違う。
ざっくり言うと、
ディスク = 物理的、または論理的なストレージ本体
パーティション = ディスクを区切った領域
ファイルシステム = その領域の中でファイルを管理する仕組み
という感じだ。
たとえば、1つのSSDがあるとする。
そのSSD全体が「ディスク」だ。
そのディスクの中を、OS用、データ用、リカバリー用、ブート用のように区切ったものが「パーティション」だ。
そして、そのパーティションの中にNTFS、FAT32、exFAT、ext4などの「ファイルシステム」を作ることで、ファイルやフォルダを保存できるようになる。
つまり、ストレージはだいたい次のような階層で考えると分かりやすい。
- ディスク
- パーティションテーブル
- パーティション
- ファイルシステム
- ファイルやフォルダ
普段PCを使っていると、いきなり「Cドライブ」や「USBメモリ」として見えるので、この階層構造はあまり意識しない。
だが、OSやブート、ストレージ管理、データ復旧、ディスク障害対応などを理解するなら、この構造はかなり重要になる。
ディスクとは
ディスクとは、データを保存するための記憶装置、またはOSから見えるストレージデバイスのことだ。
代表的なものには、
- HDD
- SSD
- USBメモリ
- SDカード
- NVMe SSD
- SATA SSD
- 外付けストレージ
- 仮想ディスクイメージ
などがある。
物理的なストレージだけでなく、仮想マシンで使う .vhd、.vdi、.qcow2 のような仮想ディスクイメージも、OSから見ればディスクとして扱われる。
ディスクは、内部的にはセクタやブロックと呼ばれる単位で読み書きされる。
たとえば、昔からよく使われる単位として512バイトセクタがある。
最近のストレージでは、内部的に4KB単位で管理されるものも多い。
OSはファイルを直接ディスクの好きな場所に置いているわけではない。
実際には、ディスク上のどの範囲がどのパーティションなのかを確認し、そのパーティションの中にあるファイルシステムを解釈して、目的のファイルを探している。
つまり、ファイルを1つ開く裏側では、ディスク、パーティション、ファイルシステムという複数の層が関係している。
パーティションとは
パーティションとは、ディスクを論理的に区切った領域のことだ。
1つのディスクを丸ごと1つの領域として使うこともできるが、多くのPCでは複数のパーティションに分けて使われている。
たとえば、Windowsが入っているPCなら、
- EFIシステムパーティション
- Windows本体のパーティション
- 回復パーティション
- データ用パーティション
のように分かれていることがある。
Linuxなら、
/boot//home- swap領域
のように分ける構成もある。
パーティションを分ける理由はいろいろある。
たとえば、
- OSの起動に必要な領域を分ける
- システム領域とデータ領域を分ける
- 複数のOSを同じディスクに入れる
- 障害時の影響範囲を分ける
- バックアップや復旧をしやすくする
- 用途ごとに別のファイルシステムを使う
などだ。
重要なのは、パーティションはあくまで「ディスク上の領域の区切り」であって、ファイルそのものを管理する仕組みではないということだ。
ファイルを管理するのは、そのパーティションの中に作られるファイルシステムだ。
パーティションテーブルとは
ディスクの中にどんなパーティションがあるのかを記録している情報が、パーティションテーブルだ。
OSはディスクを認識すると、まずパーティションテーブルを見て、
- パーティションがいくつあるのか
- 各パーティションはディスク上のどこから始まるのか
- どのくらいのサイズなのか
- そのパーティションは何の用途なのか
といった情報を確認する。
この情報がないと、OSはディスク上のどの範囲をどの領域として扱えばいいのか分からない。
パーティションテーブルの方式として代表的なのが、
- MBR
- GPT
の2つだ。
MBRとは
MBRは「Master Boot Record」の略だ。
古くから使われているパーティション管理方式で、主にBIOS時代のPCで使われてきた。
MBRでは、ディスクの先頭部分にブートコードとパーティション情報が置かれる。
この先頭部分が壊れると、パーティション情報が読めなくなったり、OSが起動できなくなったりすることがある。
MBRの特徴は、仕組みが比較的シンプルなことだ。
一方で、古い方式なので制限もある。
代表的なのが、
- 基本パーティションは最大4つまで
- 大容量ディスクの扱いに制限がある
- パーティション情報の冗長性が弱い
といった点だ。
MBRでは基本パーティションを4つまでしか作れない。
それ以上のパーティションを作りたい場合は、拡張パーティションと論理パーティションという仕組みを使う必要がある。
このあたりは今見ると少し複雑だ。
また、MBRは現代の大容量ストレージにはあまり向いていない。
そのため、現在のPCではMBRよりもGPTが使われることが多くなっている。
GPTとは
GPTは「GUID Partition Table」の略だ。
UEFI環境でよく使われる、現代的なパーティション管理方式だ。
MBRより新しい方式で、大容量ディスクや多数のパーティションに対応しやすい。
GPTでは、それぞれのパーティションにGUIDという識別子を持たせることができる。
これにより、そのパーティションがどんな用途のものなのかを明確に表せる。
たとえば、
- EFIシステムパーティション
- Microsoft Basic Data Partition
- Linux Filesystem
- Linux Swap
- Recovery Partition
のように、用途ごとにパーティションタイプを区別できる。
GPTの大きな特徴は、パーティション情報の扱いがMBRより強いことだ。
GPTでは、パーティション情報をディスクの先頭側だけでなく末尾側にも持つ。
そのため、片方の情報が壊れた場合でも、復旧できる可能性がある。
また、MBRのような「基本パーティションは4つまで」という制限も実用上ほぼ気にしなくていい。
現在のUEFI環境では、GPTでパーティションを管理し、その中にEFIシステムパーティションを作ってブートする構成が一般的だ。
MBRとGPTの違い
MBRとGPTの違いを簡単にまとめると、次のようになる。
| 項目 | MBR | GPT |
|---|---|---|
| 主な時代 | BIOS時代 | UEFI時代 |
| パーティション数 | 基本パーティションは最大4つ | 多数のパーティションを扱える |
| 大容量ディスク | 苦手 | 得意 |
| パーティション情報 | ディスク先頭に持つ | 先頭と末尾に持つ |
| 冗長性 | 弱い | MBRより強い |
| 現在の主流 | 古い環境で使われる | 現在のPCでよく使われる |
ざっくり言えば、MBRは古い方式、GPTは現代的な方式だ。
ただし、MBRが完全に消えたわけではない。
古いPC、古いOS、組み込み機器、一部の互換環境では今でもMBRを見ることがある。
一方で、現在のPCやUEFI環境ではGPTを理解しておくことがかなり重要になる。
EFIシステムパーティションとは
EFIシステムパーティション、略してESPは、UEFI環境でOSを起動するために使われる特別なパーティションだ。
UEFIは、昔のBIOSに代わる現代的なファームウェアの仕組みだ。
PCの電源を入れたとき、UEFIはディスク上のEFIシステムパーティションを探し、その中にあるブートローダーを読み込む。
ESPの中には、たとえば次のようなファイルが置かれる。
- Windows Boot Manager
- Linuxのブートローダー
- 自作OSのブートローダー
- UEFIアプリケーション
- ブート設定に関係するファイル
ESPは、多くの場合FAT32でフォーマットされている。
ここが重要だ。
UEFIは、OSが起動する前の段階でブートローダーを読み込む必要がある。
そのため、UEFI自身が読める形式でブートローダーが置かれていなければならない。
そこで使われるのがFAT系のファイルシステムだ。
特に一般的なPC環境では、ESPはFAT32で作られることが多い。
つまり、UEFIブートでは、
- UEFIがディスクを認識する
- GPTなどのパーティション情報を見る
- EFIシステムパーティションを探す
- ESP内のFAT32ファイルシステムを読む
-
\EFI\...配下にあるブートローダーを実行する
という流れになる。
ここで分かる通り、ブートの仕組みを理解するには、
- ディスク
- パーティション
- GPT
- EFIシステムパーティション
- FAT32
- ブートローダー
これらをセットで理解する必要がある。
どれか1つだけ分かっていても、全体の流れは見えにくい。
EFIシステムパーティションの中身
EFIシステムパーティションの中には、通常 EFI というディレクトリがある。
その中に、OSやブートローダーごとのディレクトリが作られる。
たとえばWindowsなら、だいたい次のような構成になる。
\EFI\Microsoft\Boot\
Linux環境なら、ディストリビューションやブートローダーによって、
\EFI\ubuntu\
\EFI\debian\
\EFI\grub\
\EFI\BOOT\
のようなディレクトリが作られることがある。
UEFIでは、標準的なフォールバックパスとして、
\EFI\BOOT\BOOTX64.EFI
が使われることもある。
これは、x86_64環境向けのデフォルトのEFI実行ファイル名だ。
USBメモリからUEFIブートするときなどに、このパスが使われることがある。
ここで出てくる .EFI ファイルは、UEFIが実行できる形式のプログラムだ。
つまり、ESPは単なるデータ置き場ではなく、OSを起動するための入口になる重要なパーティションだ。
フォーマットとは
ストレージを使うときによく出てくるのが「フォーマット」という言葉だ。
一般的には「初期化」のような意味で使われることが多い。
だが、技術的には、フォーマットとはパーティションやストレージ上にファイルシステムを作る処理のことだ。
たとえば、
- FAT32でフォーマットする
- exFATでフォーマットする
- NTFSでフォーマットする
- ext4でフォーマットする
というのは、その領域にそれぞれのファイルシステムの管理構造を作るという意味になる。
FAT32でフォーマットすれば、FAT32のルールでファイルを管理する領域になる。
NTFSでフォーマットすれば、NTFSのルールでファイルを管理する領域になる。
つまり、フォーマットとは単に「データを消す」という意味ではない。
実際には、ファイルやフォルダを管理するための土台を作り直す処理だ。
もちろん、フォーマットすると既存のファイルが見えなくなったり、消えたりする。
そのため実用上は「初期化」として扱われる。
だが、内部的には「ファイルシステムを作る処理」と考えると分かりやすい。
ボリュームとは
ディスクやパーティションの話では、「ボリューム」という言葉も出てくる。
ボリュームとは、OSがファイルシステムを載せて利用できる論理的な記憶領域のことだ。
多くの場合、1つのパーティションが1つのボリュームとして扱われる。
たとえばWindowsのCドライブは、パーティション上に作られたNTFSボリュームとして見えている。
ただし、必ずしも「パーティション = ボリューム」とは限らない。
LVM、RAID、仮想ディスク、ストレージプールなどを使うと、複数のディスクやパーティションをまとめて1つのボリュームとして扱うこともできる。
つまり、
- ディスクは物理的、または仮想的なストレージ本体
- パーティションはディスクを区切った領域
- ボリュームはOSが利用する論理的な記憶領域
- ファイルシステムはその中でファイルを管理する仕組み
という整理になる。
このあたりの言葉を分けて理解しておくと、Windowsのディスク管理、Linuxの lsblk や fdisk、UEFIブート、仮想ディスク、RAID構成などを見たときにかなり理解しやすくなる。
全体の流れで見るストレージの構造
ここまでの内容をまとめると、ストレージ上のデータは次のような流れで管理されている。
ディスク
↓
パーティションテーブル
↓
パーティション
↓
ファイルシステム
↓
ディレクトリ
↓
ファイル
UEFIブートの場合は、さらに次のような流れになる。
PCの電源投入
↓
UEFIが起動
↓
ディスクを認識
↓
GPTなどのパーティションテーブルを読む
↓
EFIシステムパーティションを探す
↓
ESP内のFAT32ファイルシステムを読む
↓
EFIブートローダーを実行
↓
OSが起動する
この流れを見ると、ファイルシステムとパーティションが別々の話ではなく、実際のOS起動やストレージ管理の中でつながっていることが分かる。
普段のPC操作では意識しない部分だが、低レイヤーを触るならこの構造は避けて通れない。
ファイルが保存される場所を理解するにはファイルシステムが必要だ。
そのファイルシステムがどこにあるのかを理解するにはパーティションが必要だ。
そして、そのパーティションを見つけるにはMBRやGPTの理解が必要になる。
つまり、ディスク、パーティション、ファイルシステム、MBR/GPT、EFIシステムパーティションは、それぞれ別の単語ではあるが、実際にはかなり密接につながっている。
パーティションとは
ファイルシステムを理解する上で、もう1つ重要なのがパーティションだ。
パーティションとは、ストレージを区切った領域のことだ。
たとえば、1つのSSDの中に、
- OS用の領域
- データ保存用の領域
- リカバリー用の領域
- ブート用の領域
のように、複数の領域を作ることができる。
この区切られた1つ1つの領域がパーティションだ。
ファイルシステムは、多くの場合、このパーティションの中に作られる。
つまり、ストレージ全体の構造をざっくり書くと、次のようになる。
- ストレージ本体
- パーティションテーブル
- パーティション
- ファイルシステム
- ファイルやフォルダ
ここを混同すると、ディスクまわりの理解が一気にややこしくなる。
ファイルシステムは「ファイルをどう管理するか」の仕組み。
パーティションは「ストレージをどう区切るか」の仕組み。
この2つは別物だ。
パーティションテーブルとは
パーティションテーブルとは、ストレージの中にどんなパーティションがあるのかを記録している情報だ。
OSはストレージを読むとき、まずパーティションテーブルを確認する。
そして、
- どこからパーティションが始まるのか
- どこまでがそのパーティションなのか
- そのパーティションは何の用途なのか
- どんな種類のパーティションなのか
といった情報を取得する。
この情報をもとに、OSは目的のパーティションを見つけ、その中のファイルシステムを読みに行く。
MBR
MBRは、古くから使われているパーティション管理方式だ。
MBRは「Master Boot Record」の略で、ディスクの先頭に置かれる。
MBRには、ブートコードとパーティション情報が入っている。
MBR方式では、基本パーティションを最大4つまで管理できる。
古いBIOS環境では、このMBRを使って起動することが多かった。
ただし、MBRには制限もある。
代表的なのは、大容量ディスクへの対応が苦手なことや、基本パーティション数に制限があることだ。
現在のPCでは、MBRよりもGPTが使われることが多くなっている。
GPT
GPTは、現在のUEFI環境でよく使われるパーティション管理方式だ。
GPTは「GUID Partition Table」の略だ。
MBRよりも新しい方式で、大容量ディスクや多数のパーティションに対応しやすい。
UEFI環境でOSを起動する場合、GPTでパーティションが切られていることが多い。
GPTのディスクには、EFI System Partition、いわゆるESPという特別なパーティションが作られることがある。
ESPには、UEFIが読み込むブートローダーなどが置かれる。
そして、このESPはFAT32でフォーマットされていることが多い。
ここで重要なのは、ブートの仕組みを理解するには、パーティションとファイルシステムの両方を理解する必要があるということだ。
GPTだけ分かっていても、ESPの中身を読めなければ意味がない。
FAT32だけ分かっていても、そのFAT32がディスク上のどこにあるのか分からなければ読みに行けない。
ストレージを扱うなら、パーティションとファイルシステムはセットで理解する必要がある。
ファイルシステムとパーティションの関係
ファイルシステムとパーティションは混同されやすい。
だが、役割は違う。
パーティションは、ストレージを区切るための仕組みだ。
ファイルシステムは、その区切られた領域の中でファイルやフォルダを管理するための仕組みだ。
たとえば、1つのSSDに3つのパーティションがあるとする。
その中の1つはNTFS、もう1つはFAT32、もう1つはext4というように、パーティションごとに別のファイルシステムを使うこともできる。
つまり、
パーティション = 場所の区切り
ファイルシステム = その中のデータ管理ルール
というイメージだ。
この違いを理解しておくと、ディスク管理ツールを見たときや、OSのインストール、ブート設定、外部ストレージのフォーマットなどで何をしているのか分かりやすくなる。
フォーマットとは
ストレージを使うときによく出てくるのが「フォーマット」という言葉だ。
フォーマットとは、ストレージやパーティションにファイルシステムを作ることだ。
たとえば、USBメモリをFAT32でフォーマットするというのは、そのUSBメモリ上にFAT32の管理構造を作るという意味になる。
exFATでフォーマットすれば、exFATのルールでファイルを管理する領域になる。
NTFSでフォーマットすれば、NTFSのルールでファイルを管理する領域になる。
つまり、フォーマットとは単に「中身を消す」という意味ではない。
実際には、ファイルシステムの管理情報を作り直して、その領域を特定のルールで使えるようにする処理だ。
もちろん、結果として既存のファイルが見えなくなったり消えたりするので、実用上は「初期化」に近い扱いになる。
だが、技術的には「ファイルシステムを作る処理」と考えた方が分かりやすい。
まとめ
今回は、ファイルシステムとパーティションの基本についてまとめた。
ファイルシステムとは、ストレージ上のデータをファイルやフォルダとして管理するための仕組みだ。
代表的なファイルシステムには、
- FAT12 / FAT16 / FAT32
- exFAT
- NTFS
- HFS / HFS+
- APFS
- Ext系
などがある。
FAT32はシンプルで対応環境が広い。
exFATは大容量ファイルや外部ストレージに向いている。
NTFSはWindowsで使われる高機能なファイルシステムだ。
HFS / HFS+ や APFS はApple系の環境で使われてきた。
Ext系はLinuxでよく使われる。
そして、ファイルシステムと一緒に理解しておくべきなのが、ディスクとパーティションだ。
ディスクは、データを保存するストレージ本体。
パーティションは、そのディスクを区切った領域。
ファイルシステムは、その区切られた領域の中でファイルやフォルダを管理する仕組みだ。
さらに、パーティションを管理する方式としてMBRやGPTがある。
MBRは古くから使われてきた方式で、BIOS時代のPCでよく使われていた。
GPTはUEFI環境でよく使われる現代的な方式で、大容量ディスクや多数のパーティションに対応しやすい。
UEFIブートでは、EFIシステムパーティション、いわゆるESPも重要になる。
ESPには、UEFIが読み込むブートローダーが置かれる。
そして、多くの場合、このESPはFAT32でフォーマットされている。
つまり、PCがOSを起動するときには、
- UEFIがディスクを認識する
- GPTなどのパーティションテーブルを読む
- EFIシステムパーティションを探す
- ESP内のFAT32ファイルシステムを読む
- ブートローダーを実行する
- OSが起動する
という流れになる。
普段は意識しないが、ファイルを保存する、OSを起動する、ディスクを分割する、USBメモリをフォーマットする、といった操作の裏側には、こうした仕組みがある。
ここを理解しておくと、ストレージ、OS、ブート、ディスク管理、障害対応などの理解が一段深くなる。
エンジニアとして低レイヤーを触るなら、ファイルシステムとパーティションは避けて通れない基礎知識だと思う。
これがファイルシステムとパーティションの基本だ!!
普段は自作OSの開発作業の記事を上げている
少しでも気になったり勉強になったらフォローしてね😉
ということで以上miku_JK_Jbでした