壓縮的基本原理#
壓縮的核心思想是消除資料中的冗餘。例如,一個檔案中有連續 100 個 1,原本需要 100 個位元儲存,壓縮後可以用「100 個 1」這樣的簡短描述來替代,大幅縮減空間。
壓縮帶來兩個主要好處:
- 節省磁碟空間
- 加速網路傳輸(傳輸量變小)
壓縮與打包是兩件事#
這是 Linux 壓縮觀念中最重要的區分:
- 壓縮(Compression):對單一檔案進行壓縮,減小檔案體積
- 打包(Archiving):將多個檔案合併成一個檔案,但不一定壓縮
在 Windows 中,「壓縮」和「打包」通常是同一個動作(如 ZIP)。但在 Linux 中,傳統上壓縮工具(gzip、bzip2、xz)只能處理單一檔案,所以需要先用
tar打包多個檔案,再進行壓縮。這就是.tar.gz、.tar.bz2、.tar.xz這些組合副檔名的由來。
三大壓縮工具的比較#
| 工具 | 副檔名 | 壓縮比 | 速度 | 特點 |
|---|---|---|---|---|
| gzip | .gz | 普通 | 最快 | 最廣泛使用,相容性最好 |
| bzip2 | .bz2 | 較好 | 中等 | 適合需要更好壓縮比的場景 |
| xz | .xz | 最佳 | 最慢 | 壓縮比最高,但壓縮耗時較長 |
選擇哪種壓縮工具取決於場景:日常備份用 gzip(速度優先),軟體發布用 xz(體積優先),bzip2 介於兩者之間。
tar:打包的核心工具#
tar 的名稱來自 Tape Archive(磁帶歸檔),最初是為了將多個檔案寫入磁帶備份裝置而設計的。現在 tar 已經整合了壓縮功能,可以一步完成「打包 + 壓縮」。
tar 的重要觀念:
- 保留檔案屬性:權限、擁有者、時間戳都會被完整保存
- 支援差異備份:可以只打包自上次備份以來變更的檔案
- 選擇性解壓縮:可以只從 tar 檔案中取出特定的檔案
tar保留檔案屬性的特性讓它成為 Linux 系統備份的首選工具。相比之下,cp指令在複製時可能會遺失某些屬性(如特殊權限、SELinux context)。
檔案系統層級的備份#
除了檔案層級的打包壓縮,Linux 還提供檔案系統層級的備份工具:
xfsdump/xfsrestore#
針對 XFS 檔案系統的專用備份工具,支援:
- Level 0 ~ 9 的增量備份:Level 0 是完整備份,Level 1 只備份自 Level 0 以來的變更,以此類推
- 備份整個檔案系統或特定目錄
dd#
dd 是磁區層級的備份工具——它不認識檔案系統,只是逐 byte 複製。因此:
- 可以完整複製整顆磁碟(包括分割表、開機磁區)
- 可以建立磁碟映像檔
- 備份的目標不需要格式化
dd非常強大但也非常危險——它不會詢問確認就直接覆蓋目標。if(input file)和of(output file)寫反了,就可能毀掉整顆磁碟的資料。
備份策略的思考#
備份不只是技術操作,更是策略問題:
- 備份什麼:至少包含
/etc(設定)、/home(使用者資料)、/var(變動資料) - 備份到哪裡:異地備份是基本要求,本地備份無法防範硬體損毀或火災
- 多久備份一次:取決於資料變動頻率和可接受的資料遺失量(RPO)
- 完整備份 vs. 增量備份:完整備份還原簡單但佔空間,增量備份省空間但還原複雜
備份最致命的錯誤不是「沒有備份」,而是「有備份但從未驗證過能否還原」。定期測試還原流程,確認備份資料的完整性,是備份策略中不可省略的一環。