XFS 由 SGI 開發,是高效能 64 位元日誌式檔案系統,擅長超大檔案、超大分區、高並發 I/O 場景,現為 RHEL 7+/CentOS 7+、Oracle Linux、SUSE 等企業級發行版預設檔案系統。本文涵蓋從核心模組編譯、xfsprogs 工具鏈安裝、建立與掛載 XFS、/etc/fstab 永久掛載、既有資料遷移至 XFS 等完整生命週期操作,適用於需手動構建 XFS 環境或深度理解底層機制的工程師。
fsck。xfs_growfs 線上擴容、xfs_repair 高速修復、xfs_quota 專案/群組配額、xfs_fsr 線上去碎片。注意: 目前主流發行版(RHEL 7/8/9、Ubuntu 18.04+、Debian 10+、Kernel 5.x+)已將 XFS 編譯為核心內建(CONFIG_XFS_FS=y)或模組(=m),**無需手動打補丁編譯**。僅在極舊核心(2.6.x 以前)或嵌入式裁剪核心需手動啟用。
若確需手動編譯(教學/嵌入式場景):
# 1. 取得核心原始碼與 XFS 補丁(歷史參考,現已合併主線)
# 2. 打補丁
cd /usr/src/linux
patch -p1 < /path/to/xfs.patch
# 3. 配置核心選項
make menuconfig
# File systems → <*> SGI XFS filesystem support
# [*] XFS Quota support
# [*] XFS POSIX ACL support
# [*] XFS Realtime subvolume support (可選)
# 4. 編譯安裝
make -j$(nproc) bzImage modules modules_install install
# 更新 initramfs 並重新開機
dracut --force --kver $(uname -r)
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
# 5. 驗證模組載入
lsmod | grep xfs
modprobe xfs
# RHEL/CentOS/Fedora/Rocky/AlmaLinux
dnf install xfsprogs xfsdump
# Debian/Ubuntu
apt-get install xfsprogs xfsdump
# 原始碼安裝(指定版本/交叉編譯)
wget https://kernel.org/pub/linux/utils/fs/xfs/xfsprogs-6.5.0.tar.xz
tar xf xfsprogs-*.tar.xz && cd xfsprogs-*
./configure --enable-readline --enable-blkid
make -j$(nproc) && make install
關鍵工具:mkfs.xfs、xfs_growfs、xfs_repair、xfs_info、xfs_quota、xfs_fsr、xfs_db、xfs_metadump。
# 基本用法(自動偵測最佳幾何參數)
mkfs.xfs /dev/sdb1
# 指定標籤與區塊大小(4K 為預設,最大 64K)
mkfs.xfs -L "DATA_VOL" -b size=4k /dev/sdb1
# 強制覆蓋既有檔案系統
mkfs.xfs -f /dev/sdb1
# RAID/SSD 優化:指定 stripe unit/width(單位:512-byte 區塊)
# 例:RAID 5 4顆磁碟,chunk 64K → su=128, sw=384
mkfs.xfs -d su=128,sw=384 /dev/md0
# 顯示建立結果關鍵參數
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310720 blks
data = bsize=4096 blocks=5242880, imaxpct=25
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=2560
realtime =none
# 臨時掛載
mkdir -p /data
mount -t xfs -o noatime,nodiratime,logbufs=8,logbsize=256k /dev/sdb1 /data
# 永久掛載:編輯 /etc/fstab
/dev/sdb1 /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 0
# 驗證
mount -a
findmnt -t xfs
df -hT /data
常用掛載選項說明:
noatime,nodiratime:關閉存取時間更新,大幅減少中繼資料寫入。logbufs=8,logbsize=256k:增加日誌緩衝區,提升中繼資料密集負載效能。inode64:分區 > 1 TB 必加,讓 inode 分散分佈而非集中前 1 TB,避免「空間尚足但 inode 耗盡」假象(見 下節)。nobarrier:僅在具備掉電保護(BBU/電容)的 RAID 控制器或 NVMe 企業級 SSD 上啟用,關閉寫入屏障提升效能,否則掉電風險極高。discard / fstrim:SSD 建議定時 fstrim 而非掛載 discard(即時 TRIM 可能引發延遲尖峰)。預設 32 位元 inode 模式下,XFS 將所有 inode 限制在分區前 1 TB 空間。若分區 >1 TB 且大量小檔案寫入,前 1 TB inode 區耗盡即報「No space left on device」,實際仍有大量資料區塊可用。
# 線上重新掛載啟用 inode64(需核心 2.6.29+)
mount -o remount,inode64 /dev/sdb1 /data
# 永久生效:修改 /etc/fstab 加入 inode64
/dev/sdb1 /data xfs defaults,noatime,inode64 0 0
注意: 32 位元應用程式(極舊 32 位元 userspace)透過 NFS 存取 64 位元 inode 可能失效,現代 64 位元系統無此問題。
# 1. 建立 XFS 目標分區並掛載
mkfs.xfs /dev/sdb1 && mount /dev/sdb1 /mnt/new_xfs
# 2. 首次全量同步(業務運行中)
rsync -avHAX --numeric-ids --delete /source/ /mnt/new_xfs/
# 3. 多次增量同步縮小差異
rsync -avHAX --numeric-ids --delete /source/ /mnt/new_xfs/
# 4. 維護窗口最終同步並切換
systemctl stop app-service
rsync -avHAX --numeric-ids --delete /source/ /mnt/new_xfs/
# 修改 /etc/fstab、應用配置指向新路徑
mount --move /mnt/new_xfs /source
systemctl start app-service
若源端為 LVM 邏輯卷,可用 pvmove 線上移動實體區塊至新 PV(已格式化 XFS),再 vgreduce 移除舊 PV,無需檔案系統層面複製。
根分區遷移涉及 initramfs 重建、GRUB 重裝、SELinux 重新標記,步驟極繁雜且易導致不可開機。生產環境**強烈建議重新安裝 OS 並選擇 XFS 根分區**,再遷移應用資料。
| 任務 | 指令範例 |
|---|---|
| 線上擴容(分區已擴大) | xfs_growfs /data |
| 檢查並修復(卸載後) | xfs_repair -n /dev/sdb1 (乾跑) → xfs_repair /dev/sdb1 |
| 啟用專案配額 | xfs_quota -x -c 'project -s proj1' /data; xfs_quota -x -c 'limit -p bhard=100g proj1' /data |
| 線上去碎片 | xfs_fsr -v /data |
| 查看檔案系統幾何資訊 | xfs_info /data |
| 中繼資料導出(災難恢復分析) | xfs_metadump /dev/sdb1 /tmp/meta.img |
XFS 以卓越的大檔案、大分區、高並發效能,成為現代 Linux 伺服器儲存層首選。現代發行版已完整內建核心支援與工具鏈,部署門檻極低。關鍵在於:大分區必加 inode64、SSD/RAID 調優幾何參數、善用線上擴容與配額管理、遷移優先選擇 rsync 熱備份。掌握這些核心要點,即能讓 XFS 在資料庫、巨量日誌、影音串流、備份歸檔等場景發揮極致效能。

R 語言連接資料庫:ODBC 與 DBI 兩大擴展包安裝方式深度比較
Linux 從零建置 Qt 4.8.4 開發環境:依賴套件、配置參數與常見錯誤排解
Linux 禁止內核自動升級:yum 配置排除與命令行參數兩大方案
Linux 格式化分區報錯「Could not stat /dev/sdaX」的解決方案
Linux 升级内核与配置 Video4Linux 驱动实现摄像头视频采集
Linux 利用 PXE + Kickstart + Preseed 全自動安裝虛擬機/實體機
Linux 使用 S3QL 建立加密雲端檔案系統 (Amazon S3 / Google Cloud / OpenStack) 完整部署指南