Linux 預設每次讀取文件都會更新 atime(最近訪問時間),頻繁讀取場景(如 MySQL 數據文件、索引文件)會產生大量細碎寫入,拖慢 I/O。掛載參數 noatime 可完全禁用 atime 更新,顯著提升讀密集型負載效能。本文說明原理、配置方法、驗證與注意事項。
atime、mtime、ctime 三時間屬性;atime 每次讀取必寫 inode。atime 更新佔用大量 IOPS 與頻寬。noatime:讀取不更新 atime;mtime(修改時間)仍正常更新,數據一致性無影響。# 1. 編輯 /etc/fstab
# 原行:
LABEL=/home /home ext4 defaults 1 2
# 改為:
LABEL=/home /home ext4 defaults,noatime 1 2
# 2. 立即重掛載生效(無需重啟)
mount -o remount /home
# 假設數據目錄為 /var/lib/mysql
/dev/sdb1 /var/lib/mysql ext4 defaults,noatime 1 2
mount -o remount /var/lib/mysql
# 檢查掛載選項
mount | grep /var/lib/mysql
# 輸出應包含 noatime
# 測試 atime 不再更新
touch /var/lib/mysql/test_atime
stat /var/lib/mysql/test_atime # 記下 Access 時間
cat /var/lib/mysql/test_atime
stat /var/lib/mysql/test_atime # Access 時間應不變
atime(如郵件系統 mutts、某些備份軟體),確認業務無相依再啟用。relatime(預設):僅當 atime 早於 mtime/ctime 才更新,折中兼容。noatime 隱含 nodiratime(目錄同理),無需額外加參數。為 MySQL 數據目錄啟用 noatime,是零成本、高收益的系統級優化動作。