--- a/src/setup/setup.c
+++ b/src/setup/setup.c
@@ -83,6 +83,9 @@ static int verify_esp(const char *p, uin
         blkid_probe b = NULL;
         int r;
         const char *v;
+        char buf[1024];
+
+	memset(buf, 0, sizeof(buf));
 
         if (statfs(p, &sfs) < 0) {
                 fprintf(stderr, "Failed to check file system type of %s: %m\n", p);
@@ -122,24 +125,38 @@ static int verify_esp(const char *p, uin
                 return -ENODEV;
         }
 
-        r = asprintf(&t, "/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
+        r = asprintf(&t, "/sys/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
         if (r < 0) {
                 fprintf(stderr, "Out of memory.\n");
                 return -ENOMEM;
         }
 
+	r = readlink(t, buf, sizeof(buf) - 1);
+	if (r < 0) {
+		fprintf(stderr, "Failed to identify device node for block device %u:%u\n", major(st.st_dev), minor(st.st_dev));
+		return -ENOMEM;
+	}
+
+	r = asprintf(&t, "/dev/%s", basename(buf));
+	if (r < 0) {
+		fprintf(stderr, "Out of memory.\n");
+		return -ENOMEM;
+	}
+
         errno = 0;
         b = blkid_new_probe_from_filename(t);
-        free(t);
         if (!b) {
                 if (errno != 0) {
-                        fprintf(stderr, "Failed to open file system %s: %m\n", p);
+                        fprintf(stderr, "Failed to open file system %s on %s: %m\n", p, t);
+			free(t);
                         return -errno;
                 }
 
+		free(t);
                 fprintf(stderr, "Out of memory.\n");
                 return -ENOMEM;
         }
+	free(t);
 
         blkid_probe_enable_superblocks(b, 1);
         blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE);