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 1/2] 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) { From 6aa65724fe2e0b1b020773303d5c08b4c4962c2b Mon Sep 17 00:00:00 2001 From: rawswar <112966837+rawswar@users.noreply.github.com> Date: Wed, 1 Oct 2025 12:17:56 +0800 Subject: [PATCH 2/2] fix: format check error in BackupManager Remove extra blank line to pass format check --- src/main/services/BackupManager.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/services/BackupManager.ts b/src/main/services/BackupManager.ts index 8ee3644467..bd5acd1f2b 100644 --- a/src/main/services/BackupManager.ts +++ b/src/main/services/BackupManager.ts @@ -354,7 +354,6 @@ class BackupManager { await new Promise((res) => setTimeout(res, 500)) } - logger.debug('Backup completed successfully') return backupedFilePath } catch (error) {