Blame

3cc512 Mayekkuzu 2024-12-08 13:39:47 1
# Proxmox
2
04b05a Mayekkuzu 2024-12-08 14:44:17 3
![](/Virtualization/Proxmox/proxmox.webp)
4
3cc512 Mayekkuzu 2024-12-08 13:39:47 5
Proxmox - достаточно удобная в употреблении система для организации виртуальных машин на [KVM](Linux/System/KVM) и [LXC](Linux/System/LXC)-контейнеров для своих нужд. Для домашнего использования бесплатна, но обновление пакетов за деньги.
6
7
Базируется на debian, может быть установлена поверх него, но так же есть уже готовый настроенный образ для установки на сервер. Так же на официальном сайте имеются образы для организации Backup-сервера proxmox.
04b05a Mayekkuzu 2024-12-08 14:44:17 8
d8370a Mayekkuzu 2025-04-26 16:33:08 9
## RAID 1 на mdadm
10
11
Возможности с GUI организовать raid на proxmox к сожалению нет. Но через cli - можно. Ставим пакет:
12
```bash
13
apt install mdadm
14
```
15
16
Далее смотрим диски, в моем случае это выглядит так:
17
```bash
18
root@main-server:~# lsblk
19
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
20
sda 8:0 0 931.5G 0 disk
21
├─VMs_1TB_SATA-vm--102--disk--0 252:0 0 15G 0 lvm
22
...
23
sdb 8:16 0 3.6T 0 disk <-- Хочу RAID на этом диске
24
sdc 8:32 0 14.6T 0 disk
25
└─md127 9:127 0 14.6T 0 raid1
26
...
27
sdd 8:48 0 3.6T 0 disk <-- И на этом
28
sde 8:64 0 14.6T 0 disk
29
└─md127 9:127 0 14.6T 0 raid1
30
...
31
nvme0n1 259:0 0 931.5G 0 disk
32
├─VMs_1TB_NVME-vm--101--disk--0 252:3 0 32G 0 lvm
33
...
34
nvme1n1 259:1 0 232.9G 0 disk
35
├─nvme1n1p1 259:2 0 1007K 0 part
36
...
37
```
38
Следовательно /dev/sdb и /dev/sdd - это мои целевые диски по 4TB
39
40
Собираем RAID:
41
```bash
42
root@main-server:~# mdadm --create --verbose /dev/md1 -l 1 -n 2 /dev/sd{b,d}
43
mdadm: Note: this array has metadata at the start and
44
may not be suitable as a boot device. If you plan to
45
store '/boot' on this device please ensure that
46
your boot-loader understands md/v1.x metadata, or use
47
--metadata=0.90
48
mdadm: size set to 3906886464K
49
mdadm: automatically enabling write-intent bitmap on large array
50
Continue creating array? y
51
mdadm: Defaulting to version 1.2 metadata
52
mdadm: array /dev/md1 started.
53
```
54
55
Если получаем ошибку:
56
```bash
57
mdadm: Unrecognised md component device - /dev/sdb
58
mdadm: Unrecognised md component device - /dev/sdd
59
```
60
61
То удаляем метаданные и подпись на дисках:
62
```bash
63
wipefs --all --force /dev/sd{b,d}
64
```
65
66
Далее записываем в /etc/mdadm/mdadm.conf (Если нет папки /etc/mdadm то создаем)
67
```bash
68
echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
69
mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf
70
```
71
72
Содержимое будет такое:
73
```
74
DEVICE partitions
75
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=1.2 name=main-server:1 UUID=70d5b802:3123a9c1:821fa70d:664623ec
76
devices=/dev/sdb,/dev/sdd
77
```
78
79
А отследить статус синка дисков можно командой:
80
```bash
81
root@main-server:~# cat /proc/mdstat
82
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10]
83
md1 : active raid1 sdd[1] sdb[0]
84
3906886464 blocks super 1.2 [2/2] [UU]
85
[======>..............] resync = 32.0% (1251235264/3906886464) finish=294.7min speed=150152K/sec
86
bitmap: 21/30 pages [84KB], 65536KB chunk
87
```
88
89
Ресинк занимает достаточно большое количество времени, а пока что создадим LVM на этом массиве:
90
```bash
91
vgcreate Media4TBRaid /dev/md1
92
lvcreate -l 100%FREE --thinpool lv_raid Media4TBRaid
93
```
94
95
Если раздел не отобразился в списке, добавляем через GUI. Идем в Datacenter -> Storage -> Add и заполняем ID. Обязательно выбираем Volume Group который мы указали ранее
96
a5f876 Mayekkuzu 2025-04-26 16:34:55 97
![](./lvm_on_mdadm.png)
d8370a Mayekkuzu 2025-04-26 16:33:08 98
99
Если по какой то причине имя Logical Volume вам не нравится, то переименовать можно так:
100
```bash
101
lvrename Media4TBRaid /dev/Media4TBRaid/lv_raid /dev/Media4TBRaid/MediaStorage4TB
102
```
103
104
04b05a Mayekkuzu 2024-12-08 14:44:17 105
## Настройка ИБП для Proxmox
106
107
В моем случае это ИБП Ippon Back Basic 650 Euro. Подключаем его к серверу по USB. Проверяем его USB id
108
109
```bash
110
root@kanonik-server:~# lsusb
111
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
112
Bus 001 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial <- Это оно если что
113
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
114
```
115
116
Проверим корректно ли работает устроиство с Proxmox
117
118
```bash
119
root@kanonik-server:~# lsusb -v -s 1:2
120
121
Bus 001 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial
122
Device Descriptor:
123
bLength 18
124
bDescriptorType 1
125
bcdUSB 1.10
126
bDeviceClass 0
127
bDeviceSubClass 0
128
bDeviceProtocol 0
129
bMaxPacketSize0 8
130
idVendor 0x0665 Cypress Semiconductor
131
idProduct 0x5161 USB to Serial
132
bcdDevice 0.02
133
iManufacturer 1 INNO TECH
134
iProduct 2 USB to Serial
135
iSerial 3 20100826
136
bNumConfigurations 1
137
Configuration Descriptor:
138
bLength 9
139
bDescriptorType 2
140
wTotalLength 0x0022
141
bNumInterfaces 1
142
bConfigurationValue 1
143
iConfiguration 3 20100826
144
bmAttributes 0x80
145
(Bus Powered)
146
MaxPower 100mA
147
Interface Descriptor:
148
bLength 9
149
bDescriptorType 4
150
bInterfaceNumber 0
151
bAlternateSetting 0
152
bNumEndpoints 1
153
bInterfaceClass 3 Human Interface Device
154
bInterfaceSubClass 0
155
bInterfaceProtocol 0
156
iInterface 4 Sample HID
157
HID Device Descriptor:
158
bLength 9
159
bDescriptorType 33
160
bcdHID 1.00
161
bCountryCode 0 Not supported
162
bNumDescriptors 1
163
bDescriptorType 34 Report
164
wDescriptorLength 27
165
Report Descriptors:
166
** UNAVAILABLE **
167
Endpoint Descriptor:
168
bLength 7
169
bDescriptorType 5
170
bEndpointAddress 0x81 EP 1 IN
171
bmAttributes 3
172
Transfer Type Interrupt
173
Synch Type None
174
Usage Type Data
175
wMaxPacketSize 0x0008 1x 8 bytes
176
bInterval 32
177
Device Status: 0x0000
178
(Bus Powered)
179
```
180
181
Далее ставим пакет nut с репозитория
182
183
```bash
184
apt install nut -y
185
```
186
Запустим nut-scanner, проверим находит ли сканер наш ИБП
187
```bash
188
root@kanonik-server:~# nut-scanner -U
189
Scanning USB bus.
190
[nutdev1]
191
driver = "nutdrv_qx"
192
port = "auto"
193
vendorid = "0665"
194
productid = "5161"
195
product = "USB to Serial"
196
vendor = "INNO TECH"
197
bus = "001"
198
```
199
200
Отлично, делаем бекапы конфиг-файлов перед редактированием
201
```bash
202
cp /etc/nut/nut.conf /etc/nut/nut.example.conf
203
cp /etc/nut/ups.conf /etc/nut/ups.example.conf
204
cp /etc/nut/upsd.conf /etc/nut/upsd.example.conf
205
cp /etc/nut/upsd.users /etc/nut/upsd.example.users
206
cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf
207
cp /etc/nut/upssched.conf /etc/nut/upssched.example.conf
208
cp /etc/nut/upssched-cmd /etc/nut/upssched-cmd.example
209
```
210
Теперь приступаем к настройке. Открываем `/etc/nut/nut.conf` и редактируем единственную директиву в конце файла:
211
```
212
MODE=netserver
213
```
214
Далее открываем `/etc/nut/ups.conf` и удалив все содержимое прописываем:
215
```
216
pollinterval = 15
217
maxretry = 3
218
219
offdelay = 120
220
ondelay = 240
221
222
[ippon]
223
driver = nutdrv_qx
224
port = auto
225
desc = "INNO TECH"
226
vendorid = 0665
227
productid = 5161
228
serial = 20100826
229
```
230
Запустим `upsdrvctl start` для проверки запуска драйвера:
231
```bash
232
root@kanonik-server:~# upsdrvctl start
233
Network UPS Tools - UPS driver controller 2.8.0
234
Network UPS Tools - Generic Q* USB/Serial driver 0.32 (2.8.0)
235
USB communication driver (libusb 1.0) 0.43
236
Duplicate driver instance detected (PID file /run/nut/nutdrv_qx-ippon.pid exists)! Terminating other driver!
237
Using protocol: Q1 0.07
238
Can't autodetect number of battery packs [-1/13.60]
239
Battery runtime will not be calculated (runtimecal not set)
240
```
241
Не обращаем внимания на ошибки, потому как ИБП простенький и в нем нет реализации сбора метрик с battery pack.
242
243
Открываем `/etc/nut/upsd.conf` и удалив все, прописываем:
244
```
245
LISTEN 0.0.0.0 3493
246
LISTEN :: 3493
247
```
248
Теперь открываем nano `/etc/nut/upsd.users` и так же удалив все содержимое вписываем учетки администратора и юзера для службы NUT:
249
```
250
[upsadmin]
251
# Administrative user
252
password = ADMINPASSWORD
253
# Allow changing values of certain variables in the UPS.
254
actions = SET
255
# Allow setting the "Forced Shutdown" flag in the UPS.
256
actions = FSD
257
# Allow all instant commands
258
instcmds = ALL
259
upsmon master
260
261
[upsuser]
262
# Normal user
263
password = USERPASSWORD
264
upsmon slave
265
```
266
Далее открываем `/etc/nut/upsmon.conf` и удалив все содержимое вписываем:
267
```
268
RUN_AS_USER root
269
MONITOR ippon@localhost 1 upsadmin ADMINPASSWORD master
270
271
MINSUPPLIES 1
272
SHUTDOWNCMD "/sbin/shutdown -h"
273
NOTIFYCMD /usr/sbin/upssched
274
POLLFREQ 4
275
POLLFREQALERT 2
276
HOSTSYNC 15
277
DEADTIME 24
278
MAXAGE 24
279
POWERDOWNFLAG /etc/killpower
280
281
NOTIFYMSG ONLINE "UPS %s on line power"
282
NOTIFYMSG ONBATT "UPS %s on battery"
283
NOTIFYMSG LOWBATT "UPS %s battary is low"
284
NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
285
NOTIFYMSG COMMOK "Communications with UPS %s established"
286
NOTIFYMSG COMMBAD "Communications with UPS %s lost"
287
NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding"
288
NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
289
NOTIFYMSG NOCOMM "UPS %s is unavailable"
290
NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"
291
292
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
293
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
294
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
295
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
296
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
297
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
298
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
299
NOTIFYFLAG REPLBATT SYSLOG+WALL
300
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
301
NOTIFYFLAG NOPARENT SYSLOG+WALL
302
303
RBWARNTIME 43200
304
NOCOMMWARNTIME 600
305
306
FINALDELAY 5
307
```
308
Теперь открываем `/etc/nut/upssched.conf` и удалив все содержимое вписываем:
309
```
310
CMDSCRIPT /etc/nut/upssched-cmd
311
PIPEFN /etc/nut/upssched.pipe
312
LOCKFN /etc/nut/upssched.lock
313
314
AT ONBATT * START-TIMER onbatt 30
315
AT ONLINE * CANCEL-TIMER onbatt online
316
AT LOWBATT * EXECUTE onbatt
317
AT COMMBAD * START-TIMER commbad 30
318
AT COMMOK * CANCEL-TIMER commbad commok
319
AT NOCOMM * EXECUTE commbad
320
AT SHUTDOWN * EXECUTE powerdown
321
AT SHUTDOWN * EXECUTE powerdown
322
```
323
Для работы следующего скрипта необходимо наличие папки `/etc/nut/upssched/`, если ее нет - создадим
324
```bash
325
mkdir /etc/nut/upssched/
326
```
327
Редактируем теперь сам скрипт `/etc/nut/upssched-cmd`
328
```
329
#!/bin/sh
330
case $1 in
331
onbatt)
332
logger -t upssched-cmd "UPS running on battery"
333
;;
334
shutdowncritical)
335
logger -t upssched-cmd "UPS on battery critical, forced shutdown"
336
/usr/sbin/upsmon -c fsd
337
;;
338
upsgone)
339
logger -t upssched-cmd "UPS has been gone too long, can't reach"
340
;;
341
*)
342
logger -t upssched-cmd "Unrecognized command: $1"
343
;;
344
esac
345
```
346
Чтобы скрипт запускался, дадим ему права на запуск:
347
```bash
348
chmod +x /etc/nut/upssched-cmd
349
```
350
Далее рестартим систему или перезапускаем сервисы:
351
```bash
352
systemctl restart nut-server
353
systemctl restart nut-client
354
systemctl restart nut-monitor
355
upsdrvctl stop
356
upsdrvctl start
357
```
358
Проверяем получаем ли информацию с ИБП:
359
```bash
360
root@kanonik-server:~# upsc ippon@localhost
361
Init SSL without certificate database
362
battery.voltage: 13.60
363
device.type: ups
364
driver.name: nutdrv_qx
365
driver.parameter.pollfreq: 30
366
driver.parameter.pollinterval: 15
367
driver.parameter.port: auto
368
driver.parameter.productid: 5161
369
driver.parameter.serial: 20100826
370
driver.parameter.synchronous: auto
371
driver.parameter.vendorid: 0665
372
driver.version: 2.8.0
373
driver.version.data: Q1 0.07
374
driver.version.internal: 0.32
375
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
376
input.frequency: 50.3
377
input.voltage: 229.4
378
input.voltage.fault: 230.0
379
output.voltage: 230.0
380
ups.beeper.status: enabled
381
ups.delay.shutdown: 30
382
ups.delay.start: 180
383
ups.load: 10
384
ups.productid: 5161
385
ups.status: OL
386
ups.temperature: 25.0
387
ups.type: offline / line interactive
388
ups.vendorid: 0665
389
```
390
391
Теперь можно изменять параметры переменных командой `upsrw`. Например:
392
```
393
upsrw -s battery.charge.low=40 ippon@localhost # Минимальный заряд ИБП будет 40%
394
```
395
## LXC-контейнер со страничкой статуса ИБП
396
По аналогии можно сделать и на виртуалке, но много ресурсов такая штука не займет
397
398
Скачиваем темплейт debian для LXC, создаем новый контейнер. Даем ему 8 GB виртуальный жесткий диск, 1 ядро, 128 мб оперативной памяти, назначаем IP адрес. В опциях ставим галочку на автозапуск контейнера при перезапуске сервера. Запускаем контейнер. Ставим пакеты:
399
```bash
400
apt install apache2 nut-cgi nut-client -y
401
```
402
Так же делаем бекап конфигов:
403
```bash
404
cp /etc/nut/nut.conf /etc/nut/nut.example.conf
405
cp /etc/nut/hosts.conf /etc/nut/hosts.example.conf
406
cp /etc/nut/upsset.conf /etc/nut/upsset.example.conf
407
cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf
408
```
409
В файле `/etc/nut/nut.conf` редактируем директиву:
410
```
411
MODE=netclient
412
```
413
В файле `/etc/nut/hosts.conf` удаляем все и прописываем:
414
```
415
MONITOR ippon@тут_пишем_ip_адрес_proxmox "IPPON Euro 650"
416
```
417
В файле `/etc/nut/upsset.conf` нужно раскомментировать строчку:
418
```
419
I_HAVE_SECURED_MY_CGI_DIRECTORY
420
```
421
В файле `/etc/nut/upsmon.conf` удаляем все и прописываем:
422
```
423
RUN_AS_USER root
424
MONITOR ippon@тут_пишем_ip_адрес_proxmox 1 upsuser USERPASSWORD slave
425
```
426
Теперь добавляем модуль cgi и рестартим сервис apache:
427
```bash
428
sudo a2enmod cgi
429
sudo systemctl restart apache2
430
```
431
Проверяем работу монитора перейдя по `http://ip-or-fqdn-lxc/cgi-bin/nut/upsstats.cgi`
84c8c0 Mayekkuzu 2024-12-08 15:12:19 432
![](/Virtualization/Proxmox/nut-client-apache.png)
433
434
## Wake-on-Lan на Proxmox
435
Включаем WOL в BIOS материнской платы. Как это сделать ищите в интернете потому что на разных материнских платах это делается по разному.
436
Теперь ставим утилиту `ethtool`
437
```bash
438
sudo apt install ethtool
439
```
440
Теперь нам нужно узнать мак-адрес физической сетевой карты, для этого пишем `ip a`
441
```bash
442
root@kanonik-server:~# ip a
443
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
444
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
445
inet 127.0.0.1/8 scope host lo
446
valid_lft forever preferred_lft forever
447
inet6 ::1/128 scope host noprefixroute
448
valid_lft forever preferred_lft forever
449
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000
450
link/ether d4:fd:11:6a:89:56 brd ff:ff:ff:ff:ff:ff
451
...
452
```
453
где d4:fd:11:6a:89:56 - наш мак-адрес. Записываем себе в блокнотик
454
Теперь нужно определить поддерживает ли сетевая карта WOL. Для этого пишем:
455
```bash
456
root@kanonik-server:~# ethtool enp2s0
457
Settings for enp2s0:
458
Supported ports: [ TP MII ]
459
Supported link modes: 10baseT/Half 10baseT/Full
460
100baseT/Half 100baseT/Full
461
1000baseT/Full
462
Supported pause frame use: Symmetric Receive-only
463
Supports auto-negotiation: Yes
464
Supported FEC modes: Not reported
465
Advertised link modes: 10baseT/Half 10baseT/Full
466
100baseT/Half 100baseT/Full
467
1000baseT/Full
468
Advertised pause frame use: Symmetric Receive-only
469
Advertised auto-negotiation: Yes
470
Advertised FEC modes: Not reported
471
Link partner advertised link modes: 10baseT/Half 10baseT/Full
472
100baseT/Half 100baseT/Full
473
1000baseT/Half 1000baseT/Full
474
Link partner advertised pause frame use: No
475
Link partner advertised auto-negotiation: Yes
476
Link partner advertised FEC modes: Not reported
477
Speed: 1000Mb/s
478
Duplex: Full
479
Auto-negotiation: on
480
master-slave cfg: preferred slave
481
master-slave status: slave
482
Port: Twisted Pair
483
PHYAD: 0
484
Transceiver: external
485
MDI-X: Unknown
486
Supports Wake-on: pumbg <--------- Поддержка WOL
487
Wake-on: d <--------- Включен или нет
488
Link detected: yes
489
```
490
Если не включен то пишем:
491
```bash
492
sudo ethtool -s enp2s0 wol g
493
```
494
Теперь добавляем строчку `ethernet-wol g` в блок нашей сетевой карты в`/etc/network/interfaces`. В нашем случае это получилось в таком виде:
495
```
496
root@kanonik-server:~# cat /etc/network/interfaces
497
auto lo
498
iface lo inet loopback
499
500
iface enp2s0 inet manual
501
ethernet-wol g
502
503
iface enp3s0 inet manual
504
```
505
Теперь выключаем сервер и пробуем включить его какой-нибудь утилитой по запуску компьютеров. В моем случае это тул в mikrotik:
7ea87a Mayekkuzu 2024-12-08 15:13:01 506
![](/Virtualization/Proxmox/winbox-wol.png)