Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    миграция хранения virtio не удалась

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    миграция хранения virtio не удалась, Proxmox Виртуальная Среда
     
    liska_
    Guest
    #1
    0
    17.09.2014 15:31:00
    Привет! Сейчас я занимаюсь миграцией нескольких машин с Proxmox 3.2 на Proxmox 3.3. С одной машиной возникает следующая ошибка после достижения 100%: qmp команда 'block-job-complete' не выполнена — активная блок-операция для устройства 'drive-virtio0' не может быть завершена. Мне удалось успешно выполнить живую миграцию на второй сервер, но я не могу закончить перенос образа с NFS-хранилища, используя virtio, на другое NFS-хранилище. С другой виртуальной машиной я решил проблему с помощью команды qm rescan --vmid 108, но там был немного другой случай. Есть какие-то идеи, как это исправить? Заранее большое спасибо!
     
     
     
    spirit
    Guest
    #2
    0
    01.10.2014 15:33:00
    Мое понимание проблемы такое: команда "block-job-complete" зависает или не возвращает подтверждение (ACK). Но при этом диски переключаются правильно. Значит, Proxmox видит это как ошибку и пытается удалить новый диск. Но поскольку новый диск открыт в QEMU, Ceph выдает ошибку "image has watchers - not removing". Я попробую воспроизвести ситуацию, возможно, это проблема с тайм-аутом у block-job-complete.
     
     
     
    jdw
    Guest
    #3
    0
    01.10.2014 15:36:00
    Вполне возможно. Тайм-ауты и ошибки интерфейса часто возникают при удалении больших, неиспользуемых ceph-томов через UI. (Но они в итоге удаляются "за кулисами".) Однако мы пробовали разделить процесс: сначала миграция, потом удаление старого тома. Хотя вероятность успеха немного выше, это точно не предотвращает сбой шага только с миграцией. Существует ли способ выполнить миграцию хранилища через командную строку?
     
     
     
    spirit
    Guest
    #4
    0
    01.10.2014 15:40:00
    >>Есть способ сделать миграцию хранилища из командной строки? Да (#qm move), но он использует те же API. Проблема не в таймауте GUI. Если вы можете воспроизвести проблему, попробуйте отредактировать /usr/share/perl5/PVE/QemuServer.pm, найдите строку: vm_mon_cmd($vmid, "block-job-complete", device => "drive-$drive"); и замените её на vm_mon_cmd($vmid, "block-job-complete", timeout => 10, device => "drive-$drive"); Затем перезапустите сервисы: /etc/init.d/pvedaemon restart и /etc/init.d/pveproxy restart, после чего попробуйте снова выполнить миграцию хранилища.
     
     
     
    jdw
    Guest
    #5
    0
    01.10.2014 15:43:00
    На каком сервере Proxmox мне выполнить эти действия? Тот, к которому подключаюсь через интерфейс, тот, где находится виртуальная машина, или на всех серверах Proxmox в кластере?
     
     
     
    spirit
    Guest
    #6
    0
    01.10.2014 16:01:00
    узел, на котором работает vm с rbd. Учти, что не уверен, что смогу помочь. Я проверил в коде qemu — он зависает вот здесь:

    Код:  
    static void mirror_complete(BlockJob *job, Error **errp)  
    {  
       MirrorBlockJob *s = container_of(job, MirrorBlockJob, common);  
       Error *local_err = NULL;  
       int ret;  

       ret = bdrv_open_backing_file(s->target, NULL, &local_err);  
       if (ret < 0) {  
           error_propagate(errp, local_err);  
           return;  
       }  

       if (!s->synced) {  

          ------>>>>>>>>>>ЗДЕСЬ  

           error_set(errp, QERR_BLOCK_JOB_NOT_READY, job->bs->device_name);  
           return;  
       }  

       /* проверяем, что целевой блочный сервис не заблокирован, и блокируем на нём все операции */  
       if (s->replaces) {  
           s->to_replace = check_to_replace_node(s->replaces, &local_err);  
           if (!s->to_replace) {  
               error_propagate(errp, local_err);  
               return;  
           }  

           error_setg(&s->replace_blocker,  
                      "блочное устройство используется block-job-complete");  
           bdrv_op_block_all(s->to_replace, s->replace_blocker);  
           bdrv_ref(s->to_replace);  
       }  

       s->should_complete = true;  
       block_job_resume(job);  
    }

    По документации qemu http://wiki.qemu.org/Features/BlockJob мы можем вызвать block-job-complete только тогда, когда получаем событие "MIRROR_STATE_CHANGE" со статусом (synced: true/false). Это нужно, чтобы быть уверенным, что диски синхронизированы перед переключением. Сейчас в proxmox мы не проверяем события, поэтому после завершения drive-mirror просто считаем, что можно завершить задачу. Ты используешь writeback с твоим rbd-томом? Я попробую посмотреть, можно ли это улучшить.
     
     
     
    liska_
    Guest
    #7
    0
    01.10.2014 16:25:00
    Я столкнулся с этим, когда переносил диск с одного NFS-хранилища на другое. Выключил машину, переместил диск и включил снова — проблема исчезла. К счастью, это была неважная виртуальная машина.
     
     
     
    spirit
    Guest
    #8
    0
    01.10.2014 16:37:00
    Ещё одна вещь, которую стоит попробовать: отредактируй файл /usr/share/perl5/PVE/QemuServer.pm, найди функцию qemu_drive_mirror:

    ```perl
    sub qemu_drive_mirror {
       my ($vmid, $drive, $dst_volid, $vmiddst, $maxwait) = @_;

       my $count = 1;
       my $old_len = 0;
       my $frozen = undef;
    ```

    и добавь после неё:

    ```perl
    sub qemu_drive_mirror {
       my ($vmid, $drive, $dst_volid, $vmiddst, $maxwait) = @_;

       my $count = 1;
       my $old_len = 0;
       my $frozen = undef;
       $maxwait = 10;   ####ДОБАВЬТЕ ЭТО. Это должно принудительно заморозить/разморозить VM, если в конце миграции происходит слишком много записи. (после этого перезапустите pvedaemon и pveproxy)
    ```
     
     
     
    jdw
    Guest
    #9
    0
    01.10.2014 16:55:00
    Добавил оба изменения. На самом деле стало только хуже. Передача прервалась на 11,37 %.

    Код: передано: 4884463616 байт, осталось: 38065209344 байт, всего: 42949672960 байт, прогресс: 11,37 %.  
    Пытаюсь получить блокировку... Удаление всех снимков: 100 % выполнено... готово.  
    На образе есть наблюдатели — не удаляем.  
    Удаление образа: 0 % выполнено... не удалось.  
    rbd: ошибка: на образе всё ещё есть наблюдатели.  
    rbd rm 'vm-1343-disk-2' ошибка: rbd: ошибка: на образе всё ещё есть наблюдатели.  
    Миграция хранилища не удалась: ошибка зеркалирования: не удаётся заблокировать файл '/var/lock/qemu-server/lock-1343.conf' — время ожидания истекло.
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры