MYCSS

Показ дописів із міткою Virtualization. Показати всі дописи
Показ дописів із міткою Virtualization. Показати всі дописи

2026-01-30

Windows Docker. Virtual image file just only grow size of .vhds file.

Куди зникає місце на диску?

Docker у Windows працює через WSL (Windows Subsystem for Linux), яка в свою чергу використовує віртуалізацію Hyper‑V. Це означає, що всі дані зберігаються у файлах образів віртуальних дисків .vhdx.

З часом диск починає стрімко розростатися, і рано чи пізно місце на системному SSD закінчується. Тоді виникає питання: куди ж воно поділося?

На допомогу приходить утиліта WinTree (diskanalyzer.com), яка дозволяє швидко побачити, що саме займає простір.

Саме так я й з’ясував, що проблема була у Docker. Але коли перевірив сам Docker - там усе вже очищено, а файл .vhdx продовжував залишатися гігантським.

docker system df

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          2         2         329.2MB   0B (0%)
Containers      3         0         2B        2B (100%)
Local Volumes   62        1         2.309GB   2.125GB (92%)
Build Cache     0         0         0B

Чому VHDX росте безконтрольно.

Реальний розмір віртуального тому завжди більший за фактичні дані. Це відбувається тому, що .vhdx‑файл у WSL та Docker може лише збільшуватися у міру потреби. 

Коли ти видаляєш образи чи очищаєш дані, простір всередині Linux‑файлової системи звільняється, але сам файл на диску не стискається автоматично. 

Тому він продовжує залишатися гігантським, навіть якщо даних там майже немає. 

Docker .vhdx before compact

Стискаємо образ диску 

Виходимо з застосунку "Docker Desktop" та робимо завершення "WSL":
wsl --shutdown
Стискаємо VHD файл відкриваючи консоль PowerShell як Administrator.
Optimize-VHD -Path "$env:LOCALAPPDATA\Docker\wsl\disk\docker_data.vhdx" -Mode Full

Тепер набагато краще.

Docker .vhdx after compact

 

2024-10-05

Note. FreeBSD. pkg create. Backup of erlang-21. Сталася класична ситуація з оновленнями. Postmortem Report.

Умови:

Є віртуальна машина з FreeBSD під керуванням Proxmox VE.

Є застосунок 'pleroma' котрий працює на базі erlang

Причини:

Для підтримання інфраструктури операційна система оновлюється і пакунки підтримуються в актуальному стані.
Застосунок працює, в пам'яті, все нормально. Користувачі заносять нові дані...

2024-09-21

Note. Restore the old physical server by moving it to a virtual machine on the Proxmox VE. Creating an iSCSI disk and mounting it at boot. FreeBSD 9.0.

Примітка. Відновлення старого фізичного сервера, перемістивши його на віртуальну машину на Proxmox VE. Створення iSCSI диску та його монтування при завантажені операційної системи. FreeBSD 9.0.

Історія

Основне правило адміністратора, працює не чіпай. Призводить то того що рано чи пізно це вилазить боком. На кшталт не можеш нічого оновити та встановити.

Тому мені історично діставався цей сервер котрий треба перемістити до віртуального середовища поки "/raid1" масив ще працює після нового його збою, але варто зауважити міцний горішок.

Є декілька способів як перемістити систему з фізичного до віртуального. Але я не хотів переносити усі накопиченні проблеми, і вирішив перенести все окрім ядра та базової системи використовуючи    rsync.

2024-09-09

FreeBSD 14. Mail server POSTFIX and mariadb-client instead of mysql-client

Маю операційну систему FreeBSD 14.1-RELEASE у віртуальному середовищі Proxmox VE. 

Щойно оновив поштовий сервер з FreeBSD 13.1-RELEASE, і з'ясувалося що я не можу тепер встановити POSTFIX та mariadb-client одночасно, як це було раніше. Тому це нотатка мені як я  розв'язав цю проблему, щоб не наступати на ті самі граблі двічі.

Коли встановлено у Вас mariadb-server та mariadb-client на одному сервері, то при встановленні поштового сервера postfix як пакунок через pkg install postfix-mysql, або з портів з опцією MySQL.

postfix freebsd port, mysql option

 Вам буде пропоновано видалити mariadb-server та mariadb-client і встановити mysql-client.

2023-02-12

Скрипт для Proxmox - Періодичний знімок віртуальної машини

Буває що віртуальна машина використовує якийсь довготривалий розрахунок. А якщо що ?

То всі результати розрахунку пропали ?

Тому ось простий скрипт що періодично створює знімок віртуальної машини (snapshot) зі станом пам'яті. Також змінює назву збільшуючи її на одиницю.

#!/usr/bin/env bash

PATH=$PATH:/usr/sbin

VM=309

prevsn=$(qm listsnapshot ${VM} | head -n 1 | awk '{print $2}')

if [ "$prevsn" == "current"  ];then
 snname="a1"
else
 snname="a$(( ${prevsn:1} + 1 ))"
fi
echo prev:$prevsn new:${snname}
qm snapshot $VM ${snname}  --vmstate true
if [ $? -eq 0 ] && [ "$prevsn" != "current" ];then
 echo "all ok with new snapshot: ${snname}, remove prev: $prevsn"
 qm delsnapshot $VM  $prevsn
fi

Результат:

bash result

2023-01-04

Скрипт автоматизації перейменування віртуальних машин у Proxomos VE для приєднання до кластеру


При переносі віртуальних машин з ноду в кластер необхідно мати пустий нод, і номера віртуальних машин що не конфліктують з іншими. 

Для вирішення цієї задачі простіше і надійніше використати метод створення резервної копії і потім її відновлення в кластері. 

Але я створив малий скрип що допомагає обійтися без цього методу.

Тому цей простий скрип перейменовує гуртом віртуальні машини з номерами 1ХХ на 6ХХ і де дані зберігаються на ZFS диску з назвою 'mdata'.

2022-02-14

Нотатка для себе. Proxmox easy HA script.

В деяких ситуаціях HA (High Availability) системи Proxmox для віртуальних машин не допомагає.

Такою ситуацією є випадок коли резервна копія віртуальної машини налаштована як stop mode, а не snapshot mode.

І бувають ситуації на кшталт цієї:

INFO: timeout waiting on systemd
command 'qm start 101 --skiplock' failed: exit code 255
ERROR: Backup of VM 101 failed - timeout waiting on systemd
INFO: Failed at 2022-02-11 01:15:48
INFO: Backup job finished with errors

Тому простий скрипт котрий запускає за розкладом crond вирішує цю задачу:

#!/bin/sh

vmlist="101 102"
for i in $vmlist; do
 status=$(/usr/sbin/qm status $i)
 echo $status
  if [ ! "${status}" = "status: running" ];then
   echo "BAD"
   /usr/sbin/qm start $i
  else
   echo "OK"
  fi
done
corontab -e
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

*/30 * * * *      /home/check-vm.sh 2>1 >/dev/null

Результат роботи скрипту

 


2021-07-02

Нотатка для себе. Proxmox відновлюємо конфігурацію з майже "померлого" диску.

Ситуація така - помер системний диск Proxmox.

З даними віртуальних машин не проблема вони на інших ZFS дисках, а ось файл конфігурації невідомий.

Добре що були резервні копії віртуальних машин на NFS спільному ресурсі, і в них є копія конфігураційного файлу, але для деяких не дуже важливих віртуальних машин копій не було.

Тому пошуки ...

Диск не завантажувався, тому завантажуємося з USB Live Ubuntu, а проблемний диск підключаємо через SATA-USB адаптер потім.

dmesg

Виявлено три розділи:  sdb: sdb1 sdb2 sdb3

2021-07-01

Нотатка для себе. Proxmox config backup script DerDanilo

Proxmox  має вбудований механізм створення  резервних копій образів віртуальних машин, але копія налаштувань самого гіпервізору відсутня в community version.

Тому спільнота створює власні механізми, один з них проєкт від DerDanilo:  https://github.com/DerDanilo/proxmox-stuff


Де є скрипт резервного копіювання основних файлів до архівної теки,  і опис як відновити.

Ось його копія:

#!/bin/bash
# Version	      0.2.2 - BETA ! !
# Date		      02.20.2020
# Author 	      DerDanilo 
# Contributors    aboutte, xmirakulix, bootsie123

# set vars

# always exit on error
set -e

# permanent backups directory
# default value can be overridden by setting environment variable before running prox_config_backup.sh
# example: export BACK_DIR="/mnt/pve/media/backup
_bdir=${BACK_DIR:-/mnt/backups/proxmox}

# number of backups to keep before overriding the oldest one
MAX_BACKUPS=5

# temporary storage directory
_tdir=${TMP_DIR:-/var/tmp}

_tdir=$(mktemp -d $_tdir/proxmox-XXXXXXXX)

function clean_up {
    echo "Cleaning up"
    rm -rf $_tdir
}

# register the cleanup function to be called on the EXIT signal
trap clean_up EXIT

# Don't change if not required
_now=$(date +%Y-%m-%d.%H.%M.%S)
_HOSTNAME=$(hostname -f)
_filename1="$_tdir/proxmoxetc.$_now.tar"
_filename2="$_tdir/proxmoxpve.$_now.tar"
_filename3="$_tdir/proxmoxroot.$_now.tar"
_filename4="$_tdir/proxmoxcron.$_now.tar"
_filename5="$_tdir/proxmoxvbios.$_now.tar"
_filename6="$_tdir/proxmoxpackages.$_now.list"
_filename_final="$_tdir/proxmox_backup_"$_HOSTNAME"_"$_now".tar.gz"

##########

function description {
    clear
    cat </dev/null)" != "" ] ; then
	echo backing up custom video bios...
	tar --warning='no-file-ignored' -cvPf "$_filename5" /usr/share/kvm/*.vbios
    fi
    # copy installed packages list
    echo "Copying installed packages list from APT"
    apt-mark showmanual | tee "$_filename6"
}

function compressandarchive {
    echo "Compressing files"
    # archive the copied system files
    tar -cvzPf "$_filename_final" $_tdir/*.{tar,list}

    # copy config archive to backup folder
    # this may be replaced by scp command to place in remote location
    cp $_filename_final $_bdir/
}

function stopservices {
    # stop host services
    for i in pve-cluster pvedaemon vz qemu-server; do systemctl stop $i ; done
    # give them a moment to finish
    sleep 10s
}

function startservices {
    # restart services
    for i in qemu-server vz pvedaemon pve-cluster; do systemctl start $i ; done
    # Make sure that all VMs + LXC containers are running
    qm startall
}

##########


description
are-we-root-abort-if-not
check-num-backups

# We don't need to stop services, but you can do that if you wish
#stopservices

copyfilesystem

# We don't need to start services if we did not stop them
#startservices

compressandarchive

2021-06-10

Нотатка для себе. SR-IOV та Intel 82576/82575 в віртуальному середовищі Proxmox для FreeBSD, Ubuntu.

В Proxmox було встановлено мережеву карту 1Gb Intel 82576 з метою використання функціоналу SR-IOV для ефективного використання для віртуальних мереж.

SR-IOV

SR-IOV

Proxmox була налаштована для PCI(e) Passthrough , IOMMU  до VM.

2021-05-29

Нотатка для себе. Proxmox Ceph

Ceph destroy

#rm -rf /etc/systemd/system/ceph*
#killall -9 ceph-mon ceph-mgr ceph-mds
#rm -rf /var/lib/ceph/mon/  /var/lib/ceph/mgr/  /var/lib/ceph/mds/
#pveceph purge
#apt purge ceph-mon ceph-osd ceph-mgr ceph-mds
#rm /etc/init.d/ceph

LVM

#pvdisplay
File descriptor 7 (pipe:[1486785]) leaked on pvdisplay invocation. Parent PID 382397: bash
  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               ceph-adc898bc-44ea-43a1-8279-964e06acc8d5
  PV Size               931.51 GiB / not usable 1.71 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              238467
  Free PE               0
  Allocated PE          238467
  PV UUID               3LBrIs-Eh8t-wljP-WDMv-DxiX-CKAd-vXCyHf
#vgremove ceph-adc898bc-44ea-43a1-8279-964e06acc8d5
File descriptor 7 (pipe:[1486785]) leaked on vgremove invocation. Parent PID 382397: bash
Do you really want to remove volume group "ceph-adc898bc-44ea-43a1-8279-964e06acc8d5" containing 1 logical volumes? [y/n]: y
Do you really want to remove and DISCARD active logical volume ceph-adc898bc-44ea-43a1-8279-964e06acc8d5/osd-block-ca1b00e7-bafc-4c7a-97aa-a83bcd784173? [y/n]: y
  Logical volume "osd-block-ca1b00e7-bafc-4c7a-97aa-a83bcd784173" successfully removed
  Volume group "ceph-adc898bc-44ea-43a1-8279-964e06acc8d5" successfully removed

#pvremove   /dev/sdc
File descriptor 7 (pipe:[1486785]) leaked on pvremove invocation. Parent PID 382397: bash
  Labels on physical volume "/dev/sdc" successfully wiped.

2020-12-23

TrueNAS VM and PPPoE or pass all non-IP Ethernet frames on FreeBSD bridge

Базово, якщо створити віртуальну машину у TrueNAS/FreeNAS то дещо обмежено у користуванні: мережа підключається через bridge а він не пропускає не IP пакети. 

Це тому-що  bridge в TrueNAS/FreeNAS має  ввімкнуте налаштування:  net.link.bridge.pfill_onlyip=1, що обмежує проходження пакетів тільки протоколу IP, (set to 0 to unconditionally pass all non-IP Ethernet frames).

Тому встановимо net.link.bridge.pfill_onlyip=0 в системних налаштуваннях TrueNAS/FreeNAS:

 Sysctl: net.link.bridge.pfill_onlyip

Після перезавантаження віртуальна машина зможе отримати всі non-IP Ethernet пакети котрі недохідні для PPPoE, DHCP або іншого  сервера наприклад в pfSense.

За матеріалами:

2020-10-22

Підключення до консолі віртуальних машин Hyper-V через RDP

.rdp

Для цього треба ввімкнути розширений режим (Enhanced Session Mode (ESM)),  у налаштуваннях Hyper-V 

налаштування Hyper-V

Локальне підключення до консолі віртуальної машини виглядає так:

Консоль  VM "MEDOC"

2019-09-10

Windows 10, version 1903, Windows Sanbox - Українською є "Ізольоване програмне середовище Windows".

Маючи Windows 10 Pro, і оновившись до version 1903 прочитав новини : що є нова можливість використовувати вбудовану "Sanbox".
Але сходу не зміг ввімкнути цю можливість користуючись англомовними ресурсами.
Деякі ресурси написали що в українській версії не запускався Sandbox у свій час.
То вирішив перевірити і сам. Так я знайшов що в українській версії Windows 10 Pro (1903 збірка 18362.295) Sandbox засукається, а засіб "Windows Sandbox" у перекладі є "Ізольоване програмне середовище Windows".
"Ізольоване програмне середовище Windows" - Windows Sandbox
Всередині тимчасової віртуальної машини запускається не активована Windows 10 Enterprise 1903 з англомовним інтересом.

Додатково можна трохи налаштувати "Windows Sandbox" через створений текстовий  конфігураційний файл .wsb. Наприклад:

<Configuration>
<MappedFolders>
   <MappedFolder>
     <HostFolder>C:\temp</HostFolder>
     <ReadOnly>true</ReadOnly>
   </MappedFolder>
   <MappedFolder>
     <HostFolder>C:\CodingProjects</HostFolder>
     <ReadOnly>false</ReadOnly>
   </MappedFolder>
</MappedFolders>
<LogonCommand>
   <Command>C:\users\wdagutilityaccount\desktop\CodingProjects\VSCodeInstall.cmd</Command>
</LogonCommand>
<VGpu>default</VGpu> 
<Networking>default</Networking> 
</Configuration>

Для запуску "Windows Sandbox" з урахуванням  конфігураційного файлу потрібно подвійним кліком натиснути на конфігураційний файл у провіднику.

Посилання на спільні теки ("temp","CodingProjects") будуть на робочому столі, і автоматично запуститься скрипт "CodingProjects\VSCodeInstall.cmd", а тека "temp" буде тільки для читання.

#Windows10Sandbox #Windows10


2019-06-06

Disk & Proxmox

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

Physical disk to kvm

lshw -class disk -class storage
...

           *-disk
                description: ATA Disk
                product: ST3000DM001-1CH1
                vendor: Seagate
                physical id: 0.0.0
                bus info: scsi@3:0.0.0
                logical name: /dev/sda
                version: CC27
                serial: Z1F41BLC
                size: 2794GiB (3TB)
                configuration: ansiversion=5 sectorsize=4096
... 
ls -l /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC
ls -l /dev/disk/by-id | grep Z1F41BLC
add to kvm :
qm set  592  -virtio2 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC
update VM 592: -virtio2 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC
check:
grep Z1F41BLC /etc/pve/qemu-server/592.conf
virtio2: /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC,size=2930266584K

2016-12-02

Ubuntu 16.04. FreeRDP connect to console of Hyper-V 2016 virtual machine.

Керуючись публікацією Using FreeRDP to connect to the Hyper-V console - Cloudbase Solutions
Під'єднався з Ubuntu через SSH тунель до Hyper-V console. На базі Hyper-V 2016.

  1. Визначаємо ID віртуальної машини "Server2008". Через RDP підключаємось до "HVServer". В консолі запускаємо PowerShell:
    Get-VM Server2008 | Select-Object Id
    Id
    --
    3327c485-12da4-4c1c-22ac-17f8fc378bb6
  2. Ubuntu: створюємо тунель і прокидаємо порт 2179 локально.
    SSH tunel 127.0.0.1:2179  - > HVServer:2179
    ssh -L 2179:HVServer:2179 user@example.com
  3. Підключаємось:
    xfreerdp /cert-ignore /vmconnect:3327c485-12da4-4c1c-22ac-17f8fc378bb6 /v:127.0.0.1 /u:administrator
Результат під'єднаної віртуальної машини "Server2008" у Ubuntu 16.04


2016-11-26

Windows NUT для сервера Hyper-V 2016

Спроба налаштувати NUT для Hyper-V 2016.
Маю спільний UPS з двома серверами.
1. FreeNAS з NUT під'єднаний до UPS
2. Hyper-V 2016

Завдання правильно вимикати обидва сервери.

2016-11-10

2016-09-20

Використання мереж VLAN у FreeBSD при міграції до Hyper-V

Портував FreeBSD сервер до віртуального середовища під керуванням Microsoft Hyper-V. І за звичай хотів використовувати налаштування які я робив у FreeBSD для віртуальних мереж, де є одна мережева карта "fxp0" і з неї "витягуються" усі віртуальні мережі vlan101...vlan1000:
rc.conf:

cloned_interfaces="vlan101 vlan102 vlan103 vlan104 vlan1000"
ifconfig_vlan101="inet 192.168.101.1 netmask 255.255.255.0 vlan 101 vlandev fxp0"
ifconfig_vlan102="inet 192.168.102.1 netmask 255.255.255.0 vlan 102 vlandev fxp0"
ifconfig_vlan103="inet 192.168.103.1 netmask 255.255.255.0 vlan 103 vlandev fxp0"
ifconfig_vlan104="inet 192.168.104.1 netmask 255.255.255.0 vlan 104 vlandev fxp0"
...
ifconfig_fxp0="up"
Але з'ясувалося через 'tcpdump -i fxp0 -eee', як у жахливому сні - що десь чути чую, а сказати нічого не можу .
Після аналізу з'ясував що так і потрібно, щоб віртуальні середовища були ізольовані один від одного.
Вихід з цього простий треба у налаштування віртуального середовища створити стільки мережевих адаптерів скільки віртуальних мереж Вам потрібно. Для тегованих так і не тегованих портів створюються окремі адаптери:
Визначення TAG ID port VLAN для мережевого адаптера у Hyper-V
Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready