Linux

複製大文件時如何減少資源使用?

  • January 26, 2013

我需要將一個大文件(損壞的 MySQL 表 ~40GB)移動到單獨的伺服器上才能修復它。(在我的生產伺服器上嘗試修復時,它很快殺死了伺服器)。

為此,我想將 .frm、.MYI 和 .MYD 文件從我的生產伺服器同步到雲伺服器。

我正在將文件從 /var/lib/mysql/{database}/ 複製到 /home/{myuser},這樣我就不需要為 rsync 命令啟用 root 訪問權限並且 100% 確定數據庫文件不是在使用中(不應該寫入或讀取它,但顯然我不想關閉我的生產數據庫以確保)。

我嘗試複製的第一個文件大約是 10GB。我正在從生產伺服器的一個部分轉移到另一部分,即轉移到相同的磁碟陣列。

不幸的是,複製命令“cp filename newfilename”佔用了太多資源,導致伺服器停止執行。

將文件複製到其他目錄時如何使用更少的資源?(需要多長時間並不重要)。

假設我設法做到了這一點,那麼在將文件 rsync 到雲時,我可以期待什麼資源使用情況?

誰能建議一個更好的方法來做到這一點?我很快就用完了磁碟空間,所以需要盡快修復和存檔這張表。

您是否嘗試過nice -n10為命令添加前綴?

10是預設值。範圍從-20(最高優先級)到19(最低)。

除了 rsync 頻寬限制之外的兩個選擇:

  • ionice -c 3 cp foo bar
  • buffer -u 150 -m 16m -s 100m -p 75 -i foo -o bar

ionice將與 I/O 調度程序互動。 buffer是一個循環緩衝區,旨在幫助字元設備提高效率,但-u 150寫入之間會暫停 150 微秒,根據手冊,這可能足以讓磁碟空間呼吸。

兩者ionicebuffer可以在庫存的 Ubuntu 版本中使用。iotop如果您碰巧在核心中配置了 CONFIG_TASK_DELAY_ACCT 會很方便,但我的 Ubuntu 機器沒有,這嚴重限制了命令的可用性。我已經知道是哪個命令淹沒了我的硬碟,我只是想給它一些喘息的空間。

此外,在復製過程中,查看iostat -x 1(通常在 sysstat 包中)的輸出,並查看複製期間設備的 %busy 欄位為 90% 或更少。如果它是 99-100%,那麼你正在為 I/O 餓死其他程序。

引用自:https://serverfault.com/questions/258321