本文說明如何排解及解決移轉和代理程式問題,以及如何尋找代理程式記錄來協助排解問題。
錯誤
下表說明轉移錯誤訊息和解決方法:
錯誤訊息 | 錯誤類型 | 錯誤代表的意義 | 如何解決錯誤 |
---|---|---|---|
檔案在移轉過程中遭到修改 | FILE_MODIFIED_FAILURE | 每次 Storage 移轉服務嘗試複製來源檔案時,來源檔案都會在移轉期間遭到修改。 | 在下一次 Storage 移轉服務作業期間,防止寫入指定檔案。 |
無法移轉 | PRECONDITION_FAILURE | 每次 Storage Transfer Service 嘗試上傳檔案時,與來源檔案相關聯的 Cloud Storage 物件都會遭到修改。 | 建立移轉工作時,請使用不重複的 Cloud Storage 物件前置字串,防止多個移轉工作將相同檔案寫入同一個 Cloud Storage 值區。 |
找不到來源目錄 | SOURCE_DIR_NOT_FOUND | 指定來源路徑有誤,或路徑正確但並非所有代理程式都能存取。 | 檢查轉移作業設定,並確認下列事項:
|
找不到作業的來源或目的地目錄 | ROOT_DIR_NOT_FOUND | 指定來源/目的地路徑有誤,或路徑正確,但並非所有代理程式都能存取該路徑。 | 檢查轉移作業設定,並確認下列事項:
|
找不到檔案 | FILE_NOT_FOUND_FAILURE | 系統找到來源檔案,但該檔案在轉移至 Cloud Storage 前已遭刪除。 | 如果檔案是誤刪,請還原檔案,以便下一個轉移作業上傳檔案。 |
找不到目標值區 | BUCKET_NOT_FOUND | Cloud Storage 中不存在目的地值區。 | 確認目的地 bucket 的拼字正確無誤,且該 bucket 存在。 |
找不到內部中繼資料物件 | METADATA_OBJECT_ NOT_FOUND_FAILURE |
Storage 移轉服務會將中繼資料儲存在目的地值區,並加上 storage-transfer 前置字串。如果中繼資料檔案在對應的轉移作業完成前遭到刪除,就會顯示這項錯誤。
|
在所有轉移作業完成前,請避免刪除目的地 bucket 中前置字串為 storage-transfer/ 的物件。 |
因檔案名稱無效而失敗 | INVALID_FILE_NAME | 來源檔案路徑無效。 | 確認並修正指定檔案路徑。確認路徑使用的字元為 Cloud Storage 支援的字元。 |
儲存空間類別無效,因此失敗 | INVALID_FILE_STORAGE_CLASS | 指定來源的儲存空間類別不允許讀取。 | 請參閱雲端服務供應商的說明文件,瞭解如何將資料移至允許複製資料的儲存空間類別。 |
續傳上傳工作階段 URI 無效,因此作業失敗 | SESSION_URI_INVALID | 續傳上傳 ID 或工作階段 URI 已過期或取消。 | 系統重試失敗作業的方式有誤。請與支援團隊聯絡。 |
檔案大小無效,因此失敗 | INVALID_FILE_SIZE | 檔案大小無效。 | 如要將檔案移轉至 Cloud Storage,請確認檔案大小 >= 0 且 <= 5 TiB (Cloud Storage 物件大小上限)。 |
因權限問題而失敗 | PERMISSION_FAILURE 和 UNAUTHENTICATED | 移轉代理人的權限不足,無法執行作業。此錯誤有兩種可能原因:
|
請確認下列事項:
|
物件受值區的保留政策限制,無法刪除、覆寫或封存 | PERMISSION_FAILURE | 值區已啟用資料保留政策,且物件已存在於值區中。Storage 移轉服務無法覆寫值區中的現有物件。如果來源檔案已變更,或儲存空間轉移服務因網路狀況而嘗試上傳兩次,且第一次上傳成功,就可能會顯示這項錯誤。 | 確認 Cloud Storage 值區中的資料符合預期。您可以重新執行工作,確認來源檔案的大小和修改時間 (mtime) 與對應的 Cloud Storage 物件相符,且沒有任何錯誤。 |
服務缺少必要權限 | SERVICE_PERMISSION_FAILURE | 儲存空間移轉服務的權限不足,無法執行作業。 |
Storage 移轉服務會使用Google 代管的服務帳戶 (通常格式為 project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com ) 存取資源。如要判斷特定 PROJECT_NUMBER ,請使用
googleserviceaccounts.get API 呼叫。
確認服務帳戶具備下列角色:
|
不支援的代理程式 | AGENT_UNSUPPORTED_VERSION | 這個代理程式版本已不再與 Storage 移轉服務相容。 | 這是暫時性錯誤,與代理程式更新失敗有關。如果發生這種情況,請按照下列步驟操作:
|
因雜湊不符而失敗 | HASH_MISMATCH_FAILURE | 每次 Storage 移轉服務嘗試上傳這個檔案時,上傳的位元組都會損毀。因此,導致本機檔案的雜湊與產生的 Cloud Storage 物件雜湊不符。 | 這項錯誤可能是由多種潛在問題所導致。如果大量轉移作業中出現少數雜湊不符失敗情形 (低於 1%),請重試失敗的檔案。如果雜湊不符失敗的百分比很高 (1% 以上),建議您調查代理程式電腦上可能發生的記憶體、CPU 或其他硬體故障。 |
由於檔案模式不受支援而失敗 | UNSUPPORTED_FILE_MODE | Storage 轉移服務發現檔案採用不支援的模式,例如裝置、通訊端、具名管道或不規則檔案。 | 從來源目錄中移除這些特殊檔案類型。 |
檔案系統發生錯誤,因此失敗 | FILESYSTEM_ERROR | 執行讀取、搜尋或統計等檔案系統作業時,代理程式發生檔案系統或作業系統錯誤。 | 請詳閱失敗說明,瞭解哪個檔案系統作業失敗。確認檔案系統可供地端代理程式存取,且能回應基本檔案作業。 |
檔案系統空間不足,因此無法執行這項操作 | FILESYSTEM_NO_SPACE_ON_DEVICE | 執行開啟或寫入等檔案系統作業時,代理程式空間不足。 | 請詳閱失敗說明,瞭解哪個檔案系統作業失敗。確認檔案系統有足夠空間可執行檔案作業。 |
因不明錯誤而失敗 | UNKNOWN_FAILURE | 發生未預期的錯誤。 | 請詳閱失敗說明。如果失敗說明未提供足夠資訊來解決問題,請與支援團隊聯絡。 |
規格無效,因此失敗 | INVALID_SPEC | 代理程式收到損毀的內部規格。 | 檢查代理主機是否有資料損毀,如果找不到任何資料,請與支援團隊聯絡。 |
資訊清單檔案空白或無效,因此失敗 | CONFORMANCE_FAILURE | 由於格式或 CSV 項目無效,代理程式無法讀取或取得有效的 CSV 位元組。 | 請確認資訊清單項目是否為有效檔案路徑。如果失敗說明未提供足夠資訊來解決問題,請與支援團隊聯絡。 |
由於權限遭拒錯誤,因此改用可續傳上傳,而非多部分上傳 | PERMISSION_FAILURE | 已為這項轉移作業啟用多部分上傳功能,但值區未設定正確的權限。 | 如要瞭解必要權限,請參閱「多部分上傳」一節的 檔案系統權限。 |
條目順序錯誤 | INCOMPATIBLE_LIST_ORDER_FAILURE | 來源檔案系統傳回的檔案清單順序與 Storage 移轉服務不相容。Storage 移轉服務要求來源檔案系統以字典順序傳回檔案。 | 確認檔案系統會依字典順序傳回檔案。 |
查看代理程式記錄
代理程式記錄包含與代理程式程序相關的資訊,有助於排解代理程式連線問題。如果代理程式在 Google Cloud 控制台中顯示為已連線,但您遇到轉移失敗的問題,請參閱「查看錯誤」一文,查看轉移錯誤的範例。如要查看記錄檔,瞭解 Storage 移轉服務在移轉期間考量的每個檔案,請參閱「查看移轉記錄」。
根據預設,代理程式記錄會儲存在 /tmp
。您可以使用 --log-dir=logs-directory
指令列選項變更位置。
記錄檔名稱為:
agent.hostname.username.log.log-level.timestamp
其中:
hostname
- 代理程式執行的主機名稱。username
- 執行代理程式的使用者名稱。log-level
為下列其中一項:INFO
- 資訊型訊息ERROR
- 移轉期間發生錯誤,但不會導致移轉工作停止。FATAL
- 發生錯誤,導致轉移作業無法繼續。
timestamp
-YYYYMMDD-hhmmss.thread-id
格式的時間戳記。
記錄目錄包含每個優先順序層級的最新記錄符號連結:
agent.ERROR
agent.FATAL
agent.INFO
傳輸速度緩慢
如果資料轉移時間過長,請檢查下列事項:
檔案系統的讀取輸送量應約為所需上傳速度的 1.5 倍。您可以使用 FIO 測試檔案系統的讀取輸送量。
安裝 fio:
sudo apt install -y fio
建立新目錄
fiotest
:TEST_DIR=/mnt/mnt_dir/fiotest
sudo mkdir -p $TEST_DIR
測試讀取總處理量:
sudo fio --directory=$TEST_DIR --direct=1 --rw=randread --randrepeat=0 --ioengine=libaio --bs=1M --iodepth=8 --time_based=1 --runtime=180 --name=read_test --size=1G
執行上述指令後,Fio 會產生報表。標示為「bw」的行代表所有執行緒的總匯總頻寬,可用於做為讀取處理量的 Proxy。
使用 iPerf3 檢查可供 Storage 移轉服務使用的網際網路頻寬。
請確保每個轉移代理程式至少有 4 個 vCPU 和 8 GB 的 RAM。
如果已檢查上述條件,但傳輸時間仍過長,可以新增其他代理程式,增加資料檔案系統的並行連線數。
如要進一步瞭解如何發揮轉移代理程式的最佳效能,請參閱「代理程式最佳做法」。
排解代理程式錯誤
下列各節說明如何排解及解決轉移代理程式錯誤:
代理程式未連線
如果轉移代理程式未顯示為已連線,請在 Google Cloud 控制台中執行下列操作:
確認代理程式可以連線至 Cloud Storage API:
在與轉移代理程式相同的機器上執行下列指令,測試代理程式與 Cloud Storage API 的連線:
gcloud storage cp test.txt gs://my-bucket
取代:
my-bucket
改成您的 Cloud Storage 值區名稱。
如果專案使用 VPC Service Controls,請查看代理程式記錄是否有錯誤。如果 VPC Service Controls 設定錯誤,
INFO
代理程式記錄會包含下列錯誤:Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: id
輸出內容如下:
代理程式已連線,但工作失敗
如果代理程式顯示為已連線,但移轉工作失敗,請檢查失敗工作的錯誤詳細資料。
Proxy 拒絕 IP 位址
如果您透過 Squid 等 Proxy 執行作業,並使用允許清單,系統可能會因為使用 IP 位址而非主機名稱,而拒絕要求。
如要解決這個問題,請使用 docker run 指令執行代理程式,並新增下列標記:
--transfer-service-endpoint=storagetransfer.googleapis.com:443
如果您使用替代端點連線至 googleapis.com
(例如 Private Service Connect),請將 googleapis.com
替換為替代端點。
代理程式無法使用自行簽署的憑證連線至 HTTPS 端點
如果代理程式無法使用自行簽署的憑證連線至 HTTPS 端點,請使用額外的 -v
選項,將自訂憑證套件掛接到容器的預設位置 (/etc/ssl/certs
)。
如要這麼做,請修改 docker run
指令,並新增下列標記:
-v PATH_TO_LOCAL_CERT:/etc/ssl/certs/ca-certificates.crt
取代:
- PATH_TO_LOCAL_CERT,並將路徑設為自訂憑證檔案。