ファイルシステム

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

Wikipedia より:

ファイルシステムは、コンピュータのリソースを操作するための、オペレーティングシステム (OS) が持つ機能の一つ。ファイルとは、主に補助記憶装置に格納されたデータを指すが、デバイスやプロセス、カーネル内の情報といったものもファイルとして提供するファイルシステムもある。
より正確に定義すれば、ファイルシステムは抽象データ型の集まりであり、ストレージ、階層構造、データの操作/アクセス/検索のために実装されたものである。ファイルシステムを特殊用途のデータベース管理システム (DBMS) と見なせるかどうかは議論があるが、ファイルシステムとデータベース管理システムには多くの共通点がある。

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

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

一般的な概要については filesystems(5) を、詳細な機能の比較については Wikipedia:Comparison of file systems を参照してください。カーネルによってすでにロードされている、あるいは組み込まれているファイルシステムは、/proc/filesystems にリストアップされています。一方、インストールされているモジュールは ls /lib/modules/$(uname -r)/kernel/fs ですべて見ることができます。

組み込まれている (in-tree) ファイルシステムと FUSE ファイルシステム
ファイルシステム 作成コマンド ユーザースペースユーティリティ Archiso [1] カーネルのドキュメント [2] 備考
Bcachefs bcachefs(8) bcachefs-tools Yes Linux 6.7 から利用可能 (実験的)。
Btrfs mkfs.btrfs(8) btrfs-progs Yes btrfs.html 安定性に関する状況
VFAT mkfs.fat(8) dosfstools Yes vfat.html Windows 9x のファイルシステム
exFAT mkfs.exfat(8) exfatprogs Yes Linux 5.4 のネイティブのファイルシステム。[3]
mkexfatfs(8) exfat-utils No N/A (FUSE ベース)
F2FS mkfs.f2fs(8) f2fs-tools Yes f2fs.html フラッシュメモリベースのデバイス
ext3 mkfs.ext3(8) e2fsprogs Yes ext3.html
ext4 mkfs.ext4(8) e2fsprogs Yes ext4.html
HFS mkfs.hfsplus(8) hfsprogsAUR No hfs.html Classic Mac OS のファイルシステム
HFS+ mkfs.hfsplus(8) hfsprogsAUR No hfsplus.html macOS (8–10.12) のファイルシステム
JFS mkfs.jfs(8) jfsutils Yes jfs.html
NILFS2 mkfs.nilfs2(8) nilfs-utils Yes nilfs2.html Raw フラッシュデバイス (例:SD カード)
NTFS Yes ntfs3.html Windows NT のファイルシステム。新しいドライバ。Linux 5.15 から利用可能。
ntfs-3g[4] No ntfs.html 古いドライバ。書き込みのサポートは非常に制限されています。Linux 6.9 で削除されました。公式にサポートされているカーネルCONFIG_NTFS_FS フラグ無しでビルドされているため、このドライバは利用できません。
mkfs.ntfs(8) Yes N/A (FUSE ベース) 拡張機能付き FUSE ドライバ。
ReiserFS mkfs.reiserfs(8) reiserfsprogs Yes ReiserFS は Linux 5.18 で非推奨 になりました。2025 年にカーネルから削除される予定です。
UDF mkfs.udf(8) udftools Yes udf.html
XFS mkfs.xfs(8) xfsprogs Yes

xfs.html
xfs-delayed-logging-design.html
xfs-self-describing-metadata.html

縮小不可
外部 (out-of-tree) のファイルシステム
ファイルシステム 作成コマンド カーネルパッチセット ユーザースペースユーティリティ 備考
APFS mkapfs(8) linux-apfs-rw-dkms-gitAUR apfsprogs-gitAUR macOS (10.13 およびそれ以降) のファイルシステム。読み取り専用。実験的。Fuse バージョンの apfs-fuse-gitAUR も参照。
Reiser4 mkfs.reiser4(8) reiser4progsAUR
ZFS zfs-linuxAUR, zfs-dkmsAUR zfs-utilsAUR OpenZFS 移植

ジャーナリング

exFAT、ext2、FAT16/32、Reiser4 (オプション)、Bcachefs、Btrfs、ZFS を除く上記のすべてのファイルシステムは ジャーナリング を使用しています。ジャーナリングは、ファイルシステムにコミットする前に変更を記録することで、障害からの回復力を提供します。システムクラッシュや停電の際、このようなファイルシステムはオンラインに戻すのが速く、破損する可能性も低くなります。ロギングはファイルシステムの専用領域で行われます。

すべてのジャーナリング技術が同じというわけではありません。ext3 と ext4 はデータモード・ジャーナリングを提供し、データとメタデータの両方を記録し、メタデータの変更だけを記録することもできます。データモード・ジャーナリングにはスピードのペナルティがあり、デフォルトでは有効になっていません。同じように、Reiser4 はいわゆる "トランザクションモデル" を提供します。これは提供する機能だけでなくジャーナリングモードも変更します。wandering logs と呼ばれる特別なモデルの異なるジャーナリング技術を使い、ディスクに二度書きする必要がありません。write-anywhere (btrfs のデフォルトとほぼ同じですが根本的に異なる "tree" デザイン) と hybrid という複合アプローチでは前者の2つをヒューリスティックに交互に使用することができます。

ノート: Reiser4 はメタデータとインラインチェックサムを特徴とする 'node41 プラグインを使用して ext4 のデフォルトのジャーナリング動作とほぼ同等のもの(メタデータのみ)を提供し、オプションでトランザクションモデルに応じて提供される wandering logs を動作と組み合わせます。マウント時に選択されます。

他のファイルシステムは ordered-mode のジャーナリングを提供し、メタデータのみをログに記録します。全てのジャーナリングはクラッシュの後にファイルシステムを有効な状態に戻しますが、データモード・ジャーナリングは破損やデータ損失に対して最大の防御を提供します。しかし、データモード・ジャーナリングはジャーナルとディスクの2つの書き込みを行うため、システムのパフォーマンスは低下します (Reiser4 は "wandering logs" 機能でこれを回避しています。) システムスピードとデータの安全性のトレードオフはファイルシステムタイプを選択する際に考慮されるべきです。Reiser4 は設計上、完全にアトミックに動作し、メタデータとインラインデータの両方にチェックサムを提供する唯一のファイルシステムです (操作が半分発生していてもデータが破損または破壊されない)。したがって設計上、他のファイルシステム Btrfs などに比べてデータ損失の可能性は非常に低くなっています。

Reiser4、Bcachefs、Btrfs、ZFS などのコピーオンライト (write-anywhere としても知られている) に基づくファイルシステムは、その場で更新されることがないため、メタデータを保護するために従来のジャーナルを使う必要はありません。Btrfs はまだジャーナル的なログツリーを持っていますが、それは fdatasync/fsync を高速化するためだけに使われます。

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

FUSE を見てください。

スタック可能なファイルシステム

  • eCryptfs — Enterprise Cryptographic Filesystem は Linux 用のディスク暗号化ソフトウェアのパッケージです。これは POSIX 準拠のファイルシステムレベルの暗号化レイヤとして実装され、オペレーティングシステムレベルで GnuPG と同様の機能を提供することを目的としています。
https://ecryptfs.org || ecryptfs-utils
  • mergerfs — FUSE ベースの union ファイルシステムです。
https://github.com/trapexit/mergerfs || mergerfsAUR
  • mhddfs — FUSE ベースの union ファイルシステムである Multi-HDD FUSE ファイルシステム。
http://mhddfs.uvw.ru || mhddfsAUR
  • overlayfs — OverlayFS は Linux 用のファイルシステムサービスで、他のファイルシステムの union マウントを実装しています。
https://docs.kernel.org/filesystems/overlayfs.html || linux
  • unionfs-fuse — ユーザースペース Unionfs の実装。
https://github.com/rpodgorny/unionfs-fuse || unionfs-fuseAUR

読み取り専用のファイルシステム

  • EROFS — Enhanced Read-Only File System は、パフォーマンスの向上とストレージ容量の圧縮を目的とした軽量の読み取り専用ファイルシステムです。
https://erofs.docs.kernel.org/ || erofs-utils
  • SquashFS — SquashFS は、読み取り専用の圧縮ファイルシステムです。SquashFS はファイル、inodes、ディレクトリーを圧縮し、さらに大きな圧縮のために最大 1 MiB のブロック・サイズをサポートします。
https://github.com/plougher/squashfs-tools || squashfs-tools

クラスタ化ファイルシステム

  • BeeGFS — 高パフォーマンスコンピューティングのために開発・最適化された並列ファイルシステム。
https://www.beegfs.io/c/ || beegfs-clientAUR
  • Ceph — 優れたパフォーマンス、信頼性、拡張性を実現するように設計された、統合された分散ストレージシステム。
https://ceph.com/ || cephAUR
  • GlusterFS — 数ペタバイトまで拡張可能なクラスタファイルシステム。
https://www.gluster.org/ || glusterfs
  • IPFS — Web を高速化、安全化、およびオープン化するためのピアツーピアハイパーメディアプロトコル。IPFS は HTTP に取って代わり、私たち全員のためにより良いウェブを構築することを目指しています。ブロックを使用してファイルの一部を保存し、各ネットワーク・ノードは関心のあるコンテンツのみを保存し、重複除外、分散、拡張性の高いシステムをユーザーのみに制限 (現在はアルファ版)
https://ipfs.io/ || kubo
  • MinIO — MinIO は高パフォーマンスな S3 互換のオブジェクトストレージを提供します。
https://min.io || minio
  • MooseFS — MooseFS は、耐障害性で可用性が高い、高性能なスケールアウトネットワーク分散ファイルシステムです。
https://moosefs.com || moosefs
  • OpenAFS — AFS 分散ファイルシステムのオープンソース実装。
https://www.openafs.org || openafsAUR
  • OrangeFS — OrangeFS は、マルチサーバ・ベースのディスク・ストレージに透過的に並列アクセスするために設計されたスケール・アウト・ネットワーク・ファイル・システムです。並列および分散アプリケーション向けに最適化された MPI-IO のサポート。Linux クライアントだけでなく、Windows、Hadoop、WebDAV 用の並列ストレージの使用を簡素化します。POSIX 互換です。バージョン4.6以降のLinux カーネルに含まれます。
https://www.orangefs.org/ || パッケージが存在しないか AUR で検索
  • Sheepdog — ボリュームおよびコンテナサービス用の分散オブジェクトストレージシステムで、ディスクとノードをインテリジェントに管理します。
https://sheepdog.github.io/sheepdog/ || sheepdogAUR
  • Tahoe-LAFS — Tahoe Least-Authority File Store は、フリーでオープン、安全、分散、耐障害性、ピアツーピア分散データストアおよび分散ファイルシステムです。
https://tahoe-lafs.org/ || tahoe-lafsAUR

共有ディスクファイルシステム

  • GFS2 — GFS2 では、クラスタのすべてのメンバーが同じ共有ブロック・ストレージに直接同時にアクセスできます。
https://pagure.io/gfs2-utils || gfs2-utilsAUR
  • OCFS2 — Oracle Cluster File System (バージョン2) は、Oracle Corporation によって開発され、GNU General Public License の下でリリースされる共有ディスク・ファイル・システムです。
https://oss.oracle.com/projects/ocfs2/ || ocfs2-toolsAUR
  • VMware VMFS — VMware の VMFS (Virtual Machine File System) は、同社の主力サーバ仮想化スイートである vSphere で使用されているファイルシステムです。
https://www.vmware.com/products/vi/esx/vmfs.html || vmfs-toolsAUR

既存のファイルシステムを特定する

lsblk を使って、既存のファイルシステムを特定することができます:

$ lsblk -f
NAME   FSTYPE LABEL     UUID                                 MOUNTPOINT
sdb
└─sdb1 vfat   Transcend 4A3C-A9E9

存在する場合、既存のファイルシステムが FSTYPE 列に表示されます。mount されている場合は、MOUNTPOINT 列に表示されます。

ファイルシステムを作成する

ファイルシステムは通常、LVMRAIDdm-crypt などの論理コンテナ内、パーティション、通常のファイル (Wikipedia:Loop device を参照) に作成されます。このセクションでは、パーティションの場合について説明します。

ノート: ファイルシステムはディスクに直接書き込むことができます (そのようなディスクは スーパーフロッピー または パーティションレスディスク と呼ばれます)。この方法を取るといくつかの制限が発生します (特に、そのようなドライブから起動する場合)。例については、Btrfs#パーティションレス Btrfs ディスク を参照してください。
警告:
  • 新しいファイルシステムを作成した後、このパーティション上に以前保存されていたデータを復元できる可能性はほとんどありません。保持したいデータのバックアップを作成してください
  • 特定のパーティションの目的により、ファイルシステムの選択が制限される場合があります。たとえば、 EFI システムパーティション には FAT32 ファイルシステムが含まれている必要があり、 /boot ディレクトリを含むファイルシステムは ブートローダー によってサポートされている必要があります。

続行する前に、ファイルシステムを作成するデバイスを特定し、それがマウントされているかどうかを確認してください。例えば:

$ lsblk -f
NAME   FSTYPE   LABEL       UUID                                 MOUNTPOINT
sda
├─sda1                      C4DA-2C4D
├─sda2 ext4                 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 /mnt
└─sda3                      56adc99b-a61e-46af-aab7-a6d07e504652

先に進む前に、マウントされているファイルシステムを アンマウントしなければなりません。上記の例では、既存のファイルシステムは /dev/sda2 にあり、 /mnt にマウントされていますが、マウントを解除する必要があります:

# umount /dev/sda2

マウントされたばかりのファイルシステムを見つける方法は、#マウントしたファイルシステムの一覧表示 を参照してください。

新しいファイルシステムを作成するには、mkfs(8) を使用します。正確なタイプ、および特定のファイルシステムにインストールする可能性のあるユーザースペースユーティリティについては、 #ファイルシステムのタイプ を参照してください。

たとえば、 /dev/sda1 でタイプ ext4 (Linux データパーティションで一般的に使われています) の新しいファイルシステムを作成するには、次のコマンドを実行します:

# mkfs.ext4 /dev/sda1
ヒント:
  • mkfs.ext4-L フラグを使用して、ファイルシステムラベル を指定できます。e2label を使用して、既存のファイルシステムのラベルを変更できます。
  • ファイルシステムは、特定の制限付きで、作成後に「サイズ変更」できます。たとえば、 XFS ファイルシステムのサイズを増やすことはできますが、減らすことはできません。詳細については、 Wikipedia:ファイルシステムの比較#サイズ変更機能 およびそれぞれのファイルシステムのドキュメントを参照してください。

これで、新しいファイルシステムを任意のディレクトリにマウントできます。

ファイルシステムのマウント

デバイス(パーティションなど)上にあるファイルシステムを手動でディレクトリにマウントするには、mount(8) を使用します。この例では /dev/sda1/mnt にマウントしています。

# mount /dev/sda1 /mnt

これは /dev/sda1 上のファイルシステムをディレクトリ /mnt にアタッチし、ファイルシステムの内容を見えるようにするものです。この操作の前に /mnt に存在していたデータは、デバイスがアンマウントされるまで不可視状態になります。

fstab には、デバイスが存在する場合に自動的にマウントされる方法に関する情報が含まれています。この動作を変更する方法の詳細については、fstab の記事を参照してください。

デバイスが /etc/fstab で指定されていて、コマンドラインでデバイスかマウントポイントだけが指定された場合、その情報がマウント時に使用されます。例えば、/etc/fstab/dev/sda1/mnt にマウントするという行がある場合、以下は自動的にその場所にデバイスをマウントすることになります。

# mount /dev/sda1

または、

# mount /mnt

mount にはいくつかのオプションがあり、その多くは指定されたファイルシステムに依存します。 オプションは以下の方法で変更することができます:

  • コマンドラインで mount と共にフラグを使用する
  • fstab を編集する
  • udev ルールを作成する
  • カーネルを自分でコンパイルする
  • ファイルシステム固有のマウントスクリプト (/usr/bin/mount.* にあります) を使用する

より詳しい情報は、これらの関連記事と、興味のあるファイルシステムの記事をご覧下さい。

ヒント:
  • ファイルシステムは mount の代わりに systemd-mount でもマウントできます。マウントポイントが指定されていない場合、ファイルシステムは /run/media/system/device_identifier/ にマウントされます。これにより、ファイルシステムをどこにマウントするかを決めることなく、簡単にマウントすることができます。使い方や詳細は systemd-mount(1) を参照してください。
  • 一般ユーザーとしてファイルシステムをマウントする方法については、udisks#使用方法 を見てください。これにより、root 権限や完全なグラフィック環境、udisks を使用するファイルマネージャを用いずにファイルシステムをマウントできるようになります。

マウントしたファイルシステムの一覧表示

マウントされている全てのファイルシステムを一覧表示するには findmnt(8) を使ってください:

$ findmnt

findmnt は様々な引数を取り、出力をフィルタリングしたり、追加情報を表示したりすることができます。例えば、デバイスやマウントポイントを引数として取り、指定されたものについての情報のみを表示させることができます:

$ findmnt /dev/sda1

findmnt/etc/fstab, /etc/mtab, /proc/self/mounts から情報を収集します。

ファイルシステムのアンマウント

ファイルシステムをアンマウントするには umount(8) を使ってください。ファイルシステムがあるデバイス (例:/dev/sda1) かマウントポイント (例:/mnt) のどちらかを指定することが可能です。

# umount /dev/sda1

または、

# umount /mnt

トラブルシューティング

"linux Structure needs cleaning"

ファイルシステムをアンマウントし、問題のあるボリュームで fsck を実行してください。

参照

翻訳ステータス: このページは en:File systems の翻訳バージョンです。最後の翻訳日は 2024-05-09 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。