1 / 65

Linux 基礎學習

Linux 基礎學習. Chapter 9 檔案與檔案系統的壓縮與打包. 內容. 壓縮檔案的用途與技術 Linux 系統常見的壓縮指令 打包指令: tar 完整備份工具: dump 光碟寫入工具 其他常見的壓縮與備份工具. 9.1  壓縮檔案的用途與技術. 你是否有過文件檔案太大,導致無法以一片軟碟將它複製完成的困擾?又,你是否有過,發現一個軟體裡面有好多檔案,這些檔案要將它複製與攜帶都很不方便的問題?還有,你是否有過要備份某些重要資料,偏偏這些資料量太大了,耗掉了你很多的磁碟空間呢?這個時候,那個好用的『檔案壓縮』技術可就派的上用場了!

Download Presentation

Linux 基礎學習

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linux 基礎學習 Chapter 9 檔案與檔案系統的壓縮與打包

  2. 內容 • 壓縮檔案的用途與技術 • Linux 系統常見的壓縮指令 • 打包指令: tar • 完整備份工具:dump • 光碟寫入工具 • 其他常見的壓縮與備份工具 Linux基礎--檔案與檔案系統的壓縮與打包

  3. 9.1 壓縮檔案的用途與技術 你是否有過文件檔案太大,導致無法以一片軟碟將它複製完成的困擾?又,你是否有過,發現一個軟體裡面有好多檔案,這些檔案要將它複製與攜帶都很不方便的問題?還有,你是否有過要備份某些重要資料,偏偏這些資料量太大了,耗掉了你很多的磁碟空間呢?這個時候,那個好用的『檔案壓縮』技術可就派的上用場了! 因為這些比較大型的檔案透過所謂的檔案壓縮技術之後,可以將它的磁碟使用量降低,可以達到減低檔案容量的效果,此外,有的壓縮程式還可以進行容量限制,使一個大型檔案可以分割成為數個小型檔案,以方便軟碟片攜帶呢! 那麼什麼是『檔案壓縮』呢?我們來稍微談一談它的原理好了。目前我們使用的電腦系統中都是使用所謂的 bytes 單位來計量的!不過,事實上,電腦最小的計量單位應該是 bits 才對啊,此外,我們也知道 1 byte = 8 bits 。但是如果今天我們只是記憶一個數字,亦即是 1 這個數字呢?它會如何記錄?假設一個 byte 可以看成底下的模樣: □□□□□□□□

  4. 9.2Linux 系統常見的壓縮指令

  5. 不要學compress,因為gzip就可解.Z檔 • 9.2.1compress

  6. gzip & bzip2 只能對單一檔案做壓縮當target為 dir時,仍是對dir中所有單一檔案做壓縮

  7. gzip (無參數-壓縮, -d-解壓縮) zcat

  8. gzip • echo "aa" > a; cp a b; cp a c • gzip a; ll (不加參數就是壓縮) • gzip -d a.gz; ll (-d 就是 解壓縮) • gzip *;ll • gzip -d *.gz; ll • gzip a -c > a.gz (保留原檔) • mkdir dir; mv a b c • gzip dir  不行哦 • gzip: dir is a directory -- ignored • gzip dir/*; ll dir  也是個別檔案壓 • gzip -v a  壓縮比 • gzip -1~9  改變壓縮比,default=6

  9. gzip • 無參數即為壓縮 • gzip x (刪x,產生.gz) • zcat x.gz(text file) • gzip -d x.gz (刪.gz,回原檔) • gzip -9 -c x > x.gz (保留原檔)-1最快,-9壓最密(壓縮比最好) • -t,vi x.gz加些東西,-t就會test出不是.gz file

  10. bzip2, bzcat

  11. bzip2 • echo "aa" > a; cp a b; cp a c • bzip2 a; ll (不加參數,就是-z,就是壓縮) • bzip2 -d a.gz; ll (-d 就是 解壓縮) • bzip2 *;ll • bzip2 -d *.gz; ll • bzip2 -v a -c > a.gz (保留原檔, 並顯示壓縮內容,壓縮比) • mkdir dir; mv a b c • bzip2 dir  不行哦 • bzip2: Input file dir is a directory. • bzip2 dir/*; ll dir  也是個別檔案壓 • bzip2 -v a  壓縮比 • bzip2 -1~9  改變壓縮比,default=6

  12. dd 一個大一點的 檔案 a: 證明 bzip2 比 gzip 強多了! dd if=/dev/zero of=./a bs=1M count=10 產生一個 10Mb檔案 a gzip -c -v a > a.gz a: 99.9%(saved) bzip2 -c -v a > a.bz2 a: 213995.102:1, 0.000 bits/byte, 100.00% saved, 10485760 in, 49 out. ll 10485760 2013-09-07 01:49 a 49 2013-09-07 01:51 a.bz2  小很多 10210 2013-09-07 01:50 a.gz /// mkdir dir 在dir中新增5 files gzip dir >> 不行 bzip2 dir >> 不行 gzip or bzip2 dir/* >> 對個別files 壓縮 結論: gzip or bzip2 不能對dir壓縮  所以才會有tar

  13. tar • 請記得加 -f 參數,而且最好獨立出來 • 壓縮(-c) to dir.tar • 解壓縮(-x) from dir.tar • 其實,記-c -x -f 就好了 • 啊不然 -z & -j 也記一下好了 • -大C 可指定 解壓path (-C只用在解壓) • t查看壓縮檔內容 • 解壓時若是 .tar.gz or .tar.bz2,其實-z or -j參數都不用加,只要-x即可. • mkdir dir; cd dir; touch a b c d e • 壓縮: tar -c dir -f dir.tar; ll • rm -rf abc; ll • 解壓縮: tar -xf dir.tar ( or tar -x -fdir.tar)解壓時-f可與其它option寫在一起,壓時不可,最好都獨之出來

  14. tar /root/tmp/qq/建幾個files; cd /root/tmp 1.) tar -cv qq -f qq.tar 2.) 但若是壓自己的 .,必須--exclude=x.tar如: tar -cv . -f qq.tar --exclude=qq.tar3.) -f 在壓縮時,即可指定其它路徑 tar -cv qq -f /tmp/qq.tar 4.) 解壓時用 -C(大C)來指定解壓路徑 tar -xv -f qq.tar -C /tmp 5.) -z  .tar.gz -j  .tar.bz2

  15. tar 再比一次 gzip & bzip2 • cd dir; dd if=/dev/zero of=a bs=1M count=10再做同樣動作產生b & c file (共30MBMB) • 只打包為tar • tar -cv dir -f dir.tar(-f可以放前面,我習慣放後面,比較直覺) • 打包,並以gzip壓 • tar -cvz dir -f dir.tar.gz • 打包,並以bzip2壓 • tar -cvj dir -f dir.tar.gz • lldrwxr-xr-x 2 root root 4096 2013-08-21 02:45 dir-rw-r--r-- 1 root root 31467520 2013-08-21 02:50 dir.tar-rw-r--r-- 1 root root 187 2013-08-21 03:31 dir.tar.bz2-rw-r--r-- 1 root root 30801 2013-08-21 02:50 dir.tar.gz看看 bzip2 & gzip的壓縮比率差多少!!

  16. tar • 解.tar • tar -xv -f dir.tar • 解.tar.gz • tar -xvz -f dir.tar.gz • 解.tar.bz2 • tar -xvj -f dir.tar.bz2 • 檢視(查詢-tv)壓縮檔內容 • tar -tv -f dir.tar (其實檢視全部都用 -tv即可,不需下一行) • tar -tv(加z or j較清楚,但其實不用加) -f dir.tar.gz (or dir.tar.bz2) • 我習慣以-cv or -xv開頭,把 z or j放後面,bird 跟我相反,請習慣把 -f 獨立出來

  17. tar -cvj /home -f /tmp/home.tar.bz2tar: 從成員名稱中移除前端的「/」 • -p(小寫) :保留備份資料的原本權限與屬性,常用於備份(-c)重要的設定檔 tar 指令預設就有 -p • tar -cvj /home -f /tmp/home.tar.bz2 • tar -xvj -f /tmp/home.tar.bz2 -C /tmp/kk • ll /tmp/kk/home/jj 可知預設權限與屬性均有保留 • 也就是-p本來就有加 • -P(大寫) :保留絕對路徑,亦即允許備份資料中含有根目錄存在之意; • --exclude=FILE:在壓縮的過程中,不要將 FILE 打包!

  18. tar • -tv詳細的檔案權限/屬性都會被列出來如果只是想要知道檔名,將 -v 拿掉 • 備份/以下dir時預設會把"/"拿掉,以免不小心回寫時覆蓋掉 • tar -cvjp /etc -f /root/etc.tar.bz2(過程即會提示已把"/"拿掉) • tar -tvj -f /root/etc.tar.bz2  沒有"/" • 若確定要備份有"/"的壓縮檔:tar -cvjpP /etc -f /root/etc.tar.bz2 • tar -tvj -f /root/etc.tar.bz2  有"/“

  19. tar 僅解開單一檔案的方法 • # 1. 先找到我們要的檔名,假設解開 shadow 檔案好了: tar -jtv -f /root/etc.tar.bz2 | grep 'shadow' … -r-------- root/root 1257 2008-09-29 02:21:25 etc/shadow <==這是我們要的! • # 2. 將該檔案解開!語法與實際作法如下: tar -jxv -f 打包檔.tar.bz2 待解開檔名 tar -jxv -f /root/etc.tar.bz2 etc/shadow  不可以寫成 /etc/shadow (輸出)etc/shadow ll etc -r-------- 1 root root 1257 Sep 29 02:21 shadow <==呦喝!只有一個檔案啦! • # 很有趣!此時只會解開一個檔案而已!不過,重點是那個檔名!你要找到正確的檔名。 • # 在本例中,你不能寫成 /etc/shadow !因為記錄在 etc.tar.bz2 內的檔名之故

  20. tar打包某(個或些)目錄,但不含該目錄下的某些檔案之作法tar打包某(個或些)目錄,但不含該目錄下的某些檔案之作法 • 假設我們想要打包 /etc /root 這兩個目錄,新的打包檔案要放置成為 /root/system.tar.bz2, 但卻不想要打包 • 1.) /root/etc* 開頭的檔案,因為該檔案都是剛剛我們才建立的備份檔嘛! • 2.) 當然這個檔案不要打包自己 (因為這個檔案放置在 /root 底下啊!) • --exclude 就是不包含的意思: • tar -cvj /etc /root -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 • (bird把-cvj 要打包的資料夾/etc /root放最後面,跟本人習慣不符,我覺得把要打包的資料夾,緊接著放在-cvj後面較直覺) • 舊版tar 的--exclude與要排除的file or dir可空一格,現在一律要用=

  21. tar:利用管線命令與資料流(請務必要會) • 特殊應用:利用管線命令與資料流 • # 1. 將 /etc 整個目錄一邊打包一邊在 /tmp 解開 • [root@www ~]# cd /tmp • [root@www tmp]# tar -cvj dir -f - | tar -xvj -f - -C /tmp/ • # 這個動作就像是 cp -r /root/tmp/qq /tmp 啦 • 不過過程先打包甚至壓縮對跨server可以大大減少流量

  22. tar:利用管線命令與資料流(請務必要會) 先練習,Server A執行: 1.) 把Server B(root password: 123)的 /home壓縮到 /tmp/home.tar.bz2 ssh root@ServerB_ip tar -cvj /home -f /tmp/home.tar.bz2 (事先以 nautilus 叫出 /tmp, 洗清空/tmp) 2.) 把Server B/tmp/home.tar.bz2 解壓縮到/root/tmp ssh root@ServerB_ip tar -xvj -f /tmp/home.tar.bz2 -C /root/tmp ssh root@10.10.88.158 tar -xvj -f /tmp/home.tar.bz2 -C /root/tmp(事先以 nautilus 叫出 /root/tmp,洗清空/root/tmp) 3.) 在 Server B的 terminal 的 /root/tmp檢查 /root/tmp/home/jj所有 file & dir的 owner, group, permission  完全保留

  23. tar:利用管線命令與資料流(請務必要會) • 過程先打包甚至壓縮(-j) 對跨server傳輸,可以大大減少流量 • (以下: 請務必要會)請開兩台電腦,把Server_A的/root/tmp/dir 打包為.tar後傳到Server_B並解壓縮在/tmp下: • 先把server_b root password 設為 123 • cd /root/tmp; 建 dir,裡面放幾個files • Server_A: tar -cvj dir -f - | ssh root@Server_B_IP tar -xvj -f - -C /tmp

  24. tar --exclude • cd /root/tmp • tar -cv . -f abc.tar • >> ./abc.tar:檔案是保存檔;未傾印 (因為沒有設 --exclude=abc.tar,意思就是abc.tar本身不打包) • 正確應為 tar -cv . -f abc.tar --exclude=abc.tar Linux基礎--磁碟檔案系統

  25. tar -t 只看檔案 | grep -v '/$' • tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | grep -v '/$‘  grep -v 指的是後面字串以外的, '/$'指的是: "最後是/的",所以:grep -v '/$‘指的是 "最後不是/的"  只看檔案 Linux基礎--磁碟檔案系統

  26. tar • cd /root/tmp • tar -cv . -f abc.tar • >> ./abc.tar:檔案是保存檔;未傾印 (因為沒有設 --exclude=abc.tar,意思就是abc.tar本身不打包) • 正確應為 tar -cv . -f abc.tar --exclude=abc.tar Linux基礎--磁碟檔案系統

  27. 9.3 打包指令: tar • 9.3.1tar • 其實最簡單的使用tar 就只要記憶底下的方式即可: • 壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的檔案或目錄名稱 • 查 詢:tar -jtv -f filename.tar.bz2 • 解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄

  28. 9.3 打包指令: tar • 使用 tar 加入 -j 或 -z 的參數備份 /etc/ 目錄

  29. 9.3 打包指令: tar • 查閱 tar 檔案的資料內容(可察看檔名),與備份檔名有否根目錄的意義

  30. 9.3 打包指令: tar • 如果你確定你就是需要備份根目錄到 tar 的檔案中,那可以使用 -P (大寫) 這個選項,請看底下的例子分析

  31. 9.3 打包指令: tar • 將備份的資料解壓縮,並考慮特定目錄的解壓縮動作 (-C 選項的應用)

  32. 9.3 打包指令: tar • 僅解開單一檔案的方法

  33. 9.3 打包指令: tar • 打包某目錄,但不含該目錄下的某些檔案之作法 Linux基礎--檔案與檔案系統的壓縮與打包

  34. 9.3 打包指令: tar • 僅備份比某個時刻還要新的檔案

  35. 9.3 打包指令: tar • 特殊應用:利用管線命令與資料流

  36. 完整備份工具:dump主要做filesystem備份,dir請用taryum -y install dump會同時安裝dump & restore 備份的資料為-單一檔案系統:1.) 可以使用完整的 dump 功能,包括利用 0~9 的數個 level 來備份 2.) 可以使用掛載點或者是裝置檔名進行備份! 備份的資料-目錄(該目錄並非獨立的檔案系統時),限制:1.) 所有的備份資料都必須要在該目錄 (本例為:/home/someone/) 底下 2.) 僅能使用 level 0 ,亦即僅支援完整備份而已 3.) 不支援 -u 選項,亦即無法建立 /etc/dumpdates 這個各別 level 備份的時間記錄檔 dump -W (列出在 /etc/fstab 裡面的具有 dump 設定的 partition 是否有備份過?) Last dump(s) done (Dump '>' file systems): > /dev/sda2 ( /) Last dump: never > /dev/sda1 ( /boot) Last dump: never > /dev/sda3 ( /home) Last dump: never

  37. dump -大W (列出在 /etc/fstab 裡面的具有 dump 設定的 partition,倒數第2個colume, 是否有備份過?) • dump -W • Last dump(s) done (Dump '>' file systems): • > /dev/sda2 ( /) Last dump: never • > /dev/sda1 ( /boot) Last dump: never • > /dev/sda3 ( /home) Last dump: never • value=1  應該每天要做,因為 backup policy 沒有做啦,ch25 • 可以手動做 • dump -0u /home -f /tmp/home.dump.0(備 /home 或 備 /dev/sda3 都一樣) • vim /etc/dumpdates • dump -W • /dev/sda3 ( /home) Last dump: Level 0, Date .... • dump -w (小w需要dump的) (-大W,/etc/fstab 所有 dump state)

  38. dump -大S (bytes,僅列出後面的待備份資料需要多少磁碟空間才能夠備份完畢) • df -h  /boot, /dev/sda1 最小 • dump -S /dev/sda1 • 25715712(bytes) • dump -0u /boot -f /root/boot.dump (-u 會把時間記錄到 /etc/dumpdates ) • ll /etc/dumpdates; cat /etc/dumpdates (filesystem level-0 date) • dump -W • dump -1u /boot -f /root/boot.dump.1 • ll /root/boot.* • dump -W • // • dump dir (與 tar差不多,只能做 level 0)

  39. dump 選項與參數: • -S :僅列出後面的待備份資料需要多少磁碟空間才能夠備份完畢; • -W :列出在 /etc/fstab 裡面的具有 dump 設定的 partition 是否有備份過? • -j :加入 bzip2 的支援!將資料進行壓縮,預設 bzip2 壓縮等級為 2 • -u :將這次 dump 的時間記錄到 /etc/dumpdates 檔案中; • -v :將 dump 的檔案過程顯示出來; • -f :有點類似 tar 啦!後面接產生的檔案,亦可接例如 /dev/st0 裝置檔名等 • -level:就是我們談到的等級,從 -0 ~ -9 共十個等級;

  40. resotre -t: 察看 dump 備份檔中資料 mimia練習 resotre -r: 這才是真正的還原 • restore -t -f /root/boot.dump • restore -t -f /root/boot.dump.1 空的 • useradd u1 u2 u3 • dump -0u /home -f /root/home.dump; jj login, touch a b c; su - • dump -1u /home -f /root/home.dump.1 • fdisk 一個新的 partition  reboot, format, mount  restore • ...; cd /mnt/part6; restore -r -f /root/home.dump • 先ls看一下; • 再 restore, restore -r -f /root/home.dump.1 • 再進 jj, ls 證實level 1的 files也回來了,而且 permission都正確

  41. -大S • [root@www ~]# dump [-Suvj] [-level] [-f 備份檔] 待備份資料 • [root@www ~]# dump -W • 選項與參數: • -S :僅列出後面的待備份資料需要多少磁碟空間才能夠備份完畢; • -u :將這次 dump 的時間記錄到 /etc/dumpdates 檔案中; • -v :將 dump 的檔案過程顯示出來; • -j :加入 bzip2 的支援!將資料進行壓縮,預設 bzip2 壓縮等級為 2 • -level:就是我們談到的等級,從 -0 ~ -9 共十個等級; • -f :有點類似 tar 啦!後面接產生的檔案,亦可接例如 /dev/st0 裝置檔名等 • -W :列出在 /etc/fstab 裡面的具有 dump 設定的 partition 是否有備份過?

  42. restore -r -f home.dump.0 • dump的還原  restore -r • 原mount point dir會消失哦!! • 比如 home, etc, boot 資料夾會不見 • owner, group, & permission都會完全一樣 Linux基礎--磁碟檔案系統

  43. dump -W • dump -0u /dev/sda3 -f /tmp/home.dump.0 • restore -t -f /tmp/home.dump.0 • cat /etc/dumpdates • su - jj; touch after0 after00 after000; exit • dump -1u /dev/sda3 -f /tmp/home.dump.1 • restore -t -f /tmp/home.dump.1 • su - jj; touch after1 after11 after111; exit • mkdir /root/tmp; cd /root/tmp • restore -t -f /tmp/home.dump.0; ... .1; ..... .2 • restore -r -f /tmp/home.dump.0;ll; ll jj owner, group, permission都正確, 裡面沒有 after0 ... • restore -r -f /tmp/home.dump.1; ll; ll jj jj裡面有 after0 ... • restore -r -f /tmp/home.dump.2; ll; ll jj jj裡面有 after1 ...

  44. 重點:上述的 restore指令在 原硬碟毀損後,裝上新硬碟並 mount /home後,  cd /home; restore -r -f ... • 或是,不正常關機後,導到部份檔案己有毀損,可以用 restore -r -i -f /tmp/home.dump.2 -i 會逐檔詢問是否要還原!!

  45. 完整備份工具:dump主要做filesystem備份,dir請用tar完整備份工具:dump主要做filesystem備份,dir請用tar • 9.4.1dump 第一次備份 level 0 ,也是完整的備份 dump 運作的等級 (level)

  46. 9.4 完整備份工具:dump • 用 dump 備份完整的檔案系統

  47. 9.4 完整備份工具:dump DUMP: Volume 1 transfer rate: 5550 kB/s DUMP: 5550 blocks (5.42MB) on 1 volume(s) DUMP: finished in 1 seconds, throughput 5550 kBytes/sec DUMP: Date of this level 0 dump: Tue Dec 2 02:53:45 2008 DUMP: Date this dump completed: Tue Dec 2 02:53:47 2008 DUMP: Average transfer rate: 5550 kB/s DUMP: DUMP IS DONE # 在指令的下達方面,dump 後面接 /boot 或 /dev/hdc1 都可以的! # 而執行 dump 的過程中會出現如上的一些訊息,你可以自行仔細的觀察! [root@www ~]# ll /root/boot.dump /etc/dumpdates -rw-rw-r-- 1 root disk 43 Dec 2 02:53 /etc/dumpdates -rw-r--r-- 1 root root 5683200 Dec 2 02:53 /root/boot.dump # 由於加上 -u 的選項,因此 /etc/dumpdates 該檔案的內容會被更新!注意, # 這個檔案僅有在 dump 完整的檔案系統時才有支援主動更新的功能。 # 4. 觀察一下系統主動建立的記錄檔: [root@www ~]# cat /etc/dumpdates /dev/hdc1 0 Tue Dec 2 02:53:47 2008 +0800 [檔案系統] [等級] [ ctime 的時間 ]

  48. 9.4 完整備份工具:dump • 用 dump 備份非檔案系統,亦即單一目錄的方法

  49. 9.4 完整備份工具:dump • 9.4.2restore

  50. mkisofs 建立iso檔(cd or dvd建立iso檔請用 windows ultraiso) • mkisofs • -o :後面接你想要產生的那個映像檔檔名 • -v :顯示建置 ISO 檔案的過程 • 建立 /root, /home, /etc  system.iso • mkisofs -r -v -o /tmp/system.iso /root /home /etc -o參數必須緊跟著 output iso file

More Related