Принудительное обновление размера LUN

1. Пояснение

В ряде случаев zVirt 4.3 не может в автоматическом режиме обновить данные о размере LUN-а в случае подключения его к диску ВМ. Для упрощения этой операции можно воспользоваться подготовленным скриптом refresh-lun.sh, который обращается к API по адресу типа https://${FQDN}:443/ovirt-engine/api/disks/${LUNID}/refreshlun

2. Запуск скрипта

Скрипт необходимо разместить на ВМ HostedEngine и запустить с указанием параметра LUNID, например:

LUNID=24def43e-1f90-4c12-aaae-f496dc02b98d bash refresh-lun.sh

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

LUNID=24def43e-1f90-4c12-aaae-f496dc02b98d bash refresh-lun.sh
Укажите пароль пользователя admin:
...
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<action>
    <disk href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d" id="24def43e-1f90-4c12-aaae-f496dc02b98d">
        <actions>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/reduce" rel="reduce"/>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/sparsify" rel="sparsify"/>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/export" rel="export"/>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/copy" rel="copy"/>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/move" rel="move"/>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/refreshlun" rel="refreshlun"/>
        </actions>
        <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/permissions" rel="permissions"/>
        <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/statistics" rel="statistics"/>
    </disk>
    <host id="ef1e63e0-af88-4430-bdcf-ed37c336dba4"/>
    <status>complete</status>
</action>

Для определения идентификатора LUN, необходимо обратиться к меню Хранилище  Диски, перейти на вкладку Прямой LUN и среди списка отображенных дисков найти нужный. Значение LUNID будет в колонке Код.

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

LUNID=24def43e-1f90-4c12-aaae-f496dc02b98d HOSTID=00521c3e-4598-4441-8bfa-784de3b409dd bash refresh-lun.sh
Укажите пароль пользователя admin:
...
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<action>
    <disk href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d" id="24def43e-1f90-4c12-aaae-f496dc02b98d">
        <actions>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/reduce" rel="reduce"/>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/sparsify" rel="sparsify"/>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/export" rel="export"/>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/copy" rel="copy"/>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/move" rel="move"/>
            <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/refreshlun" rel="refreshlun"/>
        </actions>
        <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/permissions" rel="permissions"/>
        <link href="/ovirt-engine/api/disks/24def43e-1f90-4c12-aaae-f496dc02b98d/statistics" rel="statistics"/>
    </disk>
    <host id="00521c3e-4598-4441-8bfa-784de3b409dd"/>
    <status>complete</status>
</action>

3. Возможные проблемы

  1. В случае указания неверного LUNID будет выведено сообщение примерного вида:

    LUNID=24def43e-1f90-4c12-aaae-f496dc02b98d  bash refresh-lun.sh
    Укажите пароль пользователя admin:
    ...
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <action>
        <fault>
            <detail>[Cannot sync Virtual Disk. The specified disk does not exist.]</detail>
            <reason>Operation Failed</reason>
        </fault>
        <host id="ef1e63e0-af88-4430-bdcf-ed37c336dba4"/>
        <status>failed</status>
    </action>
  2. В случае указания неверного HOSTID будет выведено сообщение примерного вида:

    LUNID=2d175b60-99d8-4877-9817-f3d9362bd07b HOSTID=00521c3e-4598-4441-8bfa-784de3b409db bash refresh-lun.sh
    Укажите пароль пользователя admin:
    ...
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <action>
        <fault>
            <detail>[Cannot sync Virtual Disk. Invalid Host Id.]</detail>
            <reason>Operation Failed</reason>
        </fault>
        <host id="00521c3e-4598-4441-8bfa-784de3b409db"/>
        <status>failed</status>
    </action>

4. Код скрипта refresh-lun.sh

#!/usr/bin/bash

if [ -z ${LUNID} ]; then
    echo "Запустите скрипт с указанием LUN-а"
    echo "LUNID=24def43e-1f90-4c12-aaae-f496dc02b98d bash ./refresh-lun.sh"
    exit
fi

# detect zvirt fqdn
FQDN=$(hostname -f)

# ask admin password
echo "Укажите пароль пользователя admin:"
read PASSWD

if [ -z ${HOSTID} ]; then
    # get first' host id
    HOSTID=$(curl -s \
    --cacert '/etc/pki/ovirt-engine/apache-ca.pem' \
    --request GET \
    --header 'Version: 4' \
    --header 'Accept: application/xml' \
    --user 'admin@internal:'${PASSWD} \
    https://${FQDN}/ovirt-engine/api/hosts | grep host | grep id | head -n1 | awk -F\" '{print $4; exit}')
fi

# send refresh command to lun
curl \
--cacert '/etc/pki/ovirt-engine/apache-ca.pem' \
--request POST \
--header 'Accept: application/xml' \
--header "Content-Type: application/xml" \
--header "Host: ${FQDN}" \
--user 'admin@internal:'${PASSWD} \
--data "<action><host id='${HOSTID}'/></action>" \
https://${FQDN}/ovirt-engine/api/disks/${LUNID}/refreshlun