Liunx中fstab檔案詳解
/etc/fstab是用來存放檔案系統的靜態資訊的檔案。位於/etc/目錄下,可以用命令less /etc/fstab 來檢視,如果要修改的話,則用命令 vi /etc/fstab 來修改。
當系統啟動的時候,系統會自動地從這個檔案讀取資訊,並且會自動將此檔案中指定的檔案系統掛載到指定的目錄。下面我來介紹如何在此檔案下填寫資訊。
檔案示例
一個簡單的 /etc/fstab,使用核心名稱標識磁碟:
/etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
tmpfs /tmp tmpfs nodev,nosuid 0 0
/dev/sda1 / ext4 defaults,noatime 0 1
/dev/sda2 none swap defaults 0 0
/dev/sda3 /home ext4 defaults,noatime 0 2
欄位定義
/etc/fstab 檔案包含了如下欄位,通過空格或 Tab 分隔:
<file system> <dir> <type> <options> <dump> <pass>
<file systems> - 要掛載的分割槽或儲存裝置.
<dir> - <file systems>的掛載位置。
<type> - 要掛載裝置或是分割槽的檔案系統型別,支援許多種不同的檔案系統:ext2, ext3, ext4, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap 及 auto。 設定成auto型別,mount 命令會猜測使用的檔案系統型別,對 CDROM 和 DVD 等移動裝置是非常有用的。
<options> - 掛載時使用的引數,注意有些mount 引數是特定檔案系統才有的。一些比較常用的引數有:
auto - 在啟動時或鍵入了 mount -a 命令時自動掛載。
noauto - 只在你的命令下被掛載。
exec - 允許執行此分割槽的二進位制檔案。
noexec - 不允許執行此檔案系統上的二進位制檔案。
ro - 以只讀模式掛載檔案系統。
rw - 以讀寫模式掛載檔案系統。
user - 允許任意使用者掛載此檔案系統,若無顯示定義,隱含啟用 noexec, nosuid, nodev 引數。
users - 允許所有 users 組中的使用者掛載檔案系統.
nouser - 只能被 root 掛載。
owner - 允許裝置所有者掛載.
sync - I/O 同步進行。
async - I/O 非同步進行。
dev - 解析檔案系統上的塊特殊裝置。
nodev - 不解析檔案系統上的塊特殊裝置。
suid - 允許 suid 操作和設定 sgid 位。這一引數通常用於一些特殊任務,使一般使用者執行程式時臨時提升許可權。
nosuid - 禁止 suid 操作和設定 sgid 位。
noatime - 不更新檔案系統上 inode 訪問記錄,可以提升效能(參見 atime 引數)。
nodiratime - 不更新檔案系統上的目錄 inode 訪問記錄,可以提升效能(參見 atime 引數)。
relatime - 實時更新 inode access 記錄。只有在記錄中的訪問時間早於當前訪問才會被更新。(與 noatime 相似,但不會打斷如 mutt 或其它程式探測檔案在上次訪問後是否被修改的程序。),可以提升效能(參見 atime 引數)。
flush - vfat 的選項,更頻繁的重新整理資料,複製對話方塊或進度條在全部資料都寫入後才消失。
defaults - 使用檔案系統的預設掛載引數,例如 ext4 的預設引數為:rw, suid, dev, exec, auto, nouser, async.
<dump> dump 工具通過它決定何時作備份. dump 會檢查其內容,並用數字來決定是否對這個檔案系統進行備份。 允許的數字是 0 和 1 。0 表示忽略, 1 則進行備份。大部分的使用者是沒有安裝 dump 的 ,對他們而言 <dump> 應設為 0。
<pass> fsck 讀取 <pass> 的數值來決定需要檢查的檔案系統的檢查順序。允許的數字是0, 1, 和2。 根目錄應當獲得最高的優先權 1, 其它所有需要被檢查的裝置設定為 2. 0 表示裝置不會被 fsck 所檢查。
檔案系統標識
在 /etc/fstab配置檔案中你可以以三種不同的方法表示檔案系統:核心名稱、UUID 或者 label。使用 UUID 或是 label 的好處在於它們與磁碟順序無關。如果你在 BIOS 中改變了你的儲存裝置順序,或是重新拔插了儲存裝置,或是因為一些 BIOS 可能會隨機地改變儲存裝置的順序,那麼用 UUID 或是 label 來表示將更有效。參見 持久化塊裝置名稱 。
要顯示分割槽的基本資訊請執行:
$ 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
核心名稱
你可以使用 fdisk -l 來獲得核心名稱,字首是 dev.
標籤
注意: 使用這一方法,每一個標籤必須是唯一的.
要顯示所有裝置的標籤,可以使用 lsblk -f 命令。在 /etc/fstab 中使用 LABEL= 作為裝置名的開頭 :
/etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
tmpfs /tmp tmpfs nodev,nosuid 0 0
LABEL=Arch_Linux / ext4 defaults,noatime 0 1
LABEL=Arch_Swap none swap defaults 0 0
UUID
所有分割槽和裝置都有唯一的 UUID。它們由檔案系統生成工具 (mkfs.*) 在建立檔案系統時生成。
lsblk -f 命令將顯示所有裝置的 UUID 值。/etc/fstab 中使用 UUID= 字首:
/etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
tmpfs /tmp tmpfs nodev,nosuid 0 0
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
提示和技巧
自動掛載
如果 /home 分割槽較大,可以讓不依賴 /home 分割槽的服務先啟動。把下面的引數新增到 /etc/fstab 檔案中 /home 專案的引數部分即可:
noauto,x-systemd.automount
這樣 /home 分割槽只有需要訪問時才會被掛載。核心會快取所有的檔案操作,直到 /home 分割槽準備完成。
注意: 這樣做會使 /home 的檔案系統型別被識別為 autofs,造成 mlocate 查詢時忽略該目錄。實際加速效果因配置而異,所以請自己權衡是否需要。
掛載遠端檔案系統也是同理。如果你僅想在需要的時候才掛載,也可以新增 noauto,x-systemd.automount 引數。另外,可以設定 x-systemd.device-timeout=# 引數,設定超時時間,以防止網路資源不能訪問的時候浪費時間。
如果你的加密檔案系統需要金鑰,則需要新增 noauto 引數到 /etc/crypttab 檔案中的對應位置。systemd 開機的時候就不會開啟這個加密裝置,會一直等待到裝置被訪問時再使用金鑰檔案掛載。比如在使用加密RAID裝置的時候可以節省一定的時間,因為 systemd 不必等到裝置可用後才能訪問。例如:
/etc/crypttab
data /dev/md0 /root/key noauto
交換分割槽 UUID
如果交換分割槽沒有 UUID,可以手動加入。如果使用 lsblk -f 命令沒有列出交換分割槽的 UUID 就說明發生了這種情況。下面是為交換分割槽指定 UUID 的步驟:
確定交換分割槽:
# swapon -s
禁用交換分割槽:
# swapoff /dev/sda7
用新 UUID 重新建立交換分割槽:
# mkswap -U random /dev/sda7
啟用交換分割槽:
# swapon /dev/sda7
路徑名有空格
如果掛載的路徑中有空格,可以使用 "\040" 轉義字元來表示空格(以三位八進位制數來進行表示)
/etc/fstab
UUID=47FA-4071 /home/username/Camera\040Pictures vfat defaults,noatime 0 2
/dev/sda7 /media/100\040GB\040(Storage) ext4 defaults,noatime,user 0 0
.....</nowiki>}}
外部裝置
外部裝置在插入時掛載,在未插入時忽略。這需要 nofail 選項,可以在啟動時若裝置不存在直接忽略它而不報錯.
/etc/fstab
/dev/sdg1 /media/backup jfs defaults,nofail 0 2
atime 引數
使用 noatime, nodiratime 或 relatime 可以提升 ext2, ext3 及 ext4 格式磁碟的效能。 Linux 在預設情況下使用atime選項,每次在磁碟上讀取(或寫入)資料時都會產生一個記錄。這是為伺服器設計的,在桌面使用中意義不大。預設的 atime 選項最大的問題在於即使從頁面快取讀取檔案(從記憶體而不是磁碟讀取),也會產生磁碟寫操作!
使用 noatime 選項阻止了讀檔案時的寫操作。大部分應用程式都能很好工作。只有少數程式如 Mutt 需要這些資訊。Mutt 的使用者應該使用 relatime 選項。使用 relatime 選項後,只有檔案被修改時才會產生檔案訪問時間寫操作。nodiratime 選項僅對目錄禁用了檔案訪問時間。relatime 是比較好的折衷,Mutt 等程式還能工作,但是仍然能夠通過減少訪問時間更新提升系統性能。
注意: noatime 已經包含了 nodiratime。不需要同時指定。
tmpfs
tmpfs 是一個臨時檔案系統,駐留於你的交換分割槽或是記憶體中(取決於你的使用情況)。使用它可以提高檔案訪問速度,並能保證重啟時會自動清除這些檔案。
經常使用 tmpfs 的目錄有 /tmp, /var/lock and /var/run. 不要將之使用於 /var/tmp, 因為這一目錄中的臨時檔案在重啟過程中需要被保留。使用 tmpfs /run 目錄,/var/run 和 /var/lock 是為了相容老版本建立的連結。預設 /etc/fstab中的的/tmp也是 tmpfs.
預設情況下, tmpfs 分割槽被設定為你總的記憶體的一半,當然你可以自由設定這一值。注意實際中記憶體和交換分割槽的使用情況取決於你的使用情況,而 tmpfs 分割槽在其真正使用前是不會佔用儲存空間的。
要將 /tmp 放到 tmpfs,將下行加入 /etc/fstab:
/etc/fstab
.....
tmpfs /tmp tmpfs nodev,nosuid 0 0
.....
可以指定大小,但不要修改 mode 選項,以保證檔案具有正確的訪問許可權(1777)。在上例中 /tmp 將最多使用一半記憶體,要指定最大空間,使用 size 掛載選項:
/etc/fstab
.....
tmpfs /tmp tmpfs nodev,nosuid,size=2G 0 0
.....
這裡有一個更高階的例子,展示如何為使用者新增 tmpfs 掛載。這對於網站、mysql 臨時檔案, ~/.vim/, 和其他情況很有用。嘗試並獲得理想的掛載選項來完成目標是很重要的。目標是儘量採用安全的策略來防止濫用。限制大小,同時指定 uid 和 gid 加上 mode 是非常安全的。更多資訊.
/etc/fstab
tmpfs /www/cache tmpfs rw,size=1G,nr_inodes=5k,noexec,nodev,nosuid,uid=648,gid=648,mode=1700 0 0
參閱 mount 命令 man 手冊以獲得更多的內容。
重啟後方能生效。注意不要直接執行 mount -a 命令,因為可能造成無法訪問當前目錄中的檔案(比如你應該保證 lockfiles 的正常存在)。然而,如果它們都是空的,那麼就可以直接執行 mount -a 而不必重啟電腦。
應用更改後,可以通過 findmnt 檢查是否生效:
$ findmnt --target /tmp
TARGET SOURCE FSTYPE OPTIONS
/tmp tmpfs tmpfs rw,nosuid,nodev,relatime
使用
一般需要大量讀寫操作的程式在使用 tmpfs 時都會提升效能。有些程式把共享記憶體放到 tmpfs 上時效能會大幅提升,例如將 Firefox Profile 資料夾放到記憶體後,Firefox 效能大幅提升。
Note: tmpfs 目錄(/tmp) 掛載時需要去掉 noexec 引數,否則有些編譯程式無法執行,此外,tmpfs 的預設大小是記憶體的一般,可能會產生空間不夠的問題。
下面命令可以讓makepkg在tmpfs目錄進行編輯,也可以在在/etc/makepkg.conf中進行設定:
$ BUILDDIR=/tmp/makepkg makepkg
普通使用者讀寫 FAT32
為了取得對 FAT32 分割槽的寫許可權,你必須修改/etc/fstab檔案。
/etc/fstab
/dev/sdxY /mnt/some_folder vfat user,rw,umask=000 0 0
“users”標籤的意思是任何使用者(甚至非 root 使用者)都可以掛載或解除安裝分割槽 '/dev/sdX'。“rw”標籤則分配讀寫的使用權。但我不知道“umask”標籤的意義(umask 是許可權掩碼命令 umask=000 指任何人沒有特權,且許可權為777,即所有人都可以讀、寫、執行)。我曾試圖在“man mount”中查詢,但是沒有什麼結果。
比如你的 FAT32 分割槽在 '/dev/sda9',你想將其掛載到 '/mnt/fat32',那麼你需要輸入並執行
/etc/fstab
/dev/sda9 /mnt/fat32 vfat user,rw,umask=111,dmask=000 0 0
參考自:https://wiki.archlinux.org/index.php/Fstab
---------------------
作者:richerg85
來源:CSDN
原文:https://blog.csdn.net/richerg85/article/details/17917129
版權宣告:本文為博主原創文章,轉載請附上博文連結!