ファイルシステム
関連記事
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 移植 |
ジャーナリング
ext3/4、HFS+、JFS、NTFS、ReiserFS、XFS ファイルシステムはジャーナリングを使用します。ジャーナリングは、変更をファイルシステムにコミットする前にログに記録することで、障害に対する耐性を提供します。システムクラッシュや停電が発生した場合、こうしたファイルシステムはより迅速にオンラインに戻り、データが破損する可能性が低くなります。ログ記録はファイルシステム内の専用領域で行われます。
ext3/4 はデータモードジャーナリングを提供しており、任意でメタデータに加えてデータもログに記録できます。データモードジャーナリングは書き込み操作を2回行うため (まずジャーナルに、次にディスクに)、速度面でペナルティがあります。そのため、データモードジャーナリングはデフォルトで有効化されていません。ファイルシステムの種類と機能を選ぶ際には、システム速度とデータ安全性とのトレードオフについて検討するべきでしょう。
同様に、Reiser4 は設定可能な「トランザクションモデル」を提供しています。wandering logs と呼ばれる特殊なモデルは、ディスクへ2回書き込む必要がありません。write-anywhere モデルは、純粋なコピーオンライト方式です。hybrid と呼ばれる混合方式は、ヒューリスティックにこれら2つのモデルを切り替えます。
Reiser4、Btrfs、Bcachefs、ZFS といったコピーオンライト (別名 write-anywhere) ベースのファイルシステムは、設計上完全にアトミックに動作し、メタデータとインラインデータの両方に対してチェックサムを提供します (操作が不完全に行われることはありません。正常に動作しているハードウェア上では、不完全な操作によってデータが破損することはありません)。なので、これらのファイルシステムは、設計上、他のファイルシステムよりもデータ損失が発生しにくく、メタデータを保護するために従来のジャーナルを使用する必要がありません (メタデータが in-place に更新されることはないからです)。Btrfs は依然としてジャーナルのようなログツリーを使用していますが、fdatasync/fsync の高速化のために使用しているにすぎません。
FAT、exFAT、ext2、HFS はジャーナリングもアトミック性も提供していません。これらのファイルシステムは、一時的な使用あるいは古いシステムのためのものであり、信頼できるストレージが必要である場合に使用することは推奨されません。
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 の実装。
読み取り専用のファイルシステム
- DwarFS — DwarFS は、Linux と Windows 用の高速で高圧縮率の読み取り専用ファイルシステムです。DwarFS は、多かれ少なかれ SquashFS と同じ機能をサポートしていますが、より圧縮に優れており、ハッシュアルゴリズムをカスタム可能です。
- 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 は、フリーでオープン、安全、分散、耐障害性、ピアツーピア分散データストアおよび分散ファイルシステムです。
- https://tahoe-lafs.org/ || tahoe-lafsAUR[リンク切れ: package not found]
共有ディスクファイルシステム
- 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 を実行してください。