「Fstab」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://lwn.net/」を「https://lwn.net/」に置換) |
Kusanaginoturugi (トーク | 投稿記録) (校正(でき・出来)) |
||
(6人の利用者による、間の28版が非表示) | |||
2行目: | 2行目: | ||
[[Category:ファイルシステム]] |
[[Category:ファイルシステム]] |
||
[[Category:ブートプロセス]] |
[[Category:ブートプロセス]] |
||
+ | [[de:Fstab]] |
||
[[en:Fstab]] |
[[en:Fstab]] |
||
[[es:Fstab]] |
[[es:Fstab]] |
||
− | [[ |
+ | [[fr:Fstab]] |
[[it:Fstab]] |
[[it:Fstab]] |
||
− | [[ |
+ | [[pt:Fstab]] |
[[ru:Fstab]] |
[[ru:Fstab]] |
||
[[zh-hans:Fstab]] |
[[zh-hans:Fstab]] |
||
− | [[zh-hant:Fstab]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|永続的なブロックデバイスの命名}} |
{{Related|永続的なブロックデバイスの命名}} |
||
{{Related|ファイルシステム}} |
{{Related|ファイルシステム}} |
||
− | {{Related|マウント}} |
||
{{Related|tmpfs}} |
{{Related|tmpfs}} |
||
{{Related|スワップ}} |
{{Related|スワップ}} |
||
+ | {{Related|genfstab}} |
||
+ | {{Related|genfstab}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | + | {{man|5|fstab}} ファイルは、ディスクパーティションや様々なブロックデバイス、リモートファイルシステムをどうやってファイルシステムにマウントするかを記述します。 |
|
− | ファイルシステムは一行毎に記述されます。書かれている定義は、起動時やシステムマネージャの設定がリロードされたときに [[systemd]] の mount ユニットに動的に変換されます。デフォルトの設定はマウントを必要とするサービスが起動する前にファイルシステムの fsck とマウントを自動的に実行します。例えば、[[NFS]] や [[Samba]] などのリモートファイルシステムはネットワークが立ち上がった後に systemd によって自動的にマウントされます。そのため、{{ic|/etc/fstab}} に指定するローカル・リモートファイルシステムのマウントに設定は必要ありません。詳しくは {{man|5|systemd.mount}} を見て下さい。 |
+ | ファイルシステムは一行毎に記述されます。書かれている定義は、起動時やシステムマネージャの設定がリロードされたときに [[systemd]] の mount ユニットに動的に変換されます。デフォルトの設定では、マウントを必要とするサービスが起動する前にファイルシステムの [[fsck]] とマウントを自動的に実行します。例えば、[[NFS]] や [[Samba]] などのリモートファイルシステムはネットワークが立ち上がった後に systemd によって自動的にマウントされます。そのため、{{ic|/etc/fstab}} に指定するローカル・リモートファイルシステムのマウントに設定は必要ありません。詳しくは {{man|5|systemd.mount}} を見て下さい。 |
{{ic|mount}} コマンドはディレクトリやデバイスがひとつだけ指定された場合、他のパラメータの値を取得するために fstab を使います。このとき、fstab に記述されたマウントオプションも使われます。 |
{{ic|mount}} コマンドはディレクトリやデバイスがひとつだけ指定された場合、他のパラメータの値を取得するために fstab を使います。このとき、fstab に記述されたマウントオプションも使われます。 |
||
− | == |
+ | == 使用法 == |
− | + | 以下は、ファイルシステムの UUID を使用した {{ic|/etc/fstab}} の例です: |
|
− | {{hc|/etc/fstab| |
+ | {{hc|/etc/fstab|2= |
− | # < |
+ | # <device> <dir> <type> <options> <dump> <fsck> |
+ | UUID=0a3407de-014b-458b-b5c1-848e92a327a3 / ext4 defaults 0 1 |
||
+ | UUID=f9fe0b69-a280-415d-a03a-a32752370dee none swap defaults 0 0 |
||
+ | UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults 0 2 |
||
+ | }} |
||
+ | * {{ic|<device>}} には、マウントされるべきブロック特殊デバイスやリモートファイルシステムを記述します。[[#ファイルシステムの識別]] を見てください。 |
||
− | /dev/sda1 / ext4 defaults,noatime 0 1 |
||
+ | * {{ic|<dir>}} には、[[マウント]]ディレクトリを記述します。 |
||
− | /dev/sda2 none swap defaults 0 0 |
||
+ | * {{ic|<type>}} [[ファイルシステム]]の種類。 |
||
− | /dev/sda3 /home ext4 defaults,noatime 0 2}} |
||
+ | * {{ic|<options>}} 関連するマウントオプション。{{man|8|mount|FILESYSTEM-INDEPENDENT MOUNT OPTIONS}} と {{man|5|ext4|Mount options for ext4}} を見てください。 |
||
+ | * {{ic|<dump>}} は {{man|8|dump|url=https://linux.die.net/man/8/dump}} ユーティリティによってチェックされます。このフィールドは通常 {{ic|0}} にセットします。{{ic|0}} はチェックを無効化します。 |
||
+ | * {{ic|<fsck>}} は、起動時にチェックするファイルシステムの順番を設定します。{{man|8|fsck}} を見てください。ルートファイルシステムには {{ic|1}} を設定するべきです。他のパーティションには {{ic|2}} を設定するか、チェックを無効化する {{ic|0}} を設定するべきです。 |
||
+ | {{Tip| |
||
− | == フィールドの定義 == |
||
+ | * タイプ {{ic|auto}} は、使用されているファイルシステムの種類をマウントコマンドに推測させます。このオプションは、[[光学ディスクドライブ|光学メディア]] (CD/DVD/Blu-ray) の場合に便利です。 |
||
− | |||
+ | * ルートファイルシステムが [[btrfs]] か [[XFS]] の場合、fsck の順番は {{ic|1}} ではなく {{ic|0}} に設定するべきです。{{man|8|fsck.btrfs}} と {{man|8|fsck.xfs}} を見てください。 |
||
− | {{ic|/etc/fstab}} ファイルには以下のフィールドが含まれ、スペースかタブで区切ります: |
||
+ | }} |
||
− | |||
− | <file system> <dir> <type> <options> <dump> <pass> |
||
− | |||
− | * '''<file system>''' - マウントされるパーティションやストレージデバイス。 |
||
− | * '''<dir>''' - <file system> がマウントされるマウントポイント。 |
||
− | * '''<type>''' - マウントされるパーティションやストレージデバイスのファイルシステムタイプ。さまざまなファイルシステムがサポートされています: {{ic|ext2}}, {{ic|ext3}}, {{ic|ext4}}, {{ic|btrfs}}, {{ic|reiserfs}}, {{ic|xfs}}, {{ic|jfs}}, {{ic|smbfs}}, {{ic|iso9660}}, {{ic|vfat}}, {{ic|ntfs}}, {{ic|swap}}, {{ic|auto}}。{{ic|auto}} タイプはどのファイルシステムタイプが使われているかマウントコマンドに推測させます。これはディスクメディア (CD/DVD) に役立ちます。 |
||
− | * '''<options>''' - 使用されるファイルシステムのマウントオプション。[http://linux.die.net/man/8/mount マウントオプション]にはファイルシステム固有のものもあることに気をつけて下さい。最も一般的なオプションは: |
||
− | |||
− | :* {{ic|auto}} - 起動時、または {{ic|mount -a}} コマンドが実行されたときに自動でマウントします。 |
||
− | :* {{ic|noauto}} - 自動ではマウントしません。 |
||
− | :* {{ic|exec}} - ファイルシステム上のバイナリの実行を許可します。 |
||
− | :* {{ic|noexec}} - ファイルシステム上のバイナリの実行を禁止します。 |
||
− | :* {{ic|ro}} - ファイルシステムを読み込み専用でマウント。 |
||
− | :* {{ic|rw}} - ファイルシステムを読み書き可能でマウント。 |
||
− | :* {{ic|user}} - 全てのユーザーにファイルシステムのマウントを許可します。上書きしないかぎり、自動で {{ic|noexec}}, {{ic|nosuid}}, {{ic|nodev}} も有効になります。 |
||
− | :* {{ic|users}} - ユーザーグループに入っている全てのユーザーにファイルシステムのマウントを許可します。 |
||
− | :* {{ic|nouser}} - root だけにファイルシステムのマウントを許可します。 |
||
− | :* {{ic|owner}} - デバイスの所有者にマウントを許可します。 |
||
− | :* {{ic|sync}} - I/O は同期されます。 |
||
− | :* {{ic|async}} - I/O は非同期で行われます。 |
||
− | :* {{ic|dev}} - ファイルシステム上の特別なデバイスを解釈します。 |
||
− | :* {{ic|nodev}} - ファイルシステム上の特別なデバイスを解釈しない。 |
||
− | :* {{ic|suid}} - suid や sgid ビットの操作を許可します。ほとんどの場合、一時的な権限で特別な作業を行うためにユーザーがバイナリ実行可能ファイルを実行できるようにするため使われます。 |
||
− | :* {{ic|nosuid}} - suid や sgid ビットの操作を禁止します。 |
||
− | :* {{ic|noatime}} - ファイルシステムの inode アクセス日時を更新しません。パフォーマンスの向上に役立ちます ([[#atime オプション]] を見て下さい)。 |
||
− | :* {{ic|nodiratime}} - ファイルシステムのディレクトリの inode アクセス日時を更新しません。パフォーマンスの向上に役立ちます ([[#atime オプション]] を見て下さい)。 |
||
− | :* {{ic|relatime}} - 変更日時にあわせて inode アクセス日時を更新します。以前のアクセス日時が現在の変更日時よりも前のときだけアクセス日時が更新されます (noatime に似ていますが、変更されたあとファイルが読み込まれたか知る必要がある mutt などのアプリケーションを破壊しません)。パフォーマンスの向上に役立ちます ([[#atime オプション]]を見て下さい)。 |
||
− | :* {{ic|discard}} - ブロックがフリーになったときにブロックデバイスに [[SSD#TRIM|TRIM]] コマンドを実行します。ファイルシステムが [[SSD]] 上にあるときは使うことが推奨されています。 |
||
− | :* {{ic|flush}} - データを頻繁にフラッシュする {{ic|vfat}} のオプション。全てのデータが書き込まれるまではコピーダイアログやプログレスバーは止まったままになります。 |
||
− | :* {{ic|nofail}} - 存在するときはデバイスをマウントし、存在しないときは無視します。起動時にリムーバブルメディアのエラーが報告されるのを防止します。 |
||
− | :* {{ic|defaults}} - 使われるファイルシステムのデフォルトのマウントオプション。{{ic|ext4}} のデフォルトのオプションは: {{ic|rw}}, {{ic|suid}}, {{ic|dev}}, {{ic|exec}}, {{ic|auto}}, {{ic|nouser}}, {{ic|async}}。 |
||
+ | スタートアップ時や、{{ic|noauto}} オプションが指定されていないデバイスに対して {{man|8|mount}} コマンドを {{ic|-a}} フラグ付きで実行した時に、{{ic|/etc/fstab}} 内で指定されたすべてのデバイスは自動的にマウントされます。リストにあるが存在しないデバイスは、{{ic|nofail}} オプションが使用されている場合を除き、エラーとなります。 |
||
− | * '''<dump>''' - バックアップを作る時を決定するために dump ユーティリティによって使われます。Dump はエントリをチェックしその値を使ってファイルシステムがバックアップされるべきかどうか決定します。指定できるエントリは0か1です。0の場合、dumpはファイルシステムを無視します; 1の場合、dump はバックアップを作成します。ほとんどのユーザーは dump をインストールしないので、<dump> エントリには0を入れて下さい。 |
||
+ | 詳細は {{man|5|fstab|DESCRIPTION}} を見てください。 |
||
− | * '''<pass>''' - ファイルシステムをチェックする順番を決めるために [[fsck]] によって使われます。指定できるエントリは0か1、もしくは2です。root ファイルシステムには一番優先度の高い1を設定してください ([[btrfs]] の場合は、このフィールドは0にするべきです) - その他のファイルシステムには2を入れて下さい。0のファイルシステムは fsck ユーティリティによってチェックされません。 |
||
== ファイルシステムの識別 == |
== ファイルシステムの識別 == |
||
− | {{ic|/etc/fstab}} で |
+ | {{ic|/etc/fstab}} でファイルシステムを識別する方法がいくつか存在します: カーネルの名前記述子、ファイルシステムのラベルや UUID、GPT パーティションのラベルや UUID です。カーネルの名前記述子は使用すべきではありません。ラベルよりも UUID や PARTUUID を優先して使用すべきです。詳細は [[永続的なブロックデバイスの命名]] を見てください。この記事を読み進める前に、その記事を先に読むことをおすすめします。 |
+ | このセクションでは、ファイルシステムをマウントするいくつかの方法を例を通して説明します。以下の例で使用されるコマンド {{ic|lsblk -f}} と {{ic|blkid}} の出力は、[[永続的なブロックデバイスの命名]] で見られます。 |
||
− | パーティションについて基本的な情報を一覧するには、次を実行: |
||
+ | === カーネルの名前記述子 === |
||
− | {{hc|$ lsblk -f| |
||
− | NAME FSTYPE LABEL UUID MOUNTPOINT |
||
− | sda |
||
− | ├─sda1 ext4 Arch_Linux 978e3e81-8048-4ae1-8a06-aa727458e8ff / |
||
− | ├─sda2 ntfs Windows 6C1093E61093B594 |
||
− | └─sda3 ext4 Storage f838b24e-3a66-4d02-86f4-a2e73e454336 /media/Storage |
||
− | sdb |
||
− | ├─sdb1 ntfs Games 9E68F00568EFD9D3 |
||
− | └─sdb2 ext4 Backup 14d50a6c-e083-42f2-b9c4-bc8bae38d274 /media/Backup |
||
− | sdc |
||
− | └─sdc1 vfat Camera 47FA-4071 /media/Camera}} |
||
+ | {{ic|lsblk -f}} を実行してパーティションの一覧を出力し、''NAME'' 列の値の前に {{ic|/dev/}} を付け加えてください。 |
||
− | === カーネルの名前 === |
||
+ | {{hc|/etc/fstab| |
||
− | {{ic|lsblk -f}} を実行してパーティションを一覧し、前に {{ic|/dev}} を付けて下さい。 |
||
+ | # <device> <dir> <type> <options> <dump> <fsck> |
||
+ | /dev/sda1 /boot vfat defaults 0 2 |
||
+ | /dev/sda2 / ext4 defaults 0 1 |
||
+ | /dev/sda3 /home ext4 defaults 0 2 |
||
+ | /dev/sda4 none swap defaults 0 0 |
||
+ | }} |
||
+ | {{Warning|[[デバイスファイル#ブロックデバイスの名前|ブロックデバイスのカーネル名記述子]] は [[永続的なブロックデバイスの命名|永続的]] ではなく、ブートごとに変更される可能性があるため、設定ファイル ({{ic|/etc/fstab を含む}}) で使用しないでください。}} |
||
− | [[#ファイル例|サンプル]]を見て下さい。 |
||
− | === ラベル === |
+ | === ファイルシステムラベル === |
+ | {{ic|lsblk -f}} を実行してパーティションの一覧を出力し、[[LABEL]] 列の値の前に {{ic|1=LABEL=}} を付け加えてください。あるいは、{{ic|blkid}} を実行し、LABEL の値を引用符無しで使ってください: |
||
− | {{Note|衝突がおこるのを避けるために、ラベルをかぶらせてはいけません。}} |
||
− | |||
− | デバイスやパーティションにラベルをつける方法は [[永続的なブロックデバイスの命名#by-label]] を見て下さい。root パーティションのリネームは "ライブ" Linux ディストリビューション (Parted Magic, Ubuntu, etc) から行なって下さい。root パーティションは初めにアンマウントする必要があるからです。 |
||
− | |||
− | {{ic|lsblk -f}} を実行してパーティションを一覧し、前に {{ic|1=LABEL=}} を付けて下さい: |
||
{{hc|/etc/fstab|2= |
{{hc|/etc/fstab|2= |
||
− | # < |
+ | # <device> <dir> <type> <options> <dump> <fsck> |
+ | LABEL=ESP /boot vfat defaults 0 2 |
||
− | |||
− | LABEL= |
+ | LABEL=System / ext4 defaults 0 1 |
− | LABEL= |
+ | LABEL=Data /home ext4 defaults 0 2 |
+ | LABEL=Swap none swap defaults 0 0 |
||
+ | }} |
||
+ | {{Note|任意のフィールドにスペースが含まれる場合、[[#ファイルパスのスペース]] を見てください。}} |
||
− | === UUID === |
||
+ | === ファイルシステム UUID === |
||
− | 全てのパーティションとデバイスは固有の UUID を持っています。UUID はパーティションを作成したりフォーマットするときにファイルシステムユーティリティ (例: {{ic|mkfs.*}}) によって生成されます。詳しくは [[永続的なブロックデバイスの命名#by-uuid]] を見て下さい。 |
||
− | {{ic|lsblk -f}} を実行してパーティション |
+ | {{ic|lsblk -f}} を実行してパーティションの一覧を出力し、[[UUID]] 列の値の前に {{ic|1=UUID=}} を付け加えてください。あるいは、{{ic|blkid}} を実行し、UUID の値を引用符無しで使ってください: |
+ | {{hc|/etc/fstab|2= |
||
− | {{Tip|特定のパーティションの UUID だけを表示したい場合: {{ic|$ lsblk -no UUID /dev/sda2}}。 |
||
+ | # <device> <dir> <type> <options> <dump> <fsck> |
||
+ | UUID=CBB6-24F2 /boot vfat defaults 0 2 |
||
+ | UUID=0a3407de-014b-458b-b5c1-848e92a327a3 / ext4 defaults 0 1 |
||
+ | UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults 0 2 |
||
+ | UUID=f9fe0b69-a280-415d-a03a-a32752370dee none swap defaults 0 0 |
||
}} |
}} |
||
+ | === GPT パーティションラベル === |
||
− | {{hc|/etc/fstab|2= |
||
− | # <file system> <dir> <type> <options> <dump> <pass> |
||
+ | {{ic|blkid}} を実行してパーティションの一覧を出力し、[[PARTLABEL]] の値を引用符無しで使ってください: |
||
− | UUID=24f28fc6-717e-4bcd-a5f7-32b959024e26 / ext4 defaults,noatime 0 1 |
||
− | UUID=03ec5dd3-45c0-4f95-a363-61ff321a09ff /home ext4 defaults,noatime 0 2 |
||
− | UUID=4209c845-f495-4c43-8a03-5363dd433153 none swap defaults 0 0}} |
||
+ | {{hc|/etc/fstab|2= |
||
− | === GPT ラベル === |
||
+ | # <device> <dir> <type> <options> <dump> <fsck> |
||
− | {{ic|blkid}} を実行してパーティションを確認し、''PARTLABEL'' の値を使って下さい (クォートは要りません): |
||
+ | PARTLABEL=EFI\040system\040partition /boot vfat defaults 0 2 |
||
+ | PARTLABEL=GNU/Linux / ext4 defaults 0 1 |
||
+ | PARTLABEL=Home /home ext4 defaults 0 2 |
||
+ | PARTLABEL=Swap none swap defaults 0 0 |
||
+ | }} |
||
+ | {{Note|任意のフィールドにスペースが含まれる場合、[[#ファイルパスのスペース]] を見てください。}} |
||
− | {{hc|/etc/fstab|<nowiki> |
||
− | # <file system> <dir> <type> <options> <dump> <pass> |
||
− | PARTLABEL=EFI\040SYSTEM\040PARTITION /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2 |
||
− | PARTLABEL=GNU/LINUX / ext4 rw,relatime,discard,data=ordered 0 1 |
||
− | PARTLABEL=HOME /home ext4 rw,relatime,discard,data=ordered 0 2 |
||
− | PARTLABEL=SWAP none swap defaults 0 0 |
||
− | </nowiki>}} |
||
+ | === GPT パーティション UUID === |
||
− | {{Note|フィールドに空白が含まれている場合、[[#ファイルパスのスペース(空白)]]を参照。}} |
||
+ | {{ic|blkid}} を実行してパーティションの一覧を出力し、[[PARTUUID]] の値を引用符無しで使ってください: |
||
− | === GPT UUID === |
||
+ | {{hc|/etc/fstab|2= |
||
− | {{ic|blkid}} を実行してパーティションを確認し、''PARTUUID'' の値を使って下さい (クォートは要りません): |
||
+ | # <device> <dir> <type> <options> <dump> <fsck> |
||
− | |||
+ | PARTUUID=d0d0d110-0a71-4ed6-936a-304969ea36af /boot vfat defaults 0 2 |
||
− | {{hc|/etc/fstab|<nowiki> |
||
+ | PARTUUID=98a81274-10f7-40db-872a-03df048df366 / ext4 defaults 0 1 |
||
− | # <file system> <dir> <type> <options> <dump> <pass> |
||
+ | PARTUUID=7280201c-fc5d-40f2-a9b2-466611d3d49e /home ext4 defaults 0 2 |
||
− | PARTUUID=d0d0d110-0a71-4ed6-936a-304969ea36af /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2 |
||
+ | PARTUUID=039b6c1c-7553-4455-9537-1befbc9fbc5b none swap defaults 0 0 |
||
− | PARTUUID=98a81274-10f7-40db-872a-03df048df366 / ext4 rw,relatime,discard,data=ordered 0 1 |
||
+ | }} |
||
− | PARTUUID=7280201c-fc5d-40f2-a9b2-466611d3d49e /home ext4 rw,relatime,discard,data=ordered 0 2 |
||
− | PARTUUID=039b6c1c-7553-4455-9537-1befbc9fbc5b none swap defaults 0 0 |
||
− | </nowiki>}} |
||
== ヒントとテクニック == |
== ヒントとテクニック == |
||
157行目: | 128行目: | ||
=== systemd による自動マウント === |
=== systemd による自動マウント === |
||
+ | systemd のすべてのマウントオプションは {{man|5|systemd.mount}} を見てください。 |
||
− | 巨大な {{ic|/home}} パーティションが存在する場合、''fsck'' によって {{ic|/home}} がチェックされている間に、{{ic|/home}} を使わないサービスを起動できるようにすると良いかもしれません。{{ic|/home}} パーティションの {{ic|/etc/fstab}} エントリに以下のオプションを追加することでそのように設定できます: |
||
+ | ==== ローカルパーティション ==== |
||
− | noauto,x-systemd.automount |
||
+ | 巨大なパーティションが存在する場合、''fsck'' によってそのパーティションがチェックされている間に、そのパーティションに依存しないサービスを起動できるようにすると効率が良くなるかもしれません。パーティションの {{ic|/etc/fstab}} エントリに以下のオプションを追加することでそのように設定できます: |
||
− | {{ic|/home}} に最初にアクセスしたときに fsck とマウントを行うようになり、パーティションの準備が出来るまでカーネルが {{ic|/home}} へのファイルアクセスを全てバッファします。 |
||
+ | x-systemd.automount |
||
− | {{Note|この設定を使うと {{ic|/home}} ファイルシステムのタイプが {{ic|autofs}} になり、デフォルトで [[mlocate]] から無視されるようになります。{{ic|/home}} の自動マウントによる高速化はせいぜい1〜2秒がいいとこなので、環境によっては、この設定はあまり意味がないかもしれません。}} |
||
− | + | そのパーティションに最初にアクセスしたときに fsck とマウントを行うようになり、パーティションの準備ができるまでカーネルがそのパーティションへのファイルアクセスを全てバッファします。 |
|
+ | この方法は、巨大な {{ic|/home}} パーティションがある場合などに適用できます。 |
||
+ | {{Note|この設定はファイルシステムのタイプを {{ic|autofs}} にします。これは [[mlocate]] によってデフォルトで無視されます。}} |
||
+ | ==== リモートファイルシステム ==== |
||
− | {{Note|1={{ic|automount}} と一緒に {{ic|exec}} フラグを使う場合、{{ic|user}} フラグを削除するようにしてください。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=769636 Fedora Bug Report] を参照。}} |
||
+ | |||
+ | 同じ設定はリモートファイルシステムのマウントにも適用できます。アクセスしたときにだけリモートファイルシステムをマウントしたい場合、{{ic|x-systemd.automount}} パラメータを使って下さい。さらに、{{ic|1=x-systemd.mount-timeout=}} オプションを使うことで、マウントコマンドが完了するまでの制限時間を指定できます。また、{{ic|_netdev}} オプションで systemd がネットワークに依存するマウントであることを認識してネットワークがオンラインになった後に順番を入れ替えます。 |
||
+ | |||
+ | x-systemd.automount,x-systemd.mount-timeout=30,_netdev |
||
+ | |||
+ | ==== 暗号化ファイルシステム ==== |
||
キーファイルによって暗号化したファイルシステムがある場合も、{{ic|noauto}} パラメータを {{ic|/etc/crypttab}} の適当なエントリに追加することができます。設定することで ''systemd'' は起動時に暗号化デバイスを開かないようになり、実際にアクセスされたときになってから指定したキーファイルを使ってファイルシステムを開いてマウントします。デバイスが利用可能になるのを systemd が待機しないようになるので、暗号化 RAID デバイスなどを使っている場合、起動時間が数秒間短くなるかもしれません。例: |
キーファイルによって暗号化したファイルシステムがある場合も、{{ic|noauto}} パラメータを {{ic|/etc/crypttab}} の適当なエントリに追加することができます。設定することで ''systemd'' は起動時に暗号化デバイスを開かないようになり、実際にアクセスされたときになってから指定したキーファイルを使ってファイルシステムを開いてマウントします。デバイスが利用可能になるのを systemd が待機しないようになるので、暗号化 RAID デバイスなどを使っている場合、起動時間が数秒間短くなるかもしれません。例: |
||
{{hc|/etc/crypttab| |
{{hc|/etc/crypttab| |
||
− | data /dev/ |
+ | data /dev/md/MyRAIDArray /etc/cryptsetup-keys.d/data.key noauto |
+ | }} |
||
+ | |||
+ | ==== 自動アンマウント ==== |
||
{{ic|x-systemd.idle-timeout}} フラグを使うことで一定時間アイドル状態のときにタイムアウトするのを指定できます。例: |
{{ic|x-systemd.idle-timeout}} フラグを使うことで一定時間アイドル状態のときにタイムアウトするのを指定できます。例: |
||
− | + | x-systemd.automount,x-systemd.idle-timeout=1min |
|
上記の設定の場合、1分間操作がないと systemd によってアンマウントされます。 |
上記の設定の場合、1分間操作がないと systemd によってアンマウントされます。 |
||
− | === ス |
+ | === 外部デバイス === |
+ | 外部デバイスが存在する時はマウントし、存在しない場合は無視したい場合、{{ic|nofail}} オプションが必要です。これにより、起動時にエラーが発生するのを防ぐことができます。例えば: |
||
− | スワップパーティションが UUID を持っていない場合、手動で追加することが可能です。これは {{ic|lsblk -f}} コマンドでスワップの UUID が表示されないときに発生します。スワップに UUID を指定する手順は以下になります: |
||
+ | {{hc|/etc/fstab|2= |
||
− | スワップパーティションを確認: |
||
+ | LABEL=MyExternalDrive /media/backup jfs nofail,x-systemd.device-timeout=5 0 2 |
||
+ | }} |
||
+ | {{ic|nofail}} オプションは {{ic|x-systemd.device-timeout}} オプションと組み合わせて使うのが最も効果的です。デフォルトのデバイスタイムアウトは 90 秒であるのが理由で、タイムアウトを再設定しなかった場合、{{ic|nofail}} だけが指定されている切断済みの外部デバイスのせいで起動時間が 90 秒長くなってしまいます。タイムアウトを 0 にはしないでください。0 は無限に待つことになります。 |
||
− | # swapon -s |
||
+ | === ファイルパスのスペース === |
||
− | スワップを無効化: |
||
+ | {{ic|fstab}} ではスペースがフィールドの区切り文字として使用されているため、フィールド (''PARTLABEL''、''LABEL''、マウントポイント) にスペースが含まれている場合、これらのスペースをエスケープ文字 {{ic|\}} と3桁の8進数 {{ic|040}} に置き換えなければなりません: |
||
− | # swapoff /dev/sda7 |
||
+ | {{hc|/etc/fstab|2= |
||
− | 新しく UUID を指定してスワップを再作成: |
||
+ | UUID=47FA-4071 /home/username/Camera<span style="color:grey;">\040</span>Pictures vfat defaults 0 0 |
||
+ | LABEL=Storage<span style="color:grey;">\040</span>drive /media/100<span style="color:grey;">\040</span>GB<span style="color:grey;">\040</span>(Storage) ext4 defaults,user 0 2 |
||
+ | }} |
||
+ | === atime オプション === |
||
− | # mkswap -U random /dev/sda7 |
||
+ | 以下の atime オプションはドライブのパフォーマンスに影響を与える可能性があります。 |
||
− | スワップを有効化: |
||
+ | * {{ic|strictatime}} オプションは、ファイルにアクセスするたびにアクセス日時を更新します。サーバーとして Linux を使っている場合には意味がありますが、デスクトップ用途ではあまり有意義ではありません。{{ic|strictatime}} オプションの欠点として、たとえ (ドライブではなくメモリから読み込む) ページキャッシュからファイルを読み込んだ場合でも、ディスクに書き込みが発生してしまいます。 |
||
− | # swapon /dev/sda7 |
||
+ | * {{ic|noatime}} オプションは、ファイルを読み込むたびにドライブにファイルのアクセス日時を書き込むのを完全に無効化します。このオプションは、ファイルが最後に変更されてから読まれたかどうかを確認する必要のあるアプリケーションを除いて、ほとんどのアプリケーションでうまく機能します。このオプションを有効にしても、書き込み日時の情報は継続して更新され続けます。 |
||
+ | * {{ic|nodiratime}} オプションはファイルアクセス日時の書き込みをディレクトリでだけ無効化し、その他のファイルではアクセス日時の書き込みが行われます。{{Note|{{ic|noatime}} は {{ic|nodiratime}} も含んでいます。[https://lwn.net/Articles/244941/ 両方を指定する必要はありません]。}} |
||
+ | * {{ic|relatime}} は、前回のアクセス日時が現在の変更日時よりも古い場合にのみ、アクセス日時を更新します。加えて、Linux 2.6.30 以降、前回のアクセス日時が 24 時間より古い場合は、アクセス日時は常に更新されます。{{ic|defaults}} オプション (カーネルのデフォルト、つまり {{ic|relatime}} を使うことを意味します。{{man|8|mount}} と [[wikipedia:Stat (system call)#Criticism of atime]] を参照) や {{ic|atime}} オプションが指定された場合、または何のオプションも指定されなかった場合、このオプションが使用されます。 |
||
+ | 最後にファイルが変更されてからファイルが読み込まれたかどうかを知る必要のあるアプリケーション ([[Mutt]] など) を使う場合、{{ic|noatime}} オプションを使用するべきではありません。{{ic|relatime}} オプションは許容範囲内で、パフォーマンスも改善することができます。 |
||
− | === ファイルパスのスペース(空白) === |
||
+ | カーネル 4.0 以降、もう一つの関連するオプションが追加されました: |
||
− | マウントポイントにスペース(空白)が含まれている場合、エスケープ文字 {{ic|\}} と3文字の8進数コード {{ic|040}} を使ってスペースの代わりにしてください: |
||
+ | * {{ic|lazytime}} は inode タイムスタンプ (アクセス・変更・作成日時) の変更をメモリ上に保存することでディスクへの書き込みを減らします。ディスク上のタイムスタンプが更新されるのは次の場合に限られます。(1) ファイルのタイムスタンプとは関係ない変更によってファイルの inode を更新する必要があるとき。(2) ディスクへの同期が発生したとき。(3) 削除されていない inode がメモリから追い出されたとき。(4) メモリ上のコピーがディスクに最後に書き込まれてから24時間以上経ったとき。 |
||
− | {{hc|/etc/fstab|2= |
||
+ | : {{Warning|システムがクラッシュした場合、ディスク上のアクセス時間や最終変更日時は最大で24時間ずれる可能性があります。}} |
||
− | UUID=47FA-4071 /home/username/Camera<font color="grey">\040</font>Pictures vfat defaults,noatime 0 0 |
||
− | /dev/sda7 /media/100<font color="grey">\040</font>GB<font color="grey">\040</font>(Storage) ext4 defaults,noatime,user 0 2}} |
||
+ | {{ic|lazytime}} オプションは前述の {{ic|*atime}} オプションと '''組み合わせて''' 使うものであり、代替のものではないことに注意してください。それはデフォルトで {{ic|relatime}} ですが、{{ic|strictatime}} とも一緒に使うことができ、ディスクの書き込みコストは {{ic|relatime}} と同じかそれ以下です。 |
||
− | === 外部デバイス === |
||
+ | === root パーティションの再マウント === |
||
− | 存在するときに外部デバイスをマウントして、無い時は無視するには {{ic|nofail}} オプションが必要です。このオプションは起動時にエラーが報告されるのを防止します。 |
||
+ | 何らかの理由で誤って root パーティションを読み込み専用でマウントしてしまった場合は、次のコマンドで root パーティションを再マウントしてください: |
||
− | {{hc|/etc/fstab|2= |
||
− | /dev/sdg1 /media/backup jfs defaults,nofail,x-systemd.device-timeout=1 0 2}} |
||
+ | # mount -o remount,rw / |
||
− | systemd 219 から、{{ic|nofail}} オプションを使う時は {{ic|x-systemd.device-timeout}} オプションも使用することが推奨されます。デフォルトのデバイスタイムアウトが90秒になったため、{{ic|nofail}} しか指定しない場合、外部デバイスを切断したときに起動が90秒伸びることになるからです。上記のようにタイムアウトを再設定して上げて下さい。タイムアウトを0に設定してはいけません。永遠にタイムアウトしなくなります。 |
||
+ | === GPT パーティションの自動マウント === |
||
− | また、外部デバイスを扱うのに他の systemd ユニットをロードする必要がある場合 (例えばネットワークで共有する場合など)、{{ic|1=x-systemd.requires=x}} と {{ic|x-systemd.automount}} を組み合わせて使うことで、ユニットが起動してから自動マウントさせることができます。例: |
||
+ | UEFI/GPT を使用している場合、[https://uapi-group.org/specifications/specs/discoverable_partitions_specification/ Discoverable Partitions Specification] に従ってパーティショニングすることで、特定のパーティションを {{ic|/etc/fstab}} から省略することができ、{{man|8|systemd-gpt-auto-generator}} を使ってそのパーティションをマウントすることができます。[[systemd#GPT パーティションの自動マウント]] を見てください。 |
||
− | {{hc|/etc/fstab|2= |
||
− | /host/share /net/share cifs noauto,nofail,x-systemd.automount,x-systemd.requires=network-online.target,x-systemd.device-timeout=10,workgroup=workgroup,credentials=/foo/credentials 0 0}} |
||
− | === |
+ | === バインドマウント === |
+ | {{ic|bind}} オプションにより、ディレクトリをリンクさせることができます: |
||
− | {{ic|noatime}}, {{ic|nodiratime}}, {{ic|relatime}} を使用するとドライブのパフォーマンスが改善します。Linux は読み込まれるたびに記録する(ドライブに書き込む) {{ic|atime}} をデフォルトで使っています。これは Linux をサーバーに使っている時は理にかなっていますが、デスクトップとして利用する場合はそれほど意味がありません。{{ic|atime}} オプションの最悪な点は、ページキャッシュからファイルを読み込む(ドライブではなくメモリから読み込む)ときでさえ書き込みを行ってしまうことです!{{ic|noatime}} オプションはファイルを読み込むたびにドライブにファイルのアクセス日時を書き込むのを完全に無効にします。これはほとんど全てのアプリケーションでうまくいきますが、そのような情報が必要な [[Mutt]] などの例外がわずかに存在します。mutt のために、{{ic|relatime}} オプションを使うほうがいいでしょう。{{ic|relatime}} オプションはファイルが変更されたときだけファイルアクセス日時の書き込みを有効にします ({{ic|noatime}} はアクセス日時が変更日時より古い場合でもアクセス日時を変更しません)。{{ic|nodiratime}} オプションはファイルアクセス日時の書き込みをディレクトリでだけ無効化し、その他のファイルではアクセス日時の書き込みが行われます。[[Mutt]] などのプログラムを動作させるために妥協として {{ic|relatime}} を使うのがベストだと思われます。 |
||
+ | {{hc|/etc/fstab|2= |
||
− | 逆に {{ic|strictatime}} オプションはファイルにアクセスするたびにアクセス日時を更新します。サーバーとして Linux を使っている場合には意味がありますが、デスクトップ用途ではあまり有意義ではありません。{{ic|strictatime}} オプションの欠点として、たとえ (ドライブではなくメモリから読み込む) ページキャッシュからファイルを読み込んだ場合でも、ディスクに書き込みが発生してしまいます。 |
||
+ | # <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 |
||
+ | }} |
||
+ | 詳細は {{man|8|mount|Bind mount operation}} を見てください。 |
||
− | {{Note|{{ic|noatime}} は {{ic|nodiratime}} を含んでいます。両方を指定する必要はありません。[https://lwn.net/Articles/244941/ ]}} |
||
+ | === genfstab を使用して fstab を自動的に生成する === |
||
− | カーネル 4.0 から {{ic|lazytime}} という新しいオプションが追加されました。{{ic|lazytime}} は inode タイムスタンプ (アクセス・変更・作成日時) の変更をメモリ上に保存することでディスクへの書き込みを減らします。ディスク上のタイムスタンプが更新されるのは次の場合に限られます。(1) ファイルのタイムスタンプとは関係ない変更によってファイルの inode を更新する必要があるとき。(2) ディスクへの同期が発生したとき。(3) 削除されていない inode がメモリから追い出されたとき。(4) メモリ上のコピーがディスクに最後に書き込まれてから24時間以上経ったとき。 |
||
− | {{Warning|システムがクラッシュした場合、ディスク上のアクセス時間や最終変更日時は最大で24時間ずれる可能性があります。}} |
||
+ | ''genfstab'' ツールを使用して fstab ファイルを作成できます。詳細については、[[genfstab]] を参照してください。 |
||
− | {{ic|lazytime}} オプションは前述の {{ic|*atime}} オプションと一緒に使うことが可能です。 |
||
− | === |
+ | === GUI ユーティリティ === |
+ | 以下は、マウントポイントを変更する際に用いることのできるプログラムのリストです。Fstab で利用できる機能のうち一部は実装されていないかもしれませんが、最も利用される機能はすべて実装されており、作業がうんと楽になるかもしれません: |
||
− | FAT32 パーティションに書き込みを行うには、{{ic|/etc/fstab}} ファイルに修正を加える必要があります。 |
||
+ | * {{App|[[wikipedia:GNOME Disks|GNOME Disks]]|ストレージデバイスを管理するための GNOME ユーティリティ。|https://apps.gnome.org/DiskUtility/|{{Pkg|gnome-disk-utility}}}} |
||
− | {{hc|/etc/fstab|2= |
||
+ | * {{App|KDE Partition Manager|コンピュータ上のディスク、パーティション、ファイルシステムの管理を補助するユーティリティ。|https://apps.kde.org/partitionmanager/|{{Pkg|partitionmanager}}}} |
||
− | /dev/sdxY /mnt/some_folder vfat user,rw,umask=000 0 0}} |
||
+ | === ユーザーのパーミッションと所有者を変更する === |
||
− | {{ic|user}} フラグは全てのユーザーが (つまり root でなくても) {{ic|/dev/sdX}} パーティションをマウント・アンマウントできることを意味しています。{{ic|rw}} は読み書きの許可を与えます; {{ic|umask}} オプションは選択した権利を削除します - 例えば {{ic|1=umask=111}} は実行権限を削除します。問題は、このエントリはディレクトリからも実行権限を削除してしまうことであり、それを {{ic|1=dmask=000}} で修正しなくてはなりません。[[Umask]] を参照。 |
||
+ | あるドライブのマウントをすべてのユーザーに許可したい場合、以下のマウントポイントオプションを fstab エントリに追加することを検討してください。 |
||
− | これらのオプションがないと、全てのファイルは実行可能になります。umask や dmask オプションの代わりに {{ic|showexec}} オプションを使うことができ、全ての Windows の実行可能ファイル (com, exe, bat) を実行可能な色で表示します。 |
||
+ | {{Note|これは、ファイルのパーミッション機能が無いファイルシステムに対しても用いられます。この場合、ドライブ全体の所有者とパーミッションは、そのドライブをマウントしたユーザーに設定されます。}} |
||
− | 例えば、FAT32 パーティションが {{ic|/dev/sda9}} にあって、{{ic|/mnt/fat32}} にマウントしたい場合、次のようにします: |
||
+ | * {{ic|users}} - 全てのユーザーは、(たとえ他の通常ユーザーがそのドライブをマウントしていたとしても) 対象のファイルシステムをマウント/アンマウントできるようになります。このオプションは、noexec、nosuid、nodev オプションも暗黙的に設定します (ただし、後続のオプションによって上書きされない限り。例えば、users,exec,dev,suid)。これを有効化するには {{ic|users}} をマウントオプションに追加してください。 |
||
− | {{hc|/etc/fstab|2= |
||
+ | * {{ic|user}} - 任意の通常ユーザーに対象のファイルシステムのマウントを許可します。ただし、同じユーザーしかそのファイルシステムをアンマウントできません。このオプションは、noexec、nosuid、nodev オプションも暗黙的に設定します (ただし、後続のオプションによって上書きされない限り。例えば、users,exec,dev,suid)。これを有効化するには {{ic|user}} をマウントオプションに追加してください。 |
||
− | /dev/sda9 /mnt/fat32 vfat user,rw,umask=111,dmask=000 0 0}} |
||
+ | FAT や exFAT のようにファイルのパーミッションが実装されていないファイルシステムの場合は、ドライブ全体及び保存されているファイルに対してユーザーとグループを明示的に設定することができます。特定のユーザーの ID は {{ic|/etc/passwd}} で調べられます。UID は passwd エントリの3番目、GID は4番目です。 |
||
− | === root パーティションの再マウント === |
||
+ | * {{ic|uid}} - ドライブの所有者 ID を設定します |
||
− | 何らかの理由で誤って root パーティションを読み込み専用でマウントしてしまった場合は、次のコマンドで root パーティションを再マウントしてください: |
||
+ | * {{ic|gid}} - ドライブのグループ ID を設定します |
||
+ | Ext4 や brtfs などパーミッション機能を持つファイルシステムの場合は、(ドライブをマウントしたユーザー以外の) 他のユーザーはドライブにアクセスできないかもしれません。{{ic|/path/to/drive/}} のパーみションを確認し、必要に応じてパーミッションを変更してください。 |
||
− | # mount -o remount,rw / |
||
+ | == 参照 == |
||
− | === バインドマウント === |
||
+ | * [https://docs.kernel.org/admin-guide/devices.html ブロックデバイスを含むデバイスリスト] |
||
− | {{Note|ディレクトリを別の場所にバインドしていることはプログラムからはわからないため、{{ic|rm -r *}} のようなコマンドを実行してしまうと元の場所のファイルも消去されてしまいます。そのため、通常はソフトリンクを使うことが推奨されます。Btrfs 上のディレクトリにアクセスする必要がありソフトリンクは使えない場合、[[Btrfs#サブボリューム|サブボリューム]]機能でマウントオプションのようにケーパビリティを拡張できます。}} |
||
+ | * [https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html Filesystem Hierarchy Standard] |
||
− | |||
+ | * [https://www.askapache.com/optimize/super-speed-secrets/ TMPFS を使ってキャッシュとサイト速度を30倍に高速化] |
||
− | 権限がないために特定のディレクトリにプログラムやユーザーがアクセスできない場合、プログラムがアクセスできる場所にディレクトリをバインドマウントすることでアクセスさせることができます。プログラムがあるディレクトリ ''bar'' にはアクセスできるがディレクトリ ''foo'' にはアクセスできないとき、{{ic|/etc/fstab}} にエントリを追加することで特にパーミッションを弄らないでもアクセス権限を与えられます: |
||
− | {{hc|/etc/fstab|2= |
||
− | /<path to foo> /<path to bar> none bind 0 0}} |
||
− | |||
− | == 参照 == |
||
+ | {{TranslationStatus|Fstab|2024-05-29|809165}} |
||
− | *[http://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt ブロックデバイスを含むデバイスリスト] |
||
− | *[http://www.pathname.com/fhs/2.2/index.html Filesystem Hierarchy Standard] |
||
− | *[http://www.askapache.com/web-hosting/super-speed-secrets.html 30x Faster Web-Site Speed] (tmpfs の詳細) |
2024年7月10日 (水) 20:10時点における最新版
fstab(5) ファイルは、ディスクパーティションや様々なブロックデバイス、リモートファイルシステムをどうやってファイルシステムにマウントするかを記述します。
ファイルシステムは一行毎に記述されます。書かれている定義は、起動時やシステムマネージャの設定がリロードされたときに systemd の mount ユニットに動的に変換されます。デフォルトの設定では、マウントを必要とするサービスが起動する前にファイルシステムの fsck とマウントを自動的に実行します。例えば、NFS や Samba などのリモートファイルシステムはネットワークが立ち上がった後に 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=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 OPTIONS と ext4(5) § Mount options for ext4 を見てください。<dump>
は dump(8) ユーティリティによってチェックされます。このフィールドは通常0
にセットします。0
はチェックを無効化します。<fsck>
は、起動時にチェックするファイルシステムの順番を設定します。fsck(8) を見てください。ルートファイルシステムには1
を設定するべきです。他のパーティションには2
を設定するか、チェックを無効化する0
を設定するべきです。
スタートアップ時や、noauto
オプションが指定されていないデバイスに対して mount(8) コマンドを -a
フラグ付きで実行した時に、/etc/fstab
内で指定されたすべてのデバイスは自動的にマウントされます。リストにあるが存在しないデバイスは、nofail
オプションが使用されている場合を除き、エラーとなります。
詳細は fstab(5) § DESCRIPTION を見てください。
ファイルシステムの識別
/etc/fstab
でファイルシステムを識別する方法がいくつか存在します: カーネルの名前記述子、ファイルシステムのラベルや UUID、GPT パーティションのラベルや UUID です。カーネルの名前記述子は使用すべきではありません。ラベルよりも UUID や PARTUUID を優先して使用すべきです。詳細は 永続的なブロックデバイスの命名 を見てください。この記事を読み進める前に、その記事を先に読むことをおすすめします。
このセクションでは、ファイルシステムをマウントするいくつかの方法を例を通して説明します。以下の例で使用されるコマンド lsblk -f
と blkid
の出力は、永続的なブロックデバイスの命名 で見られます。
カーネルの名前記述子
lsblk -f
を実行してパーティションの一覧を出力し、NAME 列の値の前に /dev/
を付け加えてください。
/etc/fstab
# <device> <dir> <type> <options> <dump> <fsck> /dev/sda1 /boot vfat defaults 0 2 /dev/sda2 / ext4 defaults 0 1 /dev/sda3 /home ext4 defaults 0 2 /dev/sda4 none swap defaults 0 0
ファイルシステムラベル
lsblk -f
を実行してパーティションの一覧を出力し、LABEL 列の値の前に LABEL=
を付け加えてください。あるいは、blkid
を実行し、LABEL の値を引用符無しで使ってください:
/etc/fstab
# <device> <dir> <type> <options> <dump> <fsck> LABEL=ESP /boot vfat defaults 0 2 LABEL=System / ext4 defaults 0 1 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=CBB6-24F2 /boot vfat defaults 0 2 UUID=0a3407de-014b-458b-b5c1-848e92a327a3 / ext4 defaults 0 1 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=EFI\040system\040partition /boot vfat defaults 0 2 PARTLABEL=GNU/Linux / ext4 defaults 0 1 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=d0d0d110-0a71-4ed6-936a-304969ea36af /boot vfat defaults 0 2 PARTUUID=98a81274-10f7-40db-872a-03df048df366 / ext4 defaults 0 1 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
パーティションがある場合などに適用できます。
リモートファイルシステム
同じ設定はリモートファイルシステムのマウントにも適用できます。アクセスしたときにだけリモートファイルシステムをマウントしたい場合、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
ではスペースがフィールドの区切り文字として使用されているため、フィールド (PARTLABEL、LABEL、マウントポイント) にスペースが含まれている場合、これらのスペースをエスケープ文字 \
と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 オプション
以下の atime オプションはドライブのパフォーマンスに影響を与える可能性があります。
strictatime
オプションは、ファイルにアクセスするたびにアクセス日時を更新します。サーバーとして Linux を使っている場合には意味がありますが、デスクトップ用途ではあまり有意義ではありません。strictatime
オプションの欠点として、たとえ (ドライブではなくメモリから読み込む) ページキャッシュからファイルを読み込んだ場合でも、ディスクに書き込みが発生してしまいます。noatime
オプションは、ファイルを読み込むたびにドライブにファイルのアクセス日時を書き込むのを完全に無効化します。このオプションは、ファイルが最後に変更されてから読まれたかどうかを確認する必要のあるアプリケーションを除いて、ほとんどのアプリケーションでうまく機能します。このオプションを有効にしても、書き込み日時の情報は継続して更新され続けます。nodiratime
オプションはファイルアクセス日時の書き込みをディレクトリでだけ無効化し、その他のファイルではアクセス日時の書き込みが行われます。relatime
は、前回のアクセス日時が現在の変更日時よりも古い場合にのみ、アクセス日時を更新します。加えて、Linux 2.6.30 以降、前回のアクセス日時が 24 時間より古い場合は、アクセス日時は常に更新されます。defaults
オプション (カーネルのデフォルト、つまりrelatime
を使うことを意味します。mount(8) と wikipedia:Stat (system call)#Criticism of atime を参照) やatime
オプションが指定された場合、または何のオプションも指定されなかった場合、このオプションが使用されます。
最後にファイルが変更されてからファイルが読み込まれたかどうかを知る必要のあるアプリケーション (Mutt など) を使う場合、noatime
オプションを使用するべきではありません。relatime
オプションは許容範囲内で、パフォーマンスも改善することができます。
カーネル 4.0 以降、もう一つの関連するオプションが追加されました:
lazytime
は inode タイムスタンプ (アクセス・変更・作成日時) の変更をメモリ上に保存することでディスクへの書き込みを減らします。ディスク上のタイムスタンプが更新されるのは次の場合に限られます。(1) ファイルのタイムスタンプとは関係ない変更によってファイルの inode を更新する必要があるとき。(2) ディスクへの同期が発生したとき。(3) 削除されていない inode がメモリから追い出されたとき。(4) メモリ上のコピーがディスクに最後に書き込まれてから24時間以上経ったとき。
lazytime
オプションは前述の *atime
オプションと 組み合わせて 使うものであり、代替のものではないことに注意してください。それはデフォルトで relatime
ですが、strictatime
とも一緒に使うことができ、ディスクの書き込みコストは relatime
と同じかそれ以下です。
root パーティションの再マウント
何らかの理由で誤って root パーティションを読み込み専用でマウントしてしまった場合は、次のコマンドで root パーティションを再マウントしてください:
# mount -o remount,rw /
GPT パーティションの自動マウント
UEFI/GPT を使用している場合、Discoverable Partitions Specification に従ってパーティショニングすることで、特定のパーティションを /etc/fstab
から省略することができ、systemd-gpt-auto-generator(8) を使ってそのパーティションをマウントすることができます。systemd#GPT パーティションの自動マウント を見てください。
バインドマウント
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 ユーティリティ。
- KDE Partition Manager — コンピュータ上のディスク、パーティション、ファイルシステムの管理を補助するユーティリティ。
ユーザーのパーミッションと所有者を変更する
あるドライブのマウントをすべてのユーザーに許可したい場合、以下のマウントポイントオプションを 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/
のパーみションを確認し、必要に応じてパーミッションを変更してください。