Автор Тема: virsh висит при выполнении команд  (Прочитано 2421 раз)

Оффлайн KALIBR-10

  • Давно тут
  • **
  • Сообщений: 357
Альт Сервер виртуализации 9

Ни с того ни с чего virsh висит при выполнении любых команд, например:

# virsh list

Ничего не возвращает, просто висит курсор в низу.

Перезапускал:
systemctl restart libvirtd
Не помогает

Сервер пока перезагрузить не могу, крутятся важные серверы, которые работают норм.

Я даже не знаю чего в багтрекер написать... судя по архитектуре данного гипервизора virsh обращается к libvirt API за который в ответе libvirtd, который я уже не однократно рестартанул.

Оффлайн KALIBR-10

  • Давно тут
  • **
  • Сообщений: 357
Re: virsh висит при выполнении команд
« Ответ #1 : 24.01.2021 12:41:47 »
Дополню ещё что в в саму оболочку virsh зайти можно, и даже выполнить команду help, но это похоже единственная команда которая работает

Так же сие произошло когда на сервере делались бекапы ВМ.

Правда пока они делались virsh норм работала, я отлучился на 30 минут и заметил что перестала отвечать

Скрипт бекапа такой:
#!/bin/bash
vmname="asterisk";
curdata=`date +"%Y-%m-%d"`;
backupdir="/backupvm/$curdata";
diskname0="vm-342-disk-0";
snapname0=$vmname"_snap";
lvname="veqlogic1";
checkvm=`/usr/bin/virsh list | grep $vmname | sed 's/ //g'`;

if [ -f "/backupvm/control" ] && [ -n "$checkvm" ] ; then

mkdir -p $backupdir/$vmname;

echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup VM" > $backupdir/$vmname/progress.log

echo "`date +"%Y-%m-%d_%H-%M-%S"` Save cofiguration VM" >> $backupdir/$vmname/progress.log
/usr/bin/virsh domblkinfo $vmname --all > $backupdir/$vmname/diskinfo
/usr/bin/virsh dumpxml $vmname > $backupdir/$vmname/config.xml

echo "`date +"%Y-%m-%d_%H-%M-%S"` Save state VM" >> $backupdir/$vmname/progress.log
/usr/bin/virsh save $vmname $backupdir/$vmname/statevm --running >> $backupdir/$vmname/progress.log

echo "`date +"%Y-%m-%d_%H-%M-%S"` Create snapshot LV" >> $backupdir/$vmname/progress.log
/sbin/lvcreate -s -n $snapname0 -L256M /dev/$lvname/$diskname0 >> $backupdir/$vmname/progress.log

echo "`date +"%Y-%m-%d_%H-%M-%S"` Restore state VM" >> $backupdir/$vmname/progress.log
/usr/bin/virsh restore $backupdir/$vmname/statevm >> $backupdir/$vmname/progress.log

echo "`date +"%Y-%m-%d_%H-%M-%S"` Backup snapshot" >> $backupdir/$vmname/progress.log
/bin/dd if=/dev/$lvname/$snapname0 bs=4k | /usr/bin/zstd -c --fast > $backupdir/$vmname/"$snapname0".zst
/sbin/lvdisplay /dev/$lvname/$snapname0 > $backupdir/$vmname/$diskname0"_snapstate"

echo "`date +"%Y-%m-%d_%H-%M-%S"` Remove snapshot" >> $backupdir/$vmname/progress.log
/sbin/lvremove -y /dev/$lvname/$snapname0 >> $backupdir/$vmname/progress.log

echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup VM" >> $backupdir/$vmname/progress.log
echo "`date +"%Y-%m-%d_%H-%M-%S"` Backup VM $vmname is completed" >> $backupdir/backupvm.log
else
echo "`date +"%Y-%m-%d_%H-%M-%S"` !!!ERROR!!! Failed backup VM $vmname" >> $backupdir/backupvm.log
fi

И таких скриптов по количеству ВМ, выолняются друг за другом.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 18 186
    • Домашняя страница
    • Email
Re: virsh висит при выполнении команд
« Ответ #2 : 24.01.2021 12:59:33 »
Запускайте через strace и смотрите на чём висит.
Андрей Черепанов (cas@)

Оффлайн aleksey-v.

  • Давно тут
  • **
  • Сообщений: 225
Re: virsh висит при выполнении команд
« Ответ #3 : 24.01.2021 13:20:01 »
Часто причиной является отсутствие правильного connection.


1. Проверьте файл /etc/libvirt/libvirt.conf.
2. Попробуйте запустить virsh c параметром -c.
3. Создайте переменную
   export LIBVIRT_DEFAULT_URI=qemu:///system
Иногда её проще сделать частью скриптов /etc/profile.d/.

Оффлайн KALIBR-10

  • Давно тут
  • **
  • Сообщений: 357
Re: virsh висит при выполнении команд
« Ответ #4 : 24.01.2021 13:20:46 »
Запускайте через strace и смотрите на чём висит.

Я не спец по отладке

В одном терминале запустил virsh
В другом по id процесса подключился strace
Выполнил команду list, вот результат:
ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0
rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, {sa_handler=0x7f3eba35b3a0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, 8) = 0
rt_sigaction(SIGTERM, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, {sa_handler=0x7f3eba35b3a0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, 8) = 0
rt_sigaction(SIGHUP, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, {sa_handler=0x7f3eba35b3a0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, {sa_handler=0x7f3eba35b3a0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, 8) = 0
rt_sigaction(SIGALRM, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, {sa_handler=0x7f3eba35b3a0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, 8) = 0
rt_sigaction(SIGTSTP, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, {sa_handler=0x7f3eba35b3a0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, 8) = 0
rt_sigaction(SIGTTOU, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, {sa_handler=0x7f3eba35b3a0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, 8) = 0
rt_sigaction(SIGTTIN, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, {sa_handler=0x7f3eba35b3a0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, 8) = 0
rt_sigaction(SIGWINCH, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f3eba1e18b0}, {sa_handler=0x7f3eba35a9a0, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f3eba1e18b0}, 8) = 0
futex(0x7f3eba925ff8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f3eba926be0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
geteuid()                               = 0
access("/etc/libvirt/libvirt.conf", F_OK) = 0
openat(AT_FDCWD, "/etc/libvirt/libvirt.conf", O_RDONLY) = 5
read(5, "#\n# This can be used to setup UR"..., 8192) = 547
read(5, "", 7645)                       = 0
close(5)                                = 0
access("/proc/vz", F_OK)                = -1 ENOENT (Нет такого файла или каталога)
geteuid()                               = 0
access("/var/run/libvirt/libvirt-sock", F_OK) = 0
socket(AF_UNIX, SOCK_STREAM, 0)         = 5
connect(5, {sa_family=AF_UNIX, sun_path="/var/run/libvirt/libvirt-sock"}, 110) = 0
getsockname(5, {sa_family=AF_UNIX}, [128->2]) = 0
futex(0x7f3eba926900, FUTEX_WAKE_PRIVATE, 2147483647) = 0
fcntl(5, F_GETFD)                       = 0
fcntl(5, F_SETFD, FD_CLOEXEC)           = 0
fcntl(5, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(5, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
futex(0x7f3eba926a50, FUTEX_WAKE_PRIVATE, 2147483647) = 0
pipe2([6, 7], O_CLOEXEC)                = 0
write(4, "\0", 1)                       = 1
futex(0x7f3eba925b80, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7f3eba926918, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f3eba926a20, FUTEX_WAKE_PRIVATE, 2147483647) = 0
brk(NULL)                               = 0x55677e583000
brk(0x55677e5a5000)                     = 0x55677e5a5000
write(4, "\0", 1)                       = 1
futex(0x7f3eba925b80, FUTEX_WAKE_PRIVATE, 1) = 1
rt_sigprocmask(SIG_BLOCK, [PIPE CHLD WINCH], [], 8) = 0
poll([{fd=5, events=POLLOUT}, {fd=6, events=POLLIN}], 2, -1) = 1 ([{fd=5, revents=POLLOUT}])
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
write(5, "\0\0\0\34 \0\200\206\0\0\0\1\0\0\0B\0\0\0\0\0\0\0\0\0\0\0\0", 28) = 28
brk(NULL)                               = 0x55677e5a5000
brk(NULL)                               = 0x55677e5a5000
brk(0x55677e595000)                     = 0x55677e595000
brk(NULL)                               = 0x55677e595000
rt_sigprocmask(SIG_BLOCK, [PIPE CHLD WINCH], [], 8) = 0
poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}], 2, -1

И всё, висит.
В багзиллу это отправить? Мне бы управление гипервизором на неделе нужно ппц как

Оффлайн KALIBR-10

  • Давно тут
  • **
  • Сообщений: 357
Re: virsh висит при выполнении команд
« Ответ #5 : 24.01.2021 13:24:01 »
Часто причиной является отсутствие правильного connection.


1. Проверьте файл /etc/libvirt/libvirt.conf.
2. Попробуйте запустить virsh c параметром -c.
3. Создайте переменную
   export LIBVIRT_DEFAULT_URI=qemu:///system
Иногда её проще сделать частью скриптов /etc/profile.d/.

Пробовал
# virsh -c qemu:///systemТо же самое.

С объявлением переменной то же.

Оффлайн aleksey-v.

  • Давно тут
  • **
  • Сообщений: 225
Re: virsh висит при выполнении команд
« Ответ #6 : 24.01.2021 13:30:14 »
В одном терминале запустил virsh
В другом по id процесса подключился strace

А зачем? это обычно в одном терминале делают.
strace  virsh  list

Оффлайн KALIBR-10

  • Давно тут
  • **
  • Сообщений: 357
Re: virsh висит при выполнении команд
« Ответ #7 : 24.01.2021 13:44:10 »
А зачем? это обычно в одном терминале делают.
strace  virsh  list

Можно и так, я хотел последовательно, чтоб непосредственно получить выход от выполнения команды list
Иначе весь текст превысил разрешенный объём символов

Оффлайн aleksey-v.

  • Давно тут
  • **
  • Сообщений: 225
Re: virsh висит при выполнении команд
« Ответ #8 : 24.01.2021 14:01:36 »
текст превысил разрешенный объём символов

Вот тут не уловил. Вы о каком лимите?

Оффлайн KALIBR-10

  • Давно тут
  • **
  • Сообщений: 357
Re: virsh висит при выполнении команд
« Ответ #9 : 24.01.2021 14:06:40 »
Вот тут не уловил. Вы о каком лимите?

Чтоб сюда вставить

А так я прочитал что там выдало, кроме как ругательств на отсутствие разного рода файлов не нашел ничего такого.
На другом компе с симпли 9 проверил там тоже такие ошибки но всё работает.


Оффлайн aleksey-v.

  • Давно тут
  • **
  • Сообщений: 225
Re: virsh висит при выполнении команд
« Ответ #10 : 24.01.2021 14:25:29 »
Давайте проверим настройки /etc/libvirt/libvirtd.conf.

grep -v ^# /etc/libvirt/libvirtd.conf | grep -v '^[[:space:]]*$'
Затем настроим почитаем логи. Например, так.

log_outputs="3:file:/var/log/libvirt/libvirtd.log"

Оффлайн KALIBR-10

  • Давно тут
  • **
  • Сообщений: 357
Re: virsh висит при выполнении команд
« Ответ #11 : 24.01.2021 14:31:56 »
Давайте проверим настройки /etc/libvirt/libvirtd.conf.

grep -v ^# /etc/libvirt/libvirtd.conf | grep -v '^[[:space:]]*$'

unix_sock_group = "vmusers"
unix_sock_rw_perms = "0770"


Оффлайн KALIBR-10

  • Давно тут
  • **
  • Сообщений: 357
Re: virsh висит при выполнении команд
« Ответ #12 : 24.01.2021 14:33:23 »

Затем настроим почитаем логи. Например, так.

log_outputs="3:file:/var/log/libvirt/libvirtd.log"

Это в /etc/libvirt/libvirtd.conf и перезагрузить libvirtd?

Оффлайн aleksey-v.

  • Давно тут
  • **
  • Сообщений: 225
Re: virsh висит при выполнении команд
« Ответ #13 : 24.01.2021 14:38:29 »
всё верно

Оффлайн aleksey-v.

  • Давно тут
  • **
  • Сообщений: 225
Re: virsh висит при выполнении команд
« Ответ #14 : 24.01.2021 14:55:49 »
Да и вообще надо логи почитать.
И далеко не все они в /var/log/. Многие уже в journald.

journalctl -xa --since yesterday