Linux 檔案系統三種連結機制指向檔案三個不同層面:檔名(目錄項)、中繼資料、資料塊。理解其差異對備份、去重、容器儲存驅動至關重要。
| 類型 | 指向 | inode | 跨檔案系統 | 刪除源檔影響 | 空間佔用 |
|---|---|---|---|---|---|
| 符號連結 | 檔名(路徑字串) | 獨立新 inode | ✅ 支援 | 變成斷連結 | 極小(只存路徑) |
| 硬連結 | 中繼資料 | 共享同一 inode | ❌ 僅同檔案系統 | 不影響,連結計數 -1 | 零(共享資料塊) |
| 反射連結 | 資料塊 | 獨立新 inode | ❌ 需檔案系統支援 | 不影響(CoW 複製寫入) | 極小(共享資料塊,寫時複製) |
name2 --symlink--> name1 --hardlink--> inode1 --reflink--> data
name3 --hardlink--/
name4 --hardlink--> inode2 --reflink-/
ln -s 目標檔案 連結名
# 或 cp --symbolic-link 目標 連結名
ls -l 顯示 lrwxrwxrwx link -> targetln 目標檔案 連結名
# 或 cp --link 目標 連結名
cp -al /src /backup/$(date +%F) 秒級完成「全量備份」,僅佔用變更檔案空間stat 可見 Links: Ncp --reflink=always 目標檔案 連結名
# 或 cp --reflink=auto # 檔案系統不支援則回退完整複製
echo "original" > file.txt
ln -s file.txt symlink.txt
ln file.txt hardlink.txt
cp --reflink=always file.txt reflink.txt
ls -li *.txt
# inode 號:symlink 不同,hardlink 相同,reflink 不同
echo "modified" > file.txt
cat symlink.txt # 顯示 modified(指向同檔名)
cat hardlink.txt # 顯示 modified(共享 inode)
cat reflink.txt # 顯示 original(CoW 已分離)
選型原則:需跨分區/連結目錄 → 符號連結;同分區多別名/備份去重 → 硬連結;大檔案快照/容器儲存/頻繁複製少修改 → 反射連結。