diff --git a/app/vmbackup/main.go b/app/vmbackup/main.go
index bbf36d3746..cda5f3bd20 100644
--- a/app/vmbackup/main.go
+++ b/app/vmbackup/main.go
@@ -49,6 +49,11 @@ func main() {
 	logger.Init()
 	pushmetrics.Init()
 
+	// Storing snapshot delete function to be able to call it in case
+	// of error since logger.Fatal will exit the program without
+	// calling deferred functions.
+	var deleteSnapshot func()
+
 	if len(*snapshotCreateURL) > 0 {
 		// create net/url object
 		createUrl, err := url.Parse(*snapshotCreateURL)
@@ -80,12 +85,14 @@ func main() {
 			logger.Fatalf("cannot set snapshotName flag: %v", err)
 		}
 
-		defer func() {
-			err := snapshot.Delete(deleteUrl.String(), name)
+		deleteSnapshot = func() {
+			err := snapshot.Delete(deleteURL.String(), name)
 			if err != nil {
 				logger.Fatalf("cannot delete snapshot: %s", err)
 			}
-		}()
+		}
+
+		defer deleteSnapshot()
 	} else if len(*snapshotName) == 0 {
 		logger.Fatalf("`-snapshotName` or `-snapshot.createURL` must be provided")
 	}
@@ -97,14 +104,17 @@ func main() {
 
 	srcFS, err := newSrcFS()
 	if err != nil {
+		deleteSnapshot()
 		logger.Fatalf("%s", err)
 	}
 	dstFS, err := newDstFS()
 	if err != nil {
+		deleteSnapshot()
 		logger.Fatalf("%s", err)
 	}
 	originFS, err := newOriginFS()
 	if err != nil {
+		deleteSnapshot()
 		logger.Fatalf("%s", err)
 	}
 	a := &actions.Backup{
@@ -114,6 +124,7 @@ func main() {
 		Origin:      originFS,
 	}
 	if err := a.Run(); err != nil {
+		deleteSnapshot()
 		logger.Fatalf("cannot create backup: %s", err)
 	}
 	srcFS.MustStop()
@@ -123,6 +134,7 @@ func main() {
 	startTime := time.Now()
 	logger.Infof("gracefully shutting down http server for metrics at %q", *httpListenAddr)
 	if err := httpserver.Stop(*httpListenAddr); err != nil {
+		deleteSnapshot()
 		logger.Fatalf("cannot stop http server for metrics: %s", err)
 	}
 	logger.Infof("successfully shut down http server for metrics in %.3f seconds", time.Since(startTime).Seconds())
diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
index 0f1ec886cb..c393e6a300 100644
--- a/docs/CHANGELOG.md
+++ b/docs/CHANGELOG.md
@@ -17,6 +17,7 @@ The following tip changes can be tested by building VictoriaMetrics components f
 
 * BUGFIX: prevent from slow [snapshot creating](https://docs.victoriametrics.com/#how-to-work-with-snapshots) under high data ingestion rate. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3551).
 * BUGFIX: [vmauth](https://docs.victoriametrics.com/vmauth.html):  suppress [proxy protocol](https://www.haproxy.org/download/2.3/doc/proxy-protocol.txt) parsing errors in case of `EOF`. Usually, the error is caused by health checks and is not a sign of an actual error.
+* BUGFIX: [vmbackup](https://docs.victoriametrics.com/vmbackup.html): fix snapshot not being deleted in case of error during backup. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2055).
 
 ## [v1.87.3](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.87.3)