Linuxファイルシステムメモ(/etc/fstab)

`fstab`（File System Table）は、Linuxシステムで使用されるファイルシステムのマウント情報を記述したファイルです。このファイルには、システム起動時に自動的にマウントされるべきファイルシステムの情報が記載されています。ここでは `fstab` ファイルの基本的な構造と設定方法について説明します。

### `fstab` ファイルの構造

`fstab` ファイルは以下のような形式で記述されます。

```plaintext
<ファイルシステムのデバイスまたはラベル> <マウントポイント> <ファイルシステムのタイプ> <マウントオプション> <dump> <fsck順序>
```

各フィールドの意味は以下の通りです。

- **ファイルシステムのデバイスまたはラベル**: マウントするデバイス（例: `/dev/sda1`）や、ラベル（例: `LABEL=home`）、UUID（例: `UUID=12345678-1234-1234-1234-123456789abc`）を指定します。
  
- **マウントポイント**: デバイスがマウントされるディレクトリのパスを指定します（例: `/home`）。
  
- **ファイルシステムのタイプ**: マウントするファイルシステムの種類を指定します（例: `ext4`, `ntfs`, `xfs`）。

- **マウントオプション**: マウント時のオプションをカンマ区切りで指定します（例: `defaults`, `noauto`, `rw`, `noexec`）。詳細はマニュアル (`man fstab`) を参照してください。

- **dump**: バックアップ時に使用されるフィールドで、通常は `0` を設定します（バックアップを行わないことを意味します）。

- **fsck順序**: ファイルシステムのチェック順序を設定します。通常は `0` または `1` を設定します（`1` は先にチェックすることを意味します）。

### `fstab` ファイルの例

以下は `fstab` ファイルの例です。

```plaintext
# /etc/fstab: static file system information.
#
# <file system>        <dir>         <type>    <options>          <dump> <pass>
/dev/sda1              /             ext4      defaults            1      1
/dev/sda2              /home         ext4      defaults,noatime    0      2
/dev/sdb1              /data         ext4      defaults            0      2
UUID=12345678-1234-1234-1234-123456789abc /backup xfs defaults,noauto 0 0
LABEL=SWAP             none          swap      sw                  0      0
tmpfs                  /tmp          tmpfs     defaults,noatime,mode=1777 0 0
```

### 主な注意点と推奨事項

- `fstab` ファイルを編集する際は、root 権限が必要です。一般的には `sudo` を使用して編集します。
  
- マウントポイントとして指定するディレクトリは、存在している必要があります。存在しない場合は作成してから設定します。

- オプションは環境や使用目的に応じて適切に設定する必要があります。誤った設定はシステムの安定性やデータの整合性に影響を与える可能性があります。

- 変更を加えた後は、`mount -a` コマンドを使用して `fstab` ファイルのエントリを再読み込みするか、システムを再起動する必要があります。

`fstab` ファイルはシステムの自動化と安定性に重要な役割を果たします。適切に管理し、システムの要件に合わせて設定することが重要です。

マウントオプションは、Linuxシステムでファイルシステムをマウントする際に使用するパラメータです。これらのオプションを指定することで、マウントされるファイルシステムの挙動を制御することができます。以下によく使用されるマウントオプションとその意味を説明します。

### よく使用されるマウントオプション

1. **`ro` / `rw`**:
   - `ro`: ファイルシステムを読み取り専用でマウントします。
   - `rw`: ファイルシステムを読み書き可能でマウントします。

   ```bash
   mount -o ro /dev/sda1 /mnt/read-only
   mount -o rw /dev/sdb1 /mnt/read-write
   ```

2. **`noexec` / `exec`**:
   - `noexec`: バイナリ実行ファイルの実行を禁止します。
   - `exec`: バイナリ実行ファイルの実行を許可します。

   ```bash
   mount -o noexec /dev/sda2 /mnt/no-exec
   mount -o exec /dev/sdb1 /mnt/exec
   ```

3. **`noatime` / `atime`**:
   - `noatime`: ファイルやディレクトリへのアクセス時刻の更新を抑制します（読み取りだけで更新しない）。
   - `atime`: ファイルやディレクトリへのアクセス時刻を更新します。

   ```bash
   mount -o noatime /dev/sda1 /mnt/no-atime
   mount -o atime /dev/sdb1 /mnt/atime
   ```

4. **`nodev` / `dev`**:
   - `nodev`: デバイスファイルのマウントを禁止します。
   - `dev`: デバイスファイルのマウントを許可します。

   ```bash
   mount -o nodev /dev/sda2 /mnt/no-devices
   mount -o dev /dev/sdb1 /mnt/devices
   ```

5. **`nosuid` / `suid`**:
   - `nosuid`: setuid（実行時に所有者の権限でプロセスを実行する機能）を無効にします。
   - `suid`: setuid を有効にします。

   ```bash
   mount -o nosuid /dev/sda1 /mnt/no-suid
   mount -o suid /dev/sdb1 /mnt/suid
   ```

6. **`nofail`**:
   - `nofail`: マウントに失敗してもエラーを発生させず、警告だけを出力します。通常はネットワークドライブなどで使用されます。

   ```bash
   mount -o nofail /dev/sdc1 /mnt/network-drive
   ```

### その他の一般的なオプション

- **`defaults`**: 一般的なデフォルトのマウントオプションを使用します（`rw, suid, dev, exec, auto, nouser, async` の組み合わせ）。

- **`auto` / `noauto`**: `auto` はシステム起動時に自動的にマウントします。`noauto` は手動でマウントする必要があることを示します。

- **`user` / `nouser`**: `user` は一般ユーザーがマウントとアンマウントを許可します。`nouser` は root 以外のユーザーがマウントできないことを示します。

- **`async` / `sync`**: `async` は非同期書き込みを許可します（速度向上が見込まれますが、データの損失が発生する可能性があります）。`sync` は同期書き込みを行います（安全ですが、パフォーマンスが低下する場合があります）。

これらのオプションは、`mount` コマンドで直接指定する他に、`/etc/fstab` ファイルに記述して永続的に設定することもできます。適切なオプションを選択して、システムやデータのセキュリティとパフォーマンスを調整することが重要です。