diff --git a/src/bin/pg_checksums/pg_checksums.c b/src/bin/pg_checksums/pg_checksums.c
index 831cf42d3a..c24e3d4093 100644
--- a/src/bin/pg_checksums/pg_checksums.c
+++ b/src/bin/pg_checksums/pg_checksums.c
@@ -32,7 +32,9 @@
 
 
 static int64 files = 0;
+static int64 total_files_modified = 0;
 static int64 blocks = 0;
+static int64 total_blocks_modified = 0;
 static int64 badblocks = 0;
 static ControlFileData *ControlFile;
 
@@ -195,6 +197,7 @@ scan_file(const char *fn, BlockNumber segmentno)
 	int			f;
 	BlockNumber blockno;
 	int			flags;
+	int64		blocks_modified = 0;
 
 	Assert(mode == PG_MODE_ENABLE ||
 		   mode == PG_MODE_CHECK);
@@ -256,6 +259,13 @@ scan_file(const char *fn, BlockNumber segmentno)
 		{
 			int			w;
 
+			/* Do not rewrite if the checksum is already set to the expected value */
+			if (header->pd_checksum == csum) {
+				continue;
+			}
+
+			blocks_modified++;
+
 			/* Set checksum in page header */
 			header->pd_checksum = csum;
 
@@ -292,6 +302,12 @@ scan_file(const char *fn, BlockNumber segmentno)
 			pg_log_info("checksums enabled in file \"%s\"", fn);
 	}
 
+	if (blocks_modified)
+	{
+		total_files_modified++;
+		total_blocks_modified += blocks_modified;
+	}
+
 	close(f);
 }
 
@@ -637,8 +653,8 @@ main(int argc, char *argv[])
 			progress_report(true);
 
 		printf(_("Checksum operation completed\n"));
-		printf(_("Files scanned:  %s\n"), psprintf(INT64_FORMAT, files));
-		printf(_("Blocks scanned: %s\n"), psprintf(INT64_FORMAT, blocks));
+		printf(_("Files scanned:   %s\n"), psprintf(INT64_FORMAT, files));
+		printf(_("Blocks scanned:  %s\n"), psprintf(INT64_FORMAT, blocks));
 		if (mode == PG_MODE_CHECK)
 		{
 			printf(_("Bad checksums:  %s\n"), psprintf(INT64_FORMAT, badblocks));
@@ -647,6 +663,12 @@ main(int argc, char *argv[])
 			if (badblocks > 0)
 				exit(1);
 		}
+		else if (mode == PG_MODE_ENABLE)
+		{
+			printf(_("Files modified:  %s\n"), psprintf(INT64_FORMAT, total_files_modified));
+			printf(_("Blocks modified: %s\n"), psprintf(INT64_FORMAT, total_blocks_modified));
+		}
+
 	}
 
 	/*
@@ -659,7 +681,7 @@ main(int argc, char *argv[])
 		ControlFile->data_checksum_version =
 			(mode == PG_MODE_ENABLE) ? PG_DATA_CHECKSUM_VERSION : 0;
 
-		if (do_sync)
+		if (do_sync && total_files_modified)
 		{
 			pg_log_info("syncing data directory");
 			fsync_pgdata(DataDir, PG_VERSION_NUM);
