Добавление диска к виртуальной машине Linux

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

Из этой статьи вы узнаете, как добавить в виртуальную машину постоянный диск, на котором можно хранить данные. Эти данные сохранятся даже после повторной подготовки виртуальной машины (например, в ходе обслуживания или изменения размера).

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

Если вам нужен новый пустой диск с данными в виртуальной машине, то используйте команду az vm disk attach с параметром --new. Если виртуальная машина находится в зоне доступности, то диск автоматически создается в одной зоне с виртуальной машиной. Дополнительные сведения см. в статье Общие сведения о зонах доступности в Azure (предварительная версия). В следующем примере создается диск с именем myDataDisk размером 50 ГБ:

az vm disk attach \
   -g myResourceGroup \
   --vm-name myVM \
   --name myDataDisk \
   --new \
   --size-gb 50

более низкую задержку;

В некоторых регионах задержка подключения диска сократилась, поэтому вы увидите улучшение до 15 %. Это полезно, если возникают запланированные или незапланированные отработки отказа между виртуальными машинами, если вы масштабируете рабочую нагрузку или выполняете высокомасштабную рабочую нагрузку с отслеживанием состояния, например Службу Azure Kubernetes. Однако это улучшение распространяется только на команду явного подключения диска — az vm disk attach. При вызове команды, которая может неявно выполнить подключение, например az vm update, улучшения производительности не будет. Вам не нужно предпринимать никаких действий, кроме вызова явной команды подключения, чтобы увидеть это улучшение.

В настоящее время низкая задержка доступна во всех общедоступных регионах, за исключением следующих:

  • Центральная Канада
  • Центральная часть США
  • Восточная часть США
  • восточная часть США 2
  • Центрально-южная часть США
  • западная часть США 2
  • Северная Германия
  • Западная Индия (Jio)
  • Северная Европа
  • Западная Европа

Подключение существующего диска

Чтобы подключить существующий диск, найдите идентификатор диска и укажите его в команде az vm disk attach. В следующем примере выполняется запрос диска myDataDisk в группе ресурсов myResourceGroup, а затем этот диск подключается к виртуальной машине myVM:

diskId=$(az disk show -g myResourceGroup -n myDataDisk --query 'id' -o tsv)

az vm disk attach -g myResourceGroup --vm-name myVM --name $diskId

Форматирование и подключение диска

Чтобы разбить диск на разделы, отформатировать и подключить новый диск к виртуальной машине Linux, подключитесь к своей виртуальной машине по протоколу SSH. Дополнительные сведения см. в статье Как использовать SSH с Linux в Azure. В следующем примере выполняется подключение к виртуальной машине с общедоступным IP-адресом 10.123.123.25 и именем пользователя azureuser:

ssh azureuser@10.123.123.25

Поиск диска

После подключения к виртуальной машине найдите диск. В этом примере мы используем для lsblk вывода списка дисков.

lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

Вы должны увидеть результат, аналогичный приведенному ниже.

sda     0:0:0:0      30G
├─sda1             29.9G /
├─sda14               4M
└─sda15             106M /boot/efi
sdb     1:0:1:0      14G
└─sdb1               14G /mnt
sdc     3:0:0:0      50G

Вот диск, sdc который нам нужен, потому что это 50G. Если вы добавили несколько дисков и не знаете, какой диск зависит только от размера, можно перейти на страницу виртуальной машины на портале, выбрать Диски и проверка номер LUN для диска в разделе Диски данных. Сравните LUN с портала с последним номером в разделе HTCL выходных данных (это и есть LUN). Другой вариант — вывести список содержимого /dev/disk/azure/scsi1 каталога:

ls -l /dev/disk/azure/scsi1

Выходные данные должны выглядеть примерно так:

lrwxrwxrwx 1 root root 12 Mar 28 19:41 lun0 -> ../../../sdc

Форматирование диска

Отформатируйте диск с partedпомощью , если размер диска составляет два тиБ или больше, необходимо использовать секционирование GPT. Если размер диска меньше 2TiB, можно использовать секционирование MBR или GPT.

Примечание

Рекомендуется использовать самую актуальную версию parted, доступную для вашего дистрибутива. Если размер диска — 2 тебибайтов (ТиБ) или больше, необходимо использовать GPT-схему разбиения дисков на разделы. Если размер диска меньше 2 ТиБ, то можно использовать MBR- или GPT-схему разбиения дисков на разделы.

В следующем примере используется parted в /dev/sdc, где обычно находится первый диск данных на большинстве виртуальных машин. Замените sdc правильным параметром для своего диска. Мы также отформатируем его с помощью файловой системы XFS .

sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
sudo partprobe /dev/sdc
sudo mkfs.xfs /dev/sdc1

Используйте служебную программу partprobe, чтобы убедиться, что ядро распознает новый раздел и файловую систему. Невозможность использовать partprobe может привести к тому, что команды blkid или lsblk не будут немедленно возвращать UUID для новой файловой системы.

Подключение диска

Теперь создайте каталог для подключения файловой системы, используя mkdir. В следующем примере создается каталог в /datadrive:

sudo mkdir /datadrive

Используйте mount, чтобы затем подключить файловую систему. В следующем примере раздел /dev/sdc1 подключается к точке подключения /datadrive:

sudo mount /dev/sdc1 /datadrive

Сохранение подключения

Чтобы обеспечить автоматическое повторное подключение диска после перезагрузки, его необходимо добавить в /etc/fstab файл. Также настоятельно рекомендуется использовать UUID (универсальный уникальный идентификатор) в /etc/fstab для ссылки на диск, а не только на имя устройства (например, /dev/sdc1). Если операционная система обнаруживает ошибку диска во время загрузки, использование UUID позволяет избежать подключения ошибочного диска в это расположение. Остальные диски с данными затем получают те же идентификаторы устройств. Чтобы найти UUID нового диска, используйте служебную программу blkid:

sudo blkid

Результат должен быть аналогичным приведенному ниже:

/dev/sda1: LABEL="cloudimg-rootfs" UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4" PARTUUID="1a1b1c1d-11aa-1234-1a1a1a1a1a1a"
/dev/sda15: LABEL="UEFI" UUID="BCD7-96A6" TYPE="vfat" PARTUUID="1e1g1cg1h-11aa-1234-1u1u1a1a1u1u"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4" TYPE="ext4" PARTUUID="1a2b3c4d-01"
/dev/sda14: PARTUUID="2e2g2cg2h-11aa-1234-1u1u1a1a1u1u"
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="c1c2c3c4-1234-cdef-asdf3456ghjk"

Примечание

Некорректное изменение файла /etc/fstab может привести к невозможности загрузить систему. Если у вас есть сомнения, см. инструкции по правильному изменению этого файла в документации дистрибутива. Также рекомендуется перед внесением изменений создать резервную копию файла /etc/fstab.

Затем откройте /etc/fstab файл в текстовом редакторе. Добавьте строку в конец файла, используя значение UUID для устройства, созданного /dev/sdc1 на предыдущих шагах, и точку /datadriveподключения . В примере из этой статьи новая строка будет выглядеть следующим образом:

UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2

Завершив редактирование файла, сохраните и закройте редактор.

Кроме того, можно выполнить следующую команду, чтобы добавить диск в /etc/fstab файл:

echo "UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2" >> /etc/fstab

Примечание

Если вы позднее удалите диск данных без редактирования файла fstab, виртуальная машина может не загрузиться. Большинство дистрибутивов поддерживает параметры fstab nofail и (или) nobootwait. Эти параметры позволяют системе загружаться, даже если диск не подключится во время загрузки. Дополнительные сведения об этих параметрах см. в документации дистрибутива.

Параметр nofail обеспечивает запуск виртуальной машины даже в том случае, если файловая система повреждена или отсутствует диск во время загрузки. Без этого параметра может возникнуть ситуация, описанная в записи блога Cannot SSH to Linux VM due to FSTAB errors (Не удается подключиться к виртуальной машине Linux по протоколу SSH из-за ошибок FSTAB).

Последовательную консоль виртуальной машины Azure можно использовать для консольного доступа к виртуальной машине, если в результате изменения FSTAB-файла произошел сбой загрузки. Дополнительные сведения см. в документации по последовательной консоли.

Поддержка операций TRIM и UNMAP для Linux в Azure

Некоторые ядра Linux поддерживают операции TRIM и UNMAP для отмены неиспользуемых блоков на диске. Эта функция в первую очередь полезна для информирования Azure о том, что удаленные страницы больше не являются допустимыми и могут быть удалены. Эта функция позволяет сэкономить деньги на дисках, счета за которые выставляются в зависимости от объема потребляемого хранилища, например на неуправляемых стандартных дисках и моментальных снимках дисков.

Существует два способа включить поддержку операций TRIM в виртуальной машине Linux. Как обычно, обратитесь к документации дистрибутива, чтобы выбрать рекомендуемый метод.

  • Используйте параметр подключения discard в /etc/fstab. Ниже приведен пример.

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,discard   1   2
    
  • В некоторых случаях параметр discard может негативно влиять на производительность. Кроме того, вы можете вручную выполнить команду fstrim из командной строки или добавить ее в crontab для регулярного выполнения.

sudo apt install util-linux
sudo fstrim /datadrive

Устранение неполадок

При добавлении дисков данных на виртуальную машину Linux вы можете столкнуться с ошибками, если в LUN 0 не существует диска. Если вы добавляете диск вручную с помощью команды az vm disk attach -new и указываете LUN (--lun) вместо того, чтобы разрешить платформе Azure самой определить соответствующий LUN, то обратите внимание на то, что в LUN 0 уже существует или будет существовать диск.

Рассмотрим следующий пример, демонстрирующий фрагмент выходных данных из lsscsi:

[5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc 
[5:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdd 

Существует два диска данных в LUN 0 и LUN 1 (первый столбец в выходных данных lsscsi[host:channel:target:lun]). Оба диска должны быть доступными из виртуальной машины. Если вы вручную указали первый диск для добавления в LUN 1, а второй диск — в LUN 2, то эти диски могут не отображаться корректно из виртуальной машины.

Примечание

В этих примерах значение host Azure равно 5, однако оно может меняться в зависимости от выбранного типа хранилища.

Такое поведение дисков имеет место не из-за проблемы в Azure, а из-за того, что ядро Linux следует спецификациям SCSI. Когда ядро Linux выполняет на шине SCSI поиск подключенных устройств, в LUN 0 должно быть какое-то устройство, чтобы система могла продолжить поиск других устройств. Учитывая вышесказанное, выполните следующие действия.

  • После добавления диска данных просмотрите выходные данные lsscsi и убедитесь, что в LUN 0 есть диск.
  • Если диск не отображается корректно из виртуальной машины, проверьте, существует ли диск в LUN 0.

Дальнейшие действия