Естественно, клиенты теряют пароли от виртуальных машин, работающих на виртуализации KVM под управлением гениальной, мощной, удобной системы управления proxmox.
Само собой, довольно просто загуглить варианты с редактированием загрузчика в VNC, добавлением init=/bin/sh в конец строки. Затем перемонтируем корень в rw командой mount -rw -o remount / и собственно, меняем пароль стандартной командой passwd
Однако этот способ годится для современных ОС. У нас же, как всегда — случай нестандартный, ядро linux старое (2.4) и не монтировался /proc с сообщением «mount could not open /proc/partitions»
Соответственно, заходим в консоль хостовой ноды по ssh, отключаем виртуалку в вебмордочке proxmox, обращая внимание на ID. В моем случае -102.
Образ диска у виртуалки находится в директории /var/lib/vz/images/102 и представлен одним файлом — /var/lib/vz/images/102/vm-102-disk-0.qcow2
Нужно смонтировать этот диск, сделать chroot в систему и сменить пароль. Приступаем? Дааа!
Смонтировать диск напрямую не удастся, там ведь несколько разделов:
mount /var/lib/vz/images/102/vm-102-disk-0.qcow2 /mnt mount: wrong fs type, bad option, bad superblock on /dev/loop2, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so. |
Нужно подгрузить модуль ядра nbd и посмотреть разделы на диске qcow2. Действуем так:
modprobe nbd max_part=8 # подключаем диск в /dev/nbd0 qemu-nbd --connect=/dev/nbd0 /var/lib/vz/images/102/vm-102-disk-0.qcow2 # Смотрим разделы на нем: fdisk /dev/nbd0 -l Disk /dev/nbd0: 32 GiB, 34359738368 bytes, 67108864 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/nbd0p1 * 63 208844 208782 102M 83 Linux /dev/nbd0p2 208845 63022994 62814150 30G 83 Linux /dev/nbd0p3 63022995 67103504 4080510 2G 82 Linux swap / Solaris |
Вот тут мы и видим нужный нам раздел — /dev/nbd0p2, так как первый это загрузчик boot, а третий — swap
Как говорится, остальное — дело техники:
# Монтируем раздел в /mnt mount /dev/nbd0p2 /mnt # Делаем chroot в виртуальный диск chroot /mnt # меняем пароль в новой виртуалке bash-2.05b# passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully. bash-2.05b# exit exit # отмонтируем диск umount /mnt |
На этом всё. Осталось только включить виртуалку и войти в нее с новым паролем.
Важное добавление. Иногда, при работе в виртуальном КВМ, нужно пробросить дополнительный диск для программ, которые нужно использовать в виртуальной машине, например — с Windows. действуем так:
# # создаем место, куда смонтируем диск mkdir /mnt/ramdisk # создаем в памяти диск нужного размера (здесь - 4Gb) mount -t tmpfs -o size=4G tmpfs /mnt/ramdisk # подгружаем модуль nbd modprobe nbd max_part=8 # создаем диск для монтирования в VM qemu-img create -f qcow2 /mnt/ramdisk/disk1.qcow2 4G |
# # Монтируем диск и создаем раздел на нем.. qemu-nbd --connect=/dev/nbd0 /mnt/ramdisk/disk1.qcow2 mkfs.fat32 /dev/nbd0 |