[Storage] Leakage of storage with persistent=False
Our storage is not linked with the cluster or task, so when the job finishes or the cluster is terminated, the storage will not be deleted even if the `persistent=False` is set.

```
# test.yaml
file_mounts:
  /dst:
    name: skypilot-zhwu-test-storage-persistent
    source: ~/tmpdir
    persistent: False

run: |
  echo hi
```

```
sky launch -c test-storage ./test.yaml
sky down test-storage
sky storage ls
```

This should be also related to #1203, as we need to store the storage information in the clusters' metadata.
Also, the `autodown` may also cause leakage for the storage, even after we add the info to the metadata.
cc @romilbhardwaj @michaelzhiluo 
diff --git a/sky/execution.py b/sky/execution.py
index 95db48a9..14fc2607 100644
--- a/sky/execution.py
+++ b/sky/execution.py
@@ -248,9 +248,11 @@ def _execute(
                 # Enables post_execute() to be run after KeyboardInterrupt.
                 backend.post_execute(handle, down)
 
+        if task.storage_mounts is not None:
+            backend.teardown_ephemeral_storage(task)
+
         if Stage.DOWN in stages:
             if down and idle_minutes_to_autostop is None:
-                backend.teardown_ephemeral_storage(task)
                 backend.teardown(handle, terminate=True)
     finally:
         if cluster_name != spot.SPOT_CONTROLLER_NAME:
['sky/execution.py']