「ファイルシステム」の版間の差分
(→ファイルシステムを作成 する: セクション名を変更) |
細 (リンクを修正) |
||
13行目: | 13行目: | ||
{{Related|fstab}} |
{{Related|fstab}} |
||
{{Related|アプリケーション一覧#マウントツール}} |
{{Related|アプリケーション一覧#マウントツール}} |
||
− | {{Related|QEMU# |
+ | {{Related|QEMU#raw イメージからパーティションをマウントする}} |
{{Related|udev}} |
{{Related|udev}} |
||
{{Related|udisks}} |
{{Related|udisks}} |
2022年9月14日 (水) 13:10時点における版
関連記事
Wikipedia より:
- "ファイルシステムは、コンピュータのリソースを操作するための、オペレーティングシステム (OS) が持つ機能の一つ。ファイルとは、主に補助記憶装置に格納されたデータを指すが、デバイスやプロセス、カーネル内の情報といったものもファイルとして提供するファイルシステムもある。
- より正確に定義すれば、ファイルシステムは抽象データ型の集まりであり、ストレージ、階層構造、データの操作/アクセス/検索のために実装されたものである。ファイルシステムを特殊用途のデータベース管理システム (DBMS) と見なせるかどうかは議論があるが、ファイルシステムとデータベース管理システムには多くの共通点がある。 "
個々のドライブパーティションに、多くのファイルシステムのなかから1つを設定することができます。ファイルシステムはそれぞれにメリット、デメリット、特徴があります。ここではサポートされているファイルシステムの概要を記述します。より多くの情報を見るには Wikipedia へのリンクを辿って下さい。
目次
ファイルシステムのタイプ
一般的な概要については、filesystems(5) を、詳細な機能の比較については Wikipedia:Comparison of file systems を参照してください。カーネルでサポートされているファイルシステムは /proc/filesystems
に記載されています。
ファイルシステム | 作成コマンド | ユーザースペースユーティリティ | 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 ファイルシステム |
exFAT | mkfs.exfat(8) | exfatprogs | No | Linux5.4 のネイティブファイルシステム [4] | |
mkexfatfs(8) | exfat-utils | Yes | N/A (FUSE-based) | ||
F2FS | mkfs.f2fs(8) | f2fs-tools | Yes | f2fs.html | Flash ベースデバイス |
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 ファイルシステム |
HFS+ | mkfs.hfsplus(8) | hfsprogsAUR | No | hfsplus.html | macOS (8–10.12) ファイルシステム |
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 ファイルシステム |
ReiserFS | mkfs.reiserfs(8) | reiserfsprogs | Yes | ||
UDF | mkfs.udf(8) | udftools | Optional | udf.html | |
XFS | mkfs.xfs(8) | xfsprogs | Yes |
xfs.txt |
ファイルシステム | 作成コマンド | カーネルパッチセット | ユーザースペースユーティリティ | メモ |
---|---|---|---|---|
APFS | mkapfs(8) | linux-apfs-dkms-gitAUR | apfsprogs-gitAUR | macOS (10.13以降) デフォルトファイルシステム 読み取り専用。 |
Bcachefs | bcachefs(8) | linux-bcachefs-gitAUR | bcachefs-tools-gitAUR | |
Reiser4 | mkfs.reiser4(8) | reiser4progsAUR | ||
ZFS | zfs-linuxAUR, zfs-dkmsAUR | zfs-utilsAUR | OpenZFS ZFS のオープンソース実装 |
ジャーナリング
exFAT, ext2, FAT16/32, Reiser4 (オプション), Btrfs, ZFS を除く上記のすべてのファイルシステムは ジャーナリング を使用しています。ジャーナリングは、ファイルシステムにコミットする前に変更を記録することで、障害からの回復力を提供します。システムクラッシュや停電の際、このようなファイルシステムはオンラインに戻すのが速く、破損する可能性も低くなります。ロギングはファイルシステムの専用領域で行われます。
すべてのジャーナリング技術が同じというわけではありません。Ext3 と ext4 はデータモード・ジャーナリングを提供し、データとメタデータの両方を記録し、メタデータの変更だけを記録することもできます。データモード・ジャーナリングにはスピードのペナルティがあり、デフォルトでは有効になっていません。同じように、Reiser4 はいわゆる"トランザクションモデル"を提供します。これは提供する機能だけでなくジャーナリングモードも変更します。wandering logs と呼ばれる特別なモデルでディスクに二度書きする必要がありません。write-anywhere (btrfs のデフォルトとほぼ同じですが根本的に異なる "tree" デザイン) と hybrid という複合アプローチでは前者の2つをヒューリスティックに交互に使用することができます。
他のファイルシステムは ordered-mode のジャーナリングを提供し、メタデータのみをログに記録します。全てのジャーナリングはクラッシュの後にファイルシステムを有効な状態に戻しますが、データモード・ジャーナリングは破損やデータ損失に対して最大の防御を提供します。しかし、データモード・ジャーナリングはジャーナルとディスクの2つの書き込みを行うため、システムのパフォーマンスは低下します(Reiser4 は "wandering logs" 機能でこれを回避しています。)システムスピードとデータの安全性のトレードオフはファイルシステムタイプを選択する際に考慮されるべきです。Reiser4 は設計上、完全な atomicity で動作し、メタデータとインラインデータの両方にチェックサムを提供する唯一のファイルシステムです(操作が半分発生していてもデータが破損または破壊されない)、したがって設計上、他のファイルシステム Btrfs などに比べてデータ損失の可能性は非常に低くなっています。
Reiser4、Btrfs、ZFS などのコピーオンライト(write-anywhere としても知られている)に基づくファイルシステムは、その場で更新されることがないため、メタデータを保護するために従来のジャーナルを使う必要はない。Btrfs はまだジャーナル的なログツリーを持っていますが、それは fdatasync/fsync を高速化するためだけに使われます。
- Btrfs またの名を "Better FS" — Btrfs は新しいファイルシステムで Sun/Oracle の ZFS に似たパワフルな機能を備えています。機能としては、スナップショット、マルチディスク・ストライピング、ミラーリング (mdadm を使わないソフトウェア RAID)、チェックサム、増分バックアップ、容量の節約だけでなく優れたパフォーマンスも得られる透過圧縮などがあります。現在 Btrfs はメインラインカーネルにマージされており安定していると考えられています [5]。将来的に 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 は作成されました。
- HFS — Hierarchical 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 ほどは広くサポートされていませんが、成熟して安定しています。
- 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 — スワップパーティションに使われるファイルシステム。
- VFAT — Virtual File Allocation Table は技術的にシンプルであり事実上全てのオペレーティングシステムでサポートされています。異なる OS 間でデータを共有するためにメモリーカードなどで利用されます。VFAT は長いファイル名をサポートしています。
- XFS — 最古のジャーナリングファイルシステムの一つで、Silicon Graphics によって IRIX OS 向けに開発され、その後 GNU/Linux に移植されました。大きなファイルやファイルシステムを扱うのに速いパフォーマンスを発揮し、フォーマットやマウントも高速です。比較ベンチマークテストによると多数の小さいファイルを速く扱うのは苦手です。XFS は成熟していてオンライン・デフラグもできます。
- ZFS — Sun Microsystems によって設計された統合ファイルシステム・論理ボリュームマネージャ。ZFS の機能としては、データ破損からの保護、ファイルシステムとボリューム管理の統合、スナップショット、コピーオンライト (COW) クローン、継続的な整合性チェック、自動修復、RAID-Z、ネイティブの NFSv4 ACLs などがあります。
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 デバイスのファイルシステムをマウント。
- cddfs — オーディオ CD をマウント。
- http://castet.matthieu.free.fr/ || cddfsAUR[リンク切れ: アーカイブ: aur-mirror]
- EncFS — ユーザー空間のスタック暗号化ファイルシステム。
- fuseiso — ISO を通常ユーザーでマウント。
- gitfs — git と完全に統合された FUSE ファイルシステム。
- vdfuse — VirtualBox のディスクイメージ (VDI/VMDK/VHD) をマウント。
- wiifuse — Gamecube や Wii の DVD ディスクイメージを読み取り専用でマウント。
- http://wiibrew.org/wiki/Wiifuse || wiifuseAUR[リンク切れ: アーカイブ: aur-mirror]
- xbfuse-git — Xbox (360) の ISO をマウント。
- xmlfs — XML ファイルをディレクトリツリーとしてマウント。
FUSE 利用例 も参照。
Stackable ファイルシステム
- aufs — FUSE ベースの union ファイルシステムである Advanced Multi-layered Unification Filesystem は、Unionfs を完全に書き直したものですが、Linux メインラインから拒絶され、代わりに OverlayFS が Linux カーネルにマージされました。
- 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 — Unionfs は Linux, FreeBSD, NetBSD 用のファイルシステムサービスで,他のファイルシステムの共用マウントを実装しています。
- http://unionfs.filesystems.org/ || パッケージが存在しないか AUR で検索
- unionfs-fuse — ユーザースペース Unionfs の実装。
Read-only ファイルシステム
- EROFS — Enhanced Read-Only File System は、パフォーマンスの向上とストレージ容量の圧縮を目的とした軽量の読み取り専用ファイルシステムです。
- SquashFS — SquashFS は、読み取り専用の圧縮ファイルシステムです。SquashFS はファイル、inodes、ディレクトリーを圧縮し、さらに大きな圧縮のために最大 1MB のブロック・サイズをサポートします。
クラスタ化ファイルシステム
- Ceph — 優れたパフォーマンス、信頼性、拡張性を実現するように設計された、統合された分散ストレージシステム。
- GlusterFS — 数ペタバイトまで拡張可能なクラスタファイルシステム。
- IPFS — Web を高速化、安全化、およびオープン化するためのピアツーピアハイパーメディアプロトコル。IPFS は HTTP に取って代わり、私たち全員のためにより良いウェブを構築することを目指しています。ブロックを使用してファイルの一部を保存し、各ネットワーク・ノードは関心のあるコンテンツのみを保存し、重複除外、分散、拡張性の高いシステムをユーザーのみに制限 (現在はアルファ版)
- MooseFS — MooseFS は、耐障害性で可用性が高い、高性能なスケールアウトネットワーク分散ファイルシステムです。
- OpenAFS — AFS 分散ファイル・システムのオープン・ソース実装
- OrangeFS — OrangeFS は、マルチサーバ・ベースのディスク・ストレージに透過的に並列アクセスするために設計されたスケール・アウト・ネットワーク・ファイル・システムです。並列および分散アプリケーション向けに最適化された MPI-IO のサポート。Linux クライアントだけでなく、Windows、Hadoop、WebDAV 用の並列ストレージの使用を簡素化します。POSIX 互換です。バージョン4.6以降のLinux カーネルに含まれます。
- http://www.orangefs.org/ || パッケージが存在しないか AUR で検索
- Sheepdog — ボリュームおよびコンテナサービス用の分散オブジェクトストレージシステムで、ディスクとノードをインテリジェントに管理します。
- Tahoe-LAFS — TahoeLeastAuthority ファイルシステムは、フリーでオープン、安全、分散、耐障害性、ピアツーピア分散データストアおよび分散ファイルシステムです。
共有ディスクファイルシステム
- 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
マウントされたばかりのファイルシステムを見つけるには、#List Mountedfilesystems を参照してください。
新しいファイルシステムを作成するには、 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 がつけたデバイスの名前を知る必要があります。ハードドライブや 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 のフロントエンド。
- gnome-disk-utility — GNOME のディスク管理ユーティリティ。
- KDE Partition Manager — ディスク・パーティション・ファイルシステムの管理ができる KDE のユーティリティ。