diff --git a/lib/backend.py b/lib/backend.py
index 4c537b5b944edbcee11f1b8d42e6a0d61d7d9aab..032547d22f0a8a35a100b988bf81d23c1818e11d 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -2517,6 +2517,32 @@ def BlockdevSnapshot(disk):
           disk.unique_id, disk.dev_type)
 
 
+def BlockdevSetInfo(disk, info):
+  """Sets 'metadata' information on block devices.
+
+  This function sets 'info' metadata on block devices. Initial
+  information is set at device creation; this function should be used
+  for example after renames.
+
+  @type disk: L{objects.Disk}
+  @param disk: the disk to be grown
+  @type info: string
+  @param info: new 'info' metadata
+  @rtype: (status, result)
+  @return: a tuple with the status of the operation (True/False), and
+      the errors message if status is False
+
+  """
+  r_dev = _RecursiveFindBD(disk)
+  if r_dev is None:
+    _Fail("Cannot find block device %s", disk)
+
+  try:
+    r_dev.SetInfo(info)
+  except errors.BlockDeviceError, err:
+    _Fail("Failed to set information on block device: %s", err, exc=True)
+
+
 def FinalizeExport(instance, snap_disks):
   """Write out the export configuration information.
 
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index ba13cac86e1acba6f5ab3455a7198c53da6e3d3f..6d998e4ce799592ae974a58343d3fa4a4b6ef41a 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -7480,6 +7480,15 @@ class LUInstanceRename(LogicalUnit):
                     new_file_storage_dir))
 
     _StartInstanceDisks(self, inst, None)
+    # update info on disks
+    info = _GetInstanceInfoText(inst)
+    for (idx, disk) in enumerate(inst.disks):
+      for node in inst.all_nodes:
+        self.cfg.SetDiskID(disk, node)
+        result = self.rpc.call_blockdev_setinfo(node, disk, info)
+        if result.fail_msg:
+          self.LogWarning("Error setting info on node %s for disk %s: %s",
+                          node, idx, result.fail_msg)
     try:
       result = self.rpc.call_instance_run_rename(inst.primary_node, inst,
                                                  old_name, self.op.debug_level)
diff --git a/lib/rpc_defs.py b/lib/rpc_defs.py
index c6ae9671abfee484a5110ffd250d0daf13eab8ca..15344b5eb21125be6934f45cffd9b88f19c9fdfd 100644
--- a/lib/rpc_defs.py
+++ b/lib/rpc_defs.py
@@ -418,6 +418,10 @@ _BLOCKDEV_CALLS = [
     ], _BlockdevGetMirrorStatusMultiPreProc,
    _BlockdevGetMirrorStatusMultiPostProc,
     "Request status of (mirroring) devices from multiple nodes"),
+  ("blockdev_setinfo", SINGLE, None, constants.RPC_TMO_NORMAL, [
+    ("disk", ED_OBJECT_DICT, None),
+    ("info", None, None),
+    ], None, None, "Sets metadata information on a given block device"),
   ]
 
 _OS_CALLS = [
diff --git a/lib/server/noded.py b/lib/server/noded.py
index 203dc3cc1d25f69ab3ea572a421856a79780a5d6..2ff474c22280f90a6f12ee20f880d923f86d0ef5 100644
--- a/lib/server/noded.py
+++ b/lib/server/noded.py
@@ -367,6 +367,15 @@ class NodeRequestHandler(http.server.HttpServerHandler):
     dest_node, dest_path, cluster_name = params[1:]
     return backend.BlockdevExport(disk, dest_node, dest_path, cluster_name)
 
+  @staticmethod
+  def perspective_blockdev_setinfo(params):
+    """Sets metadata information on the given block device.
+
+    """
+    (disk, info) = params
+    disk = objects.Disk.FromDict(disk)
+    return backend.BlockdevSetInfo(disk, info)
+
   # blockdev/drbd specific methods ----------
 
   @staticmethod