diff --git a/e2e/rbd.go b/e2e/rbd.go
index 6edbfe57607..d47469a8b7b 100644
--- a/e2e/rbd.go
+++ b/e2e/rbd.go
@@ -189,12 +189,27 @@ func validateRBDImageCount(f *framework.Framework, count int, pool string) {
 		framework.Failf("failed to list rbd images: %v", err)
 	}
 	if len(imageList) != count {
+		var imageDetails []string // To collect details for all images
+		for _, image := range imageList {
+			imgInfoStr, err := getImageInfo(f, image, pool)
+			if err != nil {
+				framework.Logf("Error getting image info: %v", err)
+			}
+			imgStatusOutput, err := getImageStatus(f, image, pool)
+			if err != nil {
+				framework.Logf("Error getting image status: %v", err)
+			}
+			// Collecting image details for printing
+			imageDetails = append(imageDetails, fmt.Sprintf(
+				"Pool: %s, Image: %s, Info: %s, Status: %s", pool, image, imgInfoStr, imgStatusOutput))
+		}
 		framework.Failf(
 			"backend images not matching kubernetes resource count,image count %d kubernetes resource count %d"+
-				"\nbackend image Info:\n %v",
+				"\nbackend image Info:\n %v\n images information and status %v",
 			len(imageList),
 			count,
-			imageList)
+			imageList,
+			strings.Join(imageDetails, "\n"))
 	}
 }
 
diff --git a/e2e/rbd_helper.go b/e2e/rbd_helper.go
index 34a99ea0947..786660722df 100644
--- a/e2e/rbd_helper.go
+++ b/e2e/rbd_helper.go
@@ -1093,27 +1093,38 @@ type imageInfo struct {
 
 // getImageInfo queries rbd about the given image and returns its metadata, and returns
 // error if provided image is not found.
-func getImageInfo(f *framework.Framework, imageName, poolName string) (imageInfo, error) {
+func getImageInfo(f *framework.Framework, imageName, poolName string) (string, error) {
 	// rbd --format=json info [image-spec | snap-spec]
-	var imgInfo imageInfo
-
 	stdOut, stdErr, err := execCommandInToolBoxPod(
 		f,
 		fmt.Sprintf("rbd info %s %s --format json", rbdOptions(poolName), imageName),
 		rookNamespace)
 	if err != nil {
-		return imgInfo, fmt.Errorf("failed to get rbd info: %w", err)
+		return stdOut, fmt.Errorf("failed to get rbd info: %w", err)
 	}
 	if stdErr != "" {
-		return imgInfo, fmt.Errorf("failed to get rbd info: %v", stdErr)
+		return stdOut, fmt.Errorf("failed to get rbd info: %v", stdErr)
 	}
-	err = json.Unmarshal([]byte(stdOut), &imgInfo)
+
+	return stdOut, nil
+}
+
+// getImageStatus queries rbd about the given image and returns its metadata, and returns
+// error if provided image is not found.
+func getImageStatus(f *framework.Framework, imageName, poolName string) (string, error) {
+	// rbd --format=json status [image-spec | snap-spec]
+	stdOut, stdErr, err := execCommandInToolBoxPod(
+		f,
+		fmt.Sprintf("rbd status %s %s --format json", rbdOptions(poolName), imageName),
+		rookNamespace)
 	if err != nil {
-		return imgInfo, fmt.Errorf("unmarshal failed: %w. raw buffer response: %s",
-			err, stdOut)
+		return stdOut, fmt.Errorf("error retrieving rbd status: %w", err)
+	}
+	if stdErr != "" {
+		return stdOut, fmt.Errorf("failed to get rbd info: %v", stdErr)
 	}
 
-	return imgInfo, nil
+	return stdOut, nil
 }
 
 // validateStripe validate the stripe count, stripe unit and object size of the
@@ -1124,16 +1135,23 @@ func validateStripe(f *framework.Framework,
 	stripeCount,
 	objectSize int,
 ) error {
+	var imgInfo imageInfo
+
 	imageData, err := getImageInfoFromPVC(pvc.Namespace, pvc.Name, f)
 	if err != nil {
 		return err
 	}
 
-	imgInfo, err := getImageInfo(f, imageData.imageName, defaultRBDPool)
+	imgInfoStr, err := getImageInfo(f, imageData.imageName, defaultRBDPool)
 	if err != nil {
 		return err
 	}
 
+	err = json.Unmarshal([]byte(imgInfoStr), &imgInfo)
+	if err != nil {
+		return fmt.Errorf("unmarshal failed: %w. raw buffer response: %s", err, imgInfoStr)
+	}
+
 	if imgInfo.ObjectSize != objectSize {
 		return fmt.Errorf("objectSize %d does not match expected %d", imgInfo.ObjectSize, objectSize)
 	}