Расширение виртуальных жестких дисков на виртуальной машине Linux

Внимание

Эта статья ссылается на CentOS, дистрибутив Linux, который приближается к состоянию конца жизни (EOL). Обратите внимание на использование и план соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

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

В этой статье описывается, как развернуть управляемые диски для виртуальной машины Linux. Вы можете добавить диски данных, чтобы предоставить дополнительное место для хранения, а также расширить существующий диск данных. Как правило, размер виртуального жесткого диска по умолчанию для операционной системы на виртуальной машине Linux в Azure составляет 30 ГБ. В этой статье рассматривается расширение дисков ОС или дисков данных. Невозможно развернуть размер полосатых томов.

Диск ОС имеет максимальную емкость 4095 ГиБ. Однако многие операционные системы секционируются с главной загрузочной записью (МБ R) по умолчанию. Формат MBR ограничивает доступный размер до 2 ТиБ. Если вам требуется более 2 ТиБ, создайте и подключите диски данных и используйте их для хранения. Если вам необходимо сохранить данные на диске операционной системы и требуется дополнительное пространство, преобразуйте их в таблицу разделов GUID (GPT).

Предупреждение

Всегда убедитесь, что файловая система находится в работоспособном состоянии, тип таблицы секций диска (GPT или МБ R) будет поддерживать новый размер и обеспечить резервное копирование данных перед выполнением операций расширения диска. Дополнительные сведения см. в кратком руководстве Azure по резервному копированию.

Определение объекта диска данных Azure в операционной системе

В случае расширения диска данных при наличии нескольких дисков данных на виртуальной машине может быть трудно связать luN Azure с устройствами Linux. Если диск ОС нуждается в расширении, он четко помечен в портал Azure как диск ОС.

Сначала определите связь между использованием диска, точкой подключения и устройством df с помощью команды.

df -Th
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/sda1                 xfs        97G  1.8G   95G   2% /
<truncated>
/dev/sdd1                 ext4       32G   30G  727M  98% /opt/db/data
/dev/sde1                 ext4       32G   49M   30G   1% /opt/db/log

Здесь мы видим, например, /opt/db/data файловую систему почти полностью и находится на секции /dev/sdd1 . Выходные данные df показывают путь устройства независимо от того, подключен ли диск по пути устройства или (предпочтительному) UUID в fstab. Кроме того, запишите столбец Type, указывающий формат файловой системы. Это важно позже.

Теперь найдите LUN, который коррелирует с /dev/sdd/dev/disk/azure/scsi1содержимым. Выходные данные следующей ls команды показывают, что устройство, известное как /dev/sdd в ОС Linux, находится в LUN1 при просмотре в портал Azure.

sudo ls -alF /dev/disk/azure/scsi1/
total 0
drwxr-xr-x. 2 root root 140 Sep  9 21:54 ./
drwxr-xr-x. 4 root root  80 Sep  9 21:48 ../
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun0 -> ../../../sdc
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun1 -> ../../../sdd
lrwxrwxrwx. 1 root root  13 Sep  9 21:48 lun1-part1 -> ../../../sdd1
lrwxrwxrwx. 1 root root  12 Sep  9 21:54 lun2 -> ../../../sde
lrwxrwxrwx. 1 root root  13 Sep  9 21:54 lun2-part1 -> ../../../sde1

Развертывание управляемого диска Azure

Расширение без простоя

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

Сейчас эта функция имеет следующие ограничения:

  • Поддерживается только для дисков данных.
  • Если размер диска не превышает 4 ТиБ, следует отменить выделение виртуальной машины и отключить диск, прежде чем расширять его сверх 4 ТиБ. Если диск уже больше 4 ТиБ, его можно расширить без отмены выделения виртуальной машины и отключения диска.
  • Не поддерживается для дисков ценовой категории "Ультра" или ssd уровня "Премиум" версии 2.
  • Не поддерживается для общих дисков.
  • Установите и используйте любой из следующих вариантов:
  • Недоступно на некоторых классических виртуальных машинах. Используйте этот скрипт , чтобы получить список классических номеров SKU виртуальных машин, которые поддерживают расширение без простоя.

Развертывание управляемого диска Azure

Обязательно установите последнюю версию Azure CLI и войдите в учетную запись Azure с помощью команды az login.

Для этой статьи потребуется существующая виртуальная машина в Azure с хотя бы одним подключенным и подготовленным диском данных. Если у вас еще нет виртуальной машины, которую можно использовать, см. статью "Создание и подготовка виртуальной машины с дисками данных".

В следующих примерах замените имена параметров собственными значениями, например myResourceGroup и myVM.

Внимание

Если диск соответствует требованиям, предъявляемым к функции Расширение без простоя, можно пропустить шаги 1 и 3.

  1. Нельзя выполнять операции с виртуальными жесткими дисками на работающей виртуальной машине. Отмените подготовку виртуальной машины, выполнив команду az vm deallocate. В следующем примере отменяется распределение виртуальной машины myVM, входящей в группу ресурсов с именем myResourceGroup.

    az vm deallocate --resource-group myResourceGroup --name myVM
    

    Примечание.

    Для расширения виртуального жесткого диска следует отменить распределение виртуальной машины. Остановка виртуальной машины az vm stop с не освобождает вычислительные ресурсы. Чтобы освободить вычислительные ресурсы, используйте az vm deallocate.

  2. Просмотрите список управляемых дисков в группе ресурсов, выполнив команду az disk list. В следующем примере выводится список управляемых дисков, входящих в группу ресурсов с именем myResourceGroup:

    az disk list \
        --resource-group myResourceGroup \
        --query '[*].{Name:name,Gb:diskSizeGb,Tier:accountType}' \
        --output table
    

    Расширьте диск, выполнив команду az disk update. В следующем примере размер управляемого диска myDataDisk увеличивается до 200 ГБ:

    az disk update \
        --resource-group myResourceGroup \
        --name myDataDisk \
        --size-gb 200
    

    Примечание.

    При расширении управляемого диска его новый размер округляется до ближайшего размера управляемого диска. Таблица с размерами и ценовыми категориями доступных управляемых дисков доступна в разделе Цены и выставление счетов.

  3. Запустите виртуальную машину, выполнив команду az vm start. В следующем примере запускается виртуальная машина myVM, входящая в группу ресурсов с именем myResourceGroup.

    az vm start --resource-group myResourceGroup --name myVM
    

Развертывание раздела диска и файловой системы

Примечание.

Хотя существует множество средств, которые могут использоваться для изменения размера секций, средства, описанные в оставшейся части этого документа, являются теми же средствами, которые используются определенными автоматизированными процессами, такими как cloud-init. Как описано здесь, growpart средство с gdisk пакетом обеспечивает универсальную совместимость с дисками таблицы секций GUID (GPT), так как старые версии некоторых средств, таких как fdisk не поддерживает GPT.

Обнаружение измененного размера диска

Если диск данных был развернут без простоя с помощью процедуры, упоминание ранее, размер диска не будет изменен до повторного сканирования устройства, который обычно происходит только во время загрузки. Эту повторное сканирование можно вызвать по запросу с помощью следующей процедуры. В этом примере мы обнаружили использование методов в этом документе, которые диск данных в настоящее время /dev/sda и изменен с 256 ГиБ до 512 ГиБ.

  1. Определение распознанного в настоящее время размера в первой строке выходных данных fdisk -l /dev/sda

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 256 GiB, 274877906944 bytes, 536870912 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    
  2. 1 Вставьте символ в файл повторного сканирования для этого устройства. Обратите внимание на ссылку на SDA, это изменится, если другое дисковое устройство было изменено.

    echo 1 | sudo tee /sys/class/block/sda/device/rescan
    
  3. Убедитесь, что новый размер диска распознался

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 512 GiB, 549755813888 bytes, 1073741824 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    

Оставшаяся часть этой статьи использует диск ОС для примеров процедуры увеличения размера тома на уровне ОС. Если развернутый диск является диском данных, используйте предыдущее руководство по идентификации устройства диска данных и следуйте этим инструкциям в качестве руководства, заменив устройство диска данных (например /dev/sda, номера секций, имена томов, точки подключения и форматы файловой системы).

Все рекомендации по ОС Linux должны рассматриваться как универсальные и могут применяться к любому дистрибутиву, но обычно соответствуют соглашениям издателя с именем Marketplace. Ссылка на документы Red Hat для требований пакета к любому дистрибутиву, утверждая совместимость Red Hat, например CentOS и Oracle.

Увеличение размера диска ОС

Следующие инструкции применяются к утвержденным дистрибутивам Linux.

Примечание.

Прежде чем продолжить, сделайте полную резервную копию виртуальной машины или по крайней мере создайте моментальный снимок диска ОС.

В Ubuntu 16.x и более поздних версиях корневой раздел диска ОС и файловые системы будут автоматически расширены, чтобы использовать все свободные смежные области на корневом диске с помощью cloud-init при условии, что для операции изменения размера имеется небольшой объем свободного места. Для этого обстоятельства последовательность просто

  1. Увеличьте размер диска ОС, как описано ранее
  2. Перезапустите виртуальную машину и получите доступ к виртуальной машине с помощью учетной записи корневого пользователя.
  3. Убедитесь в том, что размер файловой системы на диске ОС увеличился.

Как показано в следующем примере, размер диска ОС на портале теперь равен 100 ГБ. Файловая система /dev/sda1, смонтированная на /, теперь имеет размер 97 ГБ.

df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  314M     0  314M   0% /dev
tmpfs          tmpfs      65M  2.3M   63M   4% /run
/dev/sda1      ext4       97G  1.8G   95G   2% /
tmpfs          tmpfs     324M     0  324M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     324M     0  324M   0% /sys/fs/cgroup
/dev/sda15     vfat      105M  3.6M  101M   4% /boot/efi
/dev/sdb1      ext4       20G   44M   19G   1% /mnt
tmpfs          tmpfs      65M     0   65M   0% /run/user/1000
user@ubuntu:~#

Расширение без поддержки SKU классической виртуальной машины простоя

Если вы используете классический номер SKU виртуальной машины, он может не поддерживать расширение дисков без простоя.

Используйте следующий скрипт PowerShell для определения доступных номеров SKU виртуальных машин:

Connect-AzAccount
$subscriptionId="yourSubID"
$location="desiredRegion"
Set-AzContext -Subscription $subscriptionId
$vmSizes=Get-AzComputeResourceSku -Location $location | where{$_.ResourceType -eq 'virtualMachines'}

foreach($vmSize in $vmSizes){
    foreach($capability in $vmSize.Capabilities)
    {
       if(($capability.Name -eq "EphemeralOSDiskSupported" -and $capability.Value -eq "True") -or ($capability.Name -eq "PremiumIO" -and $capability.Value -eq "True") -or ($capability.Name -eq "HyperVGenerations" -and $capability.Value -match "V2"))
        {
            $vmSize.Name
       }
   }
}