1 壓縮原理與優勢
1.1 壓縮原理
爲了要滿足目前我們的操作系統數據的存取,所以就會將該數據轉爲 byte 的型態來記錄,而本身計算機是以二進制運行的。假設一個字節當中, 1 會在最右邊佔據 1 個 bit ,而其他的 7 個 bits 將會自動的被填上 0 !但其實那 7 個 bits 應該是『空的』纔對!一些聰明的計算機工程師就利用一些複雜的計算方式, 將這些沒有使用到的『丟』出來,以讓文件佔用的空間變小!這就是壓縮的技術!
另外一種壓縮技術也很有趣,他是將重複的數據進行統計記錄的。舉例來說,如果你的數據爲『111....』共有 100 個 1 時, 那麼壓縮技術會記錄爲『100 個 1』而不是真的有 100 個 1 的位存在!這樣也能夠精簡文件記錄的容量!
1.2 優勢
經過『壓縮』與『解壓縮』,文件容量變小, 你的硬盤容量無形之中就可以容納更多的資料。此外,在一些網絡數據的傳輸中,也會由於數據量的降低, 好讓網絡帶寬可以用來作更多的工作。
2 Lunix系統常見的壓縮指令
2.1 gzip, zcat/zmore/zless/zgrep
gzip 可以說是應用度最廣的壓縮指令了!目前 gzip 可以解開 compress, zip 與 gzip 等軟件所壓縮的文件。 它所建立的壓縮文件爲 *.gz 的檔名。
gzip [options] 文件名
選項與參數:
-c :將壓縮的數據輸出到屏幕上,可透過數據流重導向來處理;
-d :解壓縮的參數;
-t :可以用來檢驗一個壓縮文件的一致性~看看文件有無錯誤;
-v :可以顯示出原文件/壓縮文件案的壓縮比等信息;
# :# 爲數字的意思,代表壓縮等級1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是-6
注意:當你使用 gzip 進行壓縮時,在預設的狀態下原本的文件會被壓縮成爲 .gz 的檔名,源文件就不再存
在了。
示例:將test1.txt以最佳的壓縮比壓縮,並保留原來的文件
2.2 bzip2, bzcat/bzmore/bzless/bzgrep
若說 gzip 是爲了取代 compress 並提供更好的壓縮比而成立的,那麼 bzip2 則是爲了取代 gzip 並提供更佳的壓縮比而來的。bzip2 的用法幾乎與 gzip 相同。 bzip2 的壓縮率確實比gzip 要好!不過,對於大容量文件來說,bzip2 壓縮時間會花更久的時間。
bzip [options] 文件名
選項與參數:
-c :將壓縮的過程產生的數據輸出到屏幕上!
-d :解壓縮的參數
-k :保留源文件,而不會刪除原始的文件喔!
-z :壓縮的參數 (默認值,可以不加)
-v :可以顯示出原文件/壓縮文件案的壓縮比等信息;
-# :與 gzip 同樣的,都是在計算壓縮比的參數, -9 最佳, -1 最快!
2.3 xz, xzcat/xzmore/xzless/xzgrep
雖然 bzip2 已經具有很棒的壓縮比,不過顯然某些自由軟件開發者還不滿足,因此後來還推出了 xz 這個壓縮比更高的軟件!這個軟件的用法也跟 gzip/bzip2 幾乎一模一樣!
xz [options] 文件名
選項與參數:
-d :就是解壓縮啊!
-t :測試壓縮文件的完整性,看有沒有錯誤
-l :列出壓縮文件的相關信息
-k :保留原本的文件不刪除~
-c :同樣的,就是將數據由屏幕上輸出的意思!
-# :同樣的,也有較佳的壓縮比的意思!
3 打包指令 tar
tar [options] 文件名
選項與參數:
-c :建立打包文件,可搭配 -v 來察看過程中被打包的檔名(filename)
-t :察看打包文件的內容含有哪些檔名,重點在察看『檔名』就是了;
-x :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開。特別留意的是, -c, -t, -x 不可同時出現在一串指令列中。
-z :透過 gzip 的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.gz
-j :透過 bzip2 的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.bz2
-J :透過 xz 的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.xz。特別留意, -z, -j, -J 不可以同時出現在一串指令列中
-v :在壓縮/解壓縮的過程中,將正在處理的文件名顯示出來!
-f filename:-f 後面要立刻接要被處理的檔名!建議 -f 單獨寫一個選項囉!(比較不會忘記)。-C 目錄 :這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。
其他後續練習會使用到的選項介紹:
-p(小寫) :保留備份數據的原本權限與屬性,常用於備份(-c)重要的配置文件
-P(大寫) :保留絕對路徑,亦即允許備份數據中含有根目錄存在之意;
--exclude=FILE:在壓縮的過程中,不要將 FILE 打包!
其實最簡單的使用 tar 就只要記憶底下的方式即可:
1. 壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的文件或目錄名稱
2. 查 詢:tar -jtv -f filename.tar.bz2
3. 解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄
僅僅解開單一文件的用法
打包某目錄,但不包含該目錄下的某些文件
利用管線命令與數據流一邊打包一邊解壓
在上面的例子中,我們想要『將 /etc 底下的資料直接 copy 到目前所在的路徑,也就是 /tmp 底下』,但是又覺得使用 cp -r 有點麻煩,那麼就直接以這個打包的方式來打包,其中,指令裏面的 - 就是表示那個被打包的文件! 由於我們不想要讓中間文件存在,所以就以這一個方式來進行復制的行爲。
4. XFS文件系統的備份與還原
4.1 xfsdump 備份
xfsdump 除了可以進行文件系統的完整備份 (full backup) 之外,還可以進行累積備份 (Incremental backup) !
累積備份:你在第一次使用 xfsdump 進行完整備份後,等過一段時間的文件系統自然運作後, 你再進行第二次 xfsdump 時,可以選擇累積備份!此時新備份的數據只會記錄與第一次完整備份所有差異的文件而已。
使用 xfsdump 限制:
xfsdump 不支援沒有掛載的文件系統備份!所以只能備份已掛載的!
xfsdump 必須使用 root 的權限才能操作 (涉及文件系統的關係)
xfsdump 只能備份 XFS 文件系統啊!
xfsdump 備份下來的數據 (文件或儲存媒體) 只能讓 xfsrestore 解析
xfsdump 是透過文件系統的 UUID 來分辨各個備份檔的,因此不能備份兩個具有相同 UUID 的文件系統
命令
xfsdump [-L S_label] [-M M_label] [-l #] [-f 備份檔] 待備份資料
選項與參數:
-L :xfsdump 會紀錄每次備份的 session 標頭,這裏可以填寫針對此文件系統的簡易說明
-M :xfsdump 可以紀錄儲存媒體的標頭,這裏可以填寫此媒體的簡易說明
-l :是 L 的小寫,就是指定等級~有 0~9 共 10 個等級喔! (預設爲 0,即完整備份)
-f :有點類似 tar 啦!後面接產生的文件,亦可接例如 /dev/st0 裝置文件名或其他一般文件檔名等
-I :從 /var/lib/xfsdump/inventory 列出目前備份的信息狀態
4.2 XFS 文件系統還原 xfsrestore
xfsdump [-L S_label] [-M M_label] [-l #] [-f 備份檔] 待備份資料
選項與參數:
-I :跟 xfsdump 相同的輸出!可查詢備份數據,包括 Label 名稱與備份時間等
-f :後面接的就是備份檔!企業界很有可能會接 /dev/st0 等磁帶機!我們這裏接檔名!
-L :就是 Session 的 Label name 喔!可用 -I 查詢到的數據,在這個選項後輸入!
-s :需要接某特定目錄,亦即僅復原某一個文件或目錄之意!
-r :如果是用文件來儲存備份數據,那這個就不需要使用。如果是一個磁帶內有多個文件,需要這東西來達成累積復原
-i :進入互動模式,進階管理員使用的!一般我們不太需要操作它!
5 建立映像檔和刻錄DVD
5.1 mkisofs建立映像檔
我們從 FTP 站捉下來的 Linux 映像檔 (不管是 CD 還是 DVD) 都得要繼續刻錄成爲實體的光盤/DVD 後, 才能夠進一步的使用,包括安裝或更新你的 Linux !同樣的道理,你想要利用刻錄機將你的數據刻錄到 DVD 時, 也得要先將你的數據報成一個映像檔,這樣才能夠寫入 DVD 片中。
將你的數據報成一個映像檔的方式就透過 mkisofs 這個指令即可
mkisofs [-o 映像檔] [-Jrv] [-V vol] [-m file] 待備份文件... \
選項與參數:
-o :後面接你想要產生的那個映像檔檔名。
-J :產生較兼容於 windows 機器的文件名結構,可增加文件名長度到 64 個 unicode 字符
-r :透過 Rock Ridge 產生支持 Unix/Linux 的文件數據,可記錄較多的信息(如 UID/GID 等) ;
-v :顯示建置 ISO 文件的過程
-V vol :建立 Volume,有點像 Windows 在文件總管內看到的 CD title 的東西
-m file :-m 爲排除文件 (exclude) 的意思,後面的文件不備份到映像檔中,也能使用 * 通配符喔
-graft-point:graft 有轉嫁或移植的意思,相關資料在底下文章內說明
刻錄root、home、etc目錄:
5.2 刻錄wodim
CentOS 7 使用的是 wodim 這個文字界面指令來進行刻錄的行爲,不過爲了兼容於舊版的cdrecord 這個指令, 因此 wodim 也有連結到 cdrecord 。
wodim --devices dev=/dev/sr0...
選項與參數:
--devices :用在掃瞄磁盤總線並找出可用的刻錄機,後續的裝置爲 ATA 接口
-v :在 cdrecord 運作的過程中,顯示過程而已。
dev=/dev/sr0 :可以找出此光驅的 bus 地址,非常重要!
blank=[fast|all]:blank 爲抹除可重複寫入的 CD/DVD-RW,使用 fast 較快,all 較完整
-format :對光盤片進行格式化,但是僅針對 DVD+RW 這種格式的 DVD 而已;
[可用選項功能] 主要是寫入 CD/DVD 時可使用的選項,常見的選項包括有:
-data :指定後面的文件以數據格式寫入,不是以 CD 音軌(-audio)方式寫入!
speed=X :指定刻錄速度,例如 CD 可用 speed=40 爲 40 倍數,DVD 則可用 speed=4 之類
-eject :指定刻錄完畢後自動退出光盤
fs=Ym :指定多少緩衝存儲器,可用在將映像檔先暫存至緩衝存儲器。預設爲 4m,
一般建議可增加到 8m ,不過,還是得視你的刻錄機而定。
針對 DVD 的選項功能:
driveropts=burnfree :打開 Buffer Underrun Free 模式的寫入功能
-sao :支持 DVD-RW 的格式
刻錄: