Добавление диска к виртуальной машине 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
параметром , если размер диска составляет два тбибайта (TiB) или больше, то необходимо использовать секционирование 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
файл. Также настоятельно рекомендуется использовать /etc/fstab
UUID (универсальный уникальный идентификатор) для ссылки на диск, а не только имя устройства (например, /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 для регулярного выполнения.
Устранение неполадок
При добавлении дисков данных на виртуальную машину 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.
Следующие шаги
- Ознакомьтесь с рекомендациями по оптимизации производительности виртуальной машины Linux , чтобы правильно настроить виртуальную машину Linux.
- Разверните емкость хранилища, добавив дополнительные диски и настройте RAID для дополнительной производительности.