ファイルシステム

提供: ArchWiki
2021年6月30日 (水) 00:36時点におけるKgx (トーク | 投稿記録)による版 (→‎Read-only file systems: 翻訳)
ナビゲーションに移動 検索に移動

関連記事

Wikipedia より:

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

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

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

一般的な概要については、filesystems(5) を、詳細な機能の比較については Wikipedia:Comparison of file systems を参照してください。カーネルでサポートされているファイルシステムは /proc/filesystems に記載されています。

In-tree and FUSE file systems
ファイルシステム 作成コマンド ユーザースペースユーティリティ Archiso [1] カーネルのドキュメント [2][3] メモ
Btrfs mkfs.btrfs(8) btrfs-progs Yes btrfs.html Stability status
VFAT mkfs.fat(8) dosfstools Yes vfat.html Windows 9x file system
exFAT mkfs.exfat(8) exfatprogs No Native file system in Linux 5.4. [4]
mkexfatfs(8) exfat-utils Yes N/A (FUSE-based)
F2FS mkfs.f2fs(8) f2fs-tools Yes f2fs.html Flash-based devices
ext3 mke2fs(8) e2fsprogs Yes ext3.html
ext4 mke2fs(8) e2fsprogs Yes ext4.html
HFS mkfs.hfsplus(8) hfsprogsAUR No hfs.html Classic Mac OS file system
HFS+ mkfs.hfsplus(8) hfsprogsAUR No hfsplus.html macOS (8–10.12) file system
JFS mkfs.jfs(8) jfsutils Yes jfs.txt
NILFS2 mkfs.nilfs2(8) nilfs-utils Yes nilfs2.html
NTFS mkfs.ntfs(8) ntfs-3g Yes N/A (FUSE-based) Windows NT file system
ReiserFS mkfs.reiserfs(8) reiserfsprogs Yes
UDF mkfs.udf(8) udftools Optional udf.html
XFS mkfs.xfs(8) xfsprogs Yes

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

ノート: The kernel has its own NTFS driver (see ntfs.html), but it has limited support for writing files.
Out-of-tree file systems
ファイルシステム 作成コマンド カーネルパッチセット ユーザースペースユーティリティ メモ
APFS mkapfs(8) linux-apfs-dkms-gitAUR apfsprogs-gitAUR macOS (10.13 and newer) file system. Read only, experimental.
Bcachefs bcachefs(8) linux-bcachefs-gitAUR bcachefs-tools-gitAUR
Reiser4 mkfs.reiser4(8) reiser4progsAUR
ZFS zfs-linuxAUR, zfs-dkmsAUR zfs-utilsAUR OpenZFS port
  • Btrfs またの名を "Better FS" — Btrfs は新しいファイルシステムで Sun/Oracle の ZFS に似たパワフルな機能を備えています。機能としては、スナップショット、マルチディスク・ストライピング、ミラーリング (mdadm を使わないソフトウェア RAID)、チェックサム、増分バックアップ、容量の節約だけでなく優れたパフォーマンスも得られる透過圧縮などがあります。現在 Btrfs はメインラインカーネルにマージされており安定していると考えられています [5]。将来的に Btrfs は全てのメジャーなディストリビューションのインストーラで標準になる GNU/Linux ファイルシステム として期待されています。
  • exFAT — フラッシュドライブに最適化するように Microsoft によって開発されたファイルシステム。NTFS とは違い、exFAT はファイルのために空き領域を事前に割り振ることができません。サイズのわかっているファイルを作成するとき、exFAT はファイルのサイズと完全に等しい物理書き込みを行います。
  • ext2Second Extended Filesystem は成熟した GNU/Linux ファイルシステムであり、非常に安定しています。欠点はジャーナリング(下で説明)と書き込みバリアをサポートしていないことです。ジャーナリングがないために電源を喪失したりクラッシュしたときにデータが消えてしまうことがあります。また root (/) や /home で使うとファイルシステムのチェックに長い時間がかかってしまいます。ext2 ファイルシステムは ext3 に変換可能です。
  • ext3Third Extended Filesystem は言うなればジャーナリングと書き込みバリアをサポートした ext2 です。ext2 と後方互換性があり、よくテストされていて、非常に安定しています。
  • ext4Fourth Extended Filesystem は比較的新しいファイルシステムで、ext2 や ext3 と互換性があります。1エクサバイト(つまり1,048,576テラバイト)までのボリュームサイズと16テラバイトまでのファイルサイズをサポートしています。ext3 に比べサブディレクトリの限界が増え、64,000まで保持できます。オンラインでのデフラグも可能です。
  • F2FSFlash-Friendly File System は Samsung の従業員 Kim Jaegeuk (ハングル: 김재극) によって作成された、Linux オペレーティングシステムカーネル向けのフラッシュファイルシステムです。携帯端末からサーバーまで幅広く使われている、NAND 型フラッシュメモリのストレージデバイス (SSD, eMMC, SD カードなど) の特性を考慮するファイルシステムという視点から F2FS は作成されました。
  • HFSHierarchical File System は Apple Inc. によって開発された Mac OS 用のプロプライエタリなファイルシステムです。
  • JFS — IBM の Journaled File System はジャーナリング機能を持った最初のファイルシステムです。GNU/Linux に移植される前は IBM AIX® OS で長い間開発されていました。JFS は全ての GNU/Linux ファイルシステムの中で使用する CPU リソースが一番少ないです。フォーマット、マウント、ファイルシステムチェック (fsck) は高速です。JFS はデッドラインの I/O スケジューラと連携して全体的に良いパフォーマンスを発揮します。ext シリーズや ReiserFS ほどは広くサポートされていませんが、成熟して安定しています。
  • NILFS2New 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 — スワップパーティションに使われるファイルシステム。
  • VFATVirtual 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つの書き込み命令を使っています: 初めはジャーナルに、次にディスクに行います。ファイルシステムのタイプを選ぶ時はシステムのスピードとデータの安全性のトレードオフを考えて下さい。

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

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

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

  • acd-fuse — Amazon Cloud Drive をマウント。
https://github.com/handyman5/acd_fuse || acdfuse-gitAUR[リンク切れ: アーカイブ: aur-mirror]
  • adbfs-git — Android デバイスのファイルシステムをマウント。
http://collectskin.com/adbfs/ || adbfs-gitAUR
  • cddfs — オーディオ CD をマウント。
http://castet.matthieu.free.fr/ || cddfsAUR[リンク切れ: アーカイブ: aur-mirror]
  • EncFS — ユーザー空間のスタック暗号化ファイルシステム。
https://vgough.github.io/encfs/ || encfs
  • fuseiso — ISO を通常ユーザーでマウント。
https://sourceforge.net/projects/fuseiso/ || fuseiso
  • gitfs — git と完全に統合された FUSE ファイルシステム。
https://www.presslabs.com/gitfs/ || gitfsAUR
  • vdfuse — VirtualBox のディスクイメージ (VDI/VMDK/VHD) をマウント。
https://github.com/muflone/virtualbox-includes || vdfuseAUR
  • wiifuse — Gamecube や Wii の DVD ディスクイメージを読み取り専用でマウント。
http://wiibrew.org/wiki/Wiifuse || wiifuseAUR[リンク切れ: アーカイブ: aur-mirror]
  • xbfuse-git — Xbox (360) の ISO をマウント。
http://multimedia.cx/xbfuse/ || xbfuse-gitAUR
  • xmlfs — XML ファイルをディレクトリツリーとしてマウント。
https://github.com/halhen/xmlfs || xmlfsAUR

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


Stackable ファイルシステム

  • aufs — FUSE ベースの union ファイルシステムである Advanced Multi-layered Unification Filesystem は、Unionfs を完全に書き直したものですが、Linux メインラインから拒絶され、代わりに OverlayFS が Linux カーネルにマージされました。
linux-aufsAUR || パッケージが存在しないか AUR で検索
  • eCryptfs — Enterprise Cryptographic Filesystem は Linux 用のディスク暗号化ソフトウェアのパッケージです。これは POSIX 準拠のファイルシステムレベルの暗号化レイヤとして実装され、オペレーティングシステムレベルで GnuPG と同様の機能を提供することを目的としています。
http://ecryptfs.org || ecryptfs-utils
  • mergerfs — FUSE ベースの union ファイルシステムです。
mergerfsAUR || パッケージが存在しないか AUR で検索
  • mhddfs — FUSE ベースの union ファイルシステムである Multi-HDD FUSE ファイルシステム。
http://mhddfs.uvw.ru || mhddfsAUR
  • overlayfs — OverlayFS は Linux 用のファイルシステムサービスで、他のファイルシステムの union マウントを実装しています。
https://www.kernel.org/doc/html/latest/filesystems/overlayfs.html || linux
  • Unionfs — Unionfs は Linux, FreeBSD, NetBSD 用のファイルシステムサービスで,他のファイルシステムの共用マウントを実装しています。
http://unionfs.filesystems.org/ || パッケージが存在しないか AUR で検索
  • unionfs-fuse — ユーザースペース Unionfs の実装。
https://github.com/rpodgorny/unionfs-fuse || unionfs-fuse

Read-only ファイルシステム

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

Clustered file systems

  • Ceph — Unified, distributed storage system designed for excellent performance, reliability and scalability.
https://ceph.com/ || ceph
  • GlusterFS — Cluster file system capable of scaling to several peta-bytes.
https://www.gluster.org/ || glusterfs
  • IPFS — A peer-to-peer hypermedia protocol to make the web faster, safer, and more open. IPFS aims replace HTTP and build a better web for all of us. Uses blocks to store parts of a file, each network node stores only content it is interested, provides deduplication, distribution, scalable system limited only by users. (currently in alpha)
https://ipfs.io/ || go-ipfs
  • MooseFS — MooseFS is a fault tolerant, highly available and high performance scale-out network distributed file system.
https://moosefs.com || moosefs
  • OpenAFS — Open source implementation of the AFS distributed file system
http://www.openafs.org || openafsAUR
  • OrangeFS — OrangeFS is a scale-out network file system designed for transparently accessing multi-server-based disk storage, in parallel. Has optimized MPI-IO support for parallel and distributed applications. Simplifies the use of parallel storage not only for Linux clients, but also for Windows, Hadoop, and WebDAV. POSIX-compatible. Part of Linux kernel since version 4.6.
http://www.orangefs.org/ || パッケージが存在しないか AUR で検索
  • Sheepdog — Distributed object storage system for volume and container services and manages the disks and nodes intelligently.
https://sheepdog.github.io/sheepdog/ || sheepdogAUR
  • Tahoe-LAFS — Tahoe Least-Authority Filesystem is a free and open, secure, decentralized, fault-tolerant, peer-to-peer distributed data store and distributed file system.
https://tahoe-lafs.org/ || tahoe-lafsAUR

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

既存のファイルシステムを特定するには、lsblk を使用します。

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

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

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

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

ノート: ファイルシステムは、スーパーフロッピー または partitionlessdisk と呼ばれるディスクに直接書き込むことができます。この方法には、特に booting がそのようなドライブからのものである場合に特定の制限があります。例については、 Btrfs#Partitionless Btrfsdisk を参照してください。
警告:
  • 新しいファイルシステムを作成した後、このパーティションに以前に保存されたデータが復元される可能性はほとんどありません。 保持したいデータのバックアップのみを作成してください
  • 特定のパーティションの目的により、ファイルシステムの選択が制限される場合があります。たとえば、 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

マウントされたばかりのファイルシステムを見つけるには、#List Mountedfilesystems を参照してください。

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

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

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

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

デバイスのフォーマット

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

要件

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

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

$ lsblk

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

# mount /dev/sdxY /some/directory

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

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

パーティションテーブルを書き換えて下さい。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

参照