Linuxファイルシステム

# Linuxファイルシステム

## 1. ファイルシステムの概念

ファイルシステムは、オペレーティングシステムがストレージデバイスまたはパーティション上のファイルを明確にするための方法とデータ構造です。つまり、ストレージデバイス上でファイルを組織化する方法です。

オペレーティングシステムでファイル情報の管理と保存を担当するソフトウェア構造をファイル管理システム、略してファイルシステムと呼びます。

システムの観点から見ると、ファイルシステムはファイルストレージデバイスの空間を組織化し割り当て、ファイルの保存を担当し、保存されたファイルの保護と検索を行うシステムです。具体的には、ユーザーのためのファイル作成、ファイルの保存、読み取り、修正、ダンプ、アクセス制御、セキュリティ制御、ログ、圧縮、暗号化などを担当します。

### 現在のカーネルがサポートするファイルシステムの確認：

```shell
#rocky8.6
[root@rocky86 ~]# ls /lib/modules/`uname -r`/kernel/fs
binfmt_misc.ko.xz  cifs    ext4     fuse   jbd2           nfs         nls        squashfs
cachefiles         cramfs  fat      gfs2   lockd          nfs_common  overlayfs  udf
ceph               dlm     fscache  isofs  mbcache.ko.xz  nfsd        xfs

#ubuntu22.04
root@ubuntu22:~# ls /lib/modules/`uname -r`/kernel/fs
adfs    binfmt_misc.ko  cramfs  fat       hfsplus  lockd       reiserfs      udf
affs    btrfs           dlm     freevxfs  hpfs     minix       romfs         ufs
afs     cachefiles      efs     fscache   isofs    netfs       shiftfs.ko    vboxsf
autofs  ceph            erofs   fuse      jffs2    nfs         nilfs2        orangefs
befs    cifs            exfat   gfs2      jfs      nfs_common  nls           overlayfs
ntfs    pstore     
ntfs3   qnx4       
smbfs_common  xfs
```

### 現在のシステムで利用可能なファイルシステムの確認：

```shell
#rocky8.6
[root@rocky86 ~]# cat /proc/filesystems 
nodev   sysfs
nodev   tmpfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   cgroup2
nodev   cpuset
nodev   devtmpfs
nodev   configfs
nodev   debugfs
nodev   tracefs
nodev   securityfs
nodev   sockfs
nodev   bpf
nodev   pipefs
nodev   ramfs
nodev   hugetlbfs
nodev   devpts
nodev   autofs
nodev   pstore
nodev   mqueue
fuseblk
nodev   fuse
nodev   fusectl
xfs
nodev   rpc_pipefs

#ubuntu22.04
root@ubuntu22:~# cat /proc/filesystems 
nodev   sysfs
nodev   tmpfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   cgroup2
nodev   cpuset
nodev   devtmpfs
nodev   configfs
nodev   debugfs
nodev   tracefs
nodev   securityfs
nodev   sockfs
nodev   bpf
nodev   pipefs
nodev   ramfs
nodev   hugetlbfs
nodev   devpts
ext3
ext2
ext4
squashfs
vfat
nodev   ecryptfs
fuseblk
nodev   fuse
nodev   fusectl
nodev   mqueue
nodev   pstore
btrfs
nodev   autofs
```

現在のシステムがサポートするファイルシステムと、現在のシステムで利用可能なファイルシステムは別物です。modulesにあるファイルシステムは、コンパイル時に選択された場合のみ利用可能となります。一方、利用可能なファイルシステムには、デフォルトでサポートされているファイルシステムも含まれます。特定のファイルシステムを使用する必要があるが、そのファイルシステムがprocに含まれていない場合は、カーネルを再コンパイルする必要があります。


## 2. ファイルシステムの種類

### Linux 汎用ファイル システム
| File System | Remarks | 日本語 |
|-------------|---------|----------|
| ext2 | Extended file system suitable for partitions that are not too large and not updated frequently, such as /boot partition | 容量が大きくなく、更新頻度も低いパーティションに適したExtended file system。例えば、/bootパーティション |
| ext3 | Improved version of ext2, supports journaling, helps system recover from abnormal shutdowns | ext2の改良版。ジャーナリング機能をサポートし、異常シャットダウンからのシステム回復を支援 |
| ext4 | Latest version of ext file system. Many new features including nanosecond timestamps, huge files (16TB), max 1EB file system, and improved speed | extファイルシステムの最新版。ナノ秒単位のタイムスタンプ、巨大ファイル（16TB）、最大1EBのファイルシステム、速度向上など多くの新機能を搭載 |
| xfs | SGI, supports file systems up to 8EB | SGI社製、最大8EBのファイルシステムをサポート |
| swap | File system dedicated to swap partitions | スワップパーティション専用のファイルシステム |
| iso9660 | Optical disc file system | 光ディスクファイルシステム |
| btrFS | Developed by Oracle | Oracle社が開発 |
| reiserFS | - | - |

### Windows 汎用ファイル システム
| File System | Remarks | 日本語訳 |
|-------------|---------|----------|
| FAT32 | Supports file systems up to 16TB and files up to 4GB | 最大16TBのファイルシステムと最大4GBのファイルをサポート |
| NTFS | Supports file systems up to 16EB and files up to 16EB | 最大16EBのファイルシステムと最大16EBのファイルをサポート |
| exFAT | - | - |

注：EB（Exabyte）は1,000,000,000 GB（10の18乗バイト）です。

### Unix 汎用ファイル システム
| File System | Remarks | 日本語訳 |
|-------------|---------|----------|
| FFS | Fast File System | 高速ファイルシステム |
| UFS | Unix File System. Default disk-based file system for most Unix-like operating systems | Unixファイルシステム。ほとんどのUnix系オペレーティングシステムにおけるデフォルトのディスクベースファイルシステム |
| JFS2 | - | - |

注：
1. FFSは「Fast File System」の略で、高速化を目的としたファイルシステムです。
2. UFSは「Unix File System」の略で、多くのUnix系OSで標準的に使用されているファイルシステムです。
3. JFS2についての詳細な情報が提供されていないため、備考欄は空白になっています。JFS2は通常、IBM AIXオペレーティングシステムで使用されるジャーナリングファイルシステムです。

### ネットワーク 汎用ファイル システム
| File System | Remarks | 日本語訳 |
|-------------|---------|----------|
| NFS | Network File System, allows a system to share directories and files with others over a network | ネットワークファイルシステム。ネットワーク経由でディレクトリやファイルを他のシステムと共有することを可能にする |
| CIFS | Common Internet File System | 共通インターネットファイルシステム |

Notes:
1. NFS is widely used in Unix-like systems for file sharing across a network.
2. CIFS is the public version of SMB (Server Message Block) protocol, primarily used by Microsoft Windows for file sharing. It's designed to be an open, cross-platform technology.

These file systems are both network protocols that allow for remote file access, but they have different origins and are typically used in different environments.

### クラスタ 汎用ファイル システム
| File System | Remarks | 日本語訳 |
|-------------|---------|----------|
| GFS2 | Based on x86_64, supports file systems up to 100TB | x86_64ベース、最大100TBのファイルシステムをサポート |
| OCFS2 | Oracle Cluster File System 2 | Oracleクラスターファイルシステム2 |

注：
1. GFS2（Global File System 2）は、Red Hatが開発した共有ディスクファイルシステムです。x86_64アーキテクチャ上で動作し、最大100TBのファイルシステムをサポートします。

2. OCFS2（Oracle Cluster File System 2）は、Oracleが開発したクラスターファイルシステムです。複数のノードから同時にアクセス可能な共有ディスクファイルシステムとして設計されています。

これらのファイルシステムは主にクラスター環境や大規模なデータストレージに使用されます。GFS2は特に大容量のファイルシステムに対応していることが特徴です。

### distributed 汎用ファイル システム
| File System | Remarks | 日本語訳 |
|-------------|---------|----------|
| FastDFS | Distributed file system for small files | 小規模ファイル向け分散ファイルシステム |
| Ceph | Not just a file system, but an enterprise-grade object storage ecosystem | 単なるファイルシステムではなく、エンタープライズグレードのオブジェクトストレージエコシステム |
| MooseFS | Fault-tolerant, network distributed file system | 耐障害性のあるネットワーク分散ファイルシステム |
| MogileFS | Open source distributed file system | オープンソースの分散ファイルシステム |
| GlusterFS | Scalable network filesystem | スケーラブルなネットワークファイルシステム |
| Lustre | High-performance distributed file system | 高性能分散ファイルシステム |

注釈：

1. FastDFS: 主に小さなファイルの高速な保存と取得に特化しています。

2. Ceph: 非常に柔軟で拡張性が高く、ファイルシステム、ブロックストレージ、オブジェクトストレージを提供します。

3. MooseFS: 高可用性と耐障害性を重視した設計になっています。

4. MogileFS: 主にウェブアプリケーションでの使用を想定して設計されています。

5. GlusterFS: ペタバイト級のスケールアウトストレージソリューションを提供します。

6. Lustre: 主に高性能コンピューティング（HPC）環境で使用されます。

これらのシステムは全て分散ファイルシステムまたはストレージソリューションですが、それぞれ特定の用途や環境に最適化されています。


## RAW
RAWファイルシステム：未処理または未フォーマットのファイルシステム

## 一般的なファイルシステムの特徴：

### FAT32
- 最大16TBのファイルシステムと4GBのファイルをサポート

### NTFS
- 最大16EBのファイルシステムと16EBのファイルをサポート

### EXT3
- 理論上は最大32TBのファイルシステムと2TBのファイルをサポート
- 実際には2TBのファイルシステムと16GBのファイルまでしか対応していない
- 現在32,000個のサブディレクトリまでしかサポートしていない
- ブロック数とinode数の記録に32ビット空間を使用
- データ書き込み時、Ext3のデータブロックアロケータは一度に4KBのブロックしか割り当てられない

### EXT4
- Linuxシステムのジャーナルファイルシステムで、EXT3の後継バージョン
- ファイルシステム容量は1EBまで対応し、単一ファイルは16TBまでサポート
- 理論上は無制限のサブディレクトリをサポート
- ブロック数とinode数の記録に64ビット空間を使用
- マルチブロックアロケータにより、一度の呼び出しで複数のデータブロックを割り当て可能
- より高速な修復
- 記録されたジャーナルにより、非常に短時間でディスクファイルの内容を復元可能
- 最適化されたアルゴリズムにより、ジャーナル記録が全体のファイル操作に与える影響は非常に小さい

### XFS
- 完全な64ビットファイルシステムで、最大8EBのファイルシステムをサポート、単一ファイルも8EBまで対応
- ほぼ生のデバイスI/Oに近いパフォーマンスでデータを保存可能

これらの特徴は、各ファイルシステムの主要な機能と制限を示しています。選択する際は、使用目的や必要な容量、パフォーマンス要件などを考慮することが重要です。