VPS 磁碟 30 GB,需提供 15 GB 大檔案下載。傳統打包(tar)或複製(cp)會佔用雙倍空間,無法滿足需求;剪切(mv)又會破壞種子做種。如何在不佔用額外空間、不影響原檔案的前提下,讓檔案可經由 HTTP 直接下載?
# 失敗嘗試:軟連結(Apache 無法識別)
cp -s -r /root/.mldonkey/incoming/files/*.* /var/www/downloads/
# 成功方案:硬連結(同 inode,Apache 可正常讀取)
cp -l -r /root/.mldonkey/incoming/files/*.* /var/www/downloads/
驗證結果:執行前後 df -h 使用率皆為 6%,確認零額外空間佔用。
| 連結類型 | 指令 | inode | 跨檔案系統 | Apache 支援 |
|---|---|---|---|---|
| 硬連結 | cp -l / ln | 相同 | 不可 | ✅ 完美支援 |
| 軟連結 | cp -s / ln -s | 不同 | 可 | ❌ Apache 預設不追蹤 |
硬連結本質是同一 inode 的多個目錄項,檔案資料實體僅存一份,刪除任一連結不影響資料(直到連結數歸零)。
\cp -l -r source/* dest/ # 前置反斜線暫時忽略 alias cp='cp -i'
因 ln 無法對目錄建立硬連結,且 Apache 不跟隨軟連結,建議寫入 cron 定時執行 cp -l -u(僅更新較新檔案)。
# 產生 MD5 清單(含絕對路徑)
md5sum /root/.mldonkey/incoming/files/*.* > /var/www/downloads/files.md5
# 本地驗證時需手動移除路徑前綴,或使用相對路徑產生
cd /root/.mldonkey/incoming/files && md5sum * > /var/www/downloads/files.md5
cp -l 是 Linux 系統管理員的「隱藏神技」:零空間成本、完整檔案語意、原生相容所有檔案系統操作。適用於大檔案分發、備份快照、容器映像層共享等場景。善用硬連結,讓儲存效率最大化。