diff --git a/diskimage_builder/block_device/blockdevice.py b/diskimage_builder/block_device/blockdevice.py
index 4e404bddf..71ab3604e 100644
--- a/diskimage_builder/block_device/blockdevice.py
+++ b/diskimage_builder/block_device/blockdevice.py
@@ -172,13 +172,20 @@ class BlockDevice(object):
     trap - EXIT
     """
 
-    def _merge_into_config(self):
-        """Merge old (default) config into new
+    def _merge_rootfs_params(self):
+        """Merge rootfs related parameters into configuration
+
+        To maintain compatability with some old block-device
+        environment variables from before we had a specific
+        block-device config, disk-image-create provides a "parameters"
+        file that translates the old bash-environment variables into a
+        YAML based configuration file (``self.params``).
+
+        Here we merge the values in this parameters file that relate
+        to the root file-system into the final configuration.  We look
+        for the ``mkfs_root`` node in the new config, and pull the
+        relevant settings from the parameters into it.
 
-        There is the need to be compatible using some old environment
-        variables.  This is done in the way, that if there is no
-        explicit value given, these values are inserted into the current
-        configuration.
         """
         for entry in self.config:
             for k, v in entry.items():
@@ -198,7 +205,18 @@ class BlockDevice(object):
                         if self.params['root-label'] is not None:
                             v['label'] = self.params['root-label']
                         else:
-                            v['label'] = "cloudimg-rootfs"
+                            # The default label is "cloudimg-rootfs"
+                            # for historical reasons (upstream
+                            # images/EC2 defaults/cloud-init etc).  We
+                            # want to remain backwards compatible, but
+                            # unfortunately that's too long for XFS so
+                            # we've decided on 'img-rootfs' in that
+                            # case.  Note there's separate checks if
+                            # the label is specified explicitly.
+                            if v.get('type') == 'xfs':
+                                v['label'] = 'img-rootfs'
+                            else:
+                                v['label'] = 'cloudimg-rootfs'
 
     def __init__(self, params):
         """Create BlockDevice object
@@ -241,7 +259,7 @@ class BlockDevice(object):
         logger.debug("Config before merge [%s]", self.config)
         self.config = config_tree_to_graph(self.config)
         logger.debug("Config before merge [%s]", self.config)
-        self._merge_into_config()
+        self._merge_rootfs_params()
         logger.debug("Final config [%s]", self.config)
         # Write the final config
         with open(self.config_json_file_name, "wt") as fd:
@@ -282,18 +300,21 @@ class BlockDevice(object):
         :param symbol: the symbol to get
         """
         logger.info("Getting value for [%s]", symbol)
+
         if symbol == "root-label":
             root_mount = self._config_get_mount("/")
             root_fs = self._config_get_mkfs(root_mount['base'])
             logger.debug("root-label [%s]", root_fs['label'])
             print("%s" % root_fs['label'])
             return 0
+
         if symbol == "root-fstype":
             root_mount = self._config_get_mount("/")
             root_fs = self._config_get_mkfs(root_mount['base'])
             logger.debug("root-fstype [%s]", root_fs['type'])
             print("%s" % root_fs['type'])
             return 0
+
         if symbol == 'mount-points':
             mount_points = self._config_get_all_mount_points()
             # we return the mountpoints joined by a pipe, because it is not
diff --git a/diskimage_builder/block_device/level2/mkfs.py b/diskimage_builder/block_device/level2/mkfs.py
index 41f458d4d..d213b0c9e 100644
--- a/diskimage_builder/block_device/level2/mkfs.py
+++ b/diskimage_builder/block_device/level2/mkfs.py
@@ -58,13 +58,6 @@ class FilesystemNode(NodeBase):
         if self.label is None:
             self.label = self.name
 
-        # Historic reasons - this will hopefully vanish in one of
-        # the next major releases
-        if self.label == "cloudimg-rootfs" and self.type == "xfs":
-            logger.warning("Default label [cloudimg-rootfs] too long for xfs "
-                           "file system - using [img-rootfs] instead")
-            self.label = "img-rootfs"
-
         # ensure we don't already have a fs with this label ... they
         # all must be unique.
         if 'fs_labels' in self.state:
diff --git a/releasenotes/notes/incorrect-grub-label-5d2000215c0cc73e.yaml b/releasenotes/notes/incorrect-grub-label-5d2000215c0cc73e.yaml
new file mode 100644
index 000000000..ecaaf6ee5
--- /dev/null
+++ b/releasenotes/notes/incorrect-grub-label-5d2000215c0cc73e.yaml
@@ -0,0 +1,5 @@
+---
+fixes:
+  - |
+    This fixes bug 1742170 where the grub root label is different than the
+    file system label when booting from a whole disk image.