Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    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 Виртуальная Среда
    Снять диск в hookscript после остановки.

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Снять диск в hookscript после остановки., Proxmox Виртуальная Среда
     
    freeDom-
    Guest
    #1
    0
    02.04.2025 14:38:00
    Привет, у меня есть простой hookscript, чтобы убедиться, что необходимые точки монтирования для контейнеров монтируются на хосте при запуске. Монтирование работает как ожидалось, но размонтирование в фазе post-stop не работает. Триггер post-stop выполняется (я протестировал это, создав временный файл в фазе post-stop), но кажется, что ресурсы еще не освобождаются гостевой системой (см. https://forum.proxmox.com/threads/hookscript-wird-nicht-genutzt.151222/ ). Что я могу сделать, чтобы правильно размонтировать диски после завершения работы контейнера, если нельзя использовать фазу hook post-stop? Разве это не должно быть правильным местом для этого?

    Код:
    ```
    #!/usr/bin/perl

    # Пример hook script для PVE guests (hookscript config option)
    # Можно установить это через pct/qm с
    # pct set <vmid> -hookscript <volume-id>
    # qm set <vmid> -hookscript <volume-id>
    # где <volume-id> должен быть исполняемым файлом в папке snippets
    # любого хранилища с директориями, например:
    # qm set 100 -hookscript local:snippets/hookscript.pl

    use strict;
    use warnings;

    print "GUEST HOOK: " . join(' ', @ARGV). "\n";

    # Первый аргумент - vmid

    my $vmid = shift;

    # Второй аргумент - фаза

    my $phase = shift;

    if ($phase eq 'pre-start') {

       # Первая фаза 'pre-start' будет выполнена перед запуском гостевой
       # системы. Завершение с кодом != 0 приведет к отмене запуска

       print "$vmid запускается, выполняются подготовки.\n";
       system("mount /mnt/lxc/$vmid/*");

       # print "подготовки не удались, отмена."
       # exit(1);

    } elsif ($phase eq 'post-start') {

       # Вторая фаза 'post-start' будет выполнена после того, как гостевая
       # система успешно запустится.

       print "$vmid успешно запущен.\n";

    } elsif ($phase eq 'pre-stop') {

       # Третья фаза 'pre-stop' будет выполнена перед остановкой гостевой
       # системы через API. Не будет выполнена, если гостевая система
       # остановлена изнутри, например, командой 'poweroff'.

       print "$vmid будет остановлен.\n";

    } elsif ($phase eq 'post-stop') {

       # Последняя фаза 'post-stop' будет выполнена после остановки гостевой.
       # Эта фаза должна выполняться даже в случае сбоя гостевой системы
       # или ее неожиданной остановки.

       print "$vmid остановлен. Выполняется очистка.\n";
       # Сейчас не работает, потому что passthrough устройства освобождаются только после post-stop
       #system("umount /mnt/lxc/$vmid/*");

    } else {
       die "получена неизвестная фаза '$phase'\n";
    }

    exit(0);
    ```
    Вот мой /etc/fstab (удашены IP-адреса и точки монтирования):
    ```
    # lxc file shares
    //ipaddr/mountpoint1 /mnt/lxc/178/mountpoint1 cifs nofail,credentials=/root/.smbcredentials_1,uid=100000,gid=100000 0 0
    //ipaddr/mountpoint2 /mnt/lxc/178/mountpoint2 cifs nofail,credentials=/root/.smbcredentials_1,uid=100000,gid=100000 0 0
    //ipaddr/mountpoint3 /mnt/lxc/178/mountpoint3 cifs nofail,credentials=/root/.smbcredentials_1,uid=100000,gid=100000 0 0
    //ipaddr/mountpoint4 /mnt/lxc/179/mountpoint4 cifs nofail,credentials=/root/.smbcredentials_1,uid=100000,gid=100000 0 0
    //ipaddr/mountpoint5 /mnt/lxc/176/mountpoint5 cifs nofail,credentials=/root/.smbcredentials_2,uid=100000,gid=100000 0 0
    ```
    Вот вывод журнала из journalctl -r:
    ```
    Apr 02 13:51:37 hypercat systemd[1]: pve-container@179.service: Деактивирован успешно.
    Apr 02 13:51:37 hypercat pct[303863]: <root@pam> завершение задачи UPID:hypercat:0004A2F9:00453686:67ED24C1:vzshutdown:179:root@>
    Apr 02 13:51:37 hypercat kernel: EXT4-fs (dm-21): размонтирование файловой системы 0ed234dc-aff3-4891-90f3-f8feafef1d33.
    Apr 02 13:51:36 hypercat pvestatd[1248]: не удалось получить PID для CT 179 (не работает?).
    Apr 02 13:51:36 hypercat kernel: audit: type=1400 audit(1743594696.243:77): apparmor="STATUS" operation="profile_remove>
    Apr 02 13:51:36 hypercat audit[304043]: AVC apparmor="STATUS" operation="profile_remove" profile="/usr/bin/lxc-start" n>
    Apr 02 13:51:29 hypercat pct[303865]: остановка CT 179: UPID:hypercat:0004A2F9:00453686:67ED24C1:vzshutdown:179:root@pam:
    Apr 02 13:51:29 hypercat pct[303863]: <root@pam> запуск задачи UPID:hypercat:0004A2F9:00453686:67ED24C1:vzshutdown:179:>
    Apr 02 13:51:16 hypercat pct[303367]: <root@pam> завершение задачи UPID:hypercat:0004A108:004530A7:67ED24B2:vzstart:179:root@pam>
    Apr 02 13:51:15 hypercat kernel: audit: type=1400 audit(1743594675.617:76): apparmor="STATUS" operation="profile_load" >
    Apr 02 13:51:15 hypercat audit[303398]: AVC apparmor="STATUS" operation="profile_load" profile="/usr/bin/lxc-start" nam>
    Apr 02 13:51:15 hypercat kernel: EXT4-fs (dm-21): смонтирована файловая система 0ed234dc-aff3-4891-90f3-f8feafef1d33.
    Apr 02 13:51:14 hypercat pct[303368]: запуск CT 179: UPID:hypercat:0004A108:004530A7:67ED24B2:vzstart:179:root@pam:
    Apr 02 13:51:14 hypercat pct[303367]: <root@pam> запуск задачи UPID:hypercat:0004A108:004530A7:67ED24B2:vzstart:179:root@pam:
    Apr 02 13:51:14 hypercat kernel: CIFS: Попытка смонтировать //ipaddr/mountpoint4
    Apr 02 13:51:14 hypercat kernel: CIFS: включение опции forcegid mount явно, так как gid= указано.
    Apr 02 13:51:14 hypercat kernel: CIFS: включение опции forceuid mount явно, так как uid= указано.
    ```
     
     
     
    Kodey
    Guest
    #2
    0
    21.06.2025 08:30:00
    Разве это не стоило бы закомментировать?
     
     
     
    freeDom-
    Guest
    #3
    0
    21.06.2025 15:32:00
    Проверь комментарий выше. Эта строка закомментирована намеренно, потому что она не работает. Устройство пока не выпущено после периода задержек, и его пока нельзя отмонтировать.
     
     
     
    Kodey
    Guest
    #4
    0
    27.06.2025 10:39:00
    Если вы передаете устройство диска PCI через проброс, разве гостевой сеанс не должен заниматься монтированием/демонтированием?
     
     
     
    leesteken
    Guest
    #5
    0
    27.06.2025 11:09:00
    Использую Bash-скрипт вместо Perl и запускаю команды в post-stop параллельно с &. В моем случае qm автоматически немного ждет, пока VM все еще заблокирована, и все работает нормально.

    Bash: #!/bin/bash
    if [ "$2" == "pre-start" ]
    then
       echo "VM $1 самоуничтожится после выключения!"
    elif [ "$2" == "post-stop" ]
    then
       nohup /usr/sbin/qm destroy "$1" &>/dev/null &
    fi
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

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