From fe9fdec3ca8e217f11117d0bf135757f8db1d34b Mon Sep 17 00:00:00 2001 From: rawswar <112966837+rawswar@users.noreply.github.com> Date: Wed, 1 Oct 2025 09:17:02 +0800 Subject: [PATCH] Update BackupManager.ts Add fsync to prevent backup file corruption (#10476) --- src/main/services/BackupManager.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/services/BackupManager.ts b/src/main/services/BackupManager.ts index c6d3ee1841..8ee3644467 100644 --- a/src/main/services/BackupManager.ts +++ b/src/main/services/BackupManager.ts @@ -340,6 +340,21 @@ class BackupManager { await fs.remove(this.tempDir) onProgress({ stage: 'completed', progress: 100, total: 100 }) + // 强制将文件系统缓存同步到磁盘,防止因竞争条件导致文件损坏。 + try { + const fileDescriptor = await fs.open(backupedFilePath, 'r') + await fs.fsync(fileDescriptor) + await fs.close(fileDescriptor) + logger.debug(`[BackupManager] Backup file synced to disk successfully: ${backupedFilePath}`) + } catch (syncError) { + logger.error( + '[BackupManager] Failed to explicitly sync backup file to disk. Falling back to a brief delay.', + syncError as Error + ) + await new Promise((res) => setTimeout(res, 500)) + } + + logger.debug('Backup completed successfully') return backupedFilePath } catch (error) {