[ Hosting ] 超過 4G 的檔案怎麼在網路上複製

好友 hoher  攝影作品的質感與感覺,一直是我很景仰與學習的對象,當然了,也成了很多對攝影有興趣的朋友,常會去觀摩與學習的地方。最近 hoher  放在 Dreamhost  的 blog  ,可能是因為太熱門了,導致使用的 CPU 量過高,被 Dreamhost 多次警告,最後索性直接把檔案改名,讓整個網站停擺(誰說 Dreamhost 不限制 CPU 了?),因此好友 hoher 興起了換一個空間商 ( Shared web hosting service ) 的念頭。

換空間商這件事,對於一個運作多時的網站來說,真的是一件大事。單就怎麼選擇一個適當的空間商 ( Shared web hosting service ) 這件事,其中的酸甜苦辣,就可以講整整一大篇,不過,容後再談怎麼選空間商 ( Shared web hosting service ) 這件事。還有一件非常重要的事情,就是如何搬移檔案。

如何搬移檔案?

沒錯!如何搬移檔案,對於我們這一種存放有攝影相關作品的網站來說,可說是一件大事。因為攝影作品從以前到現在累積下來,動輒以 GB 來計算,怎樣快速且有效率的轉移,就成了很重要的事情。以我自己來說,我喜歡用 Shell Access (SSH)  底下的指令來搬移,因為以這一種模式,又快又好,所以囉!這個功能,也是我在選空間商時,很重要的指標之一。當然囉! hoher 在搬移網站時,也是以這麼模式來進行了。

可是,問題來囉!正在 hoher 加緊腳步搬家的當頭,他傳來了一段訊息:

hoher: 我的gallery
hoher: 壓縮完有4.xG
JJCHEN: 棒!
hoher: 沒法用wget抓
JJCHEN: 可以吧
hoher: 不行ㄝ
hoher: 出現錯誤
hoher: tar在壓縮的時候
hoher: 可以分割嗎?

當下轉進腦筋的第一個想法是我們 hoher 老大是不是在騙人呀?用的是 unix 底下的檔案格式,又不是 Win32 系統,怎麼會有 4G 的限制?用 man wget  指令仔細看了一下,並沒有提到這一點呀?

後來仔細用 Google 找了一下,果真有這個限制耶!不過,這個限制是因為 Apache  所產生的,Apache 為了某些因素,是不允許直接讀取超過 2G 的檔案,那要怎麼做呢?

可以使用 split 指令 來分割檔案,作法如下:

壓縮與分割的過程:

  • 請先將目錄(檔案)壓縮起來,比如說是 myphoto.tar.gz
  • 假設你要以每 1000000000 bytes (約 1 GB)為分割大小,請執行以下指令:
    # split -b 1000000000 myphoto.tar.gz
    -b 就是每一個檔案是多少 byte,以上述為例,系統就會幫你以每 1000000000 bytes 為一個單位分割成數個小檔案,以 xaa, xab, xac ....... 的模式命名,其中 x 是一個亂數檔名。
  • 如果你跟我一樣有命名潔癖的,不喜歡這一種命名模式,您可以這樣做:
    # split -b 1000000000 myphoto.tar.gz myphoto-
    那命名模式,就會改成命名模式以 " myphoto- "為開頭,結尾為 aa, ab, ac ......,也就是你會看到 myphoto-aa, myphoto-ab,
    myphoto-ac ... 這樣的檔名。
  • 什麼?你不喜歡檔名尾巴是兩組的喔?那你就這樣做好了:
    # split -a 3 -b 1000000000 myphoto.tar.gz myphoto-
    -a 後面的數字,就是你想要幾組的尾巴,以上述為例,就是三組,這樣一來 你會看到 myphoto-aaa, myphoto-aab,
    myphoto-aac ... 這樣的檔名,你喜歡幾組,就換成幾組吧!別在鬧了!

這樣一來,就可以順利的用利用 wget 來把檔案轉移!達到你的目的囉!

wget http://domain.name/myphoto-aaa
wget http://domain.name/myphoto-aaa
wget .........

就這樣結束了?

當然不囉!有分割,沒合併怎麼可以呀!?

合併與解壓的過程:

  • 接著把它使用以下指令結合起來:
    # cat myphoto-* > myphoto.tar.gz
    如果你沒指定命名規則,那就比較麻煩一點。請先將檔案放在一個獨立的目錄內,裡面千萬不要有太多餘的檔案,然後使用以下的指令:
    # cat * > myphoto.tar.gz
  • 現在你應該看到了原來的 myphoto.tar.gz 檔案,直接用 tar 把他解壓就可以囉!
    tar zxvf myphoto.tar.gz 
  • 現在你應該就會看到原來的檔案與目錄結構囉

14 thoughts on “[ Hosting ] 超過 4G 的檔案怎麼在網路上複製

  1. to : S.D

    請問DreamHost的CPU上限是多少?

    DreamHost 他在電子報跟網站上面都說明了不限制 CPU 時間,但是根據觀察與親身的體驗,如果你的 CPU 使用時間,超過 5000 cpu seconds,他就會有訊息給你了。

    所以建議使用 Dreamhost 的人,應該把 Manage Users 選項裡面,有一個

    CPU Reporting: □ Enable user CPU usage statistics.

    把他打勾,然後你就會在 /%homedir/logs/resources/ 的目錄,看到每天產生的檔案,那就是你每天的 CPU 使用量。

    他的基本限制是
    CPU percentage assumes 24000 cpu seconds per day total.

    至於超過 CPU 限制,會怎樣?其實有很多小動作的,以後再來談

  2. 真感動~~
    還為我寫了一篇!!
    不過我要補充一下,我後來用這個方法還是不行的!!

    我的相簿壓起來是 4.4G ,我分割成每個檔600MB
    分那麼小是因為
    DH=>新空間,用ftp傳時都會不定時中斷,而這我就不知道為什麼了?所以才分小一點的檔案!!

    當完從分割=>傳送=>結合,一切正常
    但是解壓縮時解到一半就會有問題,連試了兩次還是一樣!!!
    **我去查了錯誤訊息似乎跟兩個站的tar or gzip版本不同有觀

    最好只好用最笨的方法,把我相簿裡的目錄三百多個,每十個壓成一個檔再傳送過去解壓!!

    其中有一個解出來仍有問題,而這個檔我是有用了z參數
    也就是 tar -cvzf file.tar.gz 目錄
    後來去掉壓縮參數
    也就是 tar -cvf file.tar.gz 傳過去再解壓就正常了!!!
    後來幫其他人備份傳送也遇到過一次,也是改不壓縮後就正常了!!
    所以..........

    總結,很可能是gzip版本不同的關係,但是我也不想再測試了!!
    4.4G,光是壓縮分割傳送,每次就要花半個小時以上!! ^^"

  3. 我忘了補充一下,如果各位會shell指令,在租空間時
    一定要找有提供 ssh 功能的主機商!!不然一定會搞死!!
    原本我是租一間無 ssh 功能的 hosting (http://www.ixwebhosting.com)
    後來才改 (http://www.hostmonster.com)

    不過有一點值得讚賞的是,美國的主機如果使用不滿意可以退喔!
    從30~90天不等,甚至聽說有一年的,台灣可能有七天就不錯了!!
    對我們來說這實在是一大福音,或許美國人早就見怪不怪了!!

    ps: 另用wget抓檔時,他的限制是2G喔!!

  4. 您好,想跟您請教一下,我有兩個空間,要用什麼指令讓他們互相搬移檔案?用自己的ftp上下傳,真的是太辛苦也太慢了

  5. to simon

    如果你新舊的主機商都有支援SSH Access,你就先登入進去舊的空間一樣壓縮好之後,再登入新的空間之後用wget指令去抓。

    如果沒有...發ticket去問一下你新的主機商可不可以"免費"幫你搬家,一般他們都很樂意幫人搬家的 😀

  6. 各位好,小地又來打擾各位

    我在netfirm裡面的檔案有20多g

    但是他的gz好像只能壓到1g

    可以請問各位先進有沒有直接批次壓縮成gz的方式

  7. 各位熱心的朋友,小弟把問題解決了,我用的方式是用wget登入ftp下載所有的檔案,因為我的備份檔案超過26g,實在是沒辦法壓
    netfirm的壓縮限制好像是1g
    美國isp的速度對聯起來可真不是普通的快,我把電腦放著跑幾個小時就ok了

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *