Устранение неполадок с изменением имени устройства виртуальной машины Linux
В этой статье объясняется, почему имена устройств меняются после перезапуска виртуальной машины Linux или повторного подключения дисков данных. В этой статье также приводятся решения этой проблемы.
Симптомы
При запуске виртуальных машин Linux в Microsoft Azure могут возникнуть следующие проблемы:
- Виртуальная машина не загружается после перезапуска.
- Когда диски данных отсоединяются и присоединяются повторно, имена дисковых устройств изменяются.
- Приложение или скрипт, ссылающийся на диск с помощью имени устройства, завершается сбоем, так как имя устройства изменилось.
Причина
Пути устройств в Linux не гарантируют согласованность при перезапусках. Имена устройств состоят из основных цифр (букв) и дополнительных чисел. Когда драйвер устройства хранения Linux обнаруживает новое устройство, драйвер назначает устройству основные и незначительные номера из доступного диапазона. При удалении устройства номера устройств освобождаются для повторного использования.
Проблема возникает из-за того, что проверка устройств в Linux запланирована подсистемой SCSI для асинхронного выполнения. В результате путь к устройству может отличаться в зависимости от перезапуска.
Решение
Чтобы устранить эту проблему, используйте постоянное именование. Существует четыре способа использования постоянного именования: по меткам файловой системы, по UUID, по идентификатору или по пути. Рекомендуется использовать метку файловой системы или UUID для виртуальных машин Linux в Azure.
Большинство распределений fstab
предоставляют параметры nofail или nobootwait. Эти параметры позволяют системе загружаться при сбое подключения диска при запуске. Дополнительные сведения об этих параметрах см. в документации по дистрибутиву. Сведения о том, как настроить виртуальную машину Linux для использования UUID при добавлении диска данных, см. в статье Подключение к виртуальной машине Linux для подключения нового диска.
Когда агент Azure Linux установлен на виртуальной машине, он использует правила Udev для создания набора символьных ссылок по пути /dev/disk/azure. Приложения и скрипты используют правила Udev для определения дисков, подключенных к виртуальной машине, а также типа диска и LUN диска.
Если вы уже отредактировали fstab таким образом, что виртуальная машина не загружается и вам не удается подключиться к виртуальной машине по протоколу SSH, можно использовать последовательную консоль виртуальной машины , чтобы перейти в однопользовательский режим и изменить fstab.
Определение LUN диска
Приложения используют LUN для поиска всех подключенных дисков и создания символьных ссылок. Агент Azure Linux включает правила Udev, которые настраивают символьные ссылки из LUN на устройства:
$ tree /dev/disk/azure
/dev/disk/azure
├── resource -> ../../sdb
├── resource-part1 -> ../../sdb1
├── root -> ../../sda
├── root-part1 -> ../../sda1
└── scsi1
├── lun0 -> ../../../sdc
├── lun0-part1 -> ../../../sdc1
├── lun1 -> ../../../sdd
├── lun1-part1 -> ../../../sdd1
├── lun1-part2 -> ../../../sdd2
└── lun1-part3 -> ../../../sdd3
Сведения LUN из гостевой учетной записи Linux извлекаются с помощью lsscsi
или аналогичного средства:
$ sudo lsscsi
[1:0:0:0] cd/dvd Msft Virtual CD/ROM 1.0 /dev/sr0
[2:0:0:0] disk Msft Virtual Disk 1.0 /dev/sda
[3:0:1:0] disk Msft Virtual Disk 1.0 /dev/sdb
[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 используются с метаданными подписки Azure для поиска виртуального жесткого диска в службе хранилища Azure, содержащего данные секции. Например, можно использовать интерфейс командной az
строки:
$ az vm show --resource-group testVM --name testVM | jq -r .storageProfile.dataDisks
[
{
"caching": "None",
"createOption": "empty",
"diskSizeGb": 1023,
"image": null,
"lun": 0,
"managedDisk": null,
"name": "testVM-20170619-114353",
"vhd": {
"uri": "https://testVM.blob.core.windows.net/vhd/testVM-20170619-114353.vhd"
}
},
{
"caching": "None",
"createOption": "empty",
"diskSizeGb": 512,
"image": null,
"lun": 1,
"managedDisk": null,
"name": "testVM-20170619-121516",
"vhd": {
"uri": "https://testVM.blob.core.windows.net/vhd/testVM-20170619-121516.vhd"
}
}
]
Обнаружение идентификаторов UUID файловой системы с помощью blkid
Приложения и скрипты считывают выходные данные blkid
или аналогичные источники информации для создания символических ссылок в пути /dev. В выходных данных показаны идентификаторы UUID всех дисков, подключенных к виртуальной машине, и связанные с ними файлы устройства:
$ sudo blkid -s UUID
/dev/sr0: UUID="120B021372645f72"
/dev/sda1: UUID="52c6959b-79b0-4bdd-8ed6-71e0ba782fb4"
/dev/sdb1: UUID="176250df-9c7c-436f-94e4-d13f9bdea744"
/dev/sdc1: UUID="b0048738-4ecc-4837-9793-49ce296d2692"
Правила Udev агента Azure Linux создают набор символьных ссылок по пути /dev/disk/azure:
$ ls -l /dev/disk/azure
total 0
lrwxrwxrwx 1 root root 9 Jun 2 23:17 resource -> ../../sdb
lrwxrwxrwx 1 root root 10 Jun 2 23:17 resource-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 9 Jun 2 23:17 root -> ../../sda
lrwxrwxrwx 1 root root 10 Jun 2 23:17 root-part1 -> ../../sda1
Приложения используют ссылки для идентификации загрузочного диска и ресурса (временный) диск. В Azure приложения должны искать пути /dev/disk/azure/root-part1 или /dev/disk/azure-resource-part1, чтобы обнаружить эти секции.
Все дополнительные секции blkid
из списка находятся на диске данных. Приложения поддерживают UUID для этих секций и используют путь для обнаружения имени устройства во время выполнения:
$ ls -l /dev/disk/by-uuid/b0048738-4ecc-4837-9793-49ce296d2692
lrwxrwxrwx 1 root root 10 Jun 19 15:57 /dev/disk/by-uuid/b0048738-4ecc-4837-9793-49ce296d2692 -> ../../sdc1
Получение последних правил службы хранилища Azure
Чтобы получить последние правила службы хранилища Azure, выполните следующие команды:
# sudo curl -o /etc/udev/rules.d/66-azure-storage.rules https://raw.githubusercontent.com/Azure/WALinuxAgent/master/config/66-azure-storage.rules
# sudo udevadm trigger --subsystem-match=block
См. также
Дополнительные сведения см. в следующих статьях:
- Ubuntu: использование UUID
- Red Hat: постоянное именование
- Linux: что UUID может сделать для вас
- Udev: введение в управление устройствами в современной системе Linux
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по