利用tar做檔案分片打包

這次系統移機時,因gallery的部分照片檔案就佔了幾十gigabyte的空間。原本是將整個目錄tar成單一檔案想利用FTP傳到另一台主機上。花了好久的時間壓完的檔案,結果因為忘了ftp有單檔無法傳輸超過2G的限制(Windows上有套FTP client可突破此限制,不過我用的是Linux上的ftp指令,就沒辦法了),一直停在傳到2G那一刻好幾個小時後才被我發現。於是乎改用wget透過HTTP的方式來下載,沒想到Apache default也不支援超過2G的檔案,下載時會出現403 forbidden error。我不死心的找了一下解決方法,有文章提到只要在configure apache之前加上一段flag,便可開啟apache對大檔(大於2G)的支援:

CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64″

於是乎我便將apache整個重新build一遍,結果看是看的到檔案了,HTTP也存取的到檔案,但問題是,下載下來的大小永遠都是 0 byte!

到此,我已經累了,只好放棄一次下載的想法,乖乖的man一下tar指令,研究了一下分片打包的方法,其用法如下:

tar cf ./g2data01.tar -M -L 20000000 /raid/g2data

其中 -M 是開啟 multi-volume 的功能,-L 則是指定每個volume的大小,單位是1024 bytes

因此上述的指令便會將 /raid/g2data 下所有的內容打包為每包約2G左右的檔案。

當每一個指定大小的分片檔案打包完成後,系統會出現如下訊息,提示你輸入下一個分片檔案的檔名:

Prepare volume #2 for `./g2data01.tar' and hit return:

此時請輸 "n 下一個檔名" 後按二次Enter鍵,便可繼續打包下一個分片檔。

Prepare volume #2 for `./g2data01.tar' and hit return: n g2data02.tar
Prepare volume #2 for `g2data02.tar' and hit return:

是的,你想的沒錯,就是要一個檔一個檔的指定檔名。因此如果你分片成50個檔,那就得輸入50次檔名,按100次Enter鍵,這就是最麻煩的地方。除此之外,multi-volume無法與compress功能合併使用,所以無法加上 z 參數來使用zip壓縮以減小檔案size。(會出現 Cannot use multi-volume compressed archives 的錯誤)。不過總算是把所有內容分裝成一堆小於2G可以用ftp下載的檔案了。待所有檔案下載到另一台server後,接下來就是解開的動作啦,指令與打包很類似:

tar -xf g2date01.tar -M

便可將檔案解開到到當前目錄下,不過不幸的是,和打包時一樣,你得一個一個地指定要解開來的檔案名稱,因此看到如下提示訊息時,記得再用 "n" 指令來指定下一個要解開來的檔名後按二次Enter鍵囉。

Prepare volume #2 for g2date01.tar and hit return: n g2data02.tar
Prepare volume #2 for g2date01.tar and hit return:

作者: yanni

14, Feb 1977

發表迴響