[Документация Yandex Cloud](../../../index.md) > [Yandex Compute Cloud](../../index.md) > [Пошаговые инструкции](../index.md) > Управление виртуальной машиной > Подключить диск к ВМ

# Подключить диск к виртуальной машине

Вы можете подключить дополнительный [диск](../../concepts/disk.md) к [работающей и остановленной ВМ](../../concepts/vm-statuses.md).

На ВМ с Linux из [Cloud Marketplace](https://yandex.cloud/ru-kz/marketplace) или из пользовательских образов с [установленным набором драйверов](../image-create/custom-image.md#requirements) подключенный дополнительный диск будет доступен в качестве нового устройства без перезагрузки ВМ. 

Чтобы диск был успешно подключен, операционная система ВМ должна быть полностью загружена или остановлена, иначе операция завершится с ошибкой. При возникновении ошибки остановите ВМ и повторите операцию.

На ВМ с Windows подключенный дополнительный диск будет доступен в качестве нового устройства только после перезагрузки ВМ.

При выборе диска для подключения к виртуальной машине можно указать, следует ли удалять этот диск при удалении соответствующей машины. Указать это можно при создании, изменении виртуальной машины и при подключении нового диска.

## Подключить диск {#attach}

{% note info %}

Подключить локальный диск к ВМ на [выделенном хосте](../../concepts/dedicated-host.md) можно только при ее создании. Подробнее читайте в [инструкциях](../index.md#dedicated-host).

{% endnote %}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите [каталог](../../../resource-manager/concepts/resources-hierarchy.md#folder), которому принадлежит ВМ.
  1. Перейдите в сервис **Compute Cloud**.
  1. На панели слева выберите ![image](../../../_assets/console-icons/hard-drive.svg) **Диски**.
  1. Выберите неподключенный диск или [создайте](../disk-create/empty.md) новый.
  1. Напротив диска, который вы хотите подключить, нажмите ![image](../../../_assets/console-icons/ellipsis.svg) и выберите **Присоединить**.
  1. В открывшемся окне:
     * В поле **ВМ** выберите виртуальную машину, к которой нужно подключить диск.
     * Если в хотите подключить [зашифрованный](../../concepts/encryption.md) диск, выберите [сервисный аккаунт](../../../iam/concepts/users/service-accounts.md) c [ролью](../../../kms/security/index.md#kms-keys-encrypterDecrypter) `kms.keys.encrypterDecrypter` на [ключ KMS](../../../kms/concepts/key.md), которым зашифрован диск.
     * Укажите название устройства.
     * При необходимости включите опцию **Удалять вместе с виртуальной машиной**.
  1. Нажмите кнопку **Подключить**.

- CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../cli/quickstart.md#install).

  По умолчанию используется каталог, указанный при [создании](../../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

  1. Посмотрите описание команды CLI для подключения дисков:

     ```bash
     yc compute instance attach-disk --help
     ```

  1. Получите список ВМ в [каталоге](../../../resource-manager/concepts/resources-hierarchy.md#folder) по умолчанию:

     ```bash
     yc compute instance list
     ```
     
     Результат:
     ```text
     +----------------------+-----------------+---------------+---------+----------------------+
     |          ID          |       NAME      |    ZONE ID    | STATUS  |     DESCRIPTION      |
     +----------------------+-----------------+---------------+---------+----------------------+
     | fhm0b28lgfp4******** | first-instance  | kz1-a | RUNNING | my first vm via CLI  |
     | fhm9gk85nj7g******** | second-instance | kz1-a | RUNNING | my second vm via CLI |
     +----------------------+-----------------+---------------+---------+----------------------+
     ```

  1. Выберите идентификатор (`ID`) или имя (`NAME`) нужной ВМ, например `first-instance`.
  1. Получите список дисков в каталоге по умолчанию:

     ```bash
     yc compute disk list
     ```
     
     Результат:
     
     ```text
     +----------------------+--------------+-------------+-------------------+--------+----------------------+-----------------+-------------+
     |          ID          |     NAME     |    SIZE     |       ZONE        | STATUS |     INSTANCE IDS     | PLACEMENT GROUP | DESCRIPTION |
     +----------------------+--------------+-------------+-------------------+--------+----------------------+-----------------+-------------+
     | a7lqgbt0bb9s******** | first-disk   | 20401094656 |   kz1-a   | READY  | a7lcvu28njbh******** |                 |             |
     | a7lv5j5hm1p1******** | second-disk  | 21474836480 |   kz1-a   | READY  |                      |                 |             |
     +----------------------+--------------+-------------+-------------------+--------+----------------------+-----------------+-------------+
     ```

  1. Выберите идентификатор (`ID`) или имя (`NAME`) нужного диска, например `first-disk`. Посмотреть список подключенных к ВМ дисков можно с помощью команды:

     ```bash
     yc compute instance get --full first-instance
     ```

  1. Подключите диск к ВМ:

     ```bash
     yc compute instance attach-disk first-instance \
       --disk-name first-disk \
       --mode rw
     ```

     Чтобы диск был автоматически удален при удалении ВМ, укажите флаг `--auto-delete`.

     {% note info %}
     
     На пустых дисках файловая система отсутствует. Если вы подключаете пустой диск, [разметьте и смонтируйте](vm-attach-disk.md#mount) его вручную. Или, вместо подключения пустого диска, вы можете [сделать снимок](../disk-control/create-snapshot.md) загрузочного диска и [создать ВМ](../vm-create/create-from-snapshots.md) из этого снимка.
     
     {% endnote %}

     Если возникла ошибка, остановите ВМ:

     ```bash
     yc compute instance stop first-instance
     ```

     Затем подключите диск повторно.
  1. Если ВМ была остановлена, запустите ее заново:

     ```bash
     yc compute instance start first-instance
     ```

- Terraform {#tf}

  [Terraform](https://www.terraform.io/) позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
  
  Terraform распространяется под лицензией [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE), а [провайдер Yandex Cloud для Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) — под лицензией [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/).
  
  Подробная информация о ресурсах провайдера в документации на сайте [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) или в [зеркале](../../../terraform/index.md).

  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.

  1. В конфигурационном файле в описании ресурса `yandex_compute_instance` добавьте новый блок `secondary_disk`:

      ```hcl
      resource "yandex_compute_instance" "vm-1" {
        ...
        secondary_disk {
            disk_id = "<идентификатор_диска>"
        }
        ...
      }
      ```

      Где `disk_id` — идентификатор дополнительного диска.

      {% note info %}

      Дополнительный диск и виртуальная машина должны находиться в одной зоне доступности.

      {% endnote %}

      Более подробную информацию о параметрах ресурса `yandex_compute_disk` читайте в [документации провайдера](../../../terraform/data-sources/compute_disk.md).

  1. Примените новую конфигурацию:

      1. В терминале перейдите в директорию с конфигурационным файлом.
      1. Проверьте корректность конфигурации с помощью команды:
      
         ```bash
         terraform validate
         ```
      
         Если конфигурация является корректной, появится сообщение:
      
         ```bash
         Success! The configuration is valid.
         ```
      
      1. Выполните команду:
      
         ```bash
         terraform plan
         ```
      
         В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
      1. Примените изменения конфигурации:
      
         ```bash
         terraform apply
         ```
      
      1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

      Terraform обновит все требуемые ресурсы. Проверить изменения можно в [консоли управления](https://kz.console.yandex.cloud).


- API {#api}

  Воспользуйтесь методом REST API [attachDisk](../../api-ref/Instance/attachDisk.md) для ресурса [Instance](../../api-ref/Instance/index.md) или вызовом gRPC API [InstanceService/AttachDisk](../../api-ref/grpc/Instance/attachDisk.md).

{% endlist %}

## Смонтировать диск, созданный из снимка или образа {#mount-disk-and-fix-uuid}

{% list tabs group=operating_system %}

- Linux {#linux}

  1. [Подключите](#attach) диск к ВМ.
  1. [Подключитесь](../vm-connect/ssh.md) к ВМ по [SSH](../../../glossary/ssh-keygen.md).
  1. Выполните команду `blkid` и проверьте, что нет разделов с одинаковыми UUID:

     ```bash
     sudo blkid
     ```

     Результат:

     ```text
     /dev/vda2: UUID="0d6dfef0-542d-47ba-b55b-18ab5f5f9210" TYPE="ext4" PARTUUID="752aa845-94ee-4850-9188-71c2f919ee7b"
     /dev/vdb2: UUID="0d6dfef0-542d-47ba-b55b-18ab5f5f9210" TYPE="ext4" PARTUUID="752aa845-94ee-4850-9188-71c2f919ee7b"
     ...
     ```

  1. Если вы обнаружили, что какие-то UUID дублируются, сгенерируйте новый UUID для тех дубликатов, которые идут последними в выводе команды `blkid`. Для примера из предыдущего шага надо сгенерировать UUID для раздела `/dev/vdb2`:

     ```bash
     sudo e2fsck -f /dev/vdb2
     sudo tune2fs -U $(uuidgen) /dev/vdb2
     ```

     Этот способ подойдет для разделов с файловыми системами `ext2`, `ext3` и `ext4`. Последняя используется в образах Linux, предоставляемых Yandex Cloud. Тип файловой системы возвращается командой `blkid` в параметре `TYPE`.

     Если у вас отличается файловая система, используйте соответствующие команды. Например, для `XFS` выполните:

     ```bash
     sudo xfs_admin -U generate /dev/vdb2
     ```

     Чтобы проверить, что UUID изменился, снова выполните команду `blkid`:

     ```bash
     sudo blkid
     ```

     Результат:

     ```text
     /dev/vda2: UUID="0d6dfef0-542d-47ba-b55b-18ab5f5f9210" TYPE="ext4" PARTUUID="752aa845-94ee-4850-9188-71c2f919ee7b"
     /dev/vdb2: UUID="ea004485-07fb-4128-b20d-e408db1e8ae8" TYPE="ext4" PARTUUID="752aa845-94ee-4850-9188-71c2f919ee7b"
     ...
     ```

     В Linux при создании снимка или образа сохраняются UUID и PARTUUID разделов диска. Эти данные Linux использует при монтировании разделов, в том числе корневого раздела, поэтому они должны быть уникальными. Например, если склонировать загрузочный диск и подключить его к той же виртуальной машине, на виртуальной машине появятся 2 раздела с одинаковыми UUID. В результате после запуска ВМ, в качестве корневого раздела может быть использован не тот диск, который вы указали загрузочным.

  1. Смонтируйте разделы диска с помощью утилиты `mount`, например, смонтируйте раздел `vdb2` в папку `/mnt`:
     
     ```bash
     sudo mkdir /mnt/vdb2
     sudo mount /dev/vdb2 /mnt/vdb2
     ```

  1. Выполните команду `df`, чтобы проверить состояние файловой системы.

- Windows {#windows}

  1. Подключитесь к ВМ [по RDP](../vm-connect/rdp.md).
  1. Запустите приложение **Управление компьютером** (оснастка `compmgmt.msc`) с правами администратора.
  1. В меню **Запоминающие устройства** выберите **Управление дисками**.

     {% note info %}

     При подключении диска к работающей ВМ он может не отобразиться в списке. В этом случае перезагрузите ОС и повторите шаги этой инструкции.

     {% endnote %}

  1. Если подключенный диск **Не в сети**, нажмите на него правой кнопкой мыши и выберите пункт **В сети**.
  1. При необходимости назначьте букву подключенному диску. Как это сделать читайте в [документации Microsoft](https://docs.microsoft.com/ru-ru/windows-server/storage/disk-management/change-a-drive-letter).
  1. Откройте **Проводник**, чтобы убедиться, что подключенный диск смонтирован и доступен.

{% endlist %}

## Разметить и смонтировать пустой диск {#mount}

{% list tabs group=operating_system %}

- Linux {#linux}

  1. [Подключите](#attach) пустой диск к ВМ.
  1. [Подключитесь к ВМ по SSH](../vm-connect/ssh.md).
  1. Проверьте, подключен ли диск как устройство, и узнайте его путь в системе:

     ```bash
     ls -la /dev/disk/by-id
     ```

     Результат:

     ```text
     total 0
     drwxr-xr-x 2 root root 140 Jan 16 12:09 .
     drwxr-xr-x 6 root root 120 Jan 13 13:51 ..
     lrwxrwxrwx 1 root root   9 Jan 16 12:09 virtio-fhm1dn62tm5d******** -> ../../vdc
     lrwxrwxrwx 1 root root   9 Jan 13 13:51 virtio-fhm4ev6dodt9******** -> ../../vdb
     lrwxrwxrwx 1 root root  10 Jan 13 13:51 virtio-fhm4ev6dodt9********-part1 -> ../../vdb1
     lrwxrwxrwx 1 root root  10 Jan 13 13:51 virtio-fhm4ev6dodt9********-part2 -> ../../vdb2
     lrwxrwxrwx 1 root root   9 Jan 13 13:51 virtio-nvme-disk-0 -> ../../vda
     ```

     Где:
     * Сетевым дискам соответствуют ссылки вида `virtio-<идентификатор_диска>`. Например, запись `virtio-fhm1dn62tm5d******** -> ../../vdc` означает, что неразмеченный диск с ID `fhm1dn62tm5d********` имеет метку `vdc`.
     * Локальным дискам на [выделенных хостах](../../concepts/dedicated-host.md) соответствуют ссылки вида `virtio-nvme-disk-<номер_диска>` (если вы подключали диски к ВМ при ее создании). Диски нумеруются с нуля. Например, запись `virtio-nvme-disk-0 -> ../../vda` означает, что первый (нулевой) локальный диск имеет метку `vda`.

  1. Разметьте диск. Для этого создайте на нем [разделы](https://help.ubuntu.ru/wiki/%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8B_%D0%B8_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_linux) с помощью [утилиты](https://www.opennet.ru/man.shtml?topic=cfdisk&category=8&russian=2) `cfdisk`, [утилиты](https://www.opennet.ru/man.shtml?topic=fdisk&russian=2&category=&submit=%F0%CF%CB%C1%DA%C1%D4%D8+man) `fdisk` или [утилиты](https://www.opennet.ru/man.shtml?topic=parted&russian=2&category=&submit=%F0%CF%CB%C1%DA%C1%D4%D8+man) `parted`.

     Выполняйте команды с правами суперпользователя. Для этого в каждой команде используйте `sudo` или перед началом работы выполните команду `sudo su -`, чтобы перевести терминал в режим суперпользователя. Для примера создадим разделы с помощью `fdisk`:

     1. Запустите утилиту:

         ```bash
         sudo fdisk /dev/<метка_диска>
         ```

        Где `<метка_диска>` — метка диска, который нужно разметить, например `vdb` или `vdc`.

        Вы попадете в меню программы `fdisk`. Чтобы получить список доступных команд, введите `m` и нажмите **Enter**.
     1. Создайте новый раздел — введите `n` и нажмите **Enter**.
     1. Укажите, что раздел будет основным — введите `p` и нажмите **Enter**.
     1. Появится предложение выбрать номер раздела. Нажмите **Enter**, чтобы создать раздел `1`.
     1. Номера первого и последнего секторов раздела оставьте по умолчанию — нажмите **Enter** дважды.
     1. Убедитесь, что раздел успешно создан. Для этого запросите список разделов диска: введите `p` и нажмите **Enter**.

         Результат:

         ```text
         Device     Boot Start      End  Sectors Size Id Type
         /dev/vdc1        2048 41943039 41940992  20G 83 Linux
         ```

         Где `vdc1` — _метка раздела_, состоящая из метки диска и номера раздела. Метка раздела понадобится при выполнении дальнейших действий с разделом.

     1. Чтобы сохранить внесенные изменения, введите `w` и нажмите **Enter**.

  1. Отформатируйте раздел в нужную файловую систему. Для этого можно воспользоваться [утилитой](https://www.opennet.ru/man.shtml?topic=mkfs&category=8&russian=0) `mkfs`. Например, чтобы отформатировать раздел в `ext4`, выполните команду, указав метку созданного ранее раздела:

     ```bash
     sudo mkfs.ext4 /dev/<метка_раздела>
     ```

     Результат:

     ```text
     Creating filesystem with 261888 4k blocks and 65536 inodes
     Filesystem UUID: 584a800c-e1fc-4f66-9228-a444f2d7440d
     Superblock backups stored on blocks:
             32768, 98304, 163840, 229376
     
     Allocating group tables: done
     Writing inode tables: done
     Creating journal (4096 blocks): done
     Writing superblocks and filesystem accounting information: done
     ```

     Где `Filesystem UUID` — уникальный _идентификатор раздела_. Идентификатор раздела понадобится при настройке автоматического монтирования этого раздела к системе. Получить идентификатор раздела также можно с помощью команды `sudo blkid /dev/<метка_раздела>`.

  1. Смонтируйте раздел диска с помощью [утилиты](https://www.opennet.ru/man.shtml?topic=mount&category=8&russian=0) `mount`. Чтобы смонтировать раздел `/dev/<метка_раздела>` в директорию `/mnt/new_disk`, выполните следующую команду:

     ```bash
     sudo mkdir /mnt/new_disk && sudo mount /dev/<метка_раздела> /mnt/new_disk
     ```

  1. Настройте разрешения на чтение и запись в разделе с помощью [утилиты](https://www.opennet.ru/man.shtml?topic=chmod&russian=0&category=&submit=%F0%CF%CB%C1%DA%C1%D4%D8+man) `chmod`. Например, чтобы разрешить всем пользователям  запись в раздел, выполните следующую команду:

     ```bash
     sudo chmod a+w /mnt/new_disk
     ```

  1. Настройте автоматическое монтирование раздела в директорию `mnt/new_disk` при запуске ВМ:

     1. Откройте файл `/etc/fstab` с помощью текстового редактора `nano`:

        ```bash
        sudo nano /etc/fstab
        ```

     1. Допишите в конец файла следующую строку, указав в параметре `UUID` идентификатор вашего раздела:

        ```text
        UUID=<идентификатор_раздела> /mnt/new_disk ext4 defaults 0 2
        ```

        Где `UUID` — уникальный идентификатор раздела, полученный ранее при форматировании. Например `584a800c-e1fc-4f66-9228-a444f2d7440d`.

     1. Сохраните изменения и закройте файл.

  1. Проверьте состояние файловых систем:

     ```bash
     df
     ```

     Результат:

     ```text
     Filesystem     1K-blocks    Used Available Use% Mounted on
     udev              989424       0    989424   0% /dev
     tmpfs             203524     816    202708   1% /run
     /dev/vdb2       13354932 2754792  10015688  22% /
     tmpfs            1017608       0   1017608   0% /dev/shm
     tmpfs               5120       0      5120   0% /run/lock
     tmpfs            1017608       0   1017608   0% /sys/fs/cgroup
     tmpfs             203520       0    203520   0% /run/user/1000
     /dev/vdc1         523260    3080    520180   1% /mnt/vdc1
     ```

- Windows {#windows}

  1. Подключитесь к ВМ [по RDP](../vm-connect/rdp.md).
  1. Запустите приложение **Управление компьютером** (оснастка `compmgmt.msc`) с правами администратора.
  1. В меню **Запоминающие устройства** выберите **Управление дисками**.

     {% note info %}

     При подключении диска к работающей ВМ он может не отобразиться в списке. В этом случае перезагрузите ОС и повторите шаги этой инструкции.

     {% endnote %}

  1. Если подключенный диск **Не в сети**, нажмите на него правой кнопкой мыши и выберите пункт **В сети**.
  1. Инициализируйте диск. Для этого нажмите на него правой кнопкой мыши и выберите пункт **Инициализировать диск**. Откроется окно **Инициализация диска**.
  1. Выберите [стиль разделов](https://docs.microsoft.com/ru-ru/windows-server/storage/disk-management/initialize-new-disks#about-partition-styles---gpt-and-mbr) и нажмите **ОК**.
  1. Создайте разделы на диске. Для этого нажмите правой кнопкой мыши на пустой диск и выберите пункт **Создать простой том**.
  1. С помощью **Мастера создания простых томов** задайте размер раздела, [назначьте букву](https://docs.microsoft.com/ru-ru/windows-server/storage/disk-management/change-a-drive-letter) диска и укажите файловую систему.
  1. Откройте **Проводник**, чтобы убедиться, что подключенный диск смонтирован и доступен.

{% endlist %}