# Detaching a file storage from a VM

1. Unmount the [file storage](../../concepts/filesystem.md) from the [VM](../../concepts/vm.md):
   1. [Connect](../vm-connect/ssh.md) to the VM over SSH.
   1. If you previously added a line to the `/etc/fstab` file to automatically mount the file storage to the VM at startup (e.g., when [attaching the storage to the VM](attach-to-vm.md)), delete that line.
   1. Run this command:

      ```bash
      sudo umount <mount_path>
      ```

   1. To check that your file storage is unmounted, run this command:

      ```bash
      df -T
      ```

      The result must show no `virtiofs` type file system mapped to the file storage:

      ```text
      Filesystem        Type         1K-blocks    Used Available Use% Mounted on
      udev              devtmpfs        988600       0    988600   0% /dev
      tmpfs             tmpfs           203524     780    202744   1% /run
      /dev/vda2         ext4          13354932 1909060  10861420  15% /
      tmpfs             tmpfs          1017604       0   1017604   0% /dev/shm
      tmpfs             tmpfs             5120       0      5120   0% /run/lock
      tmpfs             tmpfs          1017604       0   1017604   0% /sys/fs/cgroup
      tmpfs             tmpfs           203520       0    203520   0% /run/user/1000
      ```

1. [Stop the VM](../vm-control/vm-stop-and-start.md).
1. Detach the file storage from the VM in Compute Cloud:

   {% list tabs group=instructions %}

   - Management console {#console}

     1. In the [management console](https://console.yandex.cloud), select the [folder](../../../resource-manager/concepts/resources-hierarchy.md#folder) where your file storage resides.
     1. Navigate to **Compute Cloud**.
     1. In the left-hand panel, select ![image](../../../_assets/console-icons/nodes-right.svg) **File storages**.
     1. Select the storage.
     1. Go to the **Virtual machines** tab.
     1. In the line with the VM in question, click ![image](../../../_assets/console-icons/ellipsis.svg) and select **Detach file storage**.
     1. In the window that opens, confirm the detachment.

   - CLI {#cli}

     If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../../cli/quickstart.md#install).

     The folder used by default is the one specified when [creating](../../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

     1. See the description of the [CLI](../../../cli/index.md) command for attaching a file storage to a VM:

        ```bash
        yc compute instance detach-filesystem --help
        ```

     1. Get a list of file storages in the default [folder](../../../resource-manager/concepts/resources-hierarchy.md#folder):

        ```bash
        yc compute filesystem list
        ```
        
        Result:
        
        ```text
        +----------------------+-------------------+------------+---------------+--------+-------------+
        |          ID          |        NAME       |    SIZE    |     ZONE      | STATUS | DESCRIPTION |
        +----------------------+-------------------+------------+---------------+--------+-------------+
        | epdtcr9blled******** | first-filesystem  | 1073741824 | ru-central1-a | READY  |             |
        | epd3f4gv8bs4******** | second-filesystem | 1073741824 | ru-central1-a | READY  |             |
        +----------------------+-------------------+------------+---------------+--------+-------------+
        ```

     1. Get a list of VMs in the default folder:

        ```bash
        yc compute instance list
        ```

        Result:

        ```text
        +----------------------+-------+---------------+---------+--------------+-------------+
        |          ID          | NAME  |    ZONE ID    | STATUS  |  EXTERNAL IP | INTERNAL IP |
        +----------------------+-------+---------------+---------+--------------+-------------+
        | epdj4upltbiv******** | vm-01 | ru-central1-a | RUNNING | 51.250.**.** | 192.168.*.* |
        | 1pc3088tkv4m******** | vm-02 | ru-central1-a | RUNNING | 84.201.**.** | 192.168.*.* |
        +----------------------+-------+---------------+---------+--------------+-------------+
          ```

     1. Detach the file storage from a VM:

        ```bash
        yc compute instance detach-filesystem \
          --id <VM_ID> \
          --filesystem-id <file_storage_ID>
        ```

        Where:
        * `--id`: VM ID.

          Instead of the ID, you can specify the VM name in the `--name` parameter.

        * `--filesystem-id`: File storage ID.

          Instead of the ID, you can specify the file storage name in the `--filesystem-name` parameter.

        As a result, the command will output the updated VM configuration. The detached file storage must not be featured in the `filesystems` section of the configuration you get.

   - Terraform {#tf}

     If you do not have Terraform yet, [install it and configure the Yandex Cloud provider](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
     
     
     To manage infrastructure using Terraform under a service account or user accounts (a Yandex account, a federated account, or a local user), [authenticate](../../../terraform/authentication.md) using the appropriate method.

     Set the `allow_stopping_for_update` parameter to `true` on your VM, if you have not done it yet.
     1. Open the Terraform configuration file and delete the section specifying the storage:

        {% cut "Example of specifying a storage in the VM configuration using Terraform" %}

        ```hcl
        ...
        resource "yandex_compute_instance" "vm-1" {

           name        = "test-vm"
           platform_id = "standard-v3"
           zone        = "ru-central1-a"

           filesystem {
             filesystem_id = "fhmaikp755gr********"
           }
        ...
        ```

        {% endcut %}

     1. Apply the changes:

        1. In the terminal, navigate to the configuration file directory.
        1. Make sure the configuration is correct using this command:
        
           ```bash
           terraform validate
           ```
        
           If the configuration is valid, you will get this message:
        
           ```bash
           Success! The configuration is valid.
           ```
        
        1. Run this command:
        
           ```bash
           terraform plan
           ```
        
           You will see a list of resources and their properties. No changes will be made at this step. Terraform will show any errors in the configuration.
        1. Apply the configuration changes:
        
           ```bash
           terraform apply
           ```
        
        1. Type `yes` and press **Enter** to confirm the changes.

     You can check that the storage has been detached from the VM using the [management console](https://console.yandex.cloud) or this [CLI](../../../cli/index.md) command:

     ```bash
     yc compute instance get <VM_name>
     ```

   - API {#api}

     Use the [detachFilesystem](../../api-ref/Instance/detachFilesystem.md) REST API method for the [Instance](../../api-ref/Instance/index.md) resource or the [InstanceService/DetachFilesystem](../../api-ref/grpc/Instance/detachFilesystem.md) gRPC API call.

   {% endlist %}