diff --git a/src/bin/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c
new file mode 100644
index f2f3ac5..c76de2c
*** a/src/bin/pg_upgrade/controldata.c
--- b/src/bin/pg_upgrade/controldata.c
*************** get_control_data(ClusterInfo *cluster, b
*** 150,157 ****
  				/* remove leading spaces */
  				while (*p == ' ')
  					p++;
! 				if (strcmp(p, "shut down\n") != 0 &&
! 					strcmp(p, "shut down in recovery\n") != 0)
  				{
  					if (cluster == &old_cluster)
  						pg_fatal("The source cluster was not shut down cleanly.\n");
--- 150,163 ----
  				/* remove leading spaces */
  				while (*p == ' ')
  					p++;
! 				if (strcmp(p, "shut down in recovery\n") == 0)
! 				{
! 					if (cluster == &old_cluster)
! 						pg_fatal("The source cluster was shut down while in recovery mode.  To upgrade it, use \"rsync\" or shut it down as a primary.\n");
! 					else
! 						pg_fatal("The target cluster was shut down while in recovery mode.  To upgrade it, use \"rsync\" or shut it down as a primary.\n");
! 				}
! 				else if (strcmp(p, "shut down\n") != 0)
  				{
  					if (cluster == &old_cluster)
  						pg_fatal("The source cluster was not shut down cleanly.\n");
