File Systems (日本語) - ArchWiki

# File Systems (日本語)

関連記事

- パーティショニング

Wikipedia より:

  ファイルシステムは、コンピュータのリソースを操作するための、オペレーティングシステムが持つ機能の一つ。ファイルシステムは抽象データ型の集まりであり、ストレージ、階層構造、データの操作/アクセス/検索のために実装されたものである。

個々のドライブパーティションに、多くのファイルシステムのなかから１つを設定することができます。ファイルシステムはそれぞれにメリット、デメリット、特徴があります。ここではサポートされているファイルシステムの概要を記述します。より多くの情報を見るには Wikipedia へのリンクを辿って下さい。

フォーマットする前に、ドライブはパーティションされている必要があります。

## ファイルシステムのタイプ

- Btrfs またの名を "Better FS" — Btrfs は新しいファイルシステムで Sun/Oracle の ZFS に似たパワフルな機能を備えています。機能としては、スナップショット、マルチディスク・ストライピング、ミラーリング (mdadm を使わないソフトウェア RAID)、チェックサム、増分バックアップ、容量の節約だけでなく優れたパフォーマンスも得られる透過圧縮などがあります。メインラインカーネルにマージされていますが、2014年4月現在、Btrfs は安定状態ではなく未だに実験的な状態です。将来的に Btrfs は全てのメジャーなディストリビューションのインストーラで標準になる GNU/Linux ファイルシステム として期待されています。
- exFAT — フラッシュドライブに最適化するように Microsoft によって開発されたファイルシステム。NTFS とは違い、exFAT はファイルのために空き領域を事前に割り振ることができません。サイズのわかっているファイルを作成するとき、exFAT はファイルのサイズと完全に等しい物理書き込みを行います。
- ext2 — Second Extended Filesystem は成熟した GNU/Linux ファイルシステムであり、非常に安定しています。欠点はジャーナリング(下で説明)と書き込みバリアをサポートしていないことです。ジャーナリングがないために電源を喪失したりクラッシュしたときにデータが消えてしまうことがあります。また root (`/`) や `/home` で使うとファイルシステムのチェックに長い時間がかかってしまいます。ext2 ファイルシステムは ext3 に変換可能です。
- ext3 — Third Extended Filesystem は言うなればジャーナリングと書き込みバリアをサポートした ext2 です。ext2 と後方互換性があり、よくテストされていて、非常に安定しています。
- ext4 — Fourth Extended Filesystem は比較的新しいファイルシステムで、ext2 や ext3 と互換性があります。1エクサバイト(つまり1,048,576テラバイト)までのボリュームサイズと16テラバイトまでのファイルサイズをサポートしています。ext3 に比べサブディレクトリの限界が増え、64,000まで保持できます。オンラインでのデフラグも可能です。
- F2fs — Flash-Friendly File System は Samsung の従業員 Kim Jaegeuk (ハングル: 김재극) によって作成された、Linux オペレーティングシステムカーネル向けのフラッシュファイルシステムです。携帯端末からサーバーまで幅広く使われている、NAND 型フラッシュメモリのストレージデバイス (SSD, eMMC, SD カードなど) の特性を考慮するファイルシステムという視点から F2FS は作成されました。
- JFS — IBM の Journaled File System はジャーナリング機能を持った最初のファイルシステムです。GNU/Linux に移植される前は IBM AIX® OS で長い間開発されていました。JFS は全ての GNU/Linux ファイルシステムの中で使用する CPU リソースが一番少ないです。フォーマット、マウント、ファイルシステムチェック (fsck) は高速です。JFS はデッドラインの I/O スケジューラと連携して全体的に良いパフォーマンスを発揮します。ext シリーズや ReiserFS ほどは広くサポートされていませんが、成熟して安定しています。
- NILFS2 — New Implementation of a Log-structured File System は NTT により開発されました。NILFS は連続的なログのようなフォーマットですべてのデータを書き込み、それらは追記されるのみで、決して上書きされません。従来の Linux ファイルシステムで起こるデータ損失を最小限にするのと同様にシーク時間を減らすように設計されています。
- NTFS — Windows で使われるファイルシステム。NTFS は FAT や HPFS (High Performance File System) に対して、メタデータの先進的なサポートや高度なデータ構造の使用によるパフォーマンス・信頼性の改善、アクセス制御リスト (ACL) やファイルシステムジャーナリング機能の追加といった技術的な改善が施されています。Linux でマウントするための多くのユーティリティがあります (例えば NTFS-3G)。
- Reiser4 — ReiserFS の後継となるファイルシステムで、DARPA や Linspire がスポンサーとなり Namesys によって開発されました。dancing tree バランス化アプローチと共に B* 木を採用しており、メモリを圧迫するかトランザクションの完了時を除き、過疎なノードはディスクへのフラッシュまたはマージされません。それによりシステムは時間やスペースを浪費せずにファイルやディレクトリを作成することができるようになっています。
- ReiserFS (V3) — ハンス・ライザーによる高いパフォーマンスを誇るジャーナリングファイルシステムで、目新しい独創的なアルゴリズムでデータを管理します。ReiserFS はとても速いともてはやされていますが、特に小さいファイルを扱うときにそれは顕著です。ReiserFS はフォーマットも速いですが、マウントは比較的遅くなります。成熟していて安定しています。ReiserFS (V3) は現在では活発には開発されていません。`/var` に使うのが一般的に良いと思われます。
- Swap — swap パーティションに使われるファイルシステム。
- VFAT — Virtual File Allocation Table は技術的にシンプルであり事実上全てのオペレーティングシステムでサポートされています。異なる OS 間でデータを共有するためにメモリーカードなどで利用されます。VFAT は長いファイル名をサポートしています。
- XFS — 最古のジャーナリングファイルシステムの一つで、Silicon Graphics によって IRIX OS 向けに開発され、その後 GNU/Linux に移植されました。大きなファイルやファイルシステムを扱うのに速いパフォーマンスを発揮し、フォーマットやマウントも高速です。比較ベンチマークテストによると多数の小さいファイルを速く扱うのは苦手です。XFS は成熟していてオンライン・デフラグもできます。
- ZFS — Sun Microsystems によって設計された統合ファイルシステム・論理ボリュームマネージャ。ZFS の機能としては、データ破損からの保護、ファイルシステムとボリューム管理の統合、スナップショット、コピーオンライト (COW) クローン、継続的な整合性チェック、自動修復、RAID-Z、ネイティブの NFSv4 ACLs などがあります。

### ジャーナリング

ext2 と FAT16/32 を除く上記全てのファイルシステムはジャーナリングを使います。ジャーナリングによってファイルシステムに移される前に変更を記録することで障害から復旧できます。システムがクラッシュしたり電源を喪失した時、ファイルシステムは素早く復旧しほとんど破損しません。ファイルシステムの特定領域にログが作成されます。

ジャーナリング手法は全て同じというわけではありません。ext3 と ext4 はデータモード・ジャーナリングを行うことができ、データとメタデータ両方を記録します。データモード・ジャーナリングは速度が遅くなるのでデフォルトでは無効にされています。他のファイルシステムはオーダーモード・ジャーナリングを提供し、メタデータのみを記録します。クラッシュのあとジャーナリングによってファイルシステムを正常にもどす際、データモード・ジャーナリングはデータの喪失や変造を最大限に防ぎます。しかし代わりにパフォーマンスを妥協する必要があります。データモード・ジャーナリングは2つの書き込み命令を使っています: 初めはジャーナルに、次にディスクに行います。ファイルシステムのタイプを選ぶ時はシステムのスピードとデータの安全性のトレードオフを考えて下さい。

### Arch Linux サポート

- btrfs-progs — Btrfs サポート。

  http://btrfs.wiki.kernel.org/ || btrfs-progs

- dosfstools — VFAT サポート。

  http://www.daniel-baumann.ch/software/dosfstools/ || dosfstools

- exfat-utils — exFAT サポート。

  http://code.google.com/p/exfat/ || exfat-utils

- f2fs-tools — F2FS サポート。

  https://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git || f2fs-tools

- e2fsprogs — ext2, ext3, ext4 サポート。

  http://e2fsprogs.sourceforge.net || e2fsprogs

- jfsutils — JFS サポート。

  http://jfs.sourceforge.net || jfsutils

- nilfs-utils — NILFS サポート。

  http://nilfs.sourceforge.net/ || nilfs-utils

- ntfs-3g — NTFS サポート。

  http://www.tuxera.com/community/ntfs-3g-download/ || ntfs-3g

- reiser4progs — ReiserFSv4 サポート。

  http://sourceforge.net/projects/reiser4/ || reiser4progs

- reiserfsprogs — ReiserFSv3 サポート。

  https://www.kernel.org/ || reiserfsprogs

- util-linux — Swap サポート。

  http://www.kernel.org/pub/linux/utils/util-linux/ || util-linux

- xfsprogs — XFS サポート。

  http://oss.sgi.com/projects/xfs/ || xfsprogs

- zfs — ZFS サポート。

  http://zfsonlinux.org/ || zfs-git

### FUSE ベースのファイルシステム

Filesystem in Userspace (FUSE) は通常ユーザーがカーネルコードを修正することなく独自のファイルシステムを作成できる、Unix ライクなオペレーティングシステムの仕組みです。ユーザー空間でファイルシステムのコードを実行することにより、FUSE カーネルモジュールは実際のカーネルインターフェイスとの橋渡しを行います。

有名な FUSE ベースのファイルシステム:

- acd-fuse — Amazon Cloud Drive をマウント。

  https://github.com/handyman5/acd_fuse || acdfuse-git

- adbfs-git — Android デバイスのファイルシステムをマウント。

  http://collectskin.com/adbfs/ || adbfs-git

- cddfs — オーディオ CD をマウント。

  http://castet.matthieu.free.fr/ || cddfs

- fuse-exfat — exFAT のマウントサポート。

  http://code.google.com/p/exfat/ || fuse-exfat

- fuseiso — ISO を通常ユーザーでマウント。

  http://sourceforge.net/projects/fuseiso/ || fuseiso

- wiifuse — Gamecube や Wii の DVD ディスクイメージを読み取り専用でマウント。

  http://wiibrew.org/wiki/Wiifuse || wiifuse

- xbfuse-git — Xbox (360) の ISO をマウント。

  http://multimedia.cx/xbfuse/ || xbfuse-git

- xmlfs — XML ファイルをディレクトリツリーとしてマウント。

  https://github.com/halhen/xmlfs || xmlfs

- zfs-fuse — FUSE による ZFS サポート。

  http://zfs-fuse.net/ || zfs-fuse

Wikipedia:ja:Filesystem in Userspace#FUSE利用例 も参照。

## デバイスのフォーマット

Warning: フォーマットはデバイスの全てのデータを消去します。保持したいデータはバックアップを取って下さい。

### 要件

はじめる前に、Linux がつけたデバイスの名前を知る必要があります。ハードドライブや USB スティックは `/dev/sdx` のように表示され、"x" は小文字の英字で、パーティションは `/dev/sdxY` のように表示され、"Y" は数字です。

フォーマットしたいデバイスがマウントされているなら、次のコマンドの MOUNTPOINT カラムに表示されます:

    $ lsblk

デバイスがマウントされていない時は:

    # mount /dev/sdxY /some/directory

umount をマウントしたディレクトリに使うことでアンマウントできます:

    # umount /some/directory

Note: 新しいファイルシステムを作ったりフォーマットするにはデバイスがアンマウントされていなければなりません。

パーティションテーブルを書き換えて下さい。MBR には fdisk が、GPT には gdisk が使えます。GUI ツールを使うことも可能です。詳しくはパーティショニングを見て下さい。

### コンソールツール

ファイルシステムを作るには `mkfs` を使います:

    # mkfs -t ext4 /dev/<partition>

`mkfs` は様々な `mkfs.fstype` ツールを使うための統合フロントエンドです。

swap ファイルシステムを作成するには mkswap を使います:

    # mkswap /dev/<partition>

### GUI ツール

パーティション管理のための GUI ツール:

- Gparted — GTK+ Partition Magic クローン、GNU Parted のフロントエンド。

  http://gparted.sourceforge.net || gparted

- gnome-disk-utility — GNOME のディスク管理ユーティリティ。

  http://www.gnome.org || gnome-disk-utility

- KDE Partition Manager — ディスク・パーティション・ファイルシステムの管理ができる KDE のユーティリティ。

  https://sourceforge.net/projects/partitionman/ || partitionmanager

Category:

- File systems (日本語)