Skip to main content
When a Distributed File Storage PVC is deleted, the underlying data is not immediately removed. The Persistent Volume Management Operator (PVMO) enforces a 24-hour soft-delete window during which the PV and its data remain accessible. Within that window, you can recover the data by creating a new PVC that binds to the existing PV. When the new PVC binds to the PV, PVMO automatically removes the soft-delete marker and stops the deletion countdown.

Prerequisites

  • kubectl configured with access to the cluster where the PVC was deleted.
  • Admin permissions on the cluster (admin Cluster RoleBinding).
  • You know the name and namespace of the deleted PVC.
  • The 24-hour soft-delete window has not yet elapsed since the PVC was deleted.

Step 1: Find the original PV

Even after a PVC is deleted, its PV remains in the cluster until PVMO removes it. List all PVs to locate the one associated with the deleted PVC:
Look for a PV in Released status. If you know the original PVC name, you can filter by the claim reference in the CLAIM column (for example, [NAMESPACE]/[PVC-NAME]). Once you identify the PV, record its name. Replace [PV-NAME] with the PV name you found:
From the output, note the following fields. You will need all of them to create the replacement PV: The spec.csi.volumeHandle value is the unique identifier for the volume on the VAST storage backend. You must use the original value, not the new PV name. Using the new PV name instead will cause the CSI driver to search for a volume that does not exist.

Step 2: Create a new Persistent Volume

Create a new PV manifest that points to the same VAST volume handle. Replace the placeholder values with the values you recorded in step 1. Replace [NEW-PV-NAME] with a unique name for the new PV (for example, [ORIGINAL-PV-NAME]-recovered):
new-pv.yaml
Set persistentVolumeReclaimPolicy: Retain on the new PV. This ensures that if the new PVC is deleted before PVMO’s countdown on the original PV expires, the new PV itself is not immediately reclaimed.
Apply the manifest. Replace [PV-MANIFEST-FILE] with the path to your manifest:

Step 3: Create a new Persistent Volume Claim

Create a PVC manifest in the target namespace that binds explicitly to the new PV. Replace [NEW-PVC-NAME] and [TARGET-NAMESPACE] with your values:
new-pvc.yaml
The volumeName field explicitly binds this PVC to the PV you created in step 2. Without it, Kubernetes may bind to a different available PV. Apply the manifest. Replace [PVC-MANIFEST-FILE] with the path to your manifest:

Step 4: Verify the binding

Confirm that both the new PV and new PVC are in Bound status:
Example output
Once both show Bound, you can mount the new PVC in a pod as you would any other PVC. The original VAST data is accessible through the new PVC.

Step 5: Protect the PV from future deletion

After rebinding, add the protect label to the original PV to prevent PVMO from ever automatically deleting it. Replace [PV-NAME] with the name of the original PV from step 1:
Then remove the soft-delete timestamp label as an extra safety measure in case PVMO’s watcher cycle has not yet run:
The trailing - in the second command is kubectl syntax for removing a label.

If the soft-delete window has elapsed

If the 24-hour soft-delete window has already passed before you attempt recovery, the PV and its backing storage may have been permanently deleted. Contact CoreWeave Support to check whether a VAST snapshot is available for restoration.
Last modified on June 25, 2026