加速 cp -a 的方法(在拇指驅動器中使用 cp -a 非常慢)

加速 cp -a 的方法(在拇指驅動器中使用 cp -a 非常慢)

當使用具有持久作業系統的拇指驅動器時,casper-rw如果在關閉作業系統後過早拔出拇指驅動器,持久分區可能會被損壞。

不幸的是,在 ubuntustudio-20.04.2 中,當螢幕黑屏時,我在單擊關閉按鈕後經歷了長達一分鐘的時間,但casper-rw分區上發生了大量寫入操作。因此,過早拉動操縱桿很容易將其毀壞。

為了從這樣的事故中恢復,我創建了一個備份分區,casper-rw並在正確設定變數 QUELLE 和 ZIEL 後使用命令(成為超級用戶後):

time cp -a "${QUELLE}/upper" "${ZIEL}"

time cp -a "${QUELLE}/work" "${ZIEL}"

time cp -a "${QUELLE}/lost+found" "${ZIEL}"

當我的腳本運行時,我看到

  • CPU 活動非常低
  • 記憶體使用量非常少
  • htop向我展示了該cp -a過程大部分時間都處於狀態 D。

如果我沒猜錯的話(請糾正我),這意味著電腦必須經常等待,因為 USB 記憶棒的控制器無法有效地處理如此多的讀寫操作(儘管它是 USB3 插槽中的 USB3 裝置!) 。

有沒有辦法讓 cp -a 使用更大的緩衝區來加快速度,理想情況下順序寫入整個檔案?

答案1

看起來可以透過先將分割區中的目錄 和(如果存在)複製到 SSD 上的某個目錄來顯著upper加快work複製lost+found速度casper-rw。此步驟需要 2​​ 分鐘多一點的時間。人們可以用於cp -a這一目的。

如果您希望將備份保存在單獨分區中的同一個記憶棒上,則將其從 SSD 複製到 USB 記憶棒cp -a大約需要31 分鐘(對於大約66500 個檔案中的4.1 GiB 數據,USB3 記憶棒位於USB3 插槽中) 。rm -rf "${ZIEL}/upper"; rm -rf "${ZIEL}/work"; rm -rf "${ZIEL}/lost+found在將任何目前內容複製到備份分割區之前,該分割區先前的內容已被擦除)。

有誰知道如果在重新使用之前以這種方式擦除分區是否會產生影響,或者如果在淨內容放置在那裡之前對其進行格式化是否會加快速度?萬一損壞,casper-rw必須先對其進行格式化,然後才能從備份中還原其內容。

當然,可以透過將備份製作為 來進一步改進這一點backup.tar.gz。這減少了要寫入的資料量,尤其是第二步將從中受益。

答案2

用於sync強制立即寫入目標

當您的cp檔案出現在目標檔案系統上時,並不能保證該檔案實際上位於儲存媒體上。

原因是,資料首先在各個內部緩衝區之間獲取,這樣速度更快且用戶友好,直到資料實際位於目標儲存裝置上。將資料寫入目標裝置實際上是在背景執行的,不會消耗很多 CPU 週期,因此可能很難在活動監視器中看到它。

sync您始終可以嘗試透過在複製後使用來強制立即從緩衝區寫入目標儲存設備,例如cp ${QUELLE} ${ZIEL} && sync

另外,請考慮rsync僅將文件複製到已更改或新的目標。

相關內容