суббота, 9 августа 2014 г.

Война с виртуалками в Proxmox

Попросили меня как то разобраться с проблемой в proxmox'е... В целом картина была такая, что некогда была произведена миграция контейнеров на этот хост, но странным оставалось то, что они работали, но при этом ими невозможно было управлять. В терминале всё хозяйство выглядело примерно так:

1        183 running   XXX.XXX.XXX.XXX   www1.ww
3          - stopped   XXX.XXX.XXX.XXX   www2.ww
4        147 running   XXX.XXX.XXX.XXX   www3.ww
128          - stopped   XXX.XXX.XXX.XXX   www4.ww
253     193 running   XXX.XXX.XXX.XXX   www5.ww
254          - stopped   XXX.XXX.XXX.XXX   www6.ww

В первом столбце как раз указаны id виртуалок. Надо оговориться, что коммерческой поддержки для этого хоста не было купленно и мне оставалось теперь полагаться только на себя... При попытках миграции с консоли или при обращении к машине через веб-интерфейс proxmox начинались сыпаться лавиной ошибки (но такая картина была только с первыми тремя). Мои потуги ползания по гуглу не привели ни к чему особенному (точнее все писали о своих проблемах, кои меня не трогали), но главное что в самом веб интерфейсе он мне писал ошибку "value does not look like a valid VM ID", что в вольном переводе гласит что значение не выглядит приемлемым для идентификатора виртуалки. Я решил за это зацепиться и начал поиск файлов, внутри которых могла бы быть эта строчка и о чудо - я накопал какой то файл с расширением .js, где я нашёл вот это:

register_format('pve-vmid', \&pve_verify_vmid);
sub pve_verify_vmid {
    my ($vmid, $noerr) = @_;

    if ($vmid !~ m/^[1-9][0-9]+$/) {
        return undef if $noerr;
        die "value does not look like a valid VM ID\n";
    }

    return $vmid;
}

Оказалось, что когда то при миграции виртуалок им назначили криво id (а надо было не 1, 2, 3, 4 и так до 99, а скажем к примеру 101, 102 ну и т.д.) и что мне оставалось, так это сменить id виртуалок. Но это оказалось нетривиальной задачей, но вполне решаемой, так что итак, погнали...

Для начала сдампим проблемную виртуалку:

vzctl chkpnt 1 --dumpfile /tmp/111.111

 Теперь перенесём конфиг виртуалки:

mv /etc/vz/conf/1.conf /etc/vz/conf/101.conf

Затем откроем его и внутри сменим значения с 1 на 101 (там их всего то 2, да и то в самом конце файла, но меняем аккуратно, не забывая про синтаксис и кавычки), после чего сохраняем его:

nano /etc/vz/conf/101.conf

Теперь перенесём всё остальное:

mv /vz/private/1 /vz/private/101
mv /vz/root/1 /vz/root/101

Теперь восстановим работу виртуалки:

vzctl restore 101 --dumpfile /tmp/111.111

Посыпал ошибками при восстановлении виртуалки? Вполне возможно, но это решается сбросом квот на эту виртуалку, для чего сделаем следующее:

vzctl stop 101
vzquota drop 101
vzctl start 101

После чего виртуалка запустится как по маслу, но со стандартными значениями в квотах (память+кол-во процессоров), но эти значения легко поменять через веб-интерфейс proxmox'a... Данные манипуляции укатили проблему в прошлое, но мало ли что будет в будущем...

Комментариев нет:

Отправить комментарий