ファイルシステム
関連記事
Wikipedia より:
- ファイルシステムは、コンピュータのリソースを操作するための、オペレーティングシステム (OS) が持つ機能の一つ。ファイルとは、主に補助記憶装置に格納されたデータを指すが、デバイスやプロセス、カーネル内の情報といったものもファイルとして提供するファイルシステムもある。
- より正確に定義すれば、ファイルシステムは抽象データ型の集まりであり、ストレージ、階層構造、データの操作/アクセス/検索のために実装されたものである。ファイルシステムを特殊用途のデータベース管理システム (DBMS) と見なせるかどうかは議論があるが、ファイルシステムとデータベース管理システムには多くの共通点がある。
個々のドライブパーティションに、多くのファイルシステムのなかから1つを設定することができます。ファイルシステムはそれぞれにメリット、デメリット、特徴があります。ここではサポートされているファイルシステムの概要を記述します。より多くの情報を見るには Wikipedia へのリンクを辿って下さい。
目次
ファイルシステムのタイプ
一般的な概要については filesystems(5) を、詳細な機能の比較については Wikipedia:Comparison of file systems を参照してください。カーネルによってすでにロードされている、あるいは組み込まれているファイルシステムは、/proc/filesystems
にリストアップされています。一方、インストールされているモジュールは ls /lib/modules/$(uname -r)/kernel/fs
ですべて見ることができます。
ファイルシステム | 作成コマンド | カーネルパッチセット | ユーザースペースユーティリティ | 備考 |
---|---|---|---|---|
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つをヒューリスティックに交互に使用することができます。
他のファイルシステムは 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 と同様の機能を提供することを目的としています。
- mergerfs — FUSE ベースの union ファイルシステムです。
- mhddfs — FUSE ベースの union ファイルシステムである Multi-HDD FUSE ファイルシステム。
- http://mhddfs.uvw.ru || mhddfsAUR
- overlayfs — OverlayFS は Linux 用のファイルシステムサービスで、他のファイルシステムの union マウントを実装しています。
- unionfs-fuse — ユーザースペース Unionfs の実装。
読み取り専用のファイルシステム
- EROFS — Enhanced Read-Only File System は、パフォーマンスの向上とストレージ容量の圧縮を目的とした軽量の読み取り専用ファイルシステムです。
- SquashFS — SquashFS は、読み取り専用の圧縮ファイルシステムです。SquashFS はファイル、inodes、ディレクトリーを圧縮し、さらに大きな圧縮のために最大 1 MiB のブロック・サイズをサポートします。
クラスタ化ファイルシステム
- BeeGFS — 高パフォーマンスコンピューティングのために開発・最適化された並列ファイルシステム。
- Ceph — 優れたパフォーマンス、信頼性、拡張性を実現するように設計された、統合された分散ストレージシステム。
- https://ceph.com/ || cephAUR
- GlusterFS — 数ペタバイトまで拡張可能なクラスタファイルシステム。
- IPFS — Web を高速化、安全化、およびオープン化するためのピアツーピアハイパーメディアプロトコル。IPFS は HTTP に取って代わり、私たち全員のためにより良いウェブを構築することを目指しています。ブロックを使用してファイルの一部を保存し、各ネットワーク・ノードは関心のあるコンテンツのみを保存し、重複除外、分散、拡張性の高いシステムをユーザーのみに制限 (現在はアルファ版)
- MinIO — MinIO は高パフォーマンスな S3 互換のオブジェクトストレージを提供します。
- MooseFS — MooseFS は、耐障害性で可用性が高い、高性能なスケールアウトネットワーク分散ファイルシステムです。
- OpenAFS — AFS 分散ファイルシステムのオープンソース実装。
- OrangeFS — OrangeFS は、マルチサーバ・ベースのディスク・ストレージに透過的に並列アクセスするために設計されたスケール・アウト・ネットワーク・ファイル・システムです。並列および分散アプリケーション向けに最適化された MPI-IO のサポート。Linux クライアントだけでなく、Windows、Hadoop、WebDAV 用の並列ストレージの使用を簡素化します。POSIX 互換です。バージョン4.6以降のLinux カーネルに含まれます。
- https://www.orangefs.org/ || パッケージが存在しないか AUR で検索
- Sheepdog — ボリュームおよびコンテナサービス用の分散オブジェクトストレージシステムで、ディスクとノードをインテリジェントに管理します。
- Tahoe-LAFS — Tahoe Least-Authority File Store は、フリーでオープン、安全、分散、耐障害性、ピアツーピア分散データストアおよび分散ファイルシステムです。
共有ディスクファイルシステム
- GFS2 — GFS2 では、クラスタのすべてのメンバーが同じ共有ブロック・ストレージに直接同時にアクセスできます。
- OCFS2 — Oracle Cluster File System (バージョン2) は、Oracle Corporation によって開発され、GNU General Public License の下でリリースされる共有ディスク・ファイル・システムです。
- VMware VMFS — VMware の VMFS (Virtual Machine File System) は、同社の主力サーバ仮想化スイートである vSphere で使用されているファイルシステムです。
既存のファイルシステムを特定する
lsblk を使って、既存のファイルシステムを特定することができます:
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sdb └─sdb1 vfat Transcend 4A3C-A9E9
存在する場合、既存のファイルシステムが FSTYPE
列に表示されます。mount されている場合は、MOUNTPOINT
列に表示されます。
ファイルシステムを作成する
ファイルシステムは通常、LVM、RAID、dm-crypt などの論理コンテナ内、パーティション、通常のファイル (Wikipedia:Loop device を参照) に作成されます。このセクションでは、パーティションの場合について説明します。
続行する前に、ファイルシステムを作成するデバイスを特定し、それがマウントされているかどうかを確認してください。例えば:
$ 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
これで、新しいファイルシステムを任意のディレクトリにマウントできます。
ファイルシステムのマウント
デバイス(パーティションなど)上にあるファイルシステムを手動でディレクトリにマウントするには、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.*
にあります) を使用する
より詳しい情報は、これらの関連記事と、興味のあるファイルシステムの記事をご覧下さい。
マウントしたファイルシステムの一覧表示
マウントされている全てのファイルシステムを一覧表示するには 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 を実行してください。