fstab

提供: ArchWiki
2025年3月6日 (木) 06:32時点におけるKgx (トーク | 投稿記録)による版 (→‎atime オプション: 同期)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

fstab(5) ファイルは、ディスクパーティションや様々なブロックデバイス、リモートファイルシステムをどうやってファイルシステムにマウントするかを記述します。

ファイルシステムは一行毎に記述されます。書かれている定義は、起動時やシステムマネージャの設定がリロードされたときに systemd の mount ユニットに動的に変換されます。デフォルトの設定では、マウントを必要とするサービスが起動する前にファイルシステムの fsck とマウントを自動的に実行します。例えば、NFSSamba などのリモートファイルシステムはネットワークが立ち上がった後に systemd によって自動的にマウントされます。そのため、/etc/fstab に指定するローカル・リモートファイルシステムのマウントに設定は必要ありません。詳しくは systemd.mount(5) を見て下さい。

mount コマンドはディレクトリやデバイスがひとつだけ指定された場合、他のパラメータの値を取得するために fstab を使います。このとき、fstab に記述されたマウントオプションも使われます。

使用法

以下は、ファイルシステムの UUID を使用した /etc/fstab の例です:

/etc/fstab
# <device>                                <dir> <type> <options>                                        <dump> <fsck>
UUID=0a3407de-014b-458b-b5c1-848e92a327a3 /     ext4 defaults                                           0      1
UUID=CBB6-24F2                            /boot vfat defaults,nodev,nosuid,noexec,fmask=0177,dmask=0077 0      2
UUID=f9fe0b69-a280-415d-a03a-a32752370dee none  swap defaults                                           0      0
UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults                                           0      2
  • <device> には、マウントされるべきブロック特殊デバイスやリモートファイルシステムを記述します。#ファイルシステムの識別 を見てください。
  • <dir> には、マウントディレクトリを記述します。
  • <type> ファイルシステムの種類。
  • <options> 関連するマウントオプション。mount(8) § FILESYSTEM-INDEPENDENT MOUNT OPTIONSext4(5) § Mount options for ext4 を見てください。
  • <dump>dump(8) ユーティリティによってチェックされます。このフィールドは通常 0 にセットします。0 はチェックを無効化します。
  • <fsck> は、起動時にチェックするファイルシステムの順番を設定します。fsck(8) を見てください。ルートファイルシステムには 1 を設定するべきです。他のパーティションには 2 を設定するか、チェックを無効化する 0 を設定するべきです。
ヒント:
  • タイプ auto は、使用されているファイルシステムの種類をマウントコマンドに推測させます。このオプションは、光学メディア (CD/DVD/Blu-ray) の場合に便利です。
  • ルートファイルシステムが btrfsXFS の場合、fsck の順番は 1 ではなく 0 に設定するべきです。fsck.btrfs(8)fsck.xfs(8) を見てください。

スタートアップ時や、noauto オプションが指定されていないデバイスに対して mount(8) コマンドを -a フラグ付きで実行した時に、/etc/fstab 内で指定されたすべてのデバイスは自動的にマウントされます。リストにあるが存在しないデバイスは、nofail オプションが使用されている場合を除き、エラーとなります。

詳細は fstab(5) § DESCRIPTION を見てください。

ファイルシステムの識別

/etc/fstab でファイルシステムを識別する方法がいくつか存在します: カーネルの名前記述子、ファイルシステムのラベルや UUID、GPT パーティションのラベルや UUID です。カーネルの名前記述子は使用すべきではありません。ラベルよりも UUID や PARTUUID を優先して使用すべきです。詳細は 永続的なブロックデバイスの命名 を見てください。この記事を読み進める前に、その記事を先に読むことをおすすめします。

このセクションでは、ファイルシステムをマウントするいくつかの方法を例を通して説明します。以下の例で使用されるコマンド lsblk -fblkid の出力は、永続的なブロックデバイスの命名 で見られます。

カーネルの名前記述子

lsblk -f を実行してパーティションの一覧を出力し、NAME 列の値の前に /dev/ を付け加えてください。

/etc/fstab
# <device <dir> <type> <options>                                          <dump> <fsck>
/dev/sda2 /     ext4   defaults                                           0      1
/dev/sda1 /boot vfat   defaults,nodev,nosuid,noexec,fmask=0177,dmask=0077 0      2
/dev/sda3 /home ext4   defaults                                           0      2
/dev/sda4 none  swap   defaults                                           0      0
警告: ブロックデバイスのカーネル名記述子永続的 ではなく、ブートごとに変更される可能性があるため、設定ファイル (/etc/fstab を含む) で使用しないでください。

ファイルシステムラベル

lsblk -f を実行してパーティションの一覧を出力し、LABEL 列の値の前に LABEL= を付け加えてください。あるいは、blkid を実行し、LABEL の値を引用符無しで使ってください:

/etc/fstab
# <device>   <dir> <type> <options>                                          <dump> <fsck>
LABEL=System /     ext4   defaults                                           0      1
LABEL=ESP    /boot vfat   defaults,nodev,nosuid,noexec,fmask=0177,dmask=0077 0      2
LABEL=Data   /home ext4   defaults                                           0      2
LABEL=Swap   none  swap   defaults                                           0      0
ノート: 任意のフィールドにスペースが含まれる場合、#ファイルパスのスペース を見てください。

ファイルシステム UUID

lsblk -f を実行してパーティションの一覧を出力し、UUID 列の値の前に UUID= を付け加えてください。あるいは、blkid を実行し、UUID の値を引用符無しで使ってください:

/etc/fstab
# <device>                                <dir> <type> <options>                                        <dump> <fsck>
UUID=0a3407de-014b-458b-b5c1-848e92a327a3 /     ext4 defaults                                           0      1
UUID=CBB6-24F2                            /boot vfat defaults,nodev,nosuid,noexec,fmask=0177,dmask=0077 0      2
UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults                                           0      2
UUID=f9fe0b69-a280-415d-a03a-a32752370dee none  swap defaults                                           0      0

GPT パーティションラベル

blkid を実行してパーティションの一覧を出力し、PARTLABEL の値を引用符無しで使ってください:

/etc/fstab
# <device>                           <dir> <type> <options>                                        <dump> <fsck>
PARTLABEL=GNU/Linux                  /     ext4 defaults                                           0      1
PARTLABEL=EFI\040system\040partition /boot vfat defaults,nodev,nosuid,noexec,fmask=0177,dmask=0077 0      2
PARTLABEL=Home                       /home ext4 defaults                                           0      2
PARTLABEL=Swap                       none  swap defaults                                           0      0
ノート: 任意のフィールドにスペースが含まれる場合、#ファイルパスのスペース を見てください。

GPT パーティション UUID

blkid を実行してパーティションの一覧を出力し、PARTUUID の値を引用符無しで使ってください:

/etc/fstab
# <device>                                    <dir> <type> <options>                                        <dump> <fsck>
PARTUUID=98a81274-10f7-40db-872a-03df048df366 /     ext4 defaults                                           0      1
PARTUUID=d0d0d110-0a71-4ed6-936a-304969ea36af /boot vfat defaults,nodev,nosuid,noexec,fmask=0177,dmask=0077 0      2
PARTUUID=7280201c-fc5d-40f2-a9b2-466611d3d49e /home ext4 defaults                                           0      2
PARTUUID=039b6c1c-7553-4455-9537-1befbc9fbc5b none  swap defaults                                           0      0

ヒントとテクニック

systemd による自動マウント

systemd のすべてのマウントオプションは systemd.mount(5) を見てください。

ローカルパーティション

巨大なパーティションが存在する場合、fsck によってそのパーティションがチェックされている間に、そのパーティションに依存しないサービスを起動できるようにすると効率が良くなるかもしれません。パーティションの /etc/fstab エントリに以下のオプションを追加することでそのように設定できます:

x-systemd.automount

そのパーティションに最初にアクセスしたときに fsck とマウントを行うようになり、パーティションの準備ができるまでカーネルがそのパーティションへのファイルアクセスを全てバッファします。 この方法は、巨大な /home パーティションがある場合などに適用できます。

ノート: この設定はファイルシステムのタイプを autofs にします。これは mlocate によってデフォルトで無視されます。

リモートファイルシステム

同じ設定はリモートファイルシステムのマウントにも適用できます。アクセスしたときにだけリモートファイルシステムをマウントしたい場合、x-systemd.automount パラメータを使って下さい。さらに、x-systemd.mount-timeout= オプションを使うことで、マウントコマンドが完了するまでの制限時間を指定できます。また、_netdev オプションで systemd がネットワークに依存するマウントであることを認識してネットワークがオンラインになった後に順番を入れ替えます。

x-systemd.automount,x-systemd.mount-timeout=30,_netdev

暗号化ファイルシステム

キーファイルによって暗号化したファイルシステムがある場合も、noauto パラメータを /etc/crypttab の適当なエントリに追加することができます。設定することで systemd は起動時に暗号化デバイスを開かないようになり、実際にアクセスされたときになってから指定したキーファイルを使ってファイルシステムを開いてマウントします。デバイスが利用可能になるのを systemd が待機しないようになるので、暗号化 RAID デバイスなどを使っている場合、起動時間が数秒間短くなるかもしれません。例:

/etc/crypttab
data /dev/md/MyRAIDArray /etc/cryptsetup-keys.d/data.key noauto

自動アンマウント

x-systemd.idle-timeout フラグを使うことで一定時間アイドル状態のときにタイムアウトするのを指定できます。例:

x-systemd.automount,x-systemd.idle-timeout=1min

上記の設定の場合、1分間操作がないと systemd によってアンマウントされます。

外部デバイス

外部デバイスが存在する時はマウントし、存在しない場合は無視したい場合、nofail オプションが必要です。これにより、起動時にエラーが発生するのを防ぐことができます。例えば:

/etc/fstab
LABEL=MyExternalDrive /media/backup    jfs    nofail,x-systemd.device-timeout=5    0  2

nofail オプションは x-systemd.device-timeout オプションと組み合わせて使うのが最も効果的です。デフォルトのデバイスタイムアウトは 90 秒であるのが理由で、タイムアウトを再設定しなかった場合、nofail だけが指定されている切断済みの外部デバイスのせいで起動時間が 90 秒長くなってしまいます。タイムアウトを 0 にはしないでください。0 は無限に待つことになります。

ファイルパスのスペース

fstab ではスペースがフィールドの区切り文字として使用されているため、フィールド (PARTLABELLABEL、マウントポイント) にスペースが含まれている場合、これらのスペースをエスケープ文字 \ と3桁の8進数 040 に置き換えなければなりません:

/etc/fstab
UUID=47FA-4071         /home/username/Camera\040Pictures   vfat  defaults      0  0
LABEL=Storage\040drive /media/100\040GB\040(Storage)       ext4  defaults,user 0  2

atime オプション

以下は、ドライブのパフォーマンスに影響を与える可能性のあるアクセス時間オプションです。

  • strictatime オプションは、ファイルがアクセスされるたびにファイルのアクセス時間を更新します。これは、Linux がサーバーで使用される場合に特に有効です。デスクトップでの使用にはあまり価値がありません。strictatime オプションの欠点は、ページキャッシュからファイルを読み取る(ドライブではなくメモリから読み取る)場合でも、書き込みが発生することです。
  • noatime オプションは、ファイルを読み取るたびにファイルアクセス時間をドライブに書き込むことを完全に無効にします。これは、最後に変更されてからファイルが読み取られたかどうかを知る必要があるアプリケーションを除き、ほぼすべてのアプリケーションでうまく機能します。このオプションが有効になっている場合、ファイルへの書き込み時間情報は、ファイルが書き込まれるたびに引き続き更新されます。
  • nodiratime オプションは、ディレクトリに対してのみファイルアクセス時間の書き込みを無効にし、他のファイルは引き続きアクセス時間が書き込まれます。
    ノート: noatimenodiratime を含みます。両方を指定する必要はありません。
  • relatime は、以前のアクセス時間が現在の変更または変更時間よりも前の場合にのみアクセス時間を更新します。さらに、Linux 2.6.30以降、以前のアクセス時間が24時間以上前の場合、アクセス時間は常に更新されます。このオプションは、defaults オプション、atime オプション(カーネルのデフォルトである relatime を使用することを意味します。mount(8) および wikipedia:Stat (system call)#Criticism of atime を参照)またはオプションがまったく指定されていない場合に使用されます。

Mutt や、最後に変更されてからファイルが読み取られたかどうかを知る必要がある他のアプリケーションを使用する場合、noatime オプションは使用しないでください。relatime オプションを使用することは許容され、パフォーマンスの向上も提供します。

カーネル4.0以降、別の関連オプションがあります:

  • lazytime は、inode タイムスタンプ(アクセス、変更、作成時間)の変更をメモリ内でのみ保持することにより、ディスクへの書き込みを減らします。オンディスクタイムスタンプは、(1)ファイルタイムスタンプに関係のない変更のためにファイルinodeを更新する必要がある場合、(2)ディスクへの同期が発生した場合、(3)削除されていない inode がメモリから削除された場合、または(4)メモリ内コピーが最後にディスクに書き込まれてから24時間以上経過した場合にのみ更新されます。
警告: システムがクラッシュした場合、ディスク上のアクセス時間や最終変更日時は最大で24時間ずれる可能性があります。

lazytime オプションは、前述の *atime オプションと "組み合わせて" 機能し、代替として機能しないことに注意してください。つまり、デフォルトでは relatime ですが、プレーンな relatime オプションと同じかそれ以下のディスク書き込みコストで strictatime にすることもできます。

ルートパーティションの再マウント

何らかの理由で誤って ルートパーティションを読み込み専用でマウントしてしまった場合は、次のコマンドで ルートパーティションを再マウントしてください:

# mount -o remount,rw /

GPT パーティションの自動マウント

UEFI/GPT を使用している場合、Discoverable Partitions Specification に従ってパーティショニングすることで、特定のパーティションを /etc/fstab から省略することができ、systemd-gpt-auto-generator(8) を使ってそのパーティションをマウントすることができます。systemd#GPT パーティションの自動マウント を見てください。

ルートボリュームのカスタムマウントオプションを指定するには、/dev/gpt-auto-root をデバイス名として使用します:

/etc/fstab
/dev/gpt-auto-root  /  ext4  defaults,noatime  0  1

バインドマウント

bind オプションにより、ディレクトリをリンクさせることができます:

/etc/fstab
# <device>                             <dir>                         <type> <options>     <dump> <fsck>
UUID=94649E22649E06E0                  /media/user/OS/               ntfs    defaults,rw,errors=remount-ro  0  0
/media/user/OS/Users/user/Music/       /home/user/Music/             none    defaults,bind 0   0
/media/user/OS/Users/user/Pictures/    /home/user/Pictures/          none    defaults,bind 0   0
/media/user/OS/Users/user/Videos/      /home/user/Videos/            none    defaults,bind 0   0
/media/user/OS/Users/user/Downloads/   /home/user/Downloads/         none    defaults,bind 0   0
/media/user/OS/Users/user/Documents/   /home/user/Documents/         none    defaults,bind 0   0
/media/user/OS/Users/user/projects/    /home/user/projects/windows/  none    defaults,bind 0   0

詳細は mount(8) § Bind mount operation を見てください。

genfstab を使用して fstab を自動的に生成する

genfstab ツールを使用して fstab ファイルを作成できます。詳細については、genfstab を参照してください。

GUI ユーティリティ

以下は、マウントポイントを変更する際に用いることのできるプログラムのリストです。Fstab で利用できる機能のうち一部は実装されていないかもしれませんが、最も利用される機能はすべて実装されており、作業がうんと楽になるかもしれません:

  • GNOME Disks — ストレージデバイスを管理するための GNOME ユーティリティ。
https://apps.gnome.org/DiskUtility/ || gnome-disk-utility
  • KDE Partition Manager — コンピュータ上のディスク、パーティション、ファイルシステムの管理を補助するユーティリティ。
https://apps.kde.org/partitionmanager/ || partitionmanager

ユーザーのパーミッションと所有者を変更する

あるドライブのマウントをすべてのユーザーに許可したい場合、以下のマウントポイントオプションを fstab エントリに追加することを検討してください。

ノート: これは、ファイルのパーミッション機能が無いファイルシステムに対しても用いられます。この場合、ドライブ全体の所有者とパーミッションは、そのドライブをマウントしたユーザーに設定されます。
  • users - 全てのユーザーは、(たとえ他の通常ユーザーがそのドライブをマウントしていたとしても) 対象のファイルシステムをマウント/アンマウントできるようになります。このオプションは、noexec、nosuid、nodev オプションも暗黙的に設定します (ただし、後続のオプションによって上書きされない限り。例えば、users,exec,dev,suid)。これを有効化するには users をマウントオプションに追加してください。
  • user - 任意の通常ユーザーに対象のファイルシステムのマウントを許可します。ただし、同じユーザーしかそのファイルシステムをアンマウントできません。このオプションは、noexec、nosuid、nodev オプションも暗黙的に設定します (ただし、後続のオプションによって上書きされない限り。例えば、users,exec,dev,suid)。これを有効化するには user をマウントオプションに追加してください。

FAT や exFAT のようにファイルのパーミッションが実装されていないファイルシステムの場合は、ドライブ全体及び保存されているファイルに対してユーザーとグループを明示的に設定することができます。特定のユーザーの ID は /etc/passwd で調べられます。UID は passwd エントリの3番目、GID は4番目です。

  • uid - ドライブの所有者 ID を設定します
  • gid - ドライブのグループ ID を設定します

Ext4 や brtfs などパーミッション機能を持つファイルシステムの場合は、(ドライブをマウントしたユーザー以外の) 他のユーザーはドライブにアクセスできないかもしれません。/path/to/drive/ のパーみションを確認し、必要に応じてパーミッションを変更してください。

参照

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