fstab - Arch Linux 中文维基

跳至內容

# fstab

出自 Arch Linux 中文维基

翻譯狀態：

- 本文（或部分內容）譯自 fstab，最近一次同步於 2025-07-31，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- 塊設備持久化命名
- 文件系統
- tmpfs
- swap
- genfstab

fstab(5)文件可用於定義如何掛載硬碟分區以及各種塊設備和遠程文件系統。

每個文件系統都分別在單獨一行中定義，這些定義將在系統引導或重新加載系統管理器配置時被動態轉換為 systemd 掛載單元。默認設置將在需要掛載文件系統的服務啟動之前自動進行 fsck 並掛載文件系統。例如，systemd 會自動確保類似 NFS 和 Samba 的遠程文件系統僅在網絡可用後才會進行掛載。因此，`/etc/fstab` 中指定的本地和遠程文件系統掛載應能開箱即用。具體信息請參考 systemd.mount(5)。

如果僅提供了單個目錄或是設備作為參數，那麼 `mount` 會調用 fstab 來填充其它參數。在這種情況下，將調用 fstab 中列出的掛載參數。

這篇文章的某些內容需要擴充。

原因：需解釋 systemd-remount-fs.service(8) 的作用，並建議通過 `rootflags` 調用無法通過重掛載應用的選項。 (在 Talk:Fstab 中討論)

## 用法

一個簡單的 `/etc/fstab`，使用了文件系統 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=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`，以禁用檢查。
- `<fsck>` 設置了引導時檢查文件系統的順序，具體信息請參考 fsck(8)。對於根設備，該欄位需設置為 `1`。對於其它分區該欄位應該設置為 `2`，或設置為 `0` 以禁用檢查。

提示：

- `auto` 類型會讓 mount 命令猜測設備使用的文件系統。這對於光學介質（CD/DVD/Blu-ray）非常有用。
- 如果根文件系統是 btrfs 或 XFS，那麼 fsck 順序應該設置為 `0` 而不是 `1`。具體信息請參考 fsck.btrfs(8) 和 fsck.xfs(8)。

除非指定 `noauto` 選項，否則在啟動以及使用帶有 `-a` 標識的 mount(8) 命令時,所有在 `/etc/fstab` 裡指定的設備都會自動被掛載。除非使用 `nofail` 選項，否則在列表中出現但實際不存在的設備會導致錯誤。

更多信息請參考 fstab(5) § DESCRIPTION。

## 文件系統標識

這篇文章的某些內容需要擴充。

原因：除了內核名稱外，還有其他類型的設備路徑。`/dev/disk/by-*/*`，`/dev/mapper/*` 和 `/dev/md/*` 有著不同程度的持久性，而且使用它們應該是沒有問題的。 (在 Talk:Fstab 中討論)

在 `/etc/fstab` 配置文件中，有多種方法可用於標識文件系統：內核名稱、文件系統標籤或者 UUID，對於 GPT 硬碟還可以使用 GPT 分區標籤和 UUID。不應使用內核名稱，而 UUID 或分區 UUID（PARTUUID）應該優於標籤。更多信息請參考塊設備持久化命名。建議在繼續閱讀本文前先閱讀那篇文章。

在本節中，我們將通過示例描述如何使用所有可用的掛載方法來掛載文件系統。以下示例中使用的命令 `lsblk -f` 和 `blkid` 的輸出可在塊設備持久化命名一文中找到。

### 內核名稱

運行 `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.mount(5) 獲取所有 systemd 掛載選項。

#### 本地分區

在使用大分區時，可以在 fsck 進行檢查時啟動不依賴該分區的服務以提高效率。這可以通過向 `/etc/fstab` 的分區條目中添加以下選項來完成：

    x-systemd.automount

這會使分區被首次訪問時才運行 fsck 和 mount，並且內核會在它可用前緩衝所有對它的文件訪問。 該方法適用於如 `/home` 分區非常大的情況。

注意：這會將文件系統類型設為 `autofs`，並默認被 locate 忽略。

#### 遠程文件系統

對於遠程文件系統的掛載也是一樣的。如果你想讓它們只在訪問時被掛載，就需要使用 `x-systemd.automount` 參數。另外,你還可以使用 `x-systemd.mount-timeout=` 選項來指定 systemd 應該在命令完成前等待多久。另外，`_netdev` 選項可確保 systemd 明白該掛載需要網絡，並且在網絡就緒後再執行掛載：

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

#### 加密文件系統

如果你有一個使用密鑰文件的加密附屬文件系統，可以將 `nofail` 參數添加到 `/etc/crypttab` 和 `/etc/fstab` 中的對應項中。systemd 將不會在啟動時等待 cryptsetup 完成解密並掛載，而是等到甚至是抵達 default.target 後再完成掛載。通過忽略無需啟動後立即可用的加密附屬文件系統，該操作可避免由此帶來的啟動延遲。cryptsetup 的具體配置請參考 dm-crypt/系統配置#非阻塞掛載。

由於掛載服務默認僅會為文件系統可用等待 90 秒，因此任何對密鑰文件可用性的延遲都可能導致掛載失敗。為避免該情況出現，可以在 fstab 中添加 `x-systemd.mount-timeout=0` 選項，以使掛載服務一直等待到分區解鎖完成。

    /etc/fstab

    UUID=0a3407de-014b-458b-b5c1-848e92a327a3 /data ext4 defaults,nofail,x-systemd.device-timeout=0    0 2

#### 自動卸載

可以通過 `x-systemd.idle-timeout` 參數來為掛載設置一個空閒超時時間。舉個例子：

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

這會使 systemd 在設備空閒 1 分鐘後卸載它。

### 外部設備

本文或本章節的事實準確性存在爭議。

原因： nofail 選項無法按以下描述工作。（在 Talk:Fstab#3.2 External Device options 中討論）

對於僅在可用時掛載，未找到時忽略的外部設備，需要使用 `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 秒，這會將超時時間設為無限。

### 路徑名有空格

因為空格在 `fstab` 中用於劃分列，如果任意一列（PARTLABEL，LABEL 或掛載點）中含有空格，這些空格必須被替換為轉義符 `\` 後面跟著三位數八進制代碼 `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` 選項僅對目錄禁用文件訪問時間的寫入，而其他文件仍會寫入訪問時間。
  注意：`noatime` 包含了 `nodiratime`。你不需要同時啟用兩個選項。
- `relatime` 僅當先前訪問時間早於當前修改時間時才會更新訪問時間。此外，從 Linux 2.6.30 開始，如果與之前的訪問時間間隔超過 24 小時，則始終會更新訪問時間。在使用 `defaults` 選項，`atime` 選項（即使用內核默認值 `relatime`；具體信息請參考 mount(8) 和 Once upon atime）或沒指定任何選項時，將啟用該選項。

在使用 Mutt 或其它需要知道一個文件自上次修改後是否被讀取的應用時，不應該使用 `noatime` 選項；可以使用 `relatime`，同時還能獲得性能提升。

自從內核 4.0 版本起還有另一個相關的選項：

- `lazytime` 通過僅在內存中維護對 inode 時間戳的更改（包括訪問、修改和創建時間）來減少對磁碟的寫入。硬碟上的時間戳僅在以下情況下更新：(1) 文件 inode 需要針對與文件時間戳無關的某些更改進行更新，(2) 發生與硬碟的同步，(3) 從內存中逐出未刪除的 inode 或 (4) 自上次將內存中的副本寫入硬碟已超過 24 小時。

  警告：如果系統崩潰，硬碟上的訪問和修改時間可能會距當前時間過時最多 24 小時。

注意， `lazytime` 並不用於替代上述 `*atime` 選項，而是與它們搭配使用。默認會與 `relatime` 搭配，但在搭配 `strictatime` 時的硬碟寫入損耗也較純 `relatime` 選項相同設置更低。

### 重新掛載根分區

如果出於某些原因根分區被錯誤掛載為只讀，通過以下命令可以將根分區以讀寫訪問重新掛載：

    # mount -o remount,rw /

### GPT 分區自動掛載

在根據可發現分區規範進行了分區的情況下，使用 UEFI/GPT 時可以在 `/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 掛載

你可以使用 `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 工具，是 gnome包組 的一部分。

  https://apps.gnome.org/DiskUtility/ || gnome-disk-utility包

- KDE Partition Manager — 可用於管理電腦上的硬碟、分區和文件系統的工具，是 kde-system包組 的一部分。

  https://apps.kde.org/partitionmanager/ || partitionmanager包

### 修改用戶權限和所有權

如果你希望所有用戶都能掛載某個硬碟，可以考慮在 fstab 的對應項中添加以下掛載選項：

注意：同樣可用於沒有文件權限功能的文件系統，效果為硬碟的所有者和權限被設為掛載該盤的用戶。

- `users` - 允許任意用戶掛載和卸載（即使由其他用戶掛載）對應的文件系統。該選項隱式包含了 noexec，nosuid 和 nodev 選項（除非被類似 users，exec，dev 和 suid 的選項覆蓋）。
- `user` - 允許一個普通用戶掛載對應的文件系統，且僅允許同一個用戶進行卸載。該選項隱式包含了 noexec，nosuid 和 nodev 選項（除非被類似 users，exec，dev 和 suid 的選項覆蓋）。

對於沒有文件權限功能的文件系統（例如 FAT 和 exFAT），可以顯式指定整個硬碟和其中的文件的用戶和用戶組。可以通過 `/etc/passwd` 查找特定用戶的 ID，其中第三列是用戶 ID（UID），第四列是組 ID（GID）。

- `uid` - 設置硬碟的所有者 ID
- `gid` - 設置硬碟的組 ID

對於 ext4，btrfs 和其他有權限功能的文件系統，其他用戶可能沒有查看硬碟的權限。請檢查硬碟下的文件權限，並根據需要進行修改。

### 驗證修改

可以通過 `findmnt --verify --verbose` 檢查 fstab 中的語法錯誤和無效選項。

## 參見

- 完整的設備列表，包括塊設備
- 文件系統層次標準
- 通過 TMPFS 獲取 30 倍更快的緩存與網站瀏覽速度

分類：​

- 文件系統
- 啟動過程

隱藏分類：​

- 使用「模板:準確性」標記的頁面或章節

fstab
新增話題