Однорядкові PowerShell, що замінюють 10 кліків у GUI (використовуйте щодня)

Щоразу, коли ви підключаєтеся по RDP до Windows‑машини «щоб швидко глянути», ви платите невидимий податок: затримка, перемикання контексту й реальний ризик натиснути щось не там. GUI чудово підходить для демонстрацій і жахливо для реагування на інциденти. Під час збою GUI — це ігровий автомат: ви тягнете за важіль, сподіваючись, що наступне вікно покаже правду.

Однорядкові PowerShell‑команди не про те, щоб бути вишуканими. Вони про те, щоб бути швидкими, повторюваними й аудитуємими. Вони перетворюють «я думаю, що все нормально» на «ось що система каже». Використовуйте їх щодня — і ви витрачатимете менше часу на кліки та більше на прийняття рішень, які переживуть постмортем.

Чому однорядкові виграють у продакшені

Добрий однорядок робить три речі: опитує джерело істини, форматує результат у вигляд, який можна осмислити, і робить очевидною наступну дію. Оце й усе. Не синтаксичні ігри.

Версія через GUI зазвичай виглядає так:

  • Підключитися до потрібного хоста (або до неправильного; ви ще не дізнаєтеся).
  • Відкрити потрібний снеп‑ін.
  • Чекати, поки він завантажиться та відрендериться.
  • Клік, фільтр, сортування, ще клік.
  • Зробити скриншот, бо скриншот важко дифати.

Версія PowerShell така:

  • Запустити команду, яка повертає структуровані об’єкти.
  • Пропхати їх через сортування, фільтрацію, групування.
  • Зберегти вивід (або експортувати), щоб потім порівняти.

Також: кожного разу, коли ви копіюєте/вставляєте «те, що бачили в GUI», у тикет, ви робите переклад. Переклад вводить помилки. Найбезпечніші дані — ті, які ви не інтерпретуєте повторно.

Парафраз ідеї від Gene Kim (автор про DevOps/операції): покращення приходять від скорочення циклів зворотного зв’язку і зроблення роботи видимою. Однорядки роблять обидва — якщо використовувати їх послідовно.

Жарт №1: Клікати через Server Manager під час інциденту — як відлагоджувати з ліхтариком: технічно можливо, але ви все одно наштовхнетеся на щось.

Факти та історичний контекст (коротко, корисно)

  • PowerShell з’явився у 2006 році як «Monad», побудований на .NET‑об’єктах, а не на простих текстових потоках. Ось чому конвеєр у ньому працює з об’єктами, а не рядками.
  • WMI передує PowerShell; багато «сучасних» перевірок PowerShell все ще обгортають WMI/CIM‑класи, що існують з 1990‑х.
  • WinRM став робочою конячкою для віддалення PowerShell, підштовхнувши Windows‑операції ближче до SSH‑подібних робочих процесів — але з більшою кількістю Kerberos і менше приємних сюрпризів.
  • PowerShell 5.1 постачався з Windows 10/Server 2016 і досі є дефолтним на багатьох серверах; PowerShell 7+ — окремий і крос‑платформений.
  • Get-WmiObject — це спадщина; Get-CimInstance — сучасніший підхід (на базі WS‑Man), зазвичай дружніший до фаєрволів і віддалення.
  • Перформанс‑лічильники старі, але золоті; вони досі один з надійніших способів побачити тиск на CPU, пам’ять, диск і мережу в Windows.
  • Журнали подій — це наближення до чорної скриньки для Windows: вони неідеальні, але при фільтрації краще, ніж «я клянусь, це сталося».
  • Hyper-V і Storage Spaces рано сильно опиралися на PowerShell; багато дій у GUI фактично обгортки над командлетами.
  • Group Policy і Active Directory мають командлети, які зменшують «таємні налаштування», перетворюючи стан політик у запитувані дані.

Щоденні однорядкові: завдання, вивід і рішення

Нижче — практичні, запущувані команди. Кожна містить (a) що вона робить, (b) що означає вивід і (c) рішення, яке з нього випливає. Запускайте локально або віддалено (багато підтримують -ComputerName або працюють через віддалення).

Примітка щодо блоків коду: Я показую їх ніби запуск з консолі. На практиці ви виконуватимете це в PowerShell. Команди — реальні PowerShell.

1) Перевірити вільне місце на диску (швидко, сортується, без Explorer)

cr0x@server:~$ powershell -NoProfile -Command "Get-Volume | Where-Object DriveLetter | Select-Object DriveLetter,FileSystemLabel,@{n='SizeGB';e={[math]::Round($_.Size/1GB,1)}},@{n='FreeGB';e={[math]::Round($_.SizeRemaining/1GB,1)}},@{n='FreePct';e={[math]::Round(($_.SizeRemaining/$_.Size)*100,1)}} | Sort-Object FreePct | Format-Table -Auto"
DriveLetter FileSystemLabel SizeGB FreeGB FreePct
----------- -------------- ------ ------ -------
C           OS              127.9   11.8     9.2
E           Logs            500.0  210.5    42.1
F           Data           2048.0 1530.2    74.7

Що це означає: FreePct — перший індикатор для триажу. Нижче ~10–15% на системних томах слід припускати, що речі можуть ламатися дивними способами (патчинг, тимчасові файли, ротація логів, дампи).

Рішення: Якщо C: мало місця, припиніть «оптимізувати» й почніть звільняти простір: очистіть відомі кеші, оберніть логи, перенесіть дампи або збільшіть том. Якщо на даному томі мало місця, знайдіть топ‑споживачів далі.

2) Знайти топ‑каталоги за розміром (відповідь на «що з’їло мій диск»)

cr0x@server:~$ powershell -NoProfile -Command "Get-ChildItem -Directory 'E:\' -Force | ForEach-Object { $s=(Get-ChildItem $_.FullName -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum; [pscustomobject]@{Path=$_.FullName; SizeGB=[math]::Round($s/1GB,2)} } | Sort-Object SizeGB -Descending | Select-Object -First 10 | Format-Table -Auto"
Path                 SizeGB
----                 ------
E:\IISLogs            96.41
E:\App\Cache          51.08
E:\App\Temp           23.77
E:\Windows\Installer  12.30

Що це означає: Це дорого для великих дерев, але чесно. Використовуйте, коли потрібні факти, а не передчуття.

Рішення: Якщо логи домінують — виправте утримання/ротацію. Якщо кеш/тимчасові каталоги домінують — підтвердіть, чи безпечно їх очищати і чому вони ростуть. Якщо росте Windows\Installer, не видаляйте наосліп — чистіть підтримуваними методами.

3) Процеси з найбільшим CPU (Task Manager, але скриптово)

cr0x@server:~$ powershell -NoProfile -Command "Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name,Id,CPU,WorkingSet64 | Format-Table -Auto"
Name           Id      CPU WorkingSet64
----           --      --- -----------
sqlservr     2440  8123.54  9126807552
w3wp         4012  1022.10   785334272
MsMpEng      1780   331.92   402653184

Що це означає: CPU тут — накопичений час CPU від старту процесу, а не «поточний відсоток». Воно відповідає на запитання «хто довго жере CPU», що часто саме потрібно.

Рішення: Якщо один і той же процес домінує і продуктивність погана зараз — переходьте до перформанс‑лічильників для реального часу й черг. Якщо це AV‑сканер, розгляньте виключення (обережно) або розклад сканів.

4) Тиск на CPU у реальному часі та черги виконання (без гадань)

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Processor(_Total)\% Processor Time','\System\Processor Queue Length' -SampleInterval 2 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                              CookedValue
----                                              -----------
\\SERVER\processor(_total)\% processor time              87.12
\\SERVER\system\processor queue length                    14
\\SERVER\processor(_total)\% processor time              92.44
\\SERVER\system\processor queue length                    18

Що це означає: Стійко високий % Processor Time плюс черга, що залишається підвищеною, вказують на конкуренцію за CPU. Черга особливо показова на машинах з меншою кількістю ядер.

Рішення: Якщо черга тримається високою, визначте навантаження (топ‑процеси, заплановані задачі, AV, бекап). Якщо це віртуальна машина — перевірте також навантаження хоста. Не «просто додати vCPU» без вимірювання host ready time (інструментарій інший), але ставтеся до стійкої черги серйозно.

5) Тиск пам’яті: доступні байти й активність сторінкування

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Memory\Available MBytes','\Memory\Pages/sec' -SampleInterval 2 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                  CookedValue
----                                  -----------
\\SERVER\memory\available mbytes            312.00
\\SERVER\memory\pages/sec                    86.50
\\SERVER\memory\available mbytes            280.00
\\SERVER\memory\pages/sec                    95.00

Що це означає: Низький доступний MB плюс стійко високі pages/sec свідчать про активне сторінкування. Сторінкування не зло; стійке сторінкування під навантаженням — це проблема.

Рішення: Якщо сторінкування високе під час скарг на латентність, вам або (a) потрібно більше RAM, або (b) є витік пам’яті, або (c) кеш виріс тому, що робочий набір виріс. Підтвердіть процесні робочі набори й телеметрію додатка.

6) Затримки диска і довжина черги (сюди ходять інженери зі сховищ)

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Read','\PhysicalDisk(_Total)\Avg. Disk sec/Write','\PhysicalDisk(_Total)\Current Disk Queue Length' -SampleInterval 2 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                                             CookedValue
----                                                             -----------
\\SERVER\physicaldisk(_total)\avg. disk sec/read                      0.045
\\SERVER\physicaldisk(_total)\avg. disk sec/write                     0.112
\\SERVER\physicaldisk(_total)\current disk queue length               23

Що це означає: 45ms читання й 112ms запис з чергою 23 — це не «гарно». Для багатьох серверних навантажень потрібні десятки мілісекунд або менше. Є винятки, але вони мають бути свідомими.

Рішення: Якщо затримка й черга високі — знайдіть зайнятий том, потім зайнятий процес. На ВМ підтвердіть, чи проблема на гості, чи на хості. Не шукайте CPU, якщо диск тоне.

7) Хто «колотить» диск? (I/O по процесах)

cr0x@server:~$ powershell -NoProfile -Command "Get-Process | Select-Object Name,Id,@{n='ReadMB';e={[math]::Round($_.IOReadBytes/1MB,1)}},@{n='WriteMB';e={[math]::Round($_.IOWriteBytes/1MB,1)}} | Sort-Object WriteMB -Descending | Select-Object -First 10 | Format-Table -Auto"
Name      Id ReadMB WriteMB
----      -- ------ -------
sqlservr 2440  5120.3  9032.8
backup   3112   120.1  2201.4
w3wp     4012   980.7   610.2

Що це означає: Це накопичувальні лічильники. Вони швидко вказують на звичних підозрюваних: бази даних, агенти бекапу, індексацію, антивірус, неконтрольоване логування.

Рішення: Якщо бекап або AV домінує в робочий час — виправте розклад. Якщо логування домінує — зменшіть рівень логування або вивантажте логи на інший том.

8) Перевірити, які порти слухають (GUI не запрошено)

cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess | Sort-Object LocalPort | Select-Object -First 20 | Format-Table -Auto"
LocalAddress LocalPort OwningProcess
------------ --------- -------------
0.0.0.0      80        4012
0.0.0.0      135       968
0.0.0.0      443       4012
0.0.0.0      3389      1156

Що це означає: Це відповідає на запитання «що фактично слухає», а не «що ми думаємо, що повинно працювати». Потім зв’яжіть з іменами процесів.

Рішення: Якщо критичний порт не слухає — перевірте сервіс/додаток. Якщо слухає несподіваний порт — це дрейф конфігурації або компрометація — ставтеся серйозно.

9) Зіставити слухаючі порти з іменами процесів (зробити дієвим)

cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen | ForEach-Object { $p=Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue; [pscustomobject]@{Port=$_.LocalPort; Process=$p.Name; PID=$_.OwningProcess; Address=$_.LocalAddress} } | Sort-Object Port | Format-Table -Auto"
Port Process PID  Address
---- ------- ---  -------
80   w3wp    4012 0.0.0.0
135  svchost 968  0.0.0.0
443  w3wp    4012 0.0.0.0
3389 TermService 1156 0.0.0.0

Що це означає: Тепер «порт 443 впав» перетворюється на «w3wp не працює», і це різниця між панікою і ремонтом.

Рішення: Якщо PID не той, що очікували — перевірте конфігурацію служби, прив’язки сайтів IIS або параметри запуску додатка. Якщо процес невідомий — не зневажайте — визначте шлях до бінарника.

10) Перевірити, що служба Windows працює (і чому ні)

cr0x@server:~$ powershell -NoProfile -Command "Get-Service -Name 'Spooler','W32Time','WinRM' | Select-Object Name,Status,StartType | Format-Table -Auto"
Name    Status  StartType
----    ------  ---------
Spooler Running Automatic
W32Time Running Automatic
WinRM   Running Automatic

Що це означає: Це базова гігієна. Якщо WinRM вимкнено, ваш день віддалених операцій перетворюється на день подорожей.

Рішення: Якщо критична служба зупинена — перевірте останні зміни й системні журнали перед перезапуском. Сліпі рестарти можуть приховати докази і повторити помилки.

11) Забрати останні 50 системних помилок (Event Viewer — це лабіринт)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='System'; Level=2} -MaxEvents 50 | Select-Object TimeCreated,Id,ProviderName,Message | Format-Table -Wrap"
TimeCreated           Id ProviderName           Message
-----------           -- ------------           -------
02/05/2026 09:14:02  11 Disk                   The driver detected a controller error on \Device\Harddisk2\DR2.
02/05/2026 09:11:47 7031 Service Control Manager The SQLAgent$INST service terminated unexpectedly...

Що це означає: Level=2 — «Помилка». Шукайте патерни: помилки диска/контролера, аварійні завершення служб, проблеми синхронізації часу, скидання мережі.

Рішення: Помилки диска/контролера переводять вас з «дебаг додатка» у режим «цілісність даних і шлях апаратури». Аварійні завершення служб — до питання «що змінилося» плюс дампи.

12) Забрати помилки додатка для конкретного провайдера (цільовий триаж)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Application Error'} -MaxEvents 20 | Select-Object TimeCreated,Id,Message | Format-Table -Wrap"
TimeCreated           Id Message
-----------           -- -------
02/05/2026 09:12:10 1000 Faulting application name: w3wp.exe...

Що це означає: Це стрічка «чому воно впало». Побачите faulting modules, коди виключень і імена додатків.

Рішення: Якщо той самий модуль падає після патчу або зміни конфігурації — відкотіть або оновіть. Якщо випадково — підозрюйте корупцію пам’яті, погані драйвери або нестабільні залежності.

13) Перевірити недавні перезавантаження і причину (правда в логах)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='System'; Id=1074} -MaxEvents 10 | Select-Object TimeCreated,Message | Format-Table -Wrap"
TimeCreated           Message
-----------           -------
02/04/2026 23:01:12  The process C:\Windows\System32\svchost.exe (SERVER) has initiated the restart...

Що це означає: Подія ID 1074 часто фіксує ініціативні перезавантаження користувачем або процесом і містить рядок причини, якщо він був вказаний.

Рішення: Якщо перезавантаження несподівані — припиніть сприймати аптайм як випадкову погоду. Прив’яжіть перезавантаження до вікон патчів, автоматизації або операторів. Виправляйте процес, а не симптом.

14) Перевірити встановлені оновлення (рівень патчів без кліків)

cr0x@server:~$ powershell -NoProfile -Command "Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 HotFixID,InstalledOn,Description | Format-Table -Auto"
HotFixID  InstalledOn Description
-------   ----------- -----------
KB5034765 02/02/2026  Update
KB5034123 01/15/2026  Security Update

Що це означає: Швидке підтвердження свіжості патчів. Не ідеально (деякі механізми оновлення можуть не відображатися), але надійна початкова перевірка.

Рішення: Якщо баг корелює з недавнім KB — у вас є правдоподібна гіпотеза для відкату. Якщо сервер значно відстає — не прикидайтеся, що він «стабільний»; він просто непатчений.

15) Підтвердити розв’язування DNS і тип запису (уникнути театру «мережа впала»)

cr0x@server:~$ powershell -NoProfile -Command "Resolve-DnsName -Name 'app01.corp.local' -Type A | Select-Object Name,Type,IPAddress | Format-Table -Auto"
Name             Type IPAddress
----             ---- ---------
app01.corp.local A    10.40.12.21

Що це означає: Якщо це не вдається або повертає неправильну IP — половина вашого «відкоту додатка» насправді проблема іменування.

Рішення: Неправильний IP означає застарілий DNS або некоректну реєстрацію; виправте TTL, інтеграцію DHCP/DNS або ручні записи. Відсутня відповідь — перевірте DNS‑сервери, форвардинги або фаєрвол.

16) Тест TCP‑сервісу від краю до краю (ping — не перевірка здоров’я)

cr0x@server:~$ powershell -NoProfile -Command "Test-NetConnection -ComputerName 'app01.corp.local' -Port 443 | Select-Object ComputerName,RemotePort,TcpTestSucceeded,SourceAddress | Format-List"
ComputerName     : app01.corp.local
RemotePort       : 443
TcpTestSucceeded : True
SourceAddress    : 10.40.10.55

Що це означає: Відповідає на запитання «можна встановити TCP‑з’єднання звідси до туди». Воно не перевіряє TLS‑сертифікати або коректність додатка, але швидко звужує проблему.

Рішення: Якщо TcpTestSucceeded — false, перевірте правила фаєрволу, маршрутизацію, статус прослуховувача і балансувальники. Якщо true — рухайтеся вгору по стеку: TLS, HTTP, аутентифікація, логи додатка.

17) Знайти збої запланованих завдань (тихі саботажники)

cr0x@server:~$ powershell -NoProfile -Command "Get-ScheduledTask | Get-ScheduledTaskInfo | Where-Object {$_.LastTaskResult -ne 0} | Sort-Object LastRunTime -Descending | Select-Object -First 15 TaskName,LastRunTime,LastTaskResult | Format-Table -Auto"
TaskName                 LastRunTime           LastTaskResult
--------                 -----------           --------------
DailyLogRotate           02/05/2026 01:00:01   2147942401
BackupSnapshot           02/05/2026 02:00:03   1

Що це означає: Ненульові результати вказують на помилку. Числовий код часто відповідає «файл не знайдено», «доступ заборонено» тощо.

Рішення: Якщо задачі обслуговування падають — очікуйте інцидентів через переповнення диска й деградацію продуктивності від тисяч файлів. Виправте права, шляхи й облікові записи сервісів до наступного піку.

18) SMB‑шара та хто підключений (реалії файлового сервера)

cr0x@server:~$ powershell -NoProfile -Command "Get-SmbShare | Select-Object Name,Path,Description | Format-Table -Auto"
Name        Path         Description
----        ----         -----------
Finance     D:\Finance   Finance share
Profiles    E:\Profiles  User profiles

cr0x@server:~$ powershell -NoProfile -Command "Get-SmbSession | Select-Object ClientComputerName,ClientUserName,NumOpens,Dialect | Sort-Object NumOpens -Descending | Select-Object -First 10 | Format-Table -Auto"
ClientComputerName ClientUserName     NumOpens Dialect
------------------ --------------     -------- -------
WS123              CORP\j.smith             42 3.1.1

Що це означає: Це допомагає підтвердити «чи хтось зараз користується шарами» перед техобслуговуванням і виявити клієнта, що викликає шторми замків.

Рішення: Якщо один клієнт має абсурдну кількість відкриттів — перевірте ту робочу станцію/додаток. Якщо потрібно перезавантажити шару — координуйтеся з користувачами, а не руйнуйте їм день.

19) Перевірка прав: хто має доступ до папки?

cr0x@server:~$ powershell -NoProfile -Command "(Get-Acl 'D:\Finance').Access | Select-Object IdentityReference,FileSystemRights,AccessControlType,IsInherited | Format-Table -Auto"
IdentityReference     FileSystemRights               AccessControlType IsInherited
-----------------     ----------------               ----------------- -----------
CORP\Finance-Users    Modify, Synchronize            Allow             True
CORP\Domain Admins    FullControl                    Allow             True

Що це означає: Показує ефективні записи ACL, включно з успадкуванням. Це різниця між «має працювати» і «фактично працює».

Рішення: Якщо доступ відсутній — виправте членство в групах або успадкування на потрібному рівні. Уникайте одноразових ACL для користувачів, якщо вам не подобається майбутня археологія.

20) Віддалено: виконати перевірку здоров’я на кількох серверах (флот, а не «пет‑сервери»)

cr0x@server:~$ powershell -NoProfile -Command "$servers='web01','web02','web03'; Invoke-Command -ComputerName $servers -ScriptBlock { [pscustomobject]@{ ComputerName=$env:COMPUTERNAME; UptimeDays=[math]::Round((New-TimeSpan -Start (Get-CimInstance Win32_OperatingSystem).LastBootUpTime -End (Get-Date)).TotalDays,1); FreeC=[math]::Round((Get-PSDrive C).Free/1GB,1) } } | Format-Table -Auto"
ComputerName UptimeDays FreeC
------------ --------- -----
WEB01            12.4  18.7
WEB02             2.1   6.3
WEB03            56.0  22.9

Що це означає: Одна команда — три машини — узгоджені дані. Також: WEB02 має мало місця і нещодавно перезавантажувався. Така кореляція рідко випадкова.

Рішення: Пріоритезуйте аутлайер. Не усереднюйте і не заспокоюйтеся. Виправіть WEB02 спочатку, а потім зʼясуйте, чому він відрізняється.

Жарт №2: GUI каже «Not Responding», ніби це особиста межа. Сервер каже це, бо він горить.

План швидкої діагностики: що перевірити першим/другим/третім

Це послідовність, яку я використовую, коли кажуть «додаток повільний» або «сервер вмирає», а у вас є лише hostname і передчуття. Мета — не повністю вирішити все за 60 секунд; мета — знайти клас вузького місця, щоб припинити гадати.

Спочатку: підтвердити, що скарга реальна і звужена

  1. З боку клієнта: чи можете ви підключитись до порту сервісу?
    cr0x@server:~$ powershell -NoProfile -Command "Test-NetConnection -ComputerName 'app01.corp.local' -Port 443 | Select-Object TcpTestSucceeded,RemoteAddress,RemotePort | Format-List"
    TcpTestSucceeded : True
    RemoteAddress    : 10.40.12.21
    RemotePort       : 443
    

    Інтерпретація: Якщо TCP не проходить — це мережа/прослуховувач/LB/безпека. Якщо TCP проходить — рухайтеся всередину стека.

  2. На сервері: чи слухає відповідний порт і чи належить він правильному процесу?
    cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen -LocalPort 443 | ForEach-Object { $p=Get-Process -Id $_.OwningProcess; [pscustomobject]@{Port=$_.LocalPort; Process=$p.Name; PID=$p.Id} } | Format-Table -Auto"
    Port Process PID
    ---- ------- ---
    443  w3wp    4012
    

    Інтерпретація: Відсутність прослуховувача означає, що додаток впав. Неправильний процес — це невірна конфігурація або щось гірше.

По‑друге: класифікувати вузьке місце (CPU, пам’ять, диск, мережа або «додаток»)

  1. Тиск на CPU: % processor time + довжина черги.
    cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Processor(_Total)\% Processor Time','\System\Processor Queue Length' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
    Path                                              CookedValue
    ----                                              -----------
    \\SERVER\processor(_total)\% processor time              91.33
    \\SERVER\system\processor queue length                    16
    

    Рішення: Якщо CPU зашпортований із чергуванням — визначте «гарячий» процес і що це спричинило (деплой, джоб, скан, шторм повторних спроб).

  2. Тиск пам’яті: доступні MB + pages/sec.
    cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Memory\Available MBytes','\Memory\Pages/sec' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
    Path                                  CookedValue
    ----                                  -----------
    \\SERVER\memory\available mbytes            190.00
    \\SERVER\memory\pages/sec                   120.00
    

    Рішення: Якщо сторінкування активне, очікуйте затримок по всьому стеку. Збирайте процесні дані по пам’яті; розгляньте контрольований рестарт лише після збору доказів.

  3. Тиск диска: затримка + черга.
    cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Read','\PhysicalDisk(_Total)\Avg. Disk sec/Write','\PhysicalDisk(_Total)\Current Disk Queue Length' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
    Path                                                             CookedValue
    ----                                                             -----------
    \\SERVER\physicaldisk(_total)\avg. disk sec/read                      0.060
    \\SERVER\physicaldisk(_total)\avg. disk sec/write                     0.140
    \\SERVER\physicaldisk(_total)\current disk queue length               27
    

    Рішення: Якщо диск проблемний — припиніть шукати «повільні запити», доки не підтверджено, що сховище не є лімітом. Затримка вгору по стеку часто спричинена вниз по шляху.

По‑третє: вирішіть «мітегувати зараз» проти «розслідувати»

  • Мітегувати зараз, коли вплив на користувачів серйозний і фікс оборотний: зупинити неконтрольований джоб, обмежити чергу, переключити на запасний вузол, додати тимчасову потужність, перемістити логи.
  • Спочатку розслідувати, коли дія руйнує докази: перезавантаження, рестарти служб, очищення логів, видалення тимчасових дерев без снимків.

Використовуйте наведені команди, щоб обґрунтувати рішення, а потім запишіть, що ви бачили. Якщо потім ви не зможете пояснити ланцюжок дій — ви не оперували, ви діяли.

Три корпоративні міні‑історії (що пішло не так, що нас врятувало)

Міні‑історія 1: інцидент через хибне припущення

Ми успадкували Windows‑файловий сервер, який «ніколи не мав проблем». Команда вірила, що алерти по диску зловлять усе серйозне. Моніторинг сповістив — зрештою. Проблема була в припущенні, що «місце на диску» означає «вільний простір», і це все, що має значення.

У понеділок зранку прийшла хвиля тикетів: профілі не завантажуються, повільна обробка групової політики, випадкові аварії додатків при вході користувачів. На чергуванні зробили класику: RDP, відкрити Explorer, побачити, що C: має кілька ГБ вільних, і оголосити «диск не заповнений». Потім перезапустили кілька служб. Здавалося продуктивно. Насправді — ні.

Ми запустили однорядки: вільний простір томів (досить), а потім журнали подій (не гаразд). В системному журналі були помилки диска/контролера і попередження NTFS. Диск не був заповнений; він був хворий. Затримки зростали, записи зависали, і файловий сервер фактично працював у режимі повільного I/O.

Хибне припущення було тонким: «місце — єдина проблема диска». Здоров’я диска — не одна змінна; це затримка, черги, відсоток помилок і стабільність шляху. Коли сховище починає падати, Windows не завжди дає дружнє повідомлення. Вона дає тайм‑аути і ризик корупції.

Фікс не був героїчним рестартом. Ми переключили навантаження, залучили storage‑команду і замінили несправний шлях HBA. Урок засвоєно: перевірки ємності потрібні; перевірки поведінки диска запобігають катастрофам.

Міні‑історія 2: оптимізація, що виявилася помилкою

Інженер хотів пришвидшити пошук по логах. Він увімкнув детальне логування і написав заплановане завдання для стискання логів щогодини з перенесенням на центральну шару. План здавався розумним: менші файли, централізоване розслідування, менше використання диску.

В продукції це перетворилося на повільний збій. Робота стискання запускалася на початку кожної години на кожному сервері — одночасно. CPU скакав, записів на диск стало багато, і центральна шара зазнала навантаження. Продуктивність метаданих шару впала, бо тисячі файлів створювалися, перейменовувалися і видалялися в імпульсах.

Користувачі не скаржилися на «стиск логів». Вони скаржилися, що додаток «зависає кожну годину на кілька хвилин». Симптом ідеально підходить для помилкових діагнозів. Люди звинувачували GC‑паузи, блокування в базі та мережеві затримки. Справжній винуватець — «оптимізація», що створила синхронізовану конкуренцію.

Ми довели це двома швидкими перевірками: довжина черги диска і I/O по процесах. Процес стискання не був топовим за CPU весь день, але він домінував у write I/O в точний інтервал скарг. Це доказ, який закінчує суперечки.

Ми виправили, розподіливши розклади з jitter, зменшили рівень логування і змінили пайплайн: стискати раз на добу поза хостом, а не щогодини на кожному вузлі. Оптимізації, які ігнорують патерни конкуренції — не оптимізації; це розподілений DDoS з кращими намірами.

Міні‑історія 3: нудна, але правильна практика, що врятувала день

Інша команда виконувала просту, але дисципліновану практику: щоранку запускали короткий «пульс‑скрипт» по флоту. Аптайм, вільне місце, дата останнього патчу та топ‑помилок з системного журналу. Вони робили це не через любов до дашбордів. Вони робили це, бо ненавиділи сюрпризи.

Одного вівторка пульс помітив один сервер з дивною комбінацією: швидке зменшення вільного місця на E:, збої запланованих задач і повторювані попередження від агента бекапу. Ніхто ще не скаржився. Ось ключ: система пошепкила, перш ніж закричати.

Вони розслідували збої задач і виявили, що завдання ротації логів почало падати після зміни прав. Логи накопичувалися, бекап таймаутив через величезні каталоги логів, і том міг заповнитися упродовж 24 годин.

Вони виправили ACL, вручну виконали ротацію один раз і підтвердили, що задача знову працює. Сервер не дійшов до 0 байт вільного, бекап відновився, і бізнес нічого не помітив.

Це не сексуально. Це не отримує архітектурних нагород. Воно дає спокій на чергуванні. Нудна практика — не скрипт; це звичка дивитися щодня на ті самі сигнали і трактувати відхилення як реальні.

Поширені помилки: симптоми → корінна причина → виправлення

1) «Сервер повільний», але CPU виглядає нормально

Симптом: Навантаження CPU помірне, але користувачі бачать тайм‑аути і зависання.

Корінна причина: Обмеження через затримку диска/черги або тиск сторінкування пам’яті. CPU чекає, а не працює.

Виправлення: Спочатку перевірте лічильники диска і пам’яті, а не «відчуття» з Task Manager.

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Read','\PhysicalDisk(_Total)\Current Disk Queue Length','\Memory\Pages/sec' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                                             CookedValue
----                                                             -----------
\\SERVER\physicaldisk(_total)\avg. disk sec/read                      0.080
\\SERVER\physicaldisk(_total)\current disk queue length               31
\\SERVER\memory\pages/sec                                            110

2) «Порт відкритий», бо ping проходить

Симптом: Хтось наполягає, що сервіс доступний, бо ICMP відповідає.

Корінна причина: Ping тестує ICMP, а не доступність додатка. Фаєрволи, балансувальники і прослуховувачі можуть ігнорувати ваш ping.

Виправлення: Тестуйте реальний TCP‑порт із тієї ж мережі, що й клієнт.

cr0x@server:~$ powershell -NoProfile -Command "Test-NetConnection -ComputerName 'db01.corp.local' -Port 1433 | Select-Object TcpTestSucceeded,RemoteAddress,RemotePort | Format-List"
TcpTestSucceeded : False
RemoteAddress    : 10.40.20.10
RemotePort       : 1433

3) «Служба працює», але додаток все одно недоступний

Симптом: Get-Service каже Running; користувачі все одно не можуть підключитись.

Корінна причина: Служба жива, але не слухає, зависла або прив’язана до неправильної інтерфейсу/порту. Або залежність (сертифікат, бекенд) зламана.

Виправлення: Підтвердіть прослуховувача й зіставте з процесом; перевірте помилки в журналі Application.

cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen -LocalPort 443 | Measure-Object | Select-Object Count"
Count
-----
0

4) «Ми почистили диск» і тепер додаток не стартує

Симптом: Після видалення «сміття» служби падають, інсталятори ламаються або патчі не виконуються.

Корінна причина: Хтось видалив файли, які не були сміттям (кеш інсталятора, стан додатка, бази даних, бекапи конфігурації IIS).

Виправлення: Будьте конкретні: ідентифікуйте джерело росту, налаштуйте політики збереження і видаляйте лише відомо‑безпечні цілі. Якщо потрібно видалити — робіть снапшот спочатку (VM‑snapshot або Volume Shadow Copy залежно від політики).

5) Віддалення працює на деяких серверах, але не на інших

Симптом: Invoke-Command періодично фейлиться по флоту.

Корінна причина: WinRM відключено, відмінності в правилах фаєрволу, проблеми з резолвом DNS або налаштуванням довірених хостів.

Виправлення: Стандартизувати: переконайтеся, що служба WinRM запущена, правила фаєрволу однакові, DNS коректний. Уникайте «TrustedHosts = *» як тимчасового патчу в продакшені.

6) Сортування виводу виглядає неправильно

Симптом: Ви сортуєте за колонкою і порядок абсурдний (наприклад, «100» перед «9»).

Корінна причина: Ви занадто рано відформатували; перетворили об’єкти на рядки з Format-Table перед сортуванням.

Виправлення: Сортуйте об’єкти спочатку, формат — в кінці.

Контрольні списки / покроковий план

Щоденна 10‑хвилинна рутина операцій (робіть це, не сперечайтеся)

  1. Перевірка простору: знайдіть томи з менше ніж 15% вільного; створіть тикет до того, як стане критично.
  2. Скан помилок: останні 50 системних помилок; виявити повтори (диск, скидання NIC, падіння служб).
  3. Перевірка патчів: підтвердити останні хотфікси; позначити машини, що відхиляються.
  4. Збої задач: заплановані задачі з ненульовими результатами; виправляйте нудні спочатку.
  5. Перевірка аутлайнерів: запустіть один і той самий однорядок по флоту і шукайте дивні сервери.

Чекліст реагування на інцидент (перші 15 хвилин)

  1. Підтвердити доступність: Test-NetConnection до порту сервісу з релевантного сегменту мережі.
  2. Підтвердити прослуховувач/процес: Get-NetTCPConnection + зіставлення процесів.
  3. Класифікувати вузьке місце: черга CPU, сторінкування пам’яті, затримка/черга диска.
  4. Зібрати докази: топ‑процеси, зріз журналів подій, вибірки лічильників.
  5. Мітегувати безпечно: лише після того, як можна обґрунтувати дію спостережуваними даними.

Чекліст перевірки змін (після деплоїв/патчів)

  1. Підтвердити стан служби: очікувані служби працюють, правильні типи запуску.
  2. Підтвердити порти: очікувані порти слухають і належать очікуваним бінарникам.
  3. Підтвердити логи: просканувати Application і System помилки з часу деплою.
  4. Підтвердити продуктивність: порівняти зрізи лічильників (затримка, черги) з базовим рівнем.

FAQ

1) Коли використовувати Windows PowerShell 5.1 або PowerShell 7?

Використовуйте 5.1, коли потрібна максимальна сумісність зі старими модулями на Windows Server. Використовуйте 7, коли ви контролюєте середовище і хочете сучасних можливостей і крос‑платформності. У змішаних підприємствах ви врешті‑решт використовуватимете обидва.

2) Чому ви постійно використовуєте перформанс‑лічильники замість просто «топ» процесів?

Тому що лічильники показують тиск (черги, затримки, сторінкування), тоді як списки процесів дають атрибуцію. Вам потрібні обидва. Якщо дивитися лише на процеси, можна пропустити справжній клас вузького місця.

3) Чи помер Get-WmiObject?

Не помер, просто застарів. Віддавайте перевагу Get-CimInstance для сучасних скриптів, особливо з віддаленням. Але в реальному житті ви все ще побачите WMI скрізь, включно з скриптами вендорів.

4) Чому деякі лічильники показують числа, що не збігаються з Task Manager?

Відрізняються вибірки й визначення. Task Manager часто показує миттєві або усереднені значення; лічильники можуть брати вибірки на різних інтервалах і представляти інші моделі обчислення. Робіть інтервал вибірки явним і беріть кілька зразків.

5) Можу я запускати ці однорядки віддалено без RDP?

Так, з PowerShell Remoting (Invoke-Command), коли WinRM налаштований. Для деяких мережевих перевірок також можна робити запити зі своєї машини (наприклад, Test-NetConnection). Стандартизувати WinRM варто рано; це окупається щотижня.

6) Як уникнути проблем «занадто раннього форматування»?

Правило: виконуйте всі фільтрації/сортування/групування поки конвеєр містить об’єкти, а потім форматируйте в кінці. Якщо ви пропхали в Format-Table, ви фактично завершили роботу з даними.

7) Чи безпечно вставляти однорядки в продакшн?

Команди лише для читання зазвичай безпечні. Все, що видаляє, зупиняє служби, рестартує або змінює конфіг — має стати скриптом з логуванням і режимом dry‑run. Якщо не можете пояснити радіус ураження — не запускайте.

8) Який найшвидший спосіб виявити «цей сервер відрізняється» у кластері?

Запустіть ту саму команду по всіх вузлах і відсортуйте за метрикою, що вас цікавить (вільний простір, аптайм, кількість помилок, значення лічильників). Аутлайери — там, де ховається правда.

9) Моя команда повільна (наприклад, перевірка розміру директорій). Що робити?

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

Практичні наступні кроки

Зробіть це завтра вранці:

  1. Виберіть п’ять серверів, до яких ви заходите щотижня. Запустіть флот‑однорядок для аптайму і вільного місця. Знайдіть аутлайера і виправте його.
  2. Додайте 2‑хвилинну вибірку лічильників для черги CPU, сторінкування і затримки диска до своїх стандартних нотаток інцидентів. Припиніть діагностувати зі скриншотів.
  3. Побудуйте (або позичте) маленький «pulse check» скрипт із наведених команд і запускайте щодня. Мета не досконалість; мета — помічати дрейф до того, як він стане інцидентом.
  4. Коли GUI все ж потрібен — використовуйте його свідомо: для глибокої конфігурації, а не для панічного пошуку.

Якщо хочете лакмусовий тест, чи покращується ваша практика операцій: виміряйте, як часто ви можете відповісти «що змінилося?» з доказами менш ніж за п’ять хвилин. Однорядки — не магія. Вони — важіль.

SR-IOV проти Passthrough: коли IOMMU допомагає (а коли — ні)

Іноді ваша «віртуалізована» мережна карта спокійно витрачає 2% CPU і дає 25 Gbps. Інші дні вона скидкує пакети під навантаженням, p99 затримки схожі на сейсмограф, і хтось радить «просто ввімкніть SR-IOV», ніби це універсальний розчинник.

Це доросла версія тієї розмови: що насправді дають SR-IOV і PCI passthrough, що робить IOMMU, і конкретні способи, якими ви можете погіршити продуктивність, аплодуючи собі за «наближення до апаратури».

Ментальна модель: PF, VF, DMA і навіщо потрібен IOMMU

Визначимо терміни так, як це робить ваше ядро, а не як у маркетингових слайдах.

Passthrough (VFIO) в одному абзаці

PCI passthrough призначає повну PCIe-функцію віртуальній машині (або контейнероподібному навантаженню), тож гість стає власником пристрою. У Linux/KVM зазвичай це VFIO: хост прив’язує пристрій до vfio-pci, а QEMU відображає його в гість. Пристрій виконує DMA в пам’ять гостя, і IOMMU (якщо ввімкнено) гарантує, що DMA не виходить за межі дозволеного гостю.

SR-IOV в одному абзаці

SR-IOV розділяє фізичну PCIe-функцію (PF) на кілька легковагових PCIe-функцій (VF). Кожна VF виглядає як окремий PCI-пристрій з власним простором конфігурації, BAR-ами та чергами (залежить від реалізації), тому ви можете передавати окремі VF гостям. PF залишається під управлінням хоста (інколи — «сервісної ВМ»), а VF — «переважно апаратна», з політичними ручками через драйвер PF і прошивку.

Де тут DMA і чому це важливо

SR-IOV і passthrough — про одне: хто може виконувати DMA і наскільки дорого це робити безпечно. Пристрої не «відправляють пакети» — вони через DMA записують дескриптори й payload у пам’ять. Якщо пристрій може DMA куди завгодно, він може читати ваші секрети, писати в ядро і перетворити надійність на інтерпретативний танець.

Саме для цього потрібен IOMMU: транслювати й обмежувати адреси DMA пристроїв, подібно до того, як MMU процесора обмежує процесну пам’ять. Без IOMMU «призначені» пристрої все ще можуть DMA в пам’ять хоста, якщо ізоляцію налаштовано неправильно. З IOMMU ви платите за трансляцію (інколи мізерну, інколи помітну), але отримуєте реальну ізоляцію і фічі на кшталт перенаправлення переривань.

Суха емпірична порада: якщо ви робите passthrough у продакшні й не використовуєте IOMMU, ви не «сміливі», ви просто керуєте іншим моделлю загроз, ніж думаєте.

Жарт №1: IOMMU — як бодігарді в нічному клубі для DMA. Він не виправить погані рішення всередині, але тримає випадкових незнайомців за дверима.

Що тут означає «продуктивність»

Люди кажуть «SR-IOV швидше за virtio». Іноді так. Але треба уточнити, по якій осі продуктивності:

  • Продуктивність (Gbps або IOPS) при заданому бюджеті CPU
  • Хвостова затримка (p99/p999), особливо під конкуренцією
  • Джиттер (варіативність), що ламає додатки близькі до реального часу
  • Ефективність CPU (цикли на пакет/IO)
  • Операційна продуктивність (наскільки швидко ви можете відлагодити і відновити сервіс)

SR-IOV і passthrough можуть бути чудовими для пропускної здатності й ефективності CPU. Вони також можуть погіршити хвостову затримку, якщо ви неправильно налаштували переривання, нічого не прилагаєте й дозволяєте планувальнику хоста імпровізувати.

SR-IOV проти passthrough: реальні компроміси

Ось суб’єктивна версія:

  • Якщо одній ВМ потрібен повний контроль над пристроєм (GPU, FPGA, HBA): використовуйте passthrough. SR-IOV не завжди доступний, і навіть коли є — паритет функцій буває дивним.
  • Якщо багатьом гостям потрібна продуктивність NIC близька до bare-metal: використовуйте SR-IOV, але ставтеся до управління VF як до частини платформи, а не як до хобі для кожної ВМ.
  • Якщо потрібна гнучкість (live migration, snapshopти, гетерогенні хости): віддавайте перевагу virtio і прийміть витрати CPU, якщо немає доведеної причини інакше.

Безпека та ізоляція: це різні історії

З passthrough гість отримує весь пристрій. Це добре для продуктивності і доступу до функцій, але погано для шарінгу. Ізоляція сильно залежить від коректності IOMMU і від поведінки пристрою. У SR-IOV ви ділите фізичний пристрій між орендарями, і ізоляція залежить від реалізації VF у NIC (розділення черг, обмеження швидкості, перевірки спуфінгу) плюс драйвер PF. Деякі VF можуть робити те, чого не повинні, якщо залишити певні прапори довіри ввімкненими.

Практичні поради:

  • Багатокорисувацький SR-IOV можливий, але потрібно явно налаштувати перевірку спуфінгу VF, примусове VLAN і налаштування trust на PF.
  • Passthrough для недовірених гостей сильно залежить від IOMMU і перенаправлення переривань. Якщо будь-яке з них відсутнє — ви приймаєте ризик.

Операції: SR-IOV виграє до першої проблеми

SR-IOV виглядає операційно «простим», бо ви можете роздавати VFs як цукерки. Потім з’являється прихована складність:

  • Провізіонування VF і збір сміття після ребутів
  • Несумісності прошивки/драйверів, що ламаються тільки при певній кількості черг
  • Прогалини в спостережуваності (хост бачить статистику PF; гість бачить VF; ніхто не бачить «end-to-end»)
  • Маршрування пакетів і афінність IRQ, що стають вимогою платформи

Passthrough простіший у сенсі «одна ВМ володіє пристроєм — один стек відлагоджується». Але складніший у сенсі втрати віртуалізаційних зручностей (міграція, snapshot-и, overcommit) і ризику вивести мережу хоста з ладу, якщо передати не те.

Брудна таємниця: обидва підходи все ще потребують банальної гігієни Linux

Прив’язка CPU, вирівнювання NUMA, афінність IRQ, розміри кілець і розумні MTU все ще мають значення. SR-IOV не врятує від ВМ, що запущена на неправильному сокеті, а passthrough не врятує від гостьового драйвера, налаштованого як науковий експеримент.

Коли IOMMU допомагає (і чому)

1) Утримання: ізоляція DMA — це головна мета

Без IOMMU пристрій, що виконує DMA, може отримати доступ до фізичних адрес пам’яті, які ви не мали наміру відкривати. У passthrough це може означати, що гостьовий керований пристрій (або його програмування гостем) може читати або псувати пам’ять хоста. З IOMMU простір адрес DMA (IOVA) транслюється через таблиці, якими керує хост.

У SR-IOV VF також виконують DMA. Якщо ви призначаєте VF гостям, ви все одно хочете IOMMU, щоб обмежити DMA VF пам’яттю гостя. Так, NIC «віртуалізований», але він все ще пристрій, що робить DMA.

2) Перенаправлення переривань: менше способів зіпсувати день

Сучасні IOMMU також можуть перенаправляти переривання (MSI/MSI-X), тож пристрій не може інжектити переривання в дивний спосіб. Це важливо при передачі пристроїв гостям. Без перенаправлення переривань ви можете опинитися в небезпечних режимах або отримати нестабільну поведінку залежно від підтримки платформи.

3) Дозволяє ввімкнути безпечні фічі, які інакше були б страшними

Якщо ви робите призначення пристроїв у масштабі, IOMMU — це шар, що дозволяє гарантувати «цей пристрій торкається тільки того, що повинен». Він відкриває можливість робити passthrough для реальних робочих навантажень, а не лише для лабораторних стендів.

4) Деякі шляхи продуктивності передбачають його

Парадоксально: інколи відключення IOMMU запускає відкат ядра, вимикає перенаправлення переривань або змінює стратегії відображення DMA. На деяких платформах «IOMMU вимкнений» — це не «режим швидкості», а «режим сумісності». Ви не обираєте пригоди; ваша материнська плата вже обрала їх за вас.

Коли IOMMU не допомагає (і може зашкодити)

Ось та частина, яку людям не хочеться чути: IOMMU — не магічний перемикач продуктивності. Це функція безпеки з наслідками для продуктивності. Іноді ці наслідки мізерні. Іноді вони лягають у ваш p99.

1) Високошвидкісний обробіток малих пакетів може підсилити накладні витрати трансляції

Якщо ваше навантаження — 64-байтові пакети при дуже високому PPS, вартість мапінгу/анмапінгу DMA, тиск на TLB в IOMMU і промахи IOTLB можуть виявитися помітними. Хороші драйвери амортизують витрати мапінгу (довгоживучі мапінги, hugepages, батчинг). Погані налаштування штампують мапінги й платять за це.

2) Неправильні hugepages або фрагментація пам’яті погіршують ситуацію

Якщо пам’ять гостя фрагментована, IOMMU потребує більше записів у таблицях сторінок, що підвищує ймовірність промахів IOTLB. З hugepages (і правильним pinning) ви зменшуєте відбиток трансляції. Ось чому інколи «SR-IOV повільніший за virtio»: це не SR-IOV; це стратегія відображення й розклад пам’яті.

3) Ви можете втратити фічі, на які розраховували

Деякі середовища вмикають IOMMU у режимі, що ламає або вимикає peer-to-peer DMA (пристроїв між собою) або змінює, як працюють ATS/PRI. Для стеків зберігання, що залежать від певних шаблонів DMA, ви можете отримати регресії, що виглядають як «баг у драйвері», але насправді це зміна поведінки трансляції.

4) Діагностика ускладнюється, бо режимів відмов більше

Якщо задіяний IOMMU, відмова може бути через:

  • баг гостьового драйвера
  • баг VFIO/QEMU на хості
  • платформний баг/особливість IOMMU
  • невідповідну настройку BIOS
  • дивні ACS-групування
  • поведінку прошивки під навантаженням

Жарт №2: Увімкнути IOMMU, щоб «поправити продуктивність», — як купити динамометричний ключ для ремонту пробитого колеса. Корисний інструмент, але не по темі.

Цікаві факти та історичний контекст

  • IOMMU з’явилися до хмарного хайпу. Вони виникли в різних формах для вирішення обмежень адресації DMA й ізоляції значно до того, як «multi-tenant» став маркетинговим терміном.
  • Адресація DMA колись була реальним обмеженням. Ранні системи мали пристрої, що могли DMA лише в межах обмежених діапазонів; IOMMU допомагали через перенаправлення адрес.
  • Intel VT-d і AMD-Vi зробили призначення пристроїв мейнстримом. Аппаратна трансляція DMA стала стандартною для серверів, що хотіли серйозну віртуалізацію.
  • MSI-X змінило гру для високопродуктивних NIC. Багато векторів переривань дозволили дизайни «черга на ядро», на які сильно покладається SR-IOV.
  • SR-IOV — стандарт PCI-SIG. Це не магія вендора, хоча реалізації вендорів сильно відрізняються за якістю і налаштуваннями.
  • «IOMMU groups» — про межі ізоляції. Групування відображає те, що апарат може ізолювати; це не винахід Linux, а експозиція апаратної реальності.
  • ACS став незручним героєм. Access Control Services впливає на те, як пристрої ізольовані за PCIe-комутаторами; відсутність ACS може змусити великі IOMMU-групи.
  • Virtio дозрів завдяки вимогам операційників. Virtio — не просто «повільна емуляція». Він еволюціонував у надійний парaвіртуальний інтерфейс, придатний для хмарних операцій.
  • DPDK і user-space мережі підвищили очікування. Коли люди побачили лінійну швидкість у user space, вони почали вимагати подібної поведінки від ВМ, що підштовхнуло SR-IOV у виробництво.

Швидкий план діагностики

Мета — швидко знайти вузьке місце, а не «повністю зрозуміти PCIe». Це можна зробити потім.

Перше: підтвердіть, що ви справді розгорнули

  1. Чи використовує навантаження virtio, SR-IOV VF чи повний passthrough?
  2. Чи ввімкнений IOMMU і працює (не лише «в BIOS задано»)?
  3. Чи перенаправлені переривання і чи ввімкнено MSI-X?

Друге: знайдіть домен конкуренції

  1. Вирівнювання NUMA: чи ВМ знаходиться на тому ж сокеті, що й PCIe-пристрій?
  2. Афінність IRQ: чи переривання прив’язані до відповідних CPU?
  3. Кількість черг: чи достатньо черг, або їх надто багато?

Третє: вирішіть, чи ви CPU-bound, IRQ-bound або DMA/IOMMU-bound

  1. Якщо CPU завантажений у softirq/ksoftirqd: це обробка пакетів і переривань/маршрування.
  2. Якщо CPU в нормі, але p99 поганий: дивіться на міграцію IRQ, стани живлення і IOTLB churn.
  3. Якщо пропускна здатність підрізається підозріло: перевірте швидкість лінку/ширину, узгоджений PCIe і offload-и.

Четверте: доведіть експериментом

  • Прив’яжіть vCPU і пам’ять до NUMA-вузла пристрою, повторіть тест.
  • Змініть афінність IRQ для черг VF, повторіть тест.
  • Увімкніть/вимкніть hugepages (або 2M vs 1G) на одному хості, повторіть тест.

Не змінюйте п’ять змінних і не оголошуйте перемогу. Так народжується фольклор.

Практичні завдання: команди, виходи та рішення

Це перевірки, які я реально виконую, коли хтось каже «SR-IOV повільний» або «passthrough нестабільний». Кожне завдання включає рішення, яке я приймаю за результатом.

Завдання 1: Підтвердити, що IOMMU ввімкнений у ядрі

cr0x@server:~$ dmesg | egrep -i 'iommu|vt-d|amd-vi|dmari' | head -n 25
[    0.142311] DMAR: IOMMU enabled
[    0.142355] DMAR: Host address width 46
[    0.142360] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[    0.381200] DMAR-IR: Enabled IRQ remapping in x2apic mode

Що це означає: У вас є перенаправлення DMA (DMAR: IOMMU enabled) і перенаправлення переривань (DMAR-IR).

Рішення: Якщо ви не бачите цих рядків, не прикидайтеся, що існує ізоляція passthrough. Виправте BIOS/аргументи ядра перед діагностикою продуктивності.

Завдання 2: Перевірити cmdline ядра щодо режиму IOMMU і поширених пасток

cr0x@server:~$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-6.8.0 root=/dev/mapper/vg0-root ro quiet intel_iommu=on iommu=pt mitigations=auto

Що це означає: intel_iommu=on його вмикає; iommu=pt використовує passthrough-мепінги для хост-пристроїв (часто зменшує накладні витрати для не‑призначених пристроїв).

Рішення: Для змішаних навантажень iommu=pt зазвичай розумний вибір. Якщо ви налагоджуєте ізоляцію, тимчасово можна його прибрати, щоб подивитися на зміну поведінки — але документуйте причину.

Завдання 3: Визначити, чи ви використовуєте SR-IOV VFs або повні пристрої

cr0x@server:~$ lspci -D | egrep -i 'ethernet|network' | head
0000:3b:00.0 Ethernet controller: Intel Corporation Ethernet Controller XXV710 for 25GbE SFP28
0000:3b:02.0 Ethernet controller: Intel Corporation Ethernet Virtual Function
0000:3b:02.1 Ethernet controller: Intel Corporation Ethernet Virtual Function

Що це означає: PF — 3b:00.0, і VFs існують на 3b:02.x.

Рішення: Якщо ви очікуєте SR-IOV, але бачите лише PF — SR-IOV не використовується; ви налагоджуєте не ту річ.

Завдання 4: Підтвердити кількість створених VF на PF

cr0x@server:~$ sudo cat /sys/class/net/enp59s0f0/device/sriov_numvfs
8

Що це означає: На PF наразі ввімкнено 8 VFs.

Рішення: Якщо 0 — VF немає. Якщо більше, ніж планували, ви можете виснажувати ресурси PF (черги, TCAM, переривання). Зменшіть кількість VF і повторно перевірте стабільність.

Завдання 5: Перевірити IOMMU-групи для меж ізоляції

cr0x@server:~$ for g in /sys/kernel/iommu_groups/*; do echo "Group $(basename $g):"; ls -1 $g/devices; done | sed -n '1,40p'
Group 12:
0000:3b:00.0
0000:3b:00.1
Group 13:
0000:3b:02.0
0000:3b:02.1

Що це означає: Пристрої в одній групі апаратно не можна безпечно ізолювати один від одного.

Рішення: Якщо ваш цільовий пристрій ділить групу з тим, що ви не можете передати (наприклад контролер зберігання), не використовуйте passthrough на такому хості. Виправте топологію PCIe або прийміть virtio.

Завдання 6: Перевірити, до якого драйвера прив’язано (на стороні хоста)

cr0x@server:~$ lspci -nnk -s 0000:3b:02.0
3b:02.0 Ethernet controller [0200]: Intel Corporation Ethernet Virtual Function [8086:154c]
	Subsystem: Intel Corporation Device [8086:0000]
	Kernel driver in use: vfio-pci
	Kernel modules: iavf

Що це означає: VF прив’язано до VFIO для passthrough; нативний VF драйвер існує, але не активний на хості.

Рішення: Якщо ви очікували хостову мережу через VF, бачити vfio-pci — нормально. Якщо очікували, що хост буде його використовувати — це ваша неправильна конфігурація.

Завдання 7: Перевірити, чи ВМ справді має пристрій прикріпленим (QEMU/libvirt)

cr0x@server:~$ sudo virsh domiflist vm-netperf-01
Interface  Type     Source     Model   MAC
-------------------------------------------------------
vnet0      bridge   br0        virtio  52:54:00:aa:bb:cc

Що це означає: Ця ВМ все ще використовує virtio через міст, а не SR-IOV VF passthrough.

Рішення: Припиніть сперечатися про налаштування SR-IOV. Спочатку прикріпіть VF-пристрій і підтвердьте зміни драйвера всередині гостя.

Завдання 8: Перевірити узгоджену швидкість/ширину PCIe (типова безшумна капса)

cr0x@server:~$ sudo lspci -s 3b:00.0 -vv | egrep -i 'LnkSta:|LnkCap:' | head -n 4
LnkCap:	Port #0, Speed 8GT/s, Width x8
LnkSta:	Speed 8GT/s, Width x4

Що це означає: Картка підтримує x8, але працює на x4. Це фізична/топологічна/BIOS проблема, а не баг драйвера.

Рішення: Якщо обмеження пропускної здатності відповідає x4, переставте карту, змініть riser або виправте налаштування біфуркації BIOS. Не налаштовуйте черги, щоб вирішити відсутні лінії.

Завдання 9: Перевірити NUMA-локальність PCI-пристрою

cr0x@server:~$ cat /sys/bus/pci/devices/0000:3b:00.0/numa_node
1

Що це означає: Пристрій приєднано до NUMA-вузла 1.

Рішення: Розмістіть vCPU і пам’ять ВМ на вузлі 1. Якщо не можете — прийміть вищу затримку й нижчу пропускну здатність або переставте пристрій на інший сокет.

Завдання 10: Знайти IRQ черг VF і подивитися, де вони опиняються

cr0x@server:~$ grep -E 'enp59s0f0v0|iavf|vfio|msi' /proc/interrupts | head -n 8
 178:     120433          0          0          0  IR-PCI-MSI 524288-edge      vfio-msi[0]
 179:     118901          0          0          0  IR-PCI-MSI 524289-edge      vfio-msi[1]
 180:     119552          0          0          0  IR-PCI-MSI 524290-edge      vfio-msi[2]

Що це означає: Всі переривання лягають на CPU0 (перший стовпець), бо афінність не налаштована або irqbalance зробив «креативний» вибір.

Рішення: Прив’яжіть IRQ до CPU, локальних для NIC, і бажано розподіліть черги по ізольованих ядрах. Потім повторно перевірте p99 затримку.

Завдання 11: Перевірити статус irqbalance (він може допомогти або нашкодити)

cr0x@server:~$ systemctl status irqbalance --no-pager
● irqbalance.service - irqbalance daemon
     Loaded: loaded (/lib/systemd/system/irqbalance.service; enabled)
     Active: active (running) since Mon 2026-02-02 09:14:12 UTC; 1 day ago

Що це означає: irqbalance запущений і може динамічно переміщувати IRQ.

Рішення: Для чутливих до затримки SR-IOV/passthrough навантажень розгляньте відключення irqbalance і явне встановлення афінності — особливо на хостах з CPU-ізоляцією.

Завдання 12: Перевірити конфігурацію hugepages (хост)

cr0x@server:~$ grep -i huge /proc/meminfo | head -n 6
HugePages_Total:    2048
HugePages_Free:     1980
HugePages_Rsvd:       12
Hugepagesize:       2048 kB
Hugetlb:         4194304 kB

Що це означає: 2M hugepages доступні і майже вільні.

Рішення: Якщо ви ганяєтеся за накладними витратами IOMMU/IOTLB, hugepages — важливий важіль. Якщо HugePages_Free низький, можлива фрагментація або витік резервацій; виправте перед тим, як звинувачувати SR-IOV.

Завдання 13: Перевірити, чи ВМ використовує hugepages (libvirt)

cr0x@server:~$ sudo virsh dumpxml vm-netperf-01 | egrep -n 'memoryBacking|hugepages|locked'
112:  
113:    
114:    
115:  

Що це означає: Пам’ять ВМ підкріплена hugepages і заблокована (зменшує churn сторінок і сюрпризи).

Рішення: Якщо ви використовуєте SR-IOV/passthrough і дбаєте про хвостову затримку, це зазвичай варто зробити. Якщо не можете заблокувати пам’ять — чекайте варіативності при тиску хоста.

Завдання 14: Перевірити на помилки IOMMU (ви будете здивовані)

cr0x@server:~$ dmesg | egrep -i 'DMAR:.*fault|IOMMU.*fault|AMD-Vi:.*Event' | tail -n 10
[12345.671234] DMAR: [DMA Read] Request device [3b:02.0] fault addr 0x7f3a1000 [fault reason 0x05] PTE Read access is not set

Що це означає: Пристрій намагався виконати DMA поза дозволеними мапінгами або мапінги неправильно знімаються.

Рішення: Стоп. Це не тюнінг issue; це питання коректності. Перевірте версії VFIO/QEMU, баги драйверів і чи ви не відключаєте пристрої небезпечно під час роботи.

Завдання 15: Перевірити NIC offload-и всередині гостя (SR-IOV VFs відрізняються)

cr0x@server:~$ sudo ethtool -k ens5 | egrep -i 'rx-checksumming|tx-checksumming|tso|gso|gro|lro'
rx-checksumming: on
tx-checksumming: on
tcp-segmentation-offload: on
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off

Що це означає: Offload-и ввімкнені як очікувалося; LRO вимкнено (часто корисно для латентності/спостережуваності).

Рішення: Якщо offload-и несподівано вимкнені — ви платите CPU. Якщо вони ввімкнені, але бачите дивні трасування пакетів, розгляньте відключення GRO для налагодження — не як постійне «вирішення».

Завдання 16: Перевірити антиспуфінг і налаштування trust для VF на PF (хост)

cr0x@server:~$ sudo ip link show enp59s0f0
2: enp59s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 3c:fd:fe:aa:bb:cc brd ff:ff:ff:ff:ff:ff
cr0x@server:~$ sudo ip link show enp59s0f0 vf 0
vf 0 MAC 52:54:00:11:22:33, vlan 100, spoof checking on, link-state auto, trust off, query_rss on

Що це означає: VF має VLAN-примус, перевірку спуфінгу ввімкнено, trust вимкнено. Це добрий дефолт для спільних середовищ.

Рішення: Якщо бачите trust on «бо це щось виправило», вимагайте конкретного пояснення і додайте компенсуючі контролі. Trust має властивість розповзатися як цвіль.

Завдання 17: Підтвердити governor частоти CPU/стани живлення (джерело хвостових затримок)

cr0x@server:~$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
powersave

Що це означає: CPU може агресивно знижувати частоту, що шкодить p99 затримці.

Рішення: Для високопродуктивних dataplane-хостів використовуйте governor performance або платформно‑адекватне налаштування. Якщо не можете — не чекайте детермінованої латентності.

Завдання 18: Перевірити softirq-навантаження (здоров’я мережевого dataplane)

cr0x@server:~$ mpstat -P ALL 1 3
Linux 6.8.0 (server)  02/04/2026  _x86_64_  (32 CPU)

02:11:01 PM  CPU   %usr %nice %sys %iowait %irq %soft %steal %idle
02:11:02 PM  all   12.5  0.0   9.8    0.0   2.1  18.7    0.0   56.9

Що це означає: Високий %soft вказує на інтенсивну обробку softirq; типово для пакетно‑насичених навантажень.

Рішення: Додайте черг/ядер, покращіть IRQ affinity/RPS/XPS або переходьте на SR-IOV/DPDK, якщо virtio є вузьким місцем. Якщо ви вже на SR-IOV — це вказує на steering і розміщення CPU.

Три корпоративні міні-історії з поля бою

Міні-історія 1: Інцидент через неправильне припущення

Вони впроваджували NIC passthrough для сервісу, чутливого до затримки. Ідея була проста: «прибрати віртуальний комутатор, зменшити накладні витрати, знизити p99». Тестовий хост пройшов. Канарка пройшла. А потім продакшн почав дивно поводитися.

Один кластер почав ребутитися під навантаженням. Не всі вузли. Лише ті в певному ряду шаф. Логи показували спорадичні DMA‑фолти і іноді жорсткий локдаун без чистого panic. Команда спочатку думала «баг драйвера». Вони оновлювали гостьові драйвери. Оновлювали QEMU. Тиснули offload-и. Привиди продовжувалися.

Неправильне припущення було в тому, що «IOMMU ввімкнено в BIOS» означає «IOMMU реально працює повністю». На уражених вузлах BIOS мав цю настройку, але платформа постачалася із перенаправленням переривань вимкненим через старішу прошивку. Linux вмикав DMA‑ремапінг, але не міг коректно ввімкнути перенаправлення переривань на цій ревізії апаратури.

Вони передавали пристрій, який сипав MSI‑X під піковим навантаженням, і без гарантій правильної роботи перенаправлення переривань платформа поводилася непередбачувано. Проблема була не в тому, що IOMMU «вимкнено»; вона була в тому, що критична частина функціоналу не була надійно увімкнена.

Виправлення було нудним: стандартизувати BIOS‑профілі, додати boot‑time перевірку, що відкидає вузол, якщо DMAR-IR не увімкнено, і відмовлятися від планування passthrough на таких хостах. Продуктивність потім покращилася, але інцидент завершився, коли припинили обманювати себе щодо можливостей платформи.

Міні-історія 2: Оптимізація, що відкотилася назад

Інша компанія використовувала SR-IOV VF для високопропускних навантажень. Хтось зауважив, що накладні витрати трансляції IOMMU можуть додавати CPU‑вартість при екстремальному PPS. Вони знайшли iommu=pt і вирішили «оптимізувати» ще далі: відключити IOMMU на хості, бо «гості мають тільки VF і NIC їх ізолює».

Спочатку виглядало як виграш. Мікробенчмарки трохи покращилися, графіки CPU стали охайніші. Потім реальне навантаження вдарило: спорадична корупція даних у сервісі збереження, що також використовував інший passthrough‑пристрій на деяких вузлах. Не скрізь — лише там, де планування зіткнулося з певною комбінацією призначення пристроїв і тиску пам’яті.

Без IOMMU поганий пристрій (або баг у взаємодії) міг DMA в пам’ять, куди не повинен був. Корупція була тихою: рідкісні невідповідності контрольних сум, випадкові крахи процесів, «неможливі» переходи станів. Найгірший тип інциденту: той, що змушує команду сумніватися в фізиці.

Вони відкликали зміну, і корупція зупинилася. Постмортем не був ласкавим: оптимізація гналася за теоретичною вигодою, стираючи запобіжну огорожу. Вартість «виграшу» — дні реагування на інциденти, огляди ризиків і нова політика: IOMMU залишається ввімкненим; якщо продуктивність проблема, виправляйте стратегію відображення (hugepages, pinning) або змінюйте дизайн dataplane.

Міні-історія 3: Нудна правильна практика, що врятувала день

Одна платформа мала змішаний флот: хости для загальної віртуалізації (virtio всюди) і менший пул для високопродуктивного SR-IOV та інколи GPU passthrough. Вони були відомі тим, що надто суворі щодо профілів хостів.

Кожний бут виконував чекліст: перевірити IOMMU ввімкнено, перевірити перенаправлення переривань, перевірити ширину лінку NIC, перевірити версії прошивки по allowlist, перевірити кількість VF, перевірити обмеження NUMA. Якщо будь-яка перевірка провалювалася, вузол автоматично дренувався. Ніяких героїчних дій. Жодних переговорів.

Одного дня прийшла партія серверів із тонкою відмінністю топології PCIe. NIC узгодив x4 замість x8 у певній конфігурації слота. Ніщо «не ламалося». Жодних алертів від драйвера NIC. Додатки просто стали повільніші, ніби «стрибок трафіку».

Boot gate це підловив: LnkSta не відповідав очікуванням. Вузли не потрапили в SR-IOV пул. Робочі навантаження залишилися на здорових хостах, а єдиний «інцидент» — тикет в операції дата‑центру переставити карти в інші слоти.

Практика, що врятувала їх, не була хитрим tюнінгом ядра. Вона полягала в відмові приймати мовчазну деградацію. Надійність — це переважно вирішення того, що ви не готові терпіти.

Поширені помилки: симптом → корінь → виправлення

1) Симптом: «Passthrough увімкнено, але продуктивність гірша ніж virtio»

Корінь: ВМ знаходиться в remote‑NUMA від пристрою; переривання лягають на невідповідні CPU; пам’ять не закріплена; IOTLB churn через фрагментовану пам’ять.

Виправлення: Вирівняйте vCPU і пам’ять до NUMA‑вузла NIC, ввімкніть hugepages + locked memory, налаштуйте афінність IRQ, підберіть кількість черг під ядра.

2) Симптом: «SR-IOV VF рандомно втрачає лінк або зависає під навантаженням»

Корінь: Баг драйвера PF/прошивки, тригерується кількістю VF, кількістю черг або комбінацією offload‑ів; інколи погіршується при ресетах.

Виправлення: Оновіть прошивку NIC + драйвер PF; зменшіть VF/черги; уникайте екзотичних комбінацій offload; додайте health checks, що відтворюють VF при помилці.

3) Симптом: «VFIO attach не вдається: device is busy / can’t reset»

Корінь: Пристрій прив’язано до драйвера хоста або є частиною групи з іншими функціями в використанні; обмеження FLR/reset.

Виправлення: Правильно відв’яжіть, переконайтеся в ізоляції за IOMMU group, уникайте passthrough пристроїв без надійної семантики reset або використайте SR-IOV замість цього.

4) Симптом: «IOMMU groups величезні; не можу ізолювати NIC»

Корінь: Топологія PCIe не має ACS або пристрої ділять upstream компоненти, що не можуть забезпечити ізоляцію.

Виправлення: Змініть слот/топологію, використайте хости з ACS‑сумісними комутаторами або припиніть намагатися робити безпечний passthrough на цій платформі.

5) Симптом: «Висока p99 затримка лише під час конкуренції на хості»

Корінь: Масштабування частоти CPU, міграція IRQ, reclaim пам’яті або шумні сусіди на тому ж сокеті.

Виправлення: Ізолюйте ядра для dataplane, встановіть governor performance, відключіть irqbalance (або налаштуйте його), резервуйте hugepages, заблокуйте пам’ять, встановіть реальні політики NUMA.

6) Симптом: «Пакети падають у гості, а хост виглядає нормально»

Корінь: Голод черг VF, недостатній розмір кілець, надто агресивне згортання переривань або неправильне налаштування гостьового драйвера.

Виправлення: Збільшіть розміри кілець, відкоригуйте coalescing, переконайтеся в MSI‑X векторах, забезпечте достатню кількість черг, прив’яжіть vCPU і перевірте версію гостьового драйвера.

7) Симптом: «Команда безпеки каже, що SR-IOV небезпечний»

Корінь: Політики VF trust/spoof/VLAN залишені надмірно дозволеними; нерозуміння ризиків спільного апаратного забезпечення.

Виправлення: Запровадьте політики VF на PF, обмежте функції для орендаря, проведіть аудит призначення пристроїв, увімкніть IOMMU, документуйте модель загроз.

Контрольні списки / покрокові плани

Контрольний список A: Вибір SR-IOV vs passthrough (рішення, не враження)

  1. Потрібно шарувати пристрій між багатьма гостями? SR-IOV. Якщо пристрій погано підтримує SR-IOV — перегляньте обладнання.
  2. Потрібні повні функції пристрою (GPU, HBA advanced modes, вендорські інструменти)? Passthrough.
  3. Потрібна live migration/snapshots? Віддавайте перевагу virtio. SR-IOV/passthrough ускладнюють або блокують це.
  4. Низька толерантність до ризику багатокористувацького середовища? Passthrough з IOMMU і суворими перевірками платформи, або взагалі уникайте призначення пристроїв.
  5. Операційна зрілість: Якщо ви не можете стандартизувати BIOS/прошивку/версії ядра — не робіть призначення пристроїв у масштабі.

Контрольний список B: План впровадження SR-IOV (що робити по порядку)

  1. Стандартизувати BIOS налаштування (VT-d/AMD-Vi увімкнено, SR-IOV увімкнено, узгоджені PCIe параметри).
  2. Стандартизувати cmdline ядра і валідовувати через dmesg ворота.
  3. Обрати кількість VF на PF базуючись на апаратних обмеженнях і потребах черг (не максимізуйте за замовчуванням).
  4. Визначити політику VF: перевірка спуфінгу ввімкнена, trust вимкнено за замовчуванням, VLAN політика явна.
  5. Визначити політику розміщення NUMA для SR-IOV хостів і примусово її застосувати через scheduler.
  6. Реалізувати стратегію афінності IRQ; не покладайтеся на випадок.
  7. Провести канарку під реальними шаблонами трафіку (PPS + розміри пакетів + кількість потоків).
  8. Спостерігати p99/p999, падіння пакетів, ресети і IOMMU‑fault; просуватися далі тільки коли все нудно стабільно.

Контрольний список C: План впровадження passthrough (не спалюйте хост)

  1. Перевірити, що IOMMU і перенаправлення переривань увімкнені і стабільні між перезавантаженнями.
  2. Перевірити IOMMU‑групи і переконатися, що пристрій можна ізолювати.
  3. Перевірити підтримку скидання пристрою (FLR або вендорні механіки reset) на надійність.
  4. Прив’язати пристрій до vfio-pci і підтвердити, що сервіси хоста його не потребують.
  5. Прив’язати vCPU і пам’ять ВМ до NUMA‑вузла пристрою; використовувати hugepages, якщо важлива детермінованість.
  6. Інструментувати: збирати dmesg IOMMU‑fault, PCIe AER помилки і метрики розподілу переривань.
  7. Мати відкат: від’єднати пристрій, переприв’язати до драйвера хоста, відновити мережеві/зберігальні шляхи.

FAQ

1) Чи SR-IOV завжди швидший за virtio?

Ні. SR-IOV часто зменшує CPU на пакет і покращує пропускну здатність, але може програти за хвостовою затримкою, якщо IRQ/NUMA/відображення пам’яті налаштовані погано. Virtio може бути «достатньо швидким» і значно простішим у експлуатації.

2) Чи passthrough завжди найшвидший варіант?

Часто для власності пристрою одним орендарем — так. Але «найшвидший» залежить від розміщення і обробки переривань. Remote‑NUMA passthrough може бути повільнішим за добре налагоджений virtio шлях.

3) Чи потрібен IOMMU для SR-IOV?

Якщо ви призначаєте VF гостям — бажано мати IOMMU для ізоляції DMA. Якщо все лишається на хості, це менше про ізоляцію — але багато платформ поводяться краще з консистентною конфігурацією IOMMU.

4) Що насправді робить iommu=pt?

Зазвичай воно встановлює identity/pass-through мапінги для хост‑пристроїв, щоб вони не платили за трансляцію, водночас дозволяючи трансляцію для призначених пристроїв. Це компроміс між продуктивністю і безпекою.

5) Чому мої IOMMU‑групи «занадто великі»?

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

6) Чи можна жити мігрувати ВМ з SR-IOV або passthrough?

Не в звичному «просто працює» сенсі. Призначення пристроїв прив’язує ВМ до стану конкретного обладнання. Деякі екосистеми мають спеціальні підходи до міграції, але ставте це як спеціальний проєкт, а не галочку.

7) Яка найпоширеніша причина повідомлень «SR-IOV нестабільний»?

Несумісність прошивки/драйвера і перевантаження ресурсів на NIC (занадто багато VF, занадто багато черг, надто агресивні налаштування). Друга причина — операційна: VF не відновлюються послідовно після ребута або подій лінку.

8) Чи додає IOMMU помітну затримку?

Може, особливо коли мапінги часто оновлюються або промахи IOTLB ростуть. З закріпленою пам’яттю, hugepages і стабільними мапінгами накладні витрати часто невеликі в порівнянні з рештою dataplane.

9) Чи варто відключити irqbalance на SR-IOV/passthrough хостах?

Для чутливих до латентності навантажень — так, якщо тільки ви явно не налаштували irqbalance з урахуванням ізоляції і локальності. Динамічна міграція IRQ і детермінований p99 — погані сусіди.

10) Яка найпростіша «безпечна за замовчуванням» архітектура?

Virtio для загальних обчислень, окремий пул SR-IOV для продуктивних навантажень і passthrough тільки для пристроїв, що дійсно потребують повної власності. Тримайте профілі хостів суворими і валідованими.

Практичні подальші кроки

Рішення приймайте на підставі вашої операційної реальності, а не знімка бенчмарку.

  1. Визначте базу: якщо ви зараз на virtio — спочатку очистіть NUMA/IRQ гігієну. Інакше ви не зрозумієте, що саме покращив SR-IOV.
  2. Увімкніть IOMMU правильно: підтвердіть перенаправлення DMA і переривань у dmesg. Заблокуйте флот на цьому.
  3. Обирайте правильну модель: SR-IOV для прискорення спільних NIC, passthrough для повної власності пристрою, virtio для гнучкості.
  4. Операціоналізуйте: стандартизувати прошивку, BIOS, аргументи ядра, кількість VF і політику безпеки VF. Автоматизуйте перевірки; дренуйте вузли при невідповідності.
  5. Вимірюйте правильні речі: стежте за p99/p999 затримками і падіннями, а не лише за середньою пропускною здатністю. Більшість інцидентів живе в хвостах.

Цитата, варта нотатки: «Hope is not a strategy.» — General Gordon R. Sullivan

Кластер Proxmox: чому Corosync виглядає нормально, а ваш кластер гине

Ви відкриваєте GUI Proxmox і він підвішується. Міграції зупиняються. HA фліптає. Віртуальні машини працюють — поки не перестануть.
Потім ви перевіряєте очевидне: кворум Corosync. Воно каже, що все в порядку.

Ось пастка. Corosync може бути «в порядку» в вузькому сенсі — членство й кворум цілі — тоді як
решта кластера задихається через латентність, конкурентний доступ до файлової системи, затримки сховища або розбіжності часу.
Corosync — це пульс. Ваш кластер усе ще може «кровоточити».

Що таке Corosync (і чим воно не є)

Corosync забезпечує членство в кластері та обмін повідомленнями. У Proxmox VE це компонент, який вирішує,
хто входить до «клубу» і чи є у нього кворум. Він не гарантує, що ваша панель управління
відповідає, що сховище здорове, або що гіпервізори можуть виконувати роботу з потрібною вам швидкістю.

Proxmox будує багато залежностей на «вузли бачать одне одного»:
pmxcfs (кластерна файлова система Proxmox, що зберігає стан конфігурації),
pveproxy та pvedaemon (сервіси API/UI),
pve-ha-lrm/crm (логіка HA),
pvestatd (статистика),
та те, що робить ваш бекенд сховища сьогодні (ZFS, iSCSI, NFS, Ceph, локальний LVM… оберіть улюблену головний біль).

Членство Corosync може залишатися стійким навіть якщо:

  • pmxcfs застрягає, чекаючи операцій FUSE і ви не можете застосувати зміни конфігурації
  • мережа втрачає пакети або має спайки латентності — просто не настільки, щоб втратити кворум
  • розбіжність часу викликає тонкі проблеми з аутентифікацією та fencing
  • затримки в роботі сховища заморожують потоки QEMU і міграції тайм-аутяться
  • демони управління блокуються через DNS, PAM/LDAP або виклики файлової системи

Дві сухі істини, що рятують кар’єру

  1. Кворум бінарний; здоров’я — ні. Ви можете мати кворум і водночас бути непрацездатними.
  2. Більшість «проблем кластера» Proxmox — це проблеми латентності. Не завжди мережа — часто сховище або конкуренція за CPU, що проявляється як пропущені heartbeat’и в інших місцях.

Цікаві факти та історичний контекст (системи мають багаж)

  • Corosync походить від проєкту OpenAIS, який прагнув реалізувати концепції інтерфейсу прикладних програм для кластерів у Linux.
  • Totem — шар групової комунікації Corosync; його механізм токена — причина, чому «налаштування token timeout» дає відчуття влади — а потім жалю.
  • Кворум у Corosync — це задача голосування (через votequorum), а не система оцінки здоров’я; він не вимірює рівень сервісу.
  • pmxcfs — це файлова система, основана на FUSE; вона чудова для маленьких конфігураційних файлів і жахлива для вашого терпіння, коли блокується.
  • «Кластерна файлова система» Proxmox — не загальна файлова система; це репліковане сховище конфігів. Спроба використовувати її як загальне сховище — прямий шлях до терапії.
  • Уникнення split-brain — дизайн-перевага для більшості стеків кластерів; Proxmox зазвичай віддає перевагу «зупинити запис» над «мовчазною корупцією».
  • Історично в Ceph болючим був ефект ампліфікації дрібних записів; сучасні версії значно покращилися, але ваша мережа та диски все одно вирішують, чи це Ferrari або газонокосарка.
  • Планування ядра Linux і тиск I/O можуть створити режими відмов «все виглядає вгору, але нічого не рухається» — особливо на перевантажених хостах.

Одна цитата, яку варто приклеїти до монітора:
Надія — це не стратегія. — ген. Гордон Р. Салліван

Жарт №1: Corosync, що каже «кворум», коли ваш GUI зависає — як сигналізатор диму, який говорить «батарея ОК» під час пожежі на кухні.

Швидкий план діагностики

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

По-перше: це проблема членства мережі чи зависання панелі управління?

  • Перевірте стабільність членства Corosync (pvecm status, corosync-cfgtool -s).
  • Перевірте, чи pmxcfs відповідає (pvecm updatecerts зависне, якщо кластерна фс застрягає; також прості читання у /etc/pve можуть блокуватися).
  • Перевірте, чи API/UI заблоковано (systemd статус та journal для pveproxy/pvedaemon).

По-друге: який зараз домінуючий джерело латентності?

  • Латентність мережі/втрата пакетів (ping -f — не відповідь; використовуйте mtr, ethtool -S, лічильники на комутаторі).
  • Латентність сховища (ZFS zpool iostat -v, Ceph ceph -s та slow ops, статистика NFS-клієнта).
  • CPU steal / черга виконання / тиск пам’яті (середнє навантаження — замало; перевіряйте vmstat, top, pressure-stall-information, якщо доступно).

По-третє: щось «корисно» пробує нескінченно повторюватися?

  • DNS та LDAP-запити (входи в GUI зависають, API-виклики блокуються).
  • Флапінг multipath (шляхи iSCSI вмирають і повертаються як мильна опера).
  • Ceph backfill/recovery насичує кластер (він «здоровувато» виглядає, але повільний настільки, що все інше тайм-аутиться).

Швидкі рішення для триажу

  • Якщо членство стабільне, але pmxcfs заблокований: розглядайте це як відмову контрольної площини. Припиніть змінювати конфігурацію і знайдіть затримку.
  • Якщо спайки латентності сховища: зупиніть міграції, резервні копії, все, що множить I/O. Відновіть базовий стан спочатку.
  • Якщо мережеві втрати/латентність зростають: віддайте пріоритет стабілізації кільцевої мережі понад «налаштуванням token timeout». Налаштування — останній засіб, а не лікування.

Режими відмов, коли Corosync виглядає здоровим

1) pmxcfs застрягає: Corosync в порядку, але запис конфігів блокується

pmxcfs — місце, де Proxmox зберігає кластерні конфіги: визначення ВМ, конфіги сховищ, правила firewall, домени користувачів і т. д.
Воно покладене на повідомлення Corosync і змонтоване в /etc/pve через FUSE.

Коли pmxcfs повільний або зупинений, ви помітите такі симптоми:

  • Дії в GUI зависають (створення ВМ, редагування сховища, зміни HA)
  • Команди qm/pct фризяться при зверненні до конфігів
  • SSH працює; ВМ продовжують працювати; але управління «під водою»

Типові причини: екстремальний тиск на CPU, deadlock FUSE, затримки диска, що впливають на локальний журнал, або затримки повідомлень corosync, які ще не порушили кворум.

2) Токен-таймаути не зламались; ваш бюджет латентності — так

Механізм токена Corosync очікує своєчасної доставки повідомлень. Ви можете мати стабільний кворум навіть за періодичних спайків латентності, які
не перевищують ваш token timeout — але ці спайки все одно достатньо довгі, щоб заморозити міграції, резервні копії й рішення HA.

Класичний патерн: ви «виправили» corosync, збільшивши token timeout. Членство припинило фліпати.
Тим часом кластер став толерантним до латентності настільки поганої, що все інше страждає. Ви не виправили мережу.
Ви просто навчились Corosync не скаржитися.

3) Затримки сховища заморожують гіпервізор, а не Corosync

Найнеприємніші інциденти Proxmox викликані сховищем. Запис ВМ блокується в ядрі або QEMU,
хост відчуває I/O wait, і раптом всі демони управління відповідають ніби з тунелю.

Corosync все ще може обмінюватися heartbeat’ами, якщо CPU час від часу отримує планування. Цього достатньо для збереження кворуму.
Але цього недостатньо для чуйної системи.

4) Розбіжність часу: повільний яд

Проблеми з NTP/chrony не завжди ламають кворум. Але вони можуть зламати все, що залежить від монотонності часу:
TLS-ручне рукостискання, аутентифікація, кореляція логів, рішення fencing і «чому цей вузол думав, що він на 5 хвин у майбутньому?»

Ви також будете ганятись за примарами в логах, бо події виглядають у неправильному порядку. Це не «весело». Це те, як ви втрачаєте години.

5) HA не «вимкнено», воно нерішуче при частковій відмові

HA Proxmox залежить від узгодженого уявлення про ресурси, стани вузлів та доступність сховища.
За наявності кворуму, але латентності внизу, HA може застрягти: повторно намагаючись запустити ресурси, чекаючи блокувань або відмовляючись виконувати дії,
бо не може безпечно перевірити стан. Ззовні це виглядає як «HA зламалося». Внутрішньо воно обережне.

6) GUI повільний, бо pveproxy чекає на щось дурне

Типові винуватці: зворотні DNS-запити, timeouts LDAP/PAM, заблоковані читання в /etc/pve,
або насичений однопоточний шлях десь у обробці запитів.

Практичні завдання: команди, виводи, рішення

Це перевірки, які я реально виконую, коли на чергуванні. Кожне завдання включає, що означає вивід і яке рішення приймати.
Виконуйте їх мінімум на двох вузлах: одному «хорошому» і одному «поганому». Різниці — ваш ключ.

Завдання 1: Перевірити кворум і очікувані голоси

cr0x@server:~$ pvecm status
Cluster information
-------------------
Name:             prod-cluster
Config Version:   42
Transport:        knet
Secure auth:      on

Quorum information
------------------
Date:             Tue Feb  4 10:12:31 2026
Quorum provider:  corosync_votequorum
Nodes:            3
Node ID:          0x00000001
Ring ID:          1.2c
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2
Flags:            Quorate

Значення: Corosync бачить 3 вузли, кворум досягнуто, голоси відповідають очікуванню.
Рішення: Якщо тут «Yes», але ви все одно маєте проблеми, припиніть звинувачувати кворум і почніть вимірювати латентність, pmxcfs та сховище.

Завдання 2: Перевірити стан лінків Corosync і невідповідність MTU

cr0x@server:~$ corosync-cfgtool -s
Printing ring status.
Local node ID 1
RING ID 0
        id      = 10.10.10.11
        status  = ring 0 active with no faults
RING ID 1
        id      = 10.10.20.11
        status  = ring 1 active with no faults

Значення: Кільця активні. «No faults» не означає «хороша латентність».
Рішення: Якщо кільця показують помилки періодично, спочатку виправте L2/L3 проблеми (bonding, MTU, помилки на комутаторі), перш ніж чіпати налаштування Corosync.

Завдання 3: Прочитати скарги Corosync (вони тонкі)

cr0x@server:~$ journalctl -u corosync -S -2h --no-pager | tail -n 30
Feb 04 09:41:02 pve01 corosync[1267]:   [KNET  ] link: host: 2 link: 0 is down
Feb 04 09:41:03 pve01 corosync[1267]:   [KNET  ] host: 2 link: 0 recovered
Feb 04 09:58:19 pve01 corosync[1267]:   [TOTEM ] Token has not been received in 1800 ms
Feb 04 09:58:19 pve01 corosync[1267]:   [TOTEM ] A processor failed, forming new configuration.

Значення: Короткі пропади лінків і затримки токена. Ви все ще можете залишатися кворумними під час переналаштувань.
Рішення: Якщо ви бачите попередження про токен, розглядайте це як реальний інцидент: розслідуйте мережеві помилки, голодування CPU або IRQ-шторм.

Завдання 4: Підтвердити, що pmxcfs змонтовано і відповідає

cr0x@server:~$ mount | grep /etc/pve
pve on /etc/pve type fuse.pve (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

Значення: Точка монтування існує. Вона все ще може бути повільною.
Рішення: Далі — протестуйте швидкість читання/запису.

Завдання 5: Перевірити, чи операції в /etc/pve зависають

cr0x@server:~$ time ls -l /etc/pve/nodes/pve01/qemu-server | head
total 8
-rw-r----- 1 root www-data 1324 Feb  4 09:55 101.conf

real    0m0.012s
user    0m0.002s
sys     0m0.004s

Значення: Швидка відповідь — нормально. Якщо це займає секунди або зависає, pmxcfs давиться.
Рішення: Якщо повільно/зависає лише на одному вузлі — підозрюйте локальний ресурсний тиск. Якщо повільно на всіх вузлах — підозрюйте латентність corosync або конфлікт pmxcfs по всьому кластеру.

Завдання 6: Перевірити здоров’я pmxcfs та сервісів pve

cr0x@server:~$ systemctl status pve-cluster pvedaemon pveproxy --no-pager
● pve-cluster.service - The Proxmox VE cluster filesystem
     Loaded: loaded (/lib/systemd/system/pve-cluster.service; enabled)
     Active: active (running) since Tue 2026-02-04 08:01:12 UTC; 2h 11min ago
   Main PID: 1123 (pmxcfs)
      Tasks: 13 (limit: 154263)
     Memory: 52.4M
        CPU: 2min 1.911s

● pvedaemon.service - Proxmox VE API Daemon
     Active: active (running)

● pveproxy.service - Proxmox VE API Proxy Server
     Active: active (running)

Значення: Сервіси «running». Це не означає, що вони відповідають.
Рішення: Якщо «active», але UI зависає — перевіряйте логи та блокуючі виклики (наступні завдання).

Завдання 7: Перевірити, чи pveproxy тайм-аутиться на auth/DNS

cr0x@server:~$ journalctl -u pveproxy -S -2h --no-pager | tail -n 25
Feb 04 10:01:18 pve02 pveproxy[2044]: proxy detected vanished client connection
Feb 04 10:02:41 pve02 pveproxy[2044]: authentication failure; rhost=10.10.30.50 user=admin@pam msg=timeout
Feb 04 10:02:41 pve02 pveproxy[2044]: failed login attempt; user=admin@pam

Значення: Таймаути авторизації можуть бути спричинені повільним LDAP/PAM/DNS, а не неправильними паролями.
Рішення: Якщо бачите таймаути — перевірте розв’язування імен і доступність директорій; не «перезапускайте випадкові сервіси» одразу.

Завдання 8: Перевірити синхронізацію часу і розбіжність між вузлами

cr0x@server:~$ chronyc tracking
Reference ID    : 192.0.2.10
Stratum         : 3
Ref time (UTC)  : Tue Feb 04 10:11:32 2026
System time     : 0.000347812 seconds slow of NTP time
Last offset     : -0.000112345 seconds
RMS offset      : 0.000251901 seconds
Frequency       : 12.345 ppm fast
Leap status     : Normal

Значення: Гарна синхронізація показує малі зсуви та «Normal» у leap status.
Рішення: Якщо зсув великий або leap status не нормальний — виправляйте час негайно. Не аналізуйте поведінку кластера, поки години не погоджені.

Завдання 9: Виявити тиск CPU та I/O wait, що виснажує все

cr0x@server:~$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 812344  54212 9248120    0    0     4    21  920 1800  6  2 88  4  0
 3  1      0 790112  54180 9249008    0    0   120  8020 1100 2100  9  3 44 44  0
 4  2      0 780004  54140 9249912    0    0   200  9100 1200 2400  8  4 36 52  0

Значення: Високий wa (I/O wait) вказує, що система заблокована на очікуванні сховища. Високий b свідчить про заблоковані процеси.
Рішення: Якщо wa постійно високий під час інциденту — припиняйте шукати помилки Corosync і переходьте до діагностики сховища.

Завдання 10: Здоров’я ZFS і латентність на вузлі з локальним ZFS

cr0x@server:~$ zpool status -x
all pools are healthy

Значення: Відомих помилок пулу немає. Але це не каже про латентність.
Рішення: Якщо повільно — перевірте iostat та поведінку sync наступним кроком.

cr0x@server:~$ zpool iostat -v 1 3
              capacity     operations     bandwidth
pool        alloc   free   read  write   read  write
rpool       320G   1.45T     80   1200  5.4M   98.2M
  mirror    320G   1.45T     80   1200  5.4M   98.2M
    nvme0n1    -      -      40    610  2.7M   49.1M
    nvme1n1    -      -      40    590  2.7M   49.1M

Значення: Інтенсивні записи. Якщо це корелює з зависанням панелі управління — можливо, ви насичуєте сховище.
Рішення: Розгляньте обмеження пропускної здатності резервних копій/реплікації і перевірте наявність sync-записів (бази даних, NFS sync або неправильно налаштований ZFS).

Завдання 11: Стан кластера Ceph (якщо ви його використовуєте)

cr0x@server:~$ ceph -s
  cluster:
    id:     1b2c3d4e-5555-6666-7777-88889999aaaa
    health: HEALTH_WARN
            12 slow ops, oldest one blocked for 38 sec
  services:
    mon: 3 daemons, quorum a,b,c (age 2h)
    mgr: x(active, since 2h)
    osd: 9 osds: 9 up (since 2h), 9 in (since 2h)
  data:
    pools:   6 pools, 512 pgs
    usage:   12 TiB used, 18 TiB / 30 TiB avail
    pgs:     512 active+clean

Значення: «slow ops» — це ввічливий спосіб Ceph повідомити, що ваше сховище страждає.
Рішення: Розглядайте slow ops як продакшн-проблему. Призупиніть інтенсивні I/O операції. Діагностуйте затримки OSD, мережу та налаштування recovery/backfill.

Завдання 12: Перевірити помилки мережі на інтерфейсах Corosync

cr0x@server:~$ ip -s link show dev bond0
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 3c:ec:ef:aa:bb:cc brd ff:ff:ff:ff:ff:ff
    RX:  bytes packets errors dropped  missed   mcast
    1234567890  987654      12      0       0       0
    TX:  bytes packets errors dropped carrier collsns
    2233445566  876543       0      0       0       0

Значення: RX errors відмінні від нуля — підказка. Дванадцять помилок можуть бути «ні про що» або вершиною айсберга — корелюйте з часом інциденту.
Рішення: Якщо помилки зростають під час інцидентів — перевірте кабелі, оптику, прошивку NIC, порти комутатора і узгодженість MTU по всьому шляху.

Завдання 13: Виміряти латентність і втрати між вузлами (без самообману)

cr0x@server:~$ mtr -r -c 50 -n 10.10.10.12
Start: 2026-02-04T10:12:01+0000
HOST: pve01                      Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.10.10.12               0.0%    50    0.4   0.6   0.3   2.1   0.3

Значення: Добре: низьке середнє, низький максимум, без втрат.
Рішення: Якщо найгірші значення підскакують до десятків/сотень мс або з’являється втрата — Corosync може все ще виглядати «в порядку», тоді як решта тайм-аутиться. Виправляйте якість мережевого шляху.

Завдання 14: Перевірити застряглі завдання і чому міграції/резервні копії не завершуються

cr0x@server:~$ pvesh get /cluster/tasks --limit 5
[
  {
    "endtime": 0,
    "id": "UPID:pve02:0000A1B2:00C3D4E5:67A1B2C3:vzdump:105:root@pam:",
    "node": "pve02",
    "pid": 41394,
    "starttime": 1707040801,
    "status": "running",
    "type": "vzdump",
    "user": "root@pam"
  }
]

Значення: Резервна копія, що працює «вічно», часто корелює з затримками сховища або неможливістю завершити commit снапшоту.
Рішення: Перевірте логи конкретного вузла та латентність підлеглого сховища. Не вбивайте задачу одразу, поки не з’ясуєте, чи вона тримає блокування або снапшоти.

Завдання 15: Побачити нерішучість менеджера HA

cr0x@server:~$ ha-manager status
quorum OK
master pve01 (active, Tue Feb  4 10:12:12 2026)
lrm pve01 (active, Tue Feb  4 10:12:11 2026)
lrm pve02 (active, Tue Feb  4 10:12:10 2026)
lrm pve03 (active, Tue Feb  4 10:12:09 2026)

service vm:101 (started)
service vm:102 (freeze) (request_stop)
service ct:203 (started)

Значення: «freeze» вказує, що HA не може просунутись — часто через конкуренцію за блокування, недоступність сховища або застряглі агентські дії.
Рішення: Діагностуйте сховище і блокування конфігів у ресурсів. Не «форсуйте» дії HA, поки не знаєте, чого вони чекають.

Завдання 16: Знайти конфлікт блокувань конфігів (тихий вбивця)

cr0x@server:~$ ls -l /var/lock/pve-manager
total 0
-rw-r----- 1 root www-data 0 Feb  4 10:08 vzdump.lock
-rw-r----- 1 root www-data 0 Feb  4 10:09 pve-storage-lock

Значення: Блокування існують під час нормальних операцій, але якщо вони тримаються довго — щось застрягло.
Рішення: Корелюйте вік блокувань з лістом задач і продуктивністю сховища. Якщо блокування «застрягло» через аварійний процес — безпечно вирішіть підлягаючу задачу перед видаленням блокувань.

Три міні-історії з реальних кейсів

Міні-історія 1: Інцидент через неправильне припущення

Середня компанія експлуатувала три-вузловий Proxmox кластер для внутрішніх сервісів. Усього було «резервовано»: подвійні NIC, два комутатори,
RAID на гіпервізорах. Вони пишалися цим. І заслужили.

Потім одного понеділка GUI почав час від часу замерзати. Міграції зависали. Резервні копії, що зазвичай робилися за хвилини, тягнулися години.
Рятівник виконав ритуал: перевірив pvecm status. Кворум. Жодного відвалу вузла. Corosync виглядав чистим.
Тож вони припустили, що мережа кластера в порядку і пішли шукати в логах UI Proxmox.

Неправильне припущення: «Якщо Corosync має кворум, мережа кластера здорова».
Кворум лише означав, що вузли могли обмінюватися достатньою кількістю повідомлень, щоб погодитись щодо членства. Це нічого не казало про tail latency.

Насправді винен був один порт комутатора, що ламався частково — не падав лінк повністю. Він вводив періодичні мікробурсти і CRC-помилки.
Knet-лінки Corosync швидко відновлювалися, тож членство залишалось стабільним. Але записи в pmxcfs затримувались, а API постійно чекало відповіді кластерної файлової системи.

Виправлення було нудним: заміна кабелю й SFP, перенесення на інший порт і перевірка, що лічильники помилок лишаються плоскими.
«Таємниця» зникла миттєво. Посмертний аналіз додав один рядок, що мав значення: вимірюйте лічильники помилок мережі й латентність, а не тільки кворум.

Міні-історія 2: Оптимізація, що повернулась бумерангом

Інша організація мала Proxmox+Ceph розгортання. Вони хотіли менше попереджень «Corosync token timeout» під час пікових навантажень.
Хтось запропонував збільшити token timeout і час консенсусу, щоб Corosync витримував тимчасові спади.
Зміна зменшила шум у логах. Усі святкували. Невдовзі.

Через тижні обслуговування сховища спричинило recovery Ceph, що наситив бекенд-мережу.
Кластер залишився кворумним. І це була проблема. Вузли залишались у членах, стаючи поступово нефункціональними через I/O wait.
Рішення HA затримувались. Міграції нарощувались у чергу. GUI напівпрацював — достатньо, щоб створити хибну впевненість.

«Оптимізація» погіршила режим відмов, розширивши вікно, в якому все було технічно підключеним, але практично непридатним.
Оператори довше чекали, перш ніж оголосити інцидент, бо «Corosync стабільний». Тим часом вплив на бізнес зростав.

Остаточне виправлення не було лише відкатом таймаутів. Вони розділили трафік: Corosync — на низьколатентні незавантажені лінки;
recovery Ceph налаштували так, щоб не насичувати мережу; додали оповіщення за tail latency та slow ops, а не лише за member flaps.
Token timeout повернули ближче до дефолту. Шум у логах виріс; реальні відмови зменшились.

Міні-історія 3: Нудна, але правильна практика, що врятувала день

У регульованому середовищі Proxmox використовували для набору критичних робочих навантажень. Команда була консервативною до дратування.
Вони дотримувались суворого правила: кожен вузол мав OOB-управління, документовану процедуру «безпечного вимкнення»,
і квартальний тренінг з відновлення після часткових відмов без імпровізації.

Під час події з електропостачання один вузол повернувся з деградованим пулом сховища і періодичними I/O помилками. Кворум Corosync тримався,
але операції управління стали ненадійними: іноді конфіги зависали, резервні копії ставали, а HA вагався перемістити робочі навантаження.

Замість метушні вони дотрималися playbook’у: заморозили зміни, ідентифікували поганий вузол, евакуювали ВМ, які можна було безпечно перемістити,
і тримали решту стабільною. Вони використали OOB-доступ, щоб підтвердити апаратні помилки, потім виключили вузол з планування.

Нудна практика — документовані кроки, відомий порядок дій і відмова від «просто клацнути навмання» — не дала апаратній проблемі перетворитись на інцидент усього кластера. Бізнес майже не помітив.
Команда повернулась до рутинного дратування своєї власної процедури — і це якраз те, чого ви хочете від роботи з надійністю.

Жарт №2: Якщо ваш кластер працює на «племінному знанні», вітаю — ви винайшли єдину точку відмови з почуттями.

Типові помилки: симптом → коренева причина → виправлення

1) Симптом: Кворум «Yes», але дії в GUI зависають

  • Корінь: Латентність pmxcfs або конкуренція за блокування; API-виклики блокуються, чекаючи /etc/pve.
  • Виправлення: Протестуйте латентність ls /etc/pve на кількох вузлах; перевірте CPU/I/O wait; зменшіть навантаження; вирішіть застряглі завдання, що тримають блокування.

2) Симптом: HA показує «freeze» або повторні спроби рестарту

  • Корінь: HA не може підтвердити стан через таймаути сховища, блокування або затримані оновлення кластерної файлової системи.
  • Виправлення: Перевірте ha-manager status, завдання і здоров’я сховища; стабілізуйте сховище спочатку; уникайте форсованого старту, поки стан не буде узгоджений.

3) Симптом: Міграції стартують, а потім зависають на фіксованому відсотку

  • Корінь: Бекенд сховища не витримує (Ceph slow ops, латентність NFS, тиск sync в ZFS), або пропускна здатність мережі колапсує під навантаженням.
  • Виправлення: Виміряйте латентність сховища, перевірте Ceph slow ops, перевірте помилки NIC; призупиніть інші I/O-важкі операції; забезпечте, щоб мережа міграцій не була спільною з насиченим каналом сховища.

4) Симптом: Логи Corosync показують попередження про токен, але кворум тримається

  • Корінь: Спайки tail latency через конгестію, проблеми IRQ або голодування CPU; переналаштування проходять без повної втрати членства.
  • Виправлення: Розглядайте це як інцидент мережі/хоста; перевірте ip -s link, ethtool -S, mtr і CPU wait; виправляйте підлягаючий шлях.

5) Симптом: Випадкові «permission denied» або TLS/auth помилки після «нічого не змінювалося»

  • Корінь: Розбіжність часу між вузлами; вікна валідації сертифікатів порушені; Kerberos/LDAP, що чутливі до часу, падають.
  • Виправлення: Виправте chrony/NTP, перевірте розбіжність на всіх вузлах, потім повторно протестуйте потоки аутентифікації. Не крутить сертифікати як перший крок.

6) Симптом: Лише один вузол «повільний», але не виходить із кластера

  • Корінь: Локальний апаратний або ядровий збій: помилки диска, деградація ZFS, помилки NIC, тиск пам’яті.
  • Виправлення: Порівняйте метрики й логи з здоровим вузлом; евакуюйте робочі навантаження; діагностуйте апаратне забезпечення; не дозволяйте хворому вузлу отруїти контрольну площину.

7) Симптом: Усе погіршується під час резервних копій

  • Корінь: I/O резервних копій насичує сховище або мережу; commit снапшотів повільний; блокування тримаються довше; операції управління накопичуються.
  • Виправлення: Рознесіть резервні копії в часі, обмежте їхню пропускну здатність, розділіть трафік резервного копіювання і забезпечте резерв про запас у сховищі. Резервні копії мають бути нудними, а не тестом навантаження.

Контрольні списки / покроковий план

Контрольний список A: Коли кластер «відчувається повільним», але кворум в порядку

  1. Заморозьте зміни. Жодних нових конфігів сховищ, жодних правок firewall, жодних перестановок HA, поки ви не зрозумієте затримку.
  2. Виберіть один «поганий» вузол і один «хороший» вузол. Запустіть ті самі перевірки; відмінності — золото.
  3. Підтвердіть стабільність членства: pvecm status, corosync-cfgtool -s, журнал Corosync.
  4. Перевірте відгук pmxcfs: швидке ls під /etc/pve з вимірюванням часу.
  5. Перевірте блокування і застряглі задачі: pvesh get /cluster/tasks, інспект файлів блокувань.
  6. Виміряйте тиск хоста: vmstat, load, I/O wait, пам’ять.
  7. Виміряйте якість мережі: лічильники помилок + mtr між вузлами на кільці Corosync.
  8. Виміряйте здоров’я сховища: ZFS iostat/status або Ceph slow ops.
  9. Лише після цього розглядайте налаштування. Налаштування без вимірювань — як побудувати «стабільну» повільну катастрофу.

Контрольний список B: Стабілізувати спочатку, потім відновлювати функціональність

  1. Зупиніть множники навантаження: призупиніть міграції, відкладіть резервні копії, обмежте recovery/backfill у Ceph (обережно).
  2. Ізолюйте хворий вузол: якщо один вузол має помилки/латентність, мігруйте звідти те, що можете, і виключіть його з рішень HA, поки не виправите.
  3. Перевірте синхронізацію часу: погодьте годинники перед інтерпретацією логів і подій fencing.
  4. Відновіть базову мережу: усуньте втрати пакетів, CRC-помилки, невідповідність MTU і перевантажені лінки.
  5. Відновіть базове сховище: очистіть помилки диска, відновіть деградовані пули, усуньте slow ops, забезпечте вільне місце.
  6. Поступово відновлюйте операції: міграції/резервні копії по одній, спостерігайте за латентністю та логами.

Контрольний список C: Загартування, щоб це не повторилось

  1. Розділіть класи трафіку: Corosync на низьколатентних лінках; сховище на окремій мережі; міграції окремо, якщо можливо.
  2. Оповіщення за tail latency, а не тільки «up/down». Кворум-алярми необхідні, але недостатні.
  3. Планування ємності для резервних копій і recovery. Якщо ваш кластер не витримує recovery плюс нормальне навантаження — він не стійкий.
  4. Тестуйте сценарії відмов. Практикуйте «один вузол повільний», «один лінк флапає», «slow ops сховища». Реальні інциденти не повинні бути вашим першим репетиційним запуском.

Поширені запитання

1) Чому pvecm status показує «Quorate: Yes», коли GUI непридатний?

Тому що кворум — це про членство й голосування, а не про вчасність відповіді. GUI залежить від pmxcfs та API-демонів, які можуть блокуватись через I/O, блокування, DNS або латентність сховища.

2) Якщо Corosync не показує помилок, чи мережа все одно може бути проблемою?

Так. Короткі спайки, мікробурсти, CRC-помилки і джиттер можуть зруйнувати tail latency без втрати членства. Перевіряйте лічильники і mtr, а не тільки стан кільця.

3) Чи варто збільшувати token timeout Corosync, щоб зупинити флапінг?

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

4) Який найшвидший спосіб зрозуміти, чи pmxcfs — вузьке місце?

Поміряйте просте ls у /etc/pve на кількох вузлах. Якщо воно повільне або зависає — pmxcfs причетний. Далі перевіряйте CPU і I/O wait.

5) Чи можуть проблеми зі сховищем реально вплинути на Corosync і управління кластером?

Абсолютно. Затримки у сховищі створюють I/O wait, що затримує процеси і планування. Corosync може продовжувати обмінюватися достатніми повідомленнями, але pmxcfs та API-виклики постраждають.

6) Як розбіжність часу ламає Proxmox-кластер, якщо кворум при цьому в порядку?

Дрейф може зламати TLS/aутентифікацію, заплутати логи і спричинити несумісні рішення HA чи fencing. Виправте час перед глибшою діагностикою.

7) Чому міграції зависають частіше, ніж «звичайний час виконання ВМ» під час інцидентів?

Міграції збільшують вимоги до пропускної здатності і сховища та чутливі до латентності. ВМ може повільно працювати з кешем і повторними спробами; міграція — це жорсткий цикл, що тайм-аутиться.

8) Що робити, якщо один вузол повільний, але все ще в кластері?

Ставтеся до нього як до часткової відмови: евакуюйте робочі навантаження, де безпечно, зменшіть залежність від цього вузла і діагностуйте апаратні/мережеві/сховищні причини на ньому конкретно.

9) Чи безпечно перезапускати corosync або pmxcfs під час інциденту?

Іноді так, але це не перший крок. Перезапуск може спричинити зміни членства і вирубку блокувань. Спочатку стабілізуйте мережу/сховище, потім перезапускайте з чіткою метою.

10) Який найкращий «один метрик» для оповіщення про ці проблеми?

Одного немає. Комбінуйте: відгук pmxcfs (синтетичні перевірки), втрата/джиттер мережі, латентність сховища/slow ops і I/O wait хоста. Кворум сам по собі — лише заспокійливий показник.

Наступні кроки, які можна зробити цього тижня

Якщо ви експлуатуєте Proxmox у продакшні, ось практичний шлях, що реально змінює результат:

  1. Додайте синтетичну перевірку pmxcfs: вимірюйте і сповіщайте, якщо ls /etc/pve перевищує невеликий поріг на будь-якому вузлі.
  2. Сповіщайте про мережеві помилки на інтерфейсах Corosync: CRC-помилки, дропи, флапінг лінків. Це виявляє деградації «кворум в порядку» раніше.
  3. Сповіщайте про латентність сховища: аномалії ZFS iostat, Ceph slow ops, повтори NFS-клієнта. Сховище — тиха більшість таких інцидентів.
  4. Тримайте таймаути Corosync розумними: не використовуйте налаштування як пластир для поганої мережі. Якщо налаштовуєте — документуйте чому і які вимірювання це виправдовують.
  5. Проведіть відпрацювання відмов: симулюйте насичену мережу сховища або флапінг лінк і практикуйте «спочатку стабілізація». Майбутнє «ви» буде вдячне і трохи менш втомлене.

Corosync вам не брешe. Воно просто відповідає на менше питання, ніж те, яке ви ставите.
Якщо хочете кластер, що виживає — вимірюйте весь організм: якість мережі, латентність сховища, чуйність контрольної площини — і сприймайте «quorum: yes» як початок діагностики, а не її кінець.

Перевстановити Windows і зберегти програми? Що насправді працює (а що — маркетинг)

Зараз 9:12 ранку. У вас «проста» проблема з Windows: оновлення ламаються, час завантаження дивний, VPN-клієнт не стартує, а ноутбук перетворився на дорогий обігрівач. Хтось каже: «Просто перевстановіть Windows, можна зберегти програми». Це речення може бути початком чистого відновлення… або початком довгого післяобіднього пояснення для фінансів, чому бухгалтерська програма знову потребує «швидкої реактивації».

Цей матеріал про різницю між тим, що Windows дійсно може зробити, і тим, що натякають продавці та оптимістичні дописи на форумах. Розглянемо варіанти, їхні відмови та як довести — за допомогою команд і виводів — чи збережуться програми або ви втрачаєте свій тиждень.

Терміни, які постачальники навмисно розмивають

Коли кажуть «перевстановити Windows», можуть мати на увазі будь-яку з чотирьох різних операцій. Лише один з них надійно зберігає програми в тому сенсі, в якому люди зазвичай мають на увазі «програми». Інші або зберігають лише файли, або деякі програми з Microsoft Store, або залишають лише жалощі.

1) Чиста інсталяція (видалення та встановлення)

Це чесний варіант. Ви завантажуєтеся з інсталяційного носія, видаляєте розділи або форматируєте системний том і встановлюєте систему заново. Ви можете зберегти Windows.old папку, якщо встановлюєте на ту саму розділ без форматування, але це зберігає користувацькі дані й частину системного стану — не працюючі програми.

2) «Скинути цей ПК»

У налаштуваннях Windows є «Скинути цей ПК» з опціями на кшталт «Зберегти мої файли» або «Видалити все». Шлях «Зберегти мої файли» зберігає профілі користувачів і деякі налаштування, але видаляє встановлені десктопні додатки. Може зберегти деякі вбудовані застосунки. Це не «зберегти програми», якою б ввічливою не була підказка в діалозі.

3) In-place upgrade repair install (справжній спосіб «зберегти програми»)

Це той варіант, який може зберегти встановлені Win32-програми й більшість налаштувань: запустіть Windows Setup зсередини Windows (не завантажуючись з USB), оберіть зберегти особисті файли та програми, і нехай Setup розгорне нову ОС, мігруючи наявну інсталяцію.

Якщо потрібне одне правило: якщо ви завантажуєтеся з USB, опція «зберегти програми» зазвичай недоступна. Setup потребує контексту запущеної ОС, щоб виконати повну міграцію додатків і стану реєстру.

4) Відновлення образу / bare-metal restore

Це зберігає програми, бо зберігає все. Але це не «перевстановлення», це подорож у часі. Ви відновлюєте повний образ диска з попереднього знімка і погоджуєтесь, що все, встановлене або змінене після цього знімка, зникне.

Жарт №1: «Перевстановлення з збереженням програм» — як «дієтичний торт». Іноді існує, але етикетку все одно варто прочитати.

Що означає «зберегти програми»: єдині робочі шляхи

Практична істина така: для традиційних десктопних додатків (Win32) єдиний метод, підтримуваний Microsoft, який нагадує «перевстановити Windows і зберегти програми», — це in-place upgrade repair install. Усе інше — або скидання (програми видаляються), або чиста інсталяція (програми видаляються, файли можливо відновлюються).

In-place upgrade repair install: що вона робить

  • Замінює системні файли Windows на свіжі копії з інсталяційного носія або джерел Windows Update.
  • Перебудовує магазин компонентів (WinSxS) і повторно реєструє багато системних компонентів.
  • Міґрує встановлені додатки, драйвери та налаштування настільки, наскільки можливо.
  • Створює артефакти відкату й логи (наприклад C:\$WINDOWS.~BT, Panther logs).

Чого вона не обіцяє

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

Обов’язкові передумови, якщо ви хочете, щоб «зберегти програми» було реальним

  • Ви повинні мати можливість завантажитись у Windows і запустити setup.exe зсередини ОС.
  • Потрібно достатньо вільного місця на системному томі (плануйте десятки ГБ).
  • Потрібен правильний носій: та сама редакція, сумісна мова і, зазвичай, такий самий або новіший збірка.
  • Здоров’я диска та файлової системи має бути достатнім, щоб витримати великомасштабні файлові операції.

Швидкий план діагностики

Коли хтось питає: «Чи можна перевстановити Windows і зберегти програми?» — не відповідайте одразу. Спочатку діагностуйте ситуацію. Вузьким місцем зазвичай є одне з: стан диска, корупція системи, пошкоджений стек оновлень, недостатньо місця або драйвери сторонніх виробників.

По-перше: встановіть, чи взагалі можливий repair install

  1. Чи можете ви увійти в систему? Якщо ні, ви вже рухаєтесь у бік скидання/відновлення/чистої інсталяції.
  2. Чи здоровий том ОС? Якщо диск виходить з ладу, зупиніться. Зробіть образ, резервну копію, замініть диск, а потім відновлюйте.
  3. Чи увімкнено BitLocker? Якщо так, переконайтесь, що маєте ключі відновлення і розумієте, коли їх буде запитано.

По-друге: визначте фактичний режим відмови

  1. Проблеми з оновленнями? Перевірте DISM/SFC та логи стеку сервісингу.
  2. Повільне завантаження? Перегляньте журнали подій на предмет скидань диска, тайм-аутів драйверів та зависань сервісів.
  3. Краші програм? Шукайте відсутні рантайми, пошкоджені профілі користувачів або несумісні драйвери.

По-третє: виберіть найменш руйнівний варіант, що задовольнить SLA

  1. Спробуйте ремонтні засоби сервісингу (DISM, SFC), якщо можете. Вони оборотні й недорогі.
  2. Виконайте in-place upgrade, якщо основні компоненти пошкоджені, але потрібні програми.
  3. Чиста інсталяція, коли цілісність або безпека під сумнівом або система занадто зіпсована.

Парафраз ідеї Вернера Фогельса (AWS): надійність — це автоматизація й дизайн, а не героїчні подвиги о 2-й ночі. Ставтесь до відновлення Windows так само — повторювані кроки краще, ніж імпровізація.

Практичні завдання: команди, виводи, рішення (12+)

Нижче практичні завдання, які можна виконати перед тим, як вирішуватися на перевстановлення. Так, це команди Windows, але я подаю їх у блоках shell за запитом. Запускайте у підвищеному Command Prompt або PowerShell за потреби. Кожне завдання містить: команду, приклад виводу, що це означає і яке рішення прийняти.

Завдання 1: Підтвердіть версію та збірку Windows (перевірка сумісності)

cr0x@server:~$ cmd /c ver
Microsoft Windows [Version 10.0.19045.4046]

Що це означає: Збірка 19045 вказує на Windows 10 22H2. Ваш інсталяційний носій має бути сумісний (така сама основна версія, бажано така сама або новіша збірка).

Рішення: Якщо носій старіший (наприклад 19041), очікуйте вищого ризику некоректної поведінки або відсутності опції «зберегти програми». Отримайте відповідний образ.

Завдання 2: Перевірте редакцію (Home/Pro/Enterprise — невідповідність ламає «збереження програм»)

cr0x@server:~$ cmd /c "dism /online /Get-CurrentEdition"
Deployment Image Servicing and Management tool
Version: 10.0.19041.3636

Current Edition : Professional
The operation completed successfully.

Що це означає: Система — Windows Pro. Носій для ремонтної інсталяції має бути Windows Pro (або мульти-редакційний носій, що її містить).

Рішення: Якщо у вас лише Enterprise-носій, а пристрій — Pro, не «пробуйте просто так». Отримайте правильний ISO.

Завдання 3: Виміряйте вільне місце (ремонтна інсталяція жере простір)

cr0x@server:~$ cmd /c "wmic logicaldisk where DeviceID='C:' get Size,FreeSpace"
FreeSpace        Size
41234583552      255998611456

Що це означає: Близько 41 ГБ вільно на C:. Зазвичай цього достатньо для in-place upgrade і файлів відкату, залежно від ОС і встановлених додатків.

Рішення: Якщо вільного місця менше приблизно 25–30 ГБ, сплануйте очистку або тимчасове розширення сховища перед спробою ремонтної інсталяції.

Завдання 4: Перевірка стану BitLocker (щоб уникнути несподіваних запитів ключа)

cr0x@server:~$ cmd /c "manage-bde -status c:"
BitLocker Drive Encryption: Configuration Tool version 10.0.19041
Volume C: [OS]
    Conversion Status:    Fully Encrypted
    Percentage Encrypted: 100.0%
    Protection Status:    Protection On
    Lock Status:          Unlocked

Що це означає: Системний диск зашифровано. Setup може працювати, але потрібно мати ключі відновлення під рукою і бажано тимчасово призупинити захист під час оновлення.

Рішення: Якщо ви не можете отримати ключі відновлення — зупиніться і виправте це перш ніж продовжувати. Інакше один прошивковий апдейт може влаштувати вам неприємність.

Завдання 5: Швидкий сигнал про стан диска (SMART через WMIC обмежений, але корисний)

cr0x@server:~$ cmd /c "wmic diskdrive get model,status"
Model                          Status
NVMe Samsung SSD 980 PRO 1TB   OK

Що це означає: WMIC повідомляє OK. Це не повна SMART-діагностика, але якщо виводиться «Pred Fail», їй варто повірити.

Рішення: Якщо статус диска не OK, не намагайтеся робити in-place upgrade. Зробіть резервну копію/образи, замініть накопичувач.

Завдання 6: Планування перевірки файлової системи (ловіть корупцію раніше)

cr0x@server:~$ cmd /c "chkdsk c: /scan"
The type of the file system is NTFS.
Stage 1: Examining basic file system structure ...
Windows has scanned the file system and found no problems.
No further action is required.

Що це означає: Метадані NTFS виглядають узгодженими.

Рішення: Якщо знайдено помилки — виправте їх (chkdsk /f, ймовірно з перезавантаженням) перед будь-якою міграцією ОС.

Завдання 7: Перевірка цілісності системних файлів (SFC)

cr0x@server:~$ cmd /c "sfc /scannow"
Beginning system scan. This process will take some time.
Windows Resource Protection found corrupt files and successfully repaired them.

Що це означає: Була корупція, її відновлено. Часто це вирішує проблеми з оновленнями без перевстановлення.

Рішення: Перезавантажтеся й повторно перевірте первинну проблему. Якщо корупцію не вдається виправити — переходьте до DISM і, можливо, in-place upgrade.

Завдання 8: Відновлення здоров’я магазину компонентів (DISM)

cr0x@server:~$ cmd /c "dism /online /cleanup-image /scanhealth"
No component store corruption detected.
The operation completed successfully.

Що це означає: Магазин компонентів WinSxS виглядає здоровим.

Рішення: Якщо виявлено корупцію і /restorehealth не допомагає, in-place upgrade часто — найшвидший безпечний ремонт, який зберігає програми.

Завдання 9: Перевірте, чи Windows може знайти середовище відновлення (Reset залежить від нього)

cr0x@server:~$ cmd /c "reagentc /info"
Windows Recovery Environment (Windows RE) and system reset configuration
    Windows RE status:         Enabled
    Windows RE location:       \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE

Що це означає: WinRE увімкнено. Опції скидання працюватимуть, якщо ви погоджуєтеся на видалення програм.

Рішення: Якщо WinRE вимкнено або відсутнє, «Скинути цей ПК» може не спрацювати. Не виявляйте цього під час кризи.

Завдання 10: Перевірка останніх критичних збоїв і помилок диска (тріаж журналів подій)

cr0x@server:~$ cmd /c "wevtutil qe System /q:\"*[System[(EventID=7 or EventID=51 or EventID=55 or EventID=1001)]]\" /c:5 /f:text"
Event[0]:
  Log Name: System
  Source: Microsoft-Windows-WER-SystemErrorReporting
  Event ID: 1001
  Description: The computer has rebooted from a bugcheck...

Що це означає: Є останні критичні помилки. Event ID 7/51/55 часто вказують на проблеми з диском або NTFS. 1001 означає краші (bugcheck).

Рішення: Якщо з’являються події, пов’язані з диском, пріоритизуйте стан сховища над перевстановленням ОС. Виправляйте апаратне забезпечення першочергово.

Завдання 11: Перерахуйте встановлені програми так, як їх бачать корпоративні інструменти (реєстр перед «хірургією»)

cr0x@server:~$ powershell -NoProfile -Command "Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName,DisplayVersion | Sort-Object DisplayName | Select-Object -First 5"
DisplayName                         DisplayVersion
7-Zip 23.01 (x64 edition)           23.01
Google Chrome                       121.0.6167.141
Microsoft 365 Apps for enterprise   16.0.17231.20182
Notepad++ (64-bit x64)              8.6.4
Zoom Workplace                      6.0.2

Що це означає: Це ваша базова інвентаризація. Не всі програми тут реєструються (деякі портативні програми ні), але більшість корпоративного ПЗ — так.

Рішення: Експортуйте цей список перед змінами. Якщо користувач потім скаже «все пропало», у вас будуть докази.

Завдання 12: Захопіть драйвери (драйвери третьої сторони часто ламаються після ремонту)

cr0x@server:~$ cmd /c "pnputil /enum-drivers | findstr /i \"Published Name Provider\" | more"
Published Name : oem12.inf
Driver package provider : Intel
Published Name : oem45.inf
Driver package provider : Realtek

Що це означає: Ви бачите пакети драйверів третьої сторони. Мережеві та накопичувальні драйвери мають ключове значення для «виживання» системи.

Рішення: Якщо система залежить від специфічного драйвера постачальника (наприклад RAID), переконайтесь, що маєте шлях для його повторної інсталяції перед змінами в Windows.

Завдання 13: Підтвердіть канал активації (допомагає передбачити поведінку після перевстановлення)

cr0x@server:~$ cmd /c "slmgr /dli"
Name: Windows(R), Professional edition
Description: Windows(R) Operating System, RETAIL channel
Partial Product Key: XXXX
License Status: Licensed

Що це означає: Retail-канал зазвичай прив’язаний до облікового запису Microsoft або ключа, а не до корпоративного KMS.

Рішення: Якщо активація через KMS/MAK, переконайтесь, що корпоративна активація працюватиме після великих ремонтів. Інакше ви можете «полагодити» Windows у неактивований стан.

Завдання 14: Перевірте наявність зарезервованих/відновлювальних розділів (безпека завантаження)

cr0x@server:~$ cmd /c "diskpart /s %TEMP%\dp.txt"
Microsoft DiskPart version 10.0.19041.3636

DISKPART> list vol

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     C   OS           NTFS   Partition    238 GB  Healthy    Boot
  Volume 1         EFI          FAT32  Partition    100 MB  Healthy    System
  Volume 2         Recovery     NTFS   Partition    990 MB  Healthy    Hidden

Що це означає: Розділи EFI і Recovery присутні. Це добрий знак для передбачуваної поведінки завантаження.

Рішення: Якщо EFI/Recovery відсутні або пошкоджені, пріоритетом має стати виправлення інфраструктури завантаження; план перевстановлення змінюється.

Завдання 15: Подивіться, чи Windows Setup ймовірно дозволить «зберегти програми» (практична перевірка)

cr0x@server:~$ cmd /c "setuperr.exe"
'setuperr.exe' is not recognized as an internal or external command,
operable program or batch file.

Що це означає: У вас немає логів Setup, бо ви ще не запускали setup. Після невдалого in-place upgrade спробуйте дивитись логи в папках Panther.

Рішення: Якщо in-place спроба не вдалася, витягніть логи з C:\$WINDOWS.~BT\Sources\Panther і не гадуйте.

Три корпоративні міні-історії (що пішло не так, що врятувало)

Міні-історія 1: Інцидент через хибне припущення (міф «зберегти програми»)

Середня компанія мала парк Windows 10 ноутбуків у відділі продажів. Кілька пристроїв застрягли при накопичувальних оновленнях, і хтось запропонував швидке рішення: «Скинути цей ПК, зберегти мої файли. Це майже як перевстановлення, але з програмами». Звучало переконливо. UI був дружній. Календар — ні.

Скидання спрацювало. Машини завантажилися чисто. Користувачі знову могли відкрити таблиці. Потім настала реальна відмова: плагін CRM-клієнта, додаток бронювання кімнат і корпоративний VPN-клієнт — зникли. Документи користувачів були цілі, тож операцію оголосили успішною приблизно на шість хвилин.

Переінсталяція відсутнього ПЗ виявилася не «скачати і Next». Деякі інсталятори вимагали підвищених прав, деякі потребували офлайн-файлів ліцензії, а один залежав від застарілого рантайму, що мав бути встановлений у певному порядку. Тим часом агент управління кінцевими точками сам був видалений скиданням. Пристрої перестали реєструватися, що спровокувало тривоги систем безпеки і блокування мережевого доступу для деяких користувачів.

Хибне припущення полягало не в тому, що Скидання погане. Скидання підходить, якщо приймаєте втрату програм. Хибне припущення — прирівняти «Зберегти мої файли» до «зберегти моє середовище». Це різні обіцянки з різним радіусом ураження.

Ремедіація була нудною: інвентаризація програм, підтвердження ліцензій і використання in-place upgrade repair install там, де «зберегти програми» має значення. Урок запам’ятався дорого — через реальні втрати продуктивності й купу оновлених тікетів.

Міні-історія 2: Оптимізація, що обернулась проти (економія місця vs Windows Setup)

Інша організація намагалася зменшити використання дискового простору на робочих станціях розробників. Розгорнули агресивні політики очищення: великі тимчасові папки очищуються, кеші delivery optimization обмежені, та профілі користувачів частково редиректовані. Образи машин виглядали струнко. Панелі керування — зелені. Усі потихеньку торжествували.

Потім хвиля ремонтних інсталяцій накрила кілька пристроїв — потрібно було in-place upgrade, щоб виправити биті сервіси оновлень. Setup запускався і завершувався з незрозумілими помилками. Виявилася закономірність: машини з найсуворішими політиками очищення мали найвищий відсоток відмов. На томі ОС не було достатнього простору для тимчасових файлів Setup, для створення стану відкату та міграційних кроків.

Найгірше було в «майже працює» поведінці. Setup запускався, потім відкат, користувачі втрачали години. IT втрачало довіру. І через те, що відкат повертав попередній битий стан, результат був ідеальним колом марнотратності.

Виправлення не було екзотичним: тимчасово послабити політики очищення, забезпечити достатній вільний простір і визначити передбачуваний буфер. Windows Setup не мінімаліст. Він хоче простір для розгортання, логи й відкат. Забороніть це — і він помститься.

Та «оптимізація» зменшила середньостатистичне використання диска, але підвищила частоту інцидентів. Виробничо це означає зниження вартості на вузол, але підвищення вартості на простій — погана угода, якщо вам дорога ваша субота.

Міні-історія 3: Нудна, але правильна практика, що врятувала день (образи й ключі)

В одній компанії була сувора практика для «ремонтних подій ОС»: перед будь-яким великим ремонтом або перевстановленням техніки техніки мали захопити (1) ключі відновлення BitLocker, (2) базову інвентаризацію програм, і (3) bare-metal образ ОС для машин високого ризику. Люди бурчали. Здавалося повільно й бюрократично.

Одного тижня пачка ноутбуків почала показувати випадкові NVMe-тайм-аути. Не повна відмова — просто достатньо, щоб інколи пошкоджувати файли і викликати дивну поведінку. Декілька пристроїв планували на in-place upgrade через симптоми, схожі на корупцію оновлень. Процес почався в п’ятницю (бо, звісно, таке трапляється в п’ятницю).

Під час оновлення дві машини вдарилися об помилки сховища й стали незавантажуваними. Оскільки образи були зроблені заздалегідь, відновлення пройшло просто: заміна диска, відновлення образу для повернення стану користувача, а потім контрольована міграція на свіжу інсталяцію ОС. Ключі відновлення були вже в тікеті, тож нікому не довелося ганятися за користувачами, які були в дорозі.

Ця практика не запобігла відмові. Вона перетворила відмову на рутину. Ось у чому суть. Не потрібні геройські подвиги; потрібен runbook і нудна дисципліна його виконувати.

Цікаві факти та історичний контекст (щоб розуміти, чому Windows поводиться так)

  • «Repair install» раніше був поняттям завантаження з CD. Старіші версії Windows мали режими ремонту з інсталяційного носія, але сучасна поведінка «зберегти програми» прив’язана до логіки міграції в ОС.
  • Компоненти side-by-side (WinSxS) існують для підтримки сервісингу в масштабі. Саме через це Windows може застосовувати оновлення до великого матриксу станів системи — поки сховище не пошкодиться, тоді все стає дивним.
  • Ера «Windows як сервіс» змінила оновлення Windows 10. Фічеві оновлення стали частими in-place upgrade, тож Microsoft інвестувала в інструменти міграції, що також живлять repair install.
  • «Скинути цей ПК» розроблявся для споживацького відновлення, а не для корпоративної безперервності. Він спроектований, щоб швидко привести домашню машину до робочого стану, а не зберегти складні стеки корпоративних додатків і агентів.
  • Активація стала більш стійкою завдяки цифровим ліцензіям. Багато систем перевакантовуються після перевстановлення на основі апаратного ідентифікатора, але корпоративне ліцензування й деякі вендори все ще поводяться ніби 2009 рік.
  • UEFI і GPT стандартизували макет завантаження. Сучасний Windows залежить від розділів EFI та Recovery; їх відсутність або пошкодження викликають «таємничі» проблеми завантаження після спроб перевстановлення.
  • Підписання драйверів і безпека ядра підвищили вимоги. Старі VPN і AV драйвери частіше ламаються під час оновлень ОС, бо вони глибоко в шарі ядра.
  • Програми з Microsoft Store паковані інакше. Їх можна повторно зареєструвати або масово перевстановити; традиційні Win32-додатки — переважно «індивідуальні сніжинки зі станом».
  • Windows Setup пише детальні логи. Багато адміністраторів їх не читають, а потім дивуються, чому здогадки не спрацьовують. Логи є — користуйтесь ними.

Режими відмов: як «збереження програм» ламається в реальному житті

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

Невідповідність редакції, мови та збірки

Windows Setup пропонує опцію «Зберегти особисті файли та програми» тільки якщо виявлений підтримуваний шлях міграції. Якщо ваш носій неправильний — інша редакція, інша мова, занадто старий або інша архітектура — Setup тихо прибирає опцію або пропонує «Зберегти лише файли». Це не злість Windows. Це Windows, що відмовляється обіцяти міграцію, яку не зможе виконати.

Стан диска та невідповідності файлової системи

In-place upgrade — це велика файлова операція: копіювання, розпакування, розгортання, переміщення, створення жорстких посилань і відкат. Диски, що «переважно працюють», стають дисками, що систематично відмовляють під цим навантаженням. Якщо бачите тайм-аути диска або NTFS події — розглядайте це як апаратний інцидент, а не як проблему ОС.

Недостатньо місця для розгортання і відкату

Setup потрібно місце для:

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

Якщо місця мало, Setup може впасти наприкінці, відкотитися і залишити вас у тій же точці — лише більш втомленими.

Гаками безпеки та розширеннями endpoint

Антивірус, DLP, VPN-клієнти і інструменти шифрування часто встановлюють драйвери ядра, мережеві фільтри й сервіси системи. Під час repair install Windows може відключити або видалити несумісні компоненти. Ви «зберегли програми», але програми, які роблять пристрій придатним для корпоративної мережі, можуть бути зламані.

Ліцензії, прив’язані до ідентичності машини

Деяке ПЗ прив’язує ліцензію до апаратних ідентифікаторів, IDs інсталяції Windows, TPM-стану або ключів реєстру, які можуть змінитися під час repair install. Переважно це працює. Коли ні — це терміново й дорого.

Жарт №2: Сервери ліцензування відчувають страх. Вони ще й знають, коли п’ятниця.

Типові помилки (симптом → корінь проблеми → виправлення)

1) Опція «зберегти програми» відсутня в Windows Setup

Симптом: Setup пропонує лише «Зберегти лише особисті файли» або «Нічого».

Корінь проблеми: Невідповідний носій (редакція/мова/збірка), завантаження з USB замість запуску зсередини ОС, або непідтримуваний шлях оновлення.

Виправлення: Завантажтесь у Windows, змонтуйте правильний ISO, запустіть setup.exe. Підтвердіть редакцію за допомогою DISM перед початком.

2) In-place upgrade зазнає невдачі і відкочується після довгого очікування

Симптом: Години прогресу, потім «Undoing changes».

Корінь проблеми: Недостатньо місця на диску, несумісний драйвер або помилки файлової системи.

Виправлення: Звільніть місце, тимчасово видаліть/відключіть сторонній AV/VPN, запустіть chkdsk, читайте Panther логи. Не перезапускайте сліпо.

3) Після «Скинути цей ПК (зберегти мої файли)» додатки зникли

Симптом: Настільні додатки відсутні; користувач шокований.

Корінь проблеми: Скидання створене так, щоб видаляти встановлені програми.

Виправлення: Використовуйте Скидання лише коли маєте план перевстановлення додатків (MDM, SCCM, Intune або ручні інсталятори) і план відновлення ліцензій.

4) Пристрій завантажується, але корпоративний мережевий доступ зламаний

Симптом: Wi‑Fi працює, але VPN/802.1X/автентифікація з сертифікатами не працює.

Корінь проблеми: Мережеві фільтри, сертифікати або агенти управління були видалені/невалідні.

Виправлення: Ре-реєстрація пристрою, перевстановлення VPN-клієнта, відновлення сертифікатів, перевірка синхронізації часу, перевірка NLA і сервісів.

5) Несподіваний запит ключа відновлення BitLocker

Симптом: Після перезавантаження BitLocker просить ключ відновлення.

Корінь проблеми: Вимірювання TPM змінилися (оновлення прошивки, зміни конфігурації завантаження) або BitLocker не був призупинений під час великих змін ОС.

Виправлення: Отримайте ключ з довідника/сховища облікового запису, призупиніть захист перед ремонтними операціями коли доречно і забезпечте стабільність налаштувань secure boot.

6) Система «полагоджена», але оновлення все одно ламаються

Симптом: Repair install завершено, але Windows Update продовжує видавати помилки.

Корінь проблеми: Проблеми в стеку сервісингу, політики або мережеві/проксі/WSUS налаштування, а не корупція ОС.

Виправлення: Перевірте конфігурацію джерела оновлень, журнали подій, підключення, політики Windows Update і сервіси.

7) Програми «збережені», але поводяться, ніби вперше запущені / втрачені налаштування

Симптом: Програми відкриваються, але профілі/конфігурації відсутні.

Корінь проблеми: Корупція профілю користувача, перебудова профілю, редиректовані папки або дані додатку зберігаються в місцях, що не мігрують коректно.

Виправлення: Перевірте цілісність профілю, відновіть специфічні для додатків каталоги даних, уникайте бездумного видалення AppData під час очищення.

Контрольні списки / покроковий план

Контрольний список для рішення: виберіть правильний шлях відновлення

  1. Якщо не вдається завантажитись у Windows: навряд чи вдасться зробити справжній repair install. Розглядайте відновлення з образу, офлайн-ремонт або чисту інсталяцію з відновленням даних.
  2. Якщо стан диска під сумнівом: зупиніться і зробіть образ/резервну копію спочатку. Операції ОС не лагодять апаратне забезпечення.
  3. Якщо потрібно зберегти програми: плануйте in-place upgrade repair install, а не Reset.
  4. Якщо потрібна впевненість у безпеці: чиста інсталяція — правильна відповідь. Персистентність може зберегти «погане» теж.

Передпольотний контрольний список (зробіть це перед тим, як торкатися Setup)

  • Підтвердіть редакцію та збірку (Завдання 1–2).
  • Підтвердіть вільне місце (Завдання 3).
  • Підтвердіть наявність ключа відновлення BitLocker (Завдання 4).
  • Запустіть chkdsk скан і виправлення за потреби (Завдання 6).
  • Запустіть SFC і DISM (Завдання 7–8).
  • Експортуйте інвентар установлених програм (Завдання 11).
  • Визначте критичні драйвери та компоненти VPN/AV (Завдання 12).
  • Підтвердіть канал активації (Завдання 13).

Покроково: in-place upgrade repair install, що дійсно зберігає програми

  1. Отримайте правильний інсталяційний носій: та сама основна версія ОС, та сама редакція, та сама мова, та сама архітектура (x64 vs ARM64). Віддавайте перевагу такій самій або новішій збірці.
  2. Завантажтесь у Windows нормально: не починайте з завантаження з USB.
  3. Тимчасово відключіть або видаліть сторонні AV/VPN/DLP, якщо це дозволено вашою політикою. Ці драйвери часто спричиняють невдачу Setup.
  4. Змонтируйте ISO і запустіть setup.exe.
  5. Оберіть: «Зберегти особисті файли та програми.» Якщо ця опція не пропонується — зупиніться і перевірте причину, не покладайтеся на надію.
  6. Після завершення: перевірте мережевий стек, реєстрацію в системі управління та працездатність інструментів безпеки перед тим, як оголосити перемогу.
  7. Потім пропатчіть: запустіть Windows Update і підтвердіть, що первинна проблема зникла.

Покроково: коли потрібно робити чисту інсталяцію (і як мінімізувати біль)

  1. Резервне копіювання даних користувача (Documents, Desktop, Downloads) і специфічних для додатків місць.
  2. Експорт інвентарю додатків і інформації про ліцензії, де можливо.
  3. Підтвердіть ключі відновлення й шляхи активації.
  4. Виконайте чисту інсталяцію Windows правильної редакції.
  5. Встановіть драйвери (chipset/network/storage) спочатку, потім агент управління, потім засоби безпеки, потім бізнес‑додатки.
  6. Відновіть дані, потім перевірте конфігурації додатків і входи в облікові записи.

Часті питання

1) Чи можу я перевстановити Windows 11 і зберегти всі встановлені програми?

Лише через in-place upgrade repair install, запущений зсередини Windows, з сумісним носієм і підтримуваним шляхом міграції. Скидання не збереже десктопні програми.

2) Чи «Скинути цей ПК» зберігає програми?

Ні, для традиційних десктопних програм — ні. «Зберегти мої файли» означає, що зберігаються користувацькі дані, а програми видаляються. Плануйте відповідно.

3) Якщо я встановлю Windows поверх без форматування, чи працюватимуть мої програми?

Зазвичай ні. Можливо отримаєте Windows.old з вашими старими файлами, але встановлені програми не будуть зареєстровані й не працюватимуть як встановлені.

4) Чому Windows Setup іноді ховає опцію «зберегти програми»?

Тому що воно виявило невідповідність (редакція/мова/збірка/архітектура) або ви почали Setup із завантажувального носія. Setup не обіцяє те, що не зможе мігрувати.

5) Чи виживають програми з Microsoft Store після перевстановлення?

Іноді. Store-додатки пакуються інакше, їх можна повторно зареєструвати, але при чистій інсталяції їх усе одно потрібно перевстановити. Не розраховуйте, що вони переживуть ві́друбку.

6) Чи виправить in-place upgrade поламані Windows Update?

Часто так — особливо коли пошкоджено магазин компонентів або системні файли. Але якщо джерело оновлень/політики неправильні (WSUS/proxy), після ремонту ви все одно будете мати проблеми.

7) А драйвери — чи збережуться вони?

Багато драйверів переносяться, але проблемні драйвери ядра (VPN, AV, фільтри сховища) можуть бути видалені або замінені. Завжди перевіряйте мережеву і дискову функціональність після ремонту.

8) Як зменшити ризик втрати ліцензійного ПЗ?

Інвентаризуйте ПЗ, зафіксуйте ключі, де можливо, підтвердіть політику реактивації від постачальників, і уникайте непотрібних змін апаратних/TPM-станів під час процесу.

9) Якщо машина не завантажується, чи можливе «зберегти програми»?

Ні, у звичайному підтримуваному сенсі — ні. Якщо не можна запустити Setup зсередини Windows, логіка міграції, що зберігає програми, зазвичай не виконується. Розгляньте відновлення з образу або чисту інсталяцію з відновленням даних.

10) Чи робити SFC/DISM перед перевстановленням?

Так. Це низькоризикові процедури, які часто вирішують проблему без перевстановлення. Якщо вони не справляються, ви також зберете докази на користь переходу до in-place upgrade.

Висновок: наступні кроки, що не зашкодять

Якщо запам’ятати одну річ: «зберегти програми» — це не настрій; це конкретна процедура. In-place upgrade repair install — найбільш близьке до «перевстановити Windows і зберегти програми», і він працює лише якщо ви запускаєте його зсередини завантаженої Windows з сумісним носієм і відносно здоровим диском.

Наступні кроки:

  1. Запустіть швидку діагностику: можливість завантаження, сигнали здоров’я диска, стан BitLocker, вільне місце.
  2. Спробуйте SFC і DISM перед будь-якими перевстановленнями.
  3. Якщо дійсно треба зберегти програми — плануйте in-place upgrade repair install і перевірте сумісність носія спочатку.
  4. Якщо пристрій недовіриний, нестабільний або диск виходить з ладу — припиніть гнатися за «зберегти програми» і робіть чисту інсталяцію або відновлення з образу з контрольованим повторним розгортанням додатків.

Як безпечно обійти «This PC Can’t Run Windows 11» (що досі важливо)

У вас є цілком працездатний ПК. Він завантажується. Запускає ваші додатки. Мабуть, ще кілька років послужить без проблем. І раптом приходить Windows 11 із ввічливим корпоративним «компʼютер каже ні».

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

Що ви насправді обходите (і чому Microsoft це важливо)

Повідомлення «This PC can’t run Windows 11» — це не одна річ. Це набір перевірок, які приблизно відповідають безпековій та підтримуваній політиці Microsoft:

  • TPM 2.0: апаратне сховище ключів для ідентифікації пристрою, BitLocker і сценаріїв вимірюваного завантаження. Windows 11 робить на ньому ставку.
  • Secure Boot: гарантує, що ланцюжок завантаження підписаний. Це не магія, але блокує чимало bootkit‑поганоті.
  • Підтримка покоління/моделі CPU: менше про сирий швидкодію, більше про мінімум для міграцій, мітігацій та підтримки драйверів.
  • UEFI + GPT: сучасний режим завантаження. Старі BIOS‑інсталяції все ще можуть працювати, але безпекові можливості швидко стають незручними.
  • Мінімум RAM/накопичувача: мʼякі пороги. Ви можете встановити, але краще так не робити, якщо ви цінуєте нерви.

Обійти перевірки легко. Прослужити на машині два роки без дивних збоїв оновлень, проблем з драйверами або скарг «чому все гальмує» — от що відрізняє хобі‑лафки від операційного рішення.

Єдина думка, яка справді важлива: якщо ви обходитимете — ви берете відповідальність. Це означає тестувати оновлення, тримати засоби відновлення, стежити за станом диска й планувати відкат. Якщо це здається вам занадто складно — не обходьте: замініть обладнання або залишайтесь на Windows 10 до кінця підтримки.

Факти та історія, що пояснюють плутанину

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

  1. TPM існує давно. TPM 1.2 був звичним у корпоративних ноутбуках роками до Windows 11, переважно для BitLocker і корпоративного розгортання.
  2. Secure Boot зʼявився в еру Windows 8. Це було контроверсійно, потім стало нормою, а потім про це забули, поки Windows 11 не зробила його вимогою.
  3. Списки підтримуваних CPU — це стільки ж про драйвери, скільки про швидкість. Справжній біль — це вендори, які перестають підтримувати старі чіпсети й GPU.
  4. Windows 10 продавали як «останню Windows». Потім реальність зробила своє: базові вимоги безпеки, зміни платформи й бажання уніфікувати можливості.
  5. Віртуалізаційно-орієнтована безпека (VBS) стала важливою. Це не нове, але Windows 11 підштовхує системи до неї, і старі CPU можуть втратити в продуктивності.
  6. Мітігації Meltdown/Spectre змінили очікування щодо продуктивності. Деякі старі CPU стали помітно повільніші на операціях вводу/виводу й системних викликах.
  7. UEFI витіснив BIOS не випадково. Це не гарніше; це послідовніше, скриптується краще і сумісне з сучасними ланцюжками безпеки.
  8. TPM — це не лише шифрування. Його використовують для атестації ідентичності в керованих середовищах — наприклад, «підтвердити чисте завантаження», перш ніж надати доступ.
  9. У Microsoft є крива вартості підтримки. Кожна додаткова платформа збільшує матрицю тестування й ризик патчів. Вимоги зменшують цю площу поверхні.

Коротко жарт: перевірки сумісності Windows — як аеропортова безпека: переважно театр, доки одного дня не врятує від справжньої біди.

Розумна модель ризику: коли обхід виправданий, а коли — безвідповідальний

Будемо практичними. «Непідтримувано» — не моральна категорія; це розподіл ймовірностей. Головне — вирішити, чи ви готові терпіти ризики.

Ситуації «зелено» (обхід зазвичай розумний)

  • TPM є, але вимкнений у прошивці, або це TPM 1.2 і ви готові працювати без повних гарантій Windows 11.
  • Secure Boot вимкнений через старе подвійне завантаження з Linux, яке ви можете перепланувати.
  • CPU трохи поза списком, але досить сучасний (SSD, 16 ГБ ОЗП, нормальні драйвери).
  • Компʼютер для одного користувача, де ви можете дозволити собі перевстановлення, якщо оновлення підведуть.

Ситуації «жовто» (обхід лише з підготовкою)

  • Старий ноутбук з відмовленими драйверами від вендора (Wi‑Fi, тачпад, GPU). Потрібен план по драйверам перед зміною ОС.
  • Машини для дистанційної роботи з корпоративним VPN, EDR або вимогами пристрою. Обхід може порушити політики відповідності.
  • Диск уже «підозрілий» (SMART‑попередження, уповільнення). Оновлення ОС — це стрес‑тест. Спершу замініть накопичувач.

Ситуації «червоні» (не обходьте; потім дорого заплатите)

  • Завантаження з HDD і відмова переходити на SSD. Windows 11 на обертовому диску — повільний квиток у службу підтримки.
  • 4 ГБ ОЗП. Так, можливо встановиться. Ні, вам не сподобається. Браузер зʼїсть усе.
  • Критична робоча станція з вимогами до безперервної роботи і без тестованого шляху відкату.
  • Будь‑що з відомо ненадійним BIOS і без доступних оновлень прошивки. Прошивку потім не завжди виправиш.

Операційний підхід, який я використовую: ви можете обійти вимоги, але не обійдете фізику. Затримки на зберіганні, якість драйверів і баги прошивки все одно зберуть свою плату.

Швидкий план діагностики (знайдіть реальне гальмо зверху)

Якщо мета — «Windows 11, яка поводиться», не починайте з хака в реєстрі. Почніть з обмежень. Це триаж, не ідеологія.

Перше: накопичувач і режим завантаження

  • Чи SSD диск системи? Якщо ні — зупиніться. Оновіть накопичувач перед будь‑якими діями.
  • Система завантажується в UEFI з GPT? Якщо у Legacy BIOS/MBR, плануйте конверсію або погодьтеся на слабші опції безпеки.
  • Стан диска в нормі? SMART‑попередження означають, що вас чекає двічі перевстановлення.

Друге: можливості прошивки (TPM, Secure Boot, віртуалізація)

  • TPM є, але вимкнений? Увімкніть його в прошивці замість обходу.
  • Доступний Secure Boot? Увімкніть його після перевірки режиму UEFI і ланцюжка завантажувача.
  • Функції віртуалізації (VT‑x/AMD‑V, SVM, IOMMU) важливі для VBS/Hyper‑V. Перевірте, а не здогадуйтеся.

Третє: драйвери й стан оновлень

  • Є драйвери для GPU? Базовий адаптер для встановлення підійде, але не для щоденного використання.
  • Wi‑Fi/Ethernet стабільні? Якщо мережа нестабільна, доставка оновлень стане вашим ворогом.
  • Історія Windows Update на цьому пристрої: якщо він уже відмовляв на Windows 10, нічого не покращиться магічно.

Пройдіть ці три кроки й ви зрозумієте, чи вас чекає акуратне оновлення, чи тривалий період пошуку причин.

Практичні завдання: команди, результати, рішення (12+)

Це реальні перевірки, які можна виконати на поточній інсталяції Windows (рекомендовано) або одразу після встановлення Windows 11. Кожне завдання включає: команду, що виглядає нормально, і рішення.

Завдання 1: Визначити режим BIOS (UEFI чи Legacy)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-ComputerInfo | Select-Object BiosFirmwareType"
BiosFirmwareType
----------------
Uefi

Значення: Uefi — це те, що вам потрібно для Secure Boot і найчистішої позиції Windows 11.

Рішення: Якщо виводить Legacy, плануйте конверсію MBR→GPT і перемикнення прошивки на UEFI перед увімкненням Secure Boot.

Завдання 2: Підтвердити стиль розділів (GPT vs MBR)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-Disk | Select-Object Number,FriendlyName,PartitionStyle,Size"
Number FriendlyName            PartitionStyle          Size
------ ------------            --------------          ----
0      Samsung SSD 860 EVO     GPT             500105249280

Значення: GPT підтримує сучасне завантаження й розділи відновлення коректно.

Рішення: Якщо диск ОС MBR, оберіть: конвертацію на місці (обережно) або чисту інсталяцію на GPT.

Завдання 3: Оцінити стан диска через SMART

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-PhysicalDisk | Select-Object FriendlyName,MediaType,HealthStatus,OperationalStatus"
FriendlyName         MediaType HealthStatus OperationalStatus
------------         --------- ------------ -----------------
Samsung SSD 860 EVO  SSD       Healthy      OK

Значення: «Healthy/OK» — базова норма.

Рішення: Якщо бачите Warning або дивний OperationalStatus — замініть диск перед оновленням. Міграції ОС посилюють проблемні накопичувачі.

Завдання 4: Підтвердити, що TRIM увімкнено (довговічність/продуктивність SSD)

cr0x@server:~$ powershell.exe -NoProfile -Command "fsutil behavior query DisableDeleteNotify"
DisableDeleteNotify = 0

Значення: 0 — TRIM увімкнено.

Рішення: Якщо 1, перевірте драйвер/стек зберігання; вимкнення TRIM може спричинити деградацію продуктивності SSD з часом.

Завдання 5: Перевірити наявність і версію TPM

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-Tpm | Format-List"
TpmPresent                : True
TpmReady                  : True
TpmEnabled                : True
TpmActivated              : True
ManufacturerIdTxt         : IFX
ManufacturerVersion       : 7.63.3353.0
ManagedAuthLevel          : Full
OwnerAuth                 :

Значення: TPM присутній і готовий. Це сценарій «не обходьте» — просто використайте його.

Рішення: Якщо TpmPresentFalse, обираєте між обходом і заміною апаратури. Якщо присутній, але не готовий — спочатку виправте налаштування прошивки.

Завдання 6: Перевірити стан Secure Boot

cr0x@server:~$ powershell.exe -NoProfile -Command "Confirm-SecureBootUEFI"
True

Значення: Secure Boot увімкнено.

Рішення: Якщо команда помилиться або поверне False, не панікуйте. Перевірте режим UEFI; потім вирішіть, чи увімкнути Secure Boot (рекомендовано), чи прийняти ризик.

Завдання 7: Ідентифікувати модель CPU (не гадати)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-CimInstance Win32_Processor | Select-Object Name,NumberOfCores,NumberOfLogicalProcessors"
Name                                      NumberOfCores NumberOfLogicalProcessors
----                                      ------------- -------------------------
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz   4             8

Значення: Ви точно знаєте, що в системі.

Рішення: Якщо CPU старший за списки Microsoft, можна продовжувати, але ставтеся до оновлень і безпекових функцій як до «перевіряти, а не припускати».

Завдання 8: Базова перевірка ОЗП і навантаження памʼяті

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-CimInstance Win32_ComputerSystem | Select-Object TotalPhysicalMemory"
TotalPhysicalMemory
-------------------
17179869184

Значення: 16 ГБ ОЗП. Windows 11 працюватиме впевнено.

Рішення: Якщо 8 ГБ — може бути прийнятно, але слід стежити за завантаженням. Якщо 4 ГБ — не варто, хіба що це кіоск з одним додатком і ви любите стрес.

Завдання 9: Перевірити функції віртуалізації (готовність для VBS/Hyper‑V)

cr0x@server:~$ powershell.exe -NoProfile -Command "systeminfo | findstr /i \"Virtualization\""
Virtualization Enabled In Firmware: Yes
Second Level Address Translation: Yes
Virtualization-based Security Services Running: Not enabled

Значення: Віртуалізація в прошивці увімкнена; SLAT підтримується. Добре для сучасних функцій безпеки, якщо вирішите їх увімкнути.

Рішення: Якщо віртуалізація вимкнена в прошивці, вирішіть, чи вмикати її — враховуйте можливий вплив на продуктивність і сумісність.

Завдання 10: Виявити справжнього винуватця «повільного ПК»: черга диска і затримка

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-Counter '\\PhysicalDisk(_Total)\\Avg. Disk sec/Transfer' -SampleInterval 1 -MaxSamples 5"
Timestamp                 CounterSamples
---------                 --------------
2/4/2026 9:14:01 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.008
2/4/2026 9:14:02 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.010
2/4/2026 9:14:03 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.009
2/4/2026 9:14:04 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.008
2/4/2026 9:14:05 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.011

Значення: ≈8–11 мс середньої латентності на трансфер. Це SSD‑рівень і зазвичай ок.

Рішення: Якщо бачите 0.050–0.200 (50–200 мс) при легкому навантаженні — у вас HDD або проблеми зі стеком зберігання. Виправте зберігання перш ніж звинувачувати Windows 11.

Завдання 11: Швидко перевірити здоровʼя Windows Update

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-WindowsUpdateLog -LogPath $env:TEMP\WU.log; Select-String -Path $env:TEMP\WU.log -Pattern 'FATAL','0x800f','0x8024' -SimpleMatch | Select-Object -First 5"
C:\Users\alex\AppData\Local\Temp\WU.log: 2026/02/04 20:31:12.3456789 1234 5678 Agent  *FAILED* [800f081f]

Значення: Коди помилок на кшталт 800f081f часто вказують на проблеми з компонентним сховищем / сервісингом.

Рішення: Якщо помилки оновлень повторюються, запустіть відновлення сервісингу (DISM/SFC) до та після оновлення; на непідтримуваних інсталяціях такі проблеми зазвичай загострюються.

Завдання 12: Перевірити збірку ОС і канал інсталяції

cr0x@server:~$ powershell.exe -NoProfile -Command "winver"
Microsoft Windows
Version 23H2 (OS Build 22631.3007)

Значення: Ви знаєте, на чому стоїте, а це важливо при налагодженні драйверів і оновлень.

Рішення: Якщо ви на Insider‑збірках на непідтримуваному обладнанні — чекайте змін. Для стабільності притримуйтеся реліз‑каналів.

Завдання 13: Перевірити стан драйвера GPU (щоб уникнути життя на «Microsoft Basic Display Adapter»)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-PnpDevice -Class Display | Select-Object FriendlyName,Status,DriverVersion"
FriendlyName                       Status DriverVersion
------------                       ------ -------------
NVIDIA GeForce GTX 960             OK     31.0.15.5161

Значення: Встановлений і працездатний драйвер вендора.

Рішення: Якщо бачите лише «Microsoft Basic Display Adapter» — підготуйте офіційні драйвери перед тим, як оголошувати успіх.

Завдання 14: Підтвердити стан BitLocker (щоб не заблокувати себе самотужки)

cr0x@server:~$ powershell.exe -NoProfile -Command "manage-bde -status C:"
BitLocker Drive Encryption: Configuration Tool version 10.0.22621
Volume C: [OSDisk]
    Size:                 476.04 GB
    BitLocker Version:    2.0
    Conversion Status:    Fully Encrypted
    Percentage Encrypted: 100.0%
    Protection Status:    Protection On
    Lock Status:          Unlocked
    Identification Field: None
    Key Protectors:
        TPM
        Numerical Password

Значення: BitLocker увімкнено і захищено TPM плюс методом відновлення.

Рішення: Перед зміною налаштувань прошивки (TPM/PTT/fTPM, Secure Boot) переконайтеся, що ключ відновлення збережено десь поза ноутбуком.

Завдання 15: Санітарна перевірка мережевих драйверів (бо оновлення потребують мережі)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-NetAdapter | Select-Object Name,Status,LinkSpeed,DriverInformation"
Name          Status LinkSpeed DriverInformation
----          ------ --------- -----------------
Ethernet      Up     1 Gbps    Intel(R) Ethernet Connection (2) I219-V
Wi-Fi         Up     866 Mbps  Intel(R) Dual Band Wireless-AC 8265

Значення: Адаптери підняті з очікуваною швидкістю лінку.

Рішення: Якщо Wi‑Fi обривається або дані драйвера порожні/дивні — стабілізуйте мережу перед тим, як сподіватися, що Windows Update «виправить сам себе».

Методи обходу, що не підводять пізніше

Є кілька поширених способів обходу вимог Windows 11. Деякі з них прийнятні. Деякі — «кмітливі» так само, як ломик кмітливий при відкриванні дверей: працює, але потім доведеться міняти раму.

Метод A: Виправте прошивку замість обходу

Це найкращий «обхід», бо ним не є.

  • Увімкніть TPM у прошивці (Intel PTT або AMD fTPM).
  • Переключіться на UEFI‑завантаження.
  • Увімкніть Secure Boot.

Якщо материнська плата підтримує це й опції просто вимкнені — зробіть так. Це тримає вас у моделі безпеки Windows 11 і зменшує тертя при оновленнях.

Метод B: Обхід через реєстр під час інсталяції (точково, відновлювано)

Перевірки інсталятора Microsoft можна впливати під час налаштування. Звичний підхід — задати політику «LabConfig» під час Setup, щоб пропустити певні перевірки. Це обхід, але відносно локалізований.

Операційна перевага в тому, що ви можете виконати чисту інсталяцію, контролювати розмітку диска (GPT/UEFI) і зберегти Secure Boot, якщо машина його підтримує, навіть коли CPU/TPM не проходять.

Приклад додавання ключів обходу під час встановлення (з командного рядка інсталятора):

cr0x@server:~$ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f
The operation completed successfully.

cr0x@server:~$ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f
The operation completed successfully.

cr0x@server:~$ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassCPUCheck /t REG_DWORD /d 1 /f
The operation completed successfully.

Значення: Ви сказали Setup пропустити ці перевірки.

Рішення: Обходьте лише те, що потрібно. Якщо можна увімкнути TPM/Secure Boot — зробіть це й уникайте ключів обходу для них.

Метод C: Засоби створення носія з опцією «видалити вимоги»

Інструменти на кшталт Rufus можуть створити інсталяційний носій Windows 11 з вимкненими перевірками. Для багатьох користувачів це найменш схильний до помилок шлях, бо уникає редагування реєстру під час інсталяції.

Операційна компроміс: ви довіряєте інструменту зробити саме те, що очікуєте. Це нормально, якщо ви взяли його з надійного джерела і валідуєте результат (стан TPM, Secure Boot, здоровʼя оновлень) після інсталяції. Довіряйте, але перевіряйте — краще командами, ніж інтуїцією.

Метод D: Хаки для оновлення in‑place

Оновлення in‑place на непідтримуваному обладнанні можуть працювати, але це найбрудніший шлях з точки зору надійності. Ви успадкуєте роки залишків драйверів, дивний стан сервісингу, гачки сторонніх AV та «корисні» утиліти OEM.

Якщо вам важлива стабільність — вважайте за краще чисту інсталяцію на відомо‑хорошому SSD з відомими налаштуваннями прошивки. Якщо потрібно оновити in‑place, зніміть образ резервної копії і прийміть, що відкат може стати вашим найкращим інструментом.

Другий короткий жарт: якщо ви робите непідтримуване in‑place оновлення без резервної копії — вам не треба Windows 11, вам треба хобі з меншим рівнем криків.

Після встановлення: що досі важливо (безпека, надійність, продуктивність)

Обхід чи ні — Windows 11 залишається складною ОС над прошивкою, драйверами, зберіганням і вашими рішеннями. Ось що мене реально хвилює після інсталяції.

1) Патчабельність — це справжнє визначення «підтримувано»

Непідтримуване обладнання іноді довго отримує оновлення, поки раптом не перестає. Ваше завдання — швидко виявити момент «поки не перестає».

  • Слідкуйте за помилками оновлень і сервісинга.
  • Тримайте завантажувальний recovery USB.
  • Майте хоча б один свіжий офлайн‑образ резервної копії.

2) Якість драйверів важливіша за сирі характеристики

Десятерічний CPU з гарними драйверами чіпсету й GPU може відчуватися краще, ніж новіший ПК з_generic_драйверами. Windows 11 не щадить, коли драйвер контролера зберігання нестабільний або Wi‑Fi падає через енергозбереження.

Звичка — перевіряти Диспетчер пристроїв на невідомі пристрої і дивитися журнали подій на збої драйверів. Якщо драйвер часто перезапускається — ставтеся до цього як до інциденту: ізолюйте, відтворіть, оновіть/відкотіть і валідуйте.

3) Зберігання: латентність — це досвід користувача

Інтерфейс Windows 11 робить латентність помітною. Пошук, меню Пуск, Провідник, індексація, сканування Defender — усе залежить від вводу/виводу. Якщо ви обходите вимоги, але залишаєте HDD — ви фактично займаєтеся хаос‑інженерією проти себе.

4) Функції безпеки — важелі, а не трофеї

TPM і Secure Boot — корисні. VBS і Memory Integrity можуть бути корисні. Але на межовому обладнанні включення всього може спричинити регрес продуктивності або несумісність драйверів.

Вирішуйте, виходячи з моделі загроз:

  • Бізнес‑лаптоп зі чутливими даними: пріоритет — BitLocker, Secure Boot, TPM і перевірений процес відновлення.
  • Домашній десктоп для ігор: можна пожертвувати частиною позиції безпеки заради продуктивності й сумісності драйверів.
  • Сімейний ПК: пріоритет — оновлення, базова безпека й хороша гігієна браузера; не ганяйтеся за кожною опцією.

5) Надійність навмисно нудна

Цитата (парафраз), яка служить операційним людям роками:

Вернер Фогельс (парафраз): «Все рано чи пізно ламається; розробляєте системи з урахуванням відмов, а не робите вигляд, що їх не буде.»

Застосуйте це до десктопів: майте ключ відновлення, резервну копію, інсталяційні носії і припускайте, що одного дня оновлення піде боком.

Три корпоративні історії з практики

Міні‑історія 1: Інцидент через хибне припущення

Середня компанія хотіла стандартизувати Windows 11 для нового внутрішнього додатка. Закупівля стверджувала, що старий парк «в основному має TPM», бо в специфікації моделі ноутбука згадувався захисний модуль.

IT провели пілот на кількох машинах. Ці одиниці випадково мали TPM увімкнений у прошивці, і оновлення пройшли нормально. Дали дозвіл на розгортання кільком сотням ендпоінтів.

У день розгортання кількість звернень у хелпдеск різко зросла. Багато пристроїв провалилися в перевірках відповідності за шифруванням диска та звітністю про стан пристрою. Припущення не було «TPM існує», а «TPM увімкнено і ініційовано». Це різні всесвіти.

Погіршилося тим, що деякі користувачі почали «виправляти» проблему вручну, переключаючи налаштування прошивки вдома. Частина натрапила на запит BitLocker Recovery без доступу до ключів. Хвилювання й суєта — поки відновлювали ключі з інструментів управління для машин, що ще чекінились.

Рішення було простим: скрипт передпольоту, який перевіряв стан TPM, Secure Boot і готовність BitLocker перед тим, як пропонувати оновлення. Урок не в тому, що Windows 11 примхливий. Урок: інвентаризуйте стан, а не можливість.

Міні‑історія 2: Оптимізація, що відбилася бумерангом

Інша організація вирішила «прискорити» Windows 11 на старому обладнанні, відключивши масу безпекових функцій і фонових сервісів. Ідея була зрозуміла: менше сервісів — менше циклів — щасливіші користувачі.

Вони застосували політику, яка вимикала віртуалізаційно‑орієнтовану безпеку, змінювала енергоплан і відключала компоненти, що вважалися необовʼязковими. Продуктивність трохи покращилася на кількох межових пристроях. Всім сподобалось.

Потім прийшов щомісячний цикл патчів. Низка пристроїв почала провалювати накопичувальні оновлення і відкотуватись. У деяких був пошкоджений сервісинг‑стан; в інших — конфлікти драйверів, які викрили оновлення. Ці зміни не були єдиною причиною, але вони зняли загороджувальні елементи, які робили налагодження детермінованим.

Гірше того, «оптимізація» створила конфігураційний дріфт: частина машин мала старі налаштування, частина — нові, а частина користувачів вручну відновила опції. Підтримка не могла відтворювати проблеми послідовно, бо не було одного базового стану — їх стало пʼять.

Врешті повернули стандартну безпекову базу й зосередилися на реальному обмеженні: зберіганні. Багато машин все ще були на старих SATA SSD з великим write amplification і похилою здоровʼю. Очевидна проблема з CPU виявилася маскуванням I/O‑проблеми.

Міні‑історія 3: Нудна, але правильна практика, що врятувала день

Регульоване середовище потребувало Windows 11 для вендорського додатка, але обладнання було змішаним з деякими непідтримуваними CPU. Команда обрала прагматичний підхід: обходити лише там, де треба, але ставитись до кінцевих точок як до продакшен‑систем.

Вони побудували розгортання за чеклістом: перевірка версії прошивки, стану TPM, Secure Boot, здоровʼя диска, а потім оновлення. Кожному пристрою перед першою спробою робили свіжий образ резервної копії. Ніяких винятків.

Під час розгортання невелика підгрупа машин почала не завантажуватись після увімкнення Secure Boot. Команда не панікувала. Вони відновили останній робочий образ і дослідили баги прошивки в контрольованій тестовій групі.

Виявилося, що певна версія BIOS мала баг при обробці enrollment ключів під час переходу на Secure Boot. Оновлення прошивки вирішило проблему. Оскільки у них були стандартизовані процеси і резервні образи, «інцидент» став лише невеликою затримкою, а не зупинкою бізнесу.

Практика, що їх врятувала, не була екзотичною. Вона була «нудною»: резервні копії, поступове розгортання і відмова ставитися до оновлень кінцевих точок як до кнопки «далі‑далі».

Поширені помилки: симптом → корінь → виправлення

Саме тут більшість непідтримуваних інсталяцій Windows 11 провалюються — не під час інсталяції, а через тижні після неї.

1) Симптом: Рандомні застої, затримки меню Пуск, зависання Провідника

  • Корінь: ОС встановлено на HDD або на SSD з поганим станом/прошивкою; фонові завдання викликають I/O‑контенцію.
  • Виправлення: Перенесіть ОС на здоровий SSD. Перевірте латентність через лічильники продуктивності. Перевірте SMART/здоровʼя. Не налаштовуйте UI, поки зберігання не підтверджено.

2) Симптом: Windows Update постійно падає (цикли відкатів)

  • Корінь: Пошкоджене компонентне сховище, конфлікти драйверів або проблеми сервісингового стеку, загострені шляхом оновлення.
  • Виправлення: Відремонтуйте компонентне сховище (DISM/SFC), тимчасово видаліть проблемне стороннє AV/EDR, оновіть драйвери чіпсета/зберігання і спробуйте знову.

3) Симптом: Запит BitLocker Recovery після змін BIOS

  • Корінь: Змінилися вимірювання TPM (сброс TPM, перемикання Secure Boot, оновлення прошивки) і BitLocker вимагає ключ відновлення.
  • Виправлення: Отримайте ключ відновлення, завантажтесь, потім призупиніть BitLocker перед наступними змінами прошивки і відновіть його після. Не перемикайте TPM без потреби.

4) Симптом: Після інсталяції немає Wi‑Fi

  • Корінь: Відсутній драйвер вендора; старий чіп Wi‑Fi не покривається системними драйверами.
  • Виправлення: Підготуйте драйвери заздалегідь або використайте Ethernet/USB‑tethering. Якщо адаптер дійсно не підтримується — замініть його на сумісний модуль/донгл.

5) Симптом: Не можу увімкнути Secure Boot (опція відсутня чи сірого кольору)

  • Корінь: Система завантажується в Legacy режимі, диск — MBR, або увімкнений CSM.
  • Виправлення: Конвертуйте диск у GPT, перемкніть прошивку на UEFI, вимкніть CSM, потім увімкніть Secure Boot.

6) Симптом: Блюскріни після увімкнення Memory Integrity / VBS

  • Корінь: Старі драйвери (часто зберігання, віртуалізація, anti‑cheat або низькорівневі утиліти OEM) несумісні з HVCI.
  • Виправлення: Оновіть/замініть драйвери, видаліть низькорівневі утиліти OEM або залиште цю функцію вимкненою на конкретному пристрої. Стабільність важливіша за галочку в налаштуваннях.

7) Симптом: «TPM не виявлено», хоча апарат підтримує його

  • Корінь: TPM вимкнений у прошивці (PTT/fTPM вимкнено) або неправильно налаштований після скидання BIOS.
  • Виправлення: Увімкніть TPM у прошивці, оновіть BIOS за потреби і підтвердіть командою Get-Tpm. Не покладайтеся на маркетингові специфікації.

Контрольні списки / покроковий план

Це план, який я передав би колезі й очікував послідовних результатів. Оберіть шлях, що відповідає вашій готовності ризику.

План A (найкращий): виконати вимоги через виправлення прошивки і зберігання

  1. Резервне копіювання: образ системи на зовнішній диск. Перевірте, що його можна змонтувати/прочитати.
  2. Перевірити стан диска і замінити дефектні накопичувачі перед будь‑якими змінами ОС.
  3. Підтвердити UEFI + GPT. За потреби конвертувати.
  4. Увімкнути TPM (PTT/fTPM) у прошивці.
  5. Увімкнути Secure Boot після налаштування режиму завантаження.
  6. Оновити BIOS/UEFI до стабільної версії (не бета, якщо ви не любите рулетку).
  7. Оновити/встановити Windows 11 стандартним способом.
  8. Післяінсталяційна валідація: успішні оновлення, робочі драйвери, прийнятна латентність диска, розуміння поведінки BitLocker.

План B (прагматичний обхід): обійти лише те, що необхідно

  1. Резервне копіювання (образ) та експорт ключів відновлення BitLocker, якщо шифрування увімкнене.
  2. Перейти на SSD, якщо ви ще не там.
  3. Використовувати UEFI + GPT, навіть якщо обходите перевірки TPM/CPU. Ви все ще хочете сучасну надійність завантаження.
  4. Віддати перевагу обходу під час інсталяції через реєстр або перевірені інструменти носія, щоб зміни були локальними.
  5. Якщо можливо — чиста інсталяція. In‑place оновлення лише у випадку обмежень додатків.
  6. Негайно перевірити стан оновлень і драйверів після інсталяції.
  7. Свідомо вирішити щодо функцій безпеки: BitLocker, Secure Boot, VBS. Увімкніть те, що стабільно працює на вашому обладнанні.

План C (не робити): «запустити й забути» без шляху відкату

  • Без резервної копії.
  • Завантаження з HDD.
  • Невідомі налаштування BIOS.
  • Випадкові скрипти з форумів, застосовані наосліп.

Якщо це ваш план — зупиніться й зробіть План A або B.

Операційні нотатки: те, про що люди забувають, поки не стане боляче

Зміни прошивки і BitLocker: призупиніть перед змінами

Якщо BitLocker увімкнено, зміни Secure Boot або налаштувань TPM можуть викликати режим відновлення. Це не «зламаний» BitLocker. Це він виконує своє завдання.

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

Стан компонентного сховища: тримайте сервісинг чистим

Непідтримувані інсталяції іноді звинувачують в помилках те, що насправді є старою корупцією сервісингового сховища Windows, що перейшла з попередніх інсталяцій. Якщо оновлення поводяться моторошно — відновіть сервісинг.

cr0x@server:~$ powershell.exe -NoProfile -Command "DISM /Online /Cleanup-Image /ScanHealth"
Deployment Image Servicing and Management tool
Version: 10.0.22621.1

Image Version: 10.0.22631.3007

No component store corruption detected.
The operation completed successfully.

Значення: Сховище сервісингу чисте.

Рішення: Якщо виявлено корупцію — запустіть /RestoreHealth перед тим, як звинувачувати драйвери чи «непідтримуваність».

cr0x@server:~$ powershell.exe -NoProfile -Command "sfc /scannow"
Beginning system scan. This process will take some time.

Windows Resource Protection did not find any integrity violations.

Значення: Системні файли узгоджені.

Рішення: Якщо знайдено порушення, які не вдається виправити — подумайте про in‑place repair або чисту інсталяцію.

Журнали подій: ваш найкращий інструмент «чому»

Коли щось фрагментно поводиться — вихід зі сну, перезапуски драйверів, помилки оновлень — дивіться логи. Windows багато повідомляє, але не мовчить.

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-WinEvent -LogName System -MaxEvents 20 | Select-Object TimeCreated,Id,LevelDisplayName,ProviderName,Message | Format-Table -AutoSize"
TimeCreated           Id LevelDisplayName ProviderName               Message
-----------           -- ---------------- ------------               -------
2/4/2026 9:01:12 PM  41 Critical         Microsoft-Windows-Kernel-Power The system has rebooted without cleanly shutting down first.
2/4/2026 8:59:44 PM 129 Warning          storahci                    Reset to device, \Device\RaidPort0, was issued.

Значення: Попередження про скидання зберігання плюс несподіваний перезавантаження — класичний підпис «нестабільність стеку зберігання».

Рішення: Оновіть драйвери/прошивку контролера зберігання, перевірте кабелі (для десктопів), перевірте здоровʼя SSD. Не витрачайте час на налаштування UI.

Питання й відповіді

1) Чи перестануть оновлення Windows 11 працювати на непідтримуваному обладнанні?

Іноді вони продовжують працювати довго. Іноді накопичувальне оновлення чи функціональний апдейт стає тією точкою, де все ламатиметься. Якщо ви обходите — стежте за успішністю оновлень і майте план відкату.

2) Що безпечніше обійти: TPM чи Secure Boot?

Якщо обладнання підтримує ці функції — не обходьте жодну з них — увімкніть правильно. Якщо треба обійти щось, обходити перевірки CPU часто менш ризиковано, ніж працювати без Secure Boot на ноутбуку, що подорожує.

3) Чи можу я увімкнути TPM після інсталяції з обходом?

Часто так, якщо платформа має firmware TPM (PTT/fTPM) і він просто вимкнений. Але увімкнення TPM пізніше може вплинути на шифрування та функції ідентичності. Робіть це обдумано й майте ключі відновлення під рукою.

4) Робити in‑place оновлення чи чисту інсталяцію?

Чиста інсталяція — якщо вам важлива надійність. In‑place — якщо ви обмежені встановленими додатками, станом користувача або корпоративними правилами — і маєте верифікований образ резервної копії.

5) Чи працює Windows 11 на старих CPU, якщо в мене SSD?

Зазвичай «працює» у сенсі придатності до використання, особливо з 16 ГБ ОЗП і нормальними драйверами. Більший ризик — підтримка драйверів і іноді безпекові функції, що спричиняють регрес або нестабільність.

6) Чи уповільнить увімкнення VBS/Memory Integrity машину?

Може, особливо на старих CPU або при навантаженнях з інтенсивним I/O та частими переключеннями контексту. Тестуйте на реальному робочому навантаженні. Якщо бачите вимірювані погіршення або нестабільність драйверів — віддавайте перевагу стабільності і поверніться до цієї опції пізніше.

7) Чи можу я використовувати BitLocker без TPM 2.0?

Так, але, можливо, доведеться використовувати паролі/USB‑ключі як ключі захисту, і досвід буде менш плавним. TPM‑підтримка зазвичай дає більш гладкий і безпечний досвід.

8) Який один найбільший предиктор хорошого досвіду Windows 11 на «непідтримуваному» обладнанні?

Зберігання. Здоровий SSD з нормальною латентністю переважає майже все. Далі: доступність драйверів, а потім зрілість прошивки.

9) Чи завжди «This PC can’t run Windows 11» точне повідомлення?

Воно точне щодо вимог Microsoft, але не щодо того, чи ОС фізично зможе працювати. Питання в тому, чи ви зможете безпечно нею керувати і підтримувати актуальність без драм.

10) Якщо я обійду зараз, чи застрягну я назавжди?

Ні, але плануйте майбутнє, коли ви або заміните пристрій, або повернетесь. Тримайте інсталяційні носії та резервні копії і уникайте унікальних «сніжинок», які неможливо відтворити.

Наступні кроки

Робіть це в порядку, і ви уникнете більшості самонанесених ран:

  1. Інвентаризація реальності: виконайте перевірки вище (UEFI/GPT, TPM, Secure Boot, стан диска, латентність).
  2. Спочатку виправте зберігання: якщо ви не на здоровому SSD — зупиніться й виправте це.
  3. Увімкніть функції прошивки замість обходу, коли це можливо.
  4. Оберіть чисту інсталяцію, якщо немає переконливої причини іншого.
  5. Обходьте лише те, що потрібно, і задокументуйте зміни.
  6. Перевірте після інсталяції: оновлення, драйвери, журнали подій, латентність диска, поведінку шифрування.
  7. Тримайте план відкату: образи резервних копій і носії відновлення не є опційними, коли ви працюєте поза огородженнями.

Мета не в тому, щоб «перехитрити» інсталятор. Мета — машина, що завантажується чисто, оновлюється чисто і не перетворює ваш вечір на судову експертизу.

Підбір живлення (PSU) для серверів — перестаньте гадати, почніть вимірювати

Найшвидший спосіб опинитися в незручному становищі в дата-центрі — «знати», що сервер має потужність 500W, бо так написано в специфікації — аж поки оновлення прошивки
не запустить вентилятори в режим реактивного двигуна, автомат не клацне, і ваша «дрібниця» перетвориться на інцидент з вашим іменем у тікеті.

Електроживлення — це залежність у продуктивному середовищі. Ставтеся до нього відповідно. Якщо ви вмієте графіки латентності, ви зможете графіки ватів. А як вимірюєте ватти,
перестанете купувати PSU наче підбираєте зимові шини на око.

Чому підбір PSU — це проблема SRE, а не тільки закупівель

Підбір PSU часто сприймають як пункт у чеклисті закупівель: вибрати потужність, позначити «резервний», відправити. У продуктивних системах такий підхід дає збій з тієї ж
причини, з якої «просто додамо вузли» дає збій: ігнорує перші жорсткі обмеження, які спрацьовують.

PSU — це місце, де ваша робоче навантаження стає фізикою. Сплески навантаження перетворюються на стрибки струму. Поведінка прошивки — в енергії вентиляторів. Нова мережна карта —
це кілька ватів, на які ви ніколи не заклали бюджет. І найобразливіше: коли з харчуванням щось йде не так, симптоми не завжди кричать «харчування».
Ви отримуєте нестабільні диски, несподівані перезавантаження, скиди NIC, пошкоджені датчики BMC або «випадкові» kernel panic. Проблеми з харчуванням маскуються під софтверні.

Ви прагнете трьох результатів:

  • Жодних відмов, спричинених спрацьовуванням автоматів, перевантаженням PSU чи просадками напруги.
  • Жодних втрат через надмірно великі PSU, що працюють у низькоефективному режимі.
  • Швидкого відновлення, коли PSU виходить з ладу, падає живлення або PDU вас обдурює.

Якщо ваш метод підбору PSU — «підсумувати TDP і округлити вгору», ви керуєте продакшеном на надії. Надія — не джерело живлення.

Цікаві факти та трохи історії (щоб ви не повторювали старі помилки)

  1. Ранні ПК-блоки живлення були орієнтовані на навантаження з тяжінням на 5V. Сучасні сервери в основному 12V-центровані, а DC-DC перетворення перемістилося на плату.
  2. ATX12V (початок 2000-х) перекинув більше потужності на 12V для живлення CPU, змінивши значення «рейлів» та обмежень струму в реальних збірках.
  3. 80 PLUS (сер. 2000-х) зробило ефективність маркетинговою і закупівельною позицією, але його тестові точки не покривають ваші спікоподібні навантаження.
  4. Дата-центри змістилися від «один великий UPS» до розподілених UPS і розумних PDU, що спростило вимірювання — якщо ви справді ними користуєтесь.
  5. Резервні PSU стали стандартом не тому, що вони модні, а тому, що гаряча заміна PSU краще, ніж вікно техпідтримки о 2-й ночі.
  6. Сучасні CPU і GPU ввели агресивне підвищення частоти; миттєва потужність може перевищувати «TDP» у спосіб, який закупівельні презентації рідко згадують.
  7. Криві вентиляторів змінили правила гри: вентилятори з високим статичним тиском можуть споживати значну потужність на повній швидкості, а оновлення прошивки можуть змінити поведінку вночі.
  8. Щільність стояків зросла із появою віртуалізації і GPU; потужність і охолодження стали першими обмеженнями, а не лише місця в стійці.
  9. Координація автоматів у будівлях еволюціонувала, але автомати все ще спрацьовують швидше за ваше оповіщення — особливо щодо пускового струму.

Здорова модель мислення: середнє, пікове і кепські секунди між ними

Помилки у підборі PSU виникають через використання одного числа, коли потрібно принаймні три:

  • Середньостатистичне споживання в steady-state: що сервер споживає більшу частину часу.
  • Тривалий пік: що він споживає під реальною роботою, не за синтетичною «TDP»-логікою.
  • Транзієнт/пусковий струм: що він споживає під час завантаження, одночасного запуску дисків, розгону вентиляторів або стрибків GPU.

Додайте четверте, якщо використовуєте резервування:
режим з одним PSU — бо в конфігурації 1+1 вам все одно треба вижити на одному PSU без колапсу.

Що насправді означає «потужність PSU»

«1200W» PSU зазвичай сертифікований для певної вхідної напруги, температури, повітряного потоку і іноді висоти над рівнем моря. Це також означає максимальний DC-вихід за тих умов.
Це не означає, що ваша система безпечно може безперервно споживати 1200W у будь-якій стійці, за будь-якої температури і поки пил накопичується в корпусі як утеплювач.

Цитата, яку варто мати на стіні

«Надія — не стратегія.» — Gen. Gordon R. Sullivan

Не SRE, але сенс болісно релевантний. У плануванні живлення «ймовірно, не піде в пік» — це надія, переодягнена в інженерію.

Жарт №1: PSU сервера — як парашут: якщо ви дізнаєтеся, що він замалий тільки коли він потрібен, у вас буде поганий день.

Що вимірювати (і що специфікації вам не скажуть)

Специфікації пишуться, щоб продавати залізо, а не щоб утримувати ваш кластер живим. Вони все ще корисні — але лише як граничні умови. Ваше завдання — виміряти реальність у вашому середовищі,
з вашою прошивкою та міксом навантажень.

Вимірюйте на кількох рівнях

  • Вхідна потужність на стіні / PDU: за що ви платите і що може спровокувати спрацьовування автомата.
  • Вихід PSU (рідко безпосередньо видимий): що система споживає у термінах DC.
  • Підказки на рівні компонентів: потужність пакета CPU, GPU, активність дисків, оберти вентиляторів та PWM.

Знайте обмеження, які важливі

  • Гілковий ланцюг (рейтинг автомата; практика дерейтингу для безперервного навантаження відрізняється по регіонах і кодексу).
  • Обмеження PDU і вилки (C13/C14 vs C19/C20, перетин кабелю, ліміти на вихід).
  • Номінал PSU на вашу вхідну напругу (поширена пастка: 120V vs 208/230V — продуктивність і доступний запас різняться).
  • Режим резервування (розподіл навантаження vs активний/резервний; і чи витримає платформа один PSU при повному навантаженні).

Не плутайте ці терміни

  • TDP: точка теплового проєктування, а не контрактне обмеження потужності.
  • PL1/PL2 (та еквіваленти вендорів): тривале проти boost-політики потужності; прошивка може їх змінити.
  • Уявна потужність (VA) vs реальна потужність (W): UPS і PDU можуть показувати одне або інше; коефіцієнт потужності важливий, коли ви близькі до лімітів.

Практичні завдання вимірювання (команди, виходи, рішення)

Ви не зможете «спроєктувати» шляхом уникнення вимірювання. Нижче — конкретні, виконувані завдання. Кожне має: команду, що означає вихід, і яке рішення вона підтримує.
Використайте їх, щоб побудувати профіль потужності для кожної моделі сервера і класу навантаження.

Завдання 1: Прочитати миттєву потужність, що її повідомляє BMC (IPMI)

cr0x@server:~$ ipmitool sensor | egrep -i 'Power|Pwr Consumption|Watts'
Pwr Consumption   | 312        | Watts      | ok

Значення: BMC вважає, що система зараз споживає ~312W (часто — вхідну потужність, іноді обчислену).
Рішення: Якщо це сильно відрізняється від очікуваного, звірте джерело BMC з вимірюванням PDU перед тим, як довіряти йому для планування ємності.

Завдання 2: Витягнути історію потужності / min-max якщо платформа це експонує

cr0x@server:~$ ipmitool sdr elist | egrep -i 'Pwr|Power'
System Level      | 00h | ok  |  3.1 | Power Meter
System Level      | 01h | ok  |  3.2 | Power Max
System Level      | 02h | ok  |  3.3 | Power Min

Значення: Деякі вендори експонують макс/мін з моменту завантаження або скидання.
Рішення: Якщо макс близький до лімітів PSU чи ланцюга, не «усереднюйте» його. Плануйте під це або обмежуйте.

Завдання 3: Виміряти обмеження потужності пакета CPU і струм (Intel RAPL через powercap)

cr0x@server:~$ sudo cat /sys/class/powercap/intel-rapl:0/constraint_0_power_limit_uw
225000000

Значення: 225,000,000 µW = 225W довготривале обмеження пакета (PL1-подібне) для цього домену RAPL.
Рішення: Якщо ваш підбір PSU базувався на «CPU 165W», але прошивка дозволяє 225W тривало, оновіть бюджет або встановіть обмеження.

Завдання 4: Виміряти енергію RAPL для оцінки середнього споживання CPU за інтервал

cr0x@server:~$ E1=$(cat /sys/class/powercap/intel-rapl:0/energy_uj); sleep 10; E2=$(cat /sys/class/powercap/intel-rapl:0/energy_uj); echo $(( (E2-E1)/10000000 ))
186

Значення: Приблизно 186W в середньому для того пакета за 10 секунд (енергія в µJ поділена на 10s).
Рішення: Ідентифікуйте навантаження з тривалим високим споживанням CPU — саме вони роблять «пік» не рідкісною подією.

Завдання 5: Перевірити споживання GPU і ліміти (NVIDIA)

cr0x@server:~$ nvidia-smi --query-gpu=name,power.draw,power.limit,clocks.sm --format=csv,noheader
NVIDIA A10, 126.54 W, 150.00 W, 1395 MHz

Значення: Реальне споживання GPU 126W з лімітом 150W.
Рішення: Для GPU-серверів підбір PSU без реальної телеметрії GPU — це показуха. Якщо кілька GPU можуть одночасно досягти ліміту, закладайте цей пік.

Завдання 6: Перевірити поточну частоту CPU і статус тротлінгу (швидка перевірка)

cr0x@server:~$ lscpu | egrep -i 'Model name|CPU max MHz|CPU MHz'
Model name:          Intel(R) Xeon(R) Gold 6338 CPU @ 2.00GHz
CPU max MHz:         3200.0000
CPU MHz:             2001.102

Значення: Поточна частота не підвищена; під навантаженням вона може різко зрости і збільшити потужність.
Рішення: Якщо ви бачите постійно низьку частоту під навантаженням, можливо, у вас обмеження по живленню або термальне обмеження — обидва пов’язані з PSU і охолодженням.

Завдання 7: Перевірити журнали ядра на події, пов’язані з живленням

cr0x@server:~$ sudo journalctl -k -b | egrep -i 'power|brown|thrott|vrm|PSU|over current|watchdog' | tail -n 20
kernel: mce: [Hardware Error]: CPU 0: Machine Check: 0 Bank 27: b200000000070005
kernel: EDAC MC0: CPU power throttling detected

Значення: Апаратура/прошивка повідомили про тротлінг або помилки, які можуть бути пов’язані з доставкою живлення (не завжди, але варто корелювати).
Рішення: Якщо це корелює зі сплесками або перезавантаженнями, припиніть шукати «випадкову нестабільність» і перевірте живлення, PSU і терміку.

Завдання 8: Перевірити статус PSU і режим резервування через IPMI (якщо підтримується)

cr0x@server:~$ ipmitool sdr type 'Power Supply'
PS1 Status       | ok
PS2 Status       | ok
PS1 Input Power  | 165 Watts
PS2 Input Power  | 162 Watts

Значення: Обидва PSU активні і приблизно рівномірно ділять навантаження.
Рішення: Якщо ви очікували режим 1+1 з одним активним і одним в резерві, можливо ви не в тому режимі резервування, який думаєте. Оновіть модель відмови.

Завдання 9: Виміряти потужність від стіни через метрований Rack PDU (приклад SNMP)

cr0x@server:~$ snmpget -v2c -c public pdu01 1.3.6.1.4.1.318.1.1.26.6.3.1.7.1
SNMPv2-SMI::enterprises.318.1.1.26.6.3.1.7.1 = INTEGER: 356

Значення: OID вендора повертає потужність на розетці в ватах (приклад: 356W). Семантика MIB відрізняється; підтвердіть одиниці виміру один раз, а потім автоматизуйте.
Рішення: Використовуйте показники PDU як істину для планування ланцюгів і ризику автомату. Показники BMC — «приємні для перегляду», але не ваш фінансовий орієнтир.

Завдання 10: Перевірити струм на виході PDU, щоб виявити ризик близький до спрацьовування

cr0x@server:~$ snmpget -v2c -c public pdu01 1.3.6.1.4.1.318.1.1.26.6.3.1.5.1
SNMPv2-SMI::enterprises.318.1.1.26.6.3.1.5.1 = INTEGER: 28

Значення: Струм на розетці (приклад: 2.8A якщо пристрій використовує декаампера); знову ж таки, залежить від вендора.
Рішення: Переведіть у ампери, порівняйте з лімітами ланцюга та PDU. Якщо ви близько — не додавайте «ще один вузол».

Завдання 11: Корелювати навантаження з потужністю за допомогою контрольованого тесту навантаження (CPU)

cr0x@server:~$ sudo apt-get -y install stress-ng
...
cr0x@server:~$ stress-ng --cpu 32 --cpu-method matrixprod --timeout 60s --metrics-brief
stress-ng: info:  [8421] dispatching hogs: 32 cpu
stress-ng: metrc: [8421] cpu                60.00s  19184.12 bogo ops/s

Значення: Ви створили відтворюване навантаження на CPU. Паралельно знімайте показники PDU/BMC.
Рішення: Побудуйте для платформи «CPU-only пік» як базову величину. Потім робіть те саме з диском і мережею, щоб побачити комбіновані піки.

Завдання 12: Активність дисків і кількість приводів важливі — виміряйте це (нагрузка на сховище)

cr0x@server:~$ iostat -dx 2 3
Device            r/s     w/s   rMB/s   wMB/s avgrq-sz avgqu-sz await  svctm  %util
nvme0n1         820.0   110.0   128.0    24.0     358     2.10   2.1   0.6   55.0

Значення: Сховище виконує реальну роботу. Диски і контролери споживають більше під навантаженням; HDD також мають стрибки під час старту.
Рішення: Якщо ваш пік потужності співпадає з відновленнями/реконструкціями, закладайте «потужність режиму відмови», а не тільки щасливого шляху.

Завдання 13: Перевірити події заряджання батареї/модуля кеш-контролера

cr0x@server:~$ sudo dmesg | egrep -i 'battery|cachevault|supercap|charging' | tail -n 20
megaraid_sas 0000:3b:00.0: CacheVault charging started

Значення: Модулі захисту кешу можуть споживати додаткову потужність під час заряджання після технічного обслуговування або довгого простою.
Рішення: Якщо були холодні старті або обслуговування, очікуйте тимчасового підвищення потужності. Не сприймайте це як «таємничі вати».

Завдання 14: Перевірити оберти вентиляторів і PWM — вентилятори не безкоштовні

cr0x@server:~$ sudo ipmitool sdr | egrep -i 'FAN|RPM' | head
FAN1            | 7800   | RPM  | ok
FAN2            | 8100   | RPM  | ok

Значення: Високі оберти означають вищу витрату енергії на вентилятори і часто вказують на термальне навантаження або зміну профілю прошивки.
Рішення: Якщо бачите тривало високі обороти, перевірте повітряний потік і температуру на впуску; ваш бюджет потужності і терміка PSU погіршуються.

Завдання 15: Перевірити вхідну напругу PSU (бо 120V vs 208V має значення)

cr0x@server:~$ ipmitool sensor | egrep -i 'Inlet|VIN|AC|Voltage' | head
PS1 Inlet Volt   | 208        | Volts     | ok
PS2 Inlet Volt   | 208        | Volts     | ok

Значення: PSU бачать 208V, що зазвичай покращує ефективність і зменшує струм при однаковій потужності.
Рішення: Якщо ви на 120V і збільшуєте щільність, подумайте про переведення на вищу напругу живлення там, де це можливо. Це часто найпростіший спосіб збільшити потужність.

Завдання 16: Швидкий і грубий спостережний тест пускового струму через лог піків PDU (якщо підтримується)

cr0x@server:~$ snmpget -v2c -c public pdu01 1.3.6.1.4.1.318.1.1.26.4.3.1.6.1
SNMPv2-SMI::enterprises.318.1.1.26.4.3.1.6.1 = INTEGER: 47

Значення: Лічильник «пік струму з моменту останнього скидання» (приклад). Точний OID залежить від вендора і моделі.
Рішення: Якщо піковий струм значно вищий за установившийся, рознесіть завантаження і уникайте синхронного підключення після відключень.

Резервні PSU: 1+1 не завжди означає 1+1

Резервні PSU продаються як надійність. По факту вони надійні тільки якщо ви правильно їх підібрали та підключили.
Два PSU не гарантують, що ви зможете працювати на повній потужності після виходу одного з ладу. Це залежить від:

  • Потужності на один PSU порівняно з піковими потребами системи.
  • Поведінки розподілу навантаження (active/active або active/standby).
  • Поводження при обмеженні потужності, коли один PSU відсутній (деякі системи автоматично тротлять; інші просто падають).
  • Незалежності живлення (два PSU на одному PDU — це не резервування; це оптимізм із зайвими кроками).

Простими словами про N+1

Якщо у вас два 800W PSU у конфігурації 1+1, важливе питання:
Чи може сервер працювати на піку на одному 800W PSU?
Якщо реальний виміряний пік — 780W біля стіни і PSU при високій вхідній температурі дерейтується, ви не «в безпеці». Ви стоїте на тонкому технічному розрахунку.

Балансування навантаження не гарантоване

Якщо два PSU погано ділять навантаження (через прошивку, несумісні PSU, старіння або кабелювання), один PSU може працювати гарячіше і ближче до ліміту. Коли він виходить з ладу,
інший пережимає навантаження, що може спричинити другий відмову або перезавантаження. Це «подвійне влучення резервного PSU», і воно таке ж приємне, як звучить.

Пусковий струм (inrush): автоматові байдуже ваші таблиці

Inrush — це стрибок при подачі живлення — заряд конденсаторів, запуск вентиляторів, розгін дисків, пробудження GPU і те, як кожен регулятор вирішує, що настав час веселощів.
Ваш бюджет за сталої потужності може виглядати добре, а пусковий струм спрацьовує автомат при масовому перезавантаженні.

Працівники фаціліті звертають увагу на це, бо це різниця між «живлення відновлено» і «половина ряду залишилася в темряві». Вам слід турбуватись, бо після події всі почнуть перезапускатися одночасно,
і ваш оркестратор може з радістю зробити те саме.

Жарт №2: Автомати як інженери on-call: вони багато чого терплять, але пам’ятають саме ту одну останню соломинку.

Як зменшити ризик inrush

  • Рознесіть завантаження (PDU, зовнішня автоматизація або гачки оркестратора).
  • Уникайте синхронного розгону вентиляторів шляхом оновлення прошивки у контрольованих хвилях, а не «всі разом у п’ятницю».
  • Знайте поведінку HDD: параметри staggered spin-up на HBA збережуть ваш автомат і гордість.
  • Вимірюйте піковий струм там, де можливо: деякі метровані PDU і UPS ведуть логи пікiв та inrush-подій.

Дереатинг: температура, висота над рівнем моря, пил і чому «1200W» інколи фантазія

Рейтинги PSU припускають певні умови. Потім ви встановлюєте сервер у стійку з частковими заглушками, гарячим коридором, що більше схожий на «теплу пораду», і пилом,
який перетворює радіатори на фетр.

Дереатинг проявляється як:

  • Менший доступний вихід при вищій температурі на впуску.
  • Збільшена потужність вентиляторів (що підвищує системне споживання і знижує ефективність).
  • Раніше термозахистне вимкнення або захисне тротлінгування.

Температура — множник ризику

Сервер, що «в нормі» при 18°C на впуску, може стати крихким при 30°C на впуску, коли один PSU виходить з ладу, а залишений працює гарячіше і голосніше.
Саме в такий момент найгірше дізнатися, що ваша припущення про резервування базувалося на лабораторному буклеті.

Висота над рівнем моря — це реальна річ (так, правда)

На великій висоті зменшується густина повітря, а отже і ефективність охолодження. Багато вендорів вказують дереатинг вище певної висоти. Ігнорувати це можна, але PSU не переконаєте вашою впевненістю.

Криві ефективності: вати, які ви не витягуєте, все одно коштують вам

Ефективність — це не константа. Це крива. Більшість PSU «щасливі» десь на 40–60% навантаження, залежно від конструкції. При дуже низькому навантаженні ефективність падає,
і ви втрачаєте потужність у вигляді тепла. При дуже високому навантаженні ефективність теж може падати, і терміка стає некрасивою.

За замовчуванням надмірне збільшення PSU здається «безпечним», але воно може вести до марнотратства у трьох напрямках:

  • Capex: моделі PSU більшої потужності коштують дорожче.
  • Opex: нижча ефективність на холостому ходу по всьому парку — неприємно для рахунку за електрику.
  • Охолодження: втрачені вати перетворюються на тепло, яке ваш об’єкт має відвести.

Що робити замість сліпого oversizing

Виміряйте реальний пік і виберіть PSU так, щоб:

  • Ваш середній режим знаходився в ефективній частині кривої.
  • Ваш тривалий пік залишався нижче консервативного порогу (особливо в режимі N+1).
  • Ваш inrush не спрацьовував гілкові автомати під час масових подій у флоті.

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

Три корпоративні міні-історії з краю «має бути нормально»

Міні-історія 1: Інцидент через неправильне припущення

Компанія розгорнула нову партію серверів з великим сховищем: багато дисків, подвійні контролери і «резервні» PSU. Закупівля підібрала PSU, підсумувавши TDP CPU, RAM і «трохи для дисків».
Вони також стандартизували 120V живлення в застарілій кімнаті, бо воно «вже було там».

У steady-state усе виглядало нормально. Графіки моніторингу були нудні, і розгортання оголосили успішним. Потім майже планове обслуговування електропостачання. Після відновлення живлення
весь ряд спробував завантажитися одночасно. Декілька автоматів спрацювали миттєво. Декілька стійок піднялися напівжитими: деякі сервери зациклилися на завантаженні, деякі втратили диски, а пару контролерів піднялися деградованими.

Постмортем був брудний, бо перша хвиля дебагу пішла в сторону софту: версії ядра, порядок завантаження, прошивка RAID. Видимим натяком було те, що відмови групувалися по стійках і PDU, а не по збірках ОС.
Хтось нарешті витягнув логи пікових струмів PDU і порівняв їх з рейтингом гілкового автомату.

Причина не в тому, що сервери «споживали забагато» в середньому. Причина в тому, що inrush і одночасний запуск дисків перевищили толерантність автомата при 120V, де струм вищий при тій самій потужності.
«Резервні PSU» не допомогли, бо резервування не заважає автомату спрацювати.

Виправлення було нудним: рознесення завантаження, увімкнення staggered spin-up на HBA та переведення найщільніших стійок на вищу напругу де було можливо. Також почали фіксувати пікову потужність на PDU під час приймальних тестів.
Наступний сеанс обслуговування пройшов без пригод — а це найкращий тип події.

Міні-історія 2: Оптимізація, що повернулася бумерангом

Інша організація серйозно взялася за енергоефективність і вирішила агресивно «підібрати» PSU. Вони помітили, що сервери в простое споживають близько 120–160W і вирішили, що менші PSU покращать ефективність на холостому ході.
Вони затвердили стандартну конфігурацію з низькопотужними PSU для нового обчислювального флоту.

Лабораторні тести виглядали добре. Ідл-ефективність трохи покращилася. Закупівля була в захваті через скорочення витрат. Флот розгорнули в продакшен, де навантаження було імпульсним — аналітика батчами та сплески API.
Під час сплесків поведінка CPU boost підштовхнула тривалу потужність вище, ніж очікували.

Все ще «у специфікації» для одного PSU — до тих пір, поки PSU не вийшов з ладу.

За 1+1 резервуванням один PSU повинен був нести повне навантаження. На папері це можливо. На практиці, при вищих температурах на впуску і більший запиленості, ніж в лабораторії, залишений PSU працював гарячіше.
Прошивка платформи відповіла тротлінгом продуктивності. Сервіс не впав, але затримки зросли з «добре» до «чому черга тане». SREs сприйняли це як регресію софту, бо нічого не впало. Просто стало повільно й непередбачувано.

Проблема не в самій ідеї підбору; проблема була в тому, що це робили на підставі тестів холостого ходу й ігнорували режим N+1 та дерейтинг середовища. Вирішили підняти PSU на крок, запровадити обмеження потужності для найбільш імпульсивних вузлів і припинити оцінювати успіх виключно по ефективності в idle.
Ефективність важлива. Передбачуваність важить більше.

Міні-історія 3: Нудна, але правильна практика, що врятувала день

Команда, що керувала змішаним флотом (GPU-коробки, ноди сховища, звичайні обчислювальні), мала скупу політику: кожна нова модель заліза мала пройти «характеризацію потужності» перед тим, як потрапити в продакшен.
Це означало вимірювання idle, 50-го процентиля навантаження, тривалого піку і пускового inrush — використовуючи той самий PDU, що й у продакшені.

Чеклист також вимагав тестування резервування: витягніть один PSU під навантаженням і підтвердіть, що вузол залишається стабільним, з записами потужності і терміки.
Це не було опційно. Це не було «коли буде час». Це було обов’язковим, як тести відновлення RAID.

Якось постачальник доставив «незначний ревізійний» варіант тієї ж моделі. Та сама родина SKU, той самий маркетинговий лист, інша прошивка і трохи інша поведінка вентиляторів. Характеризація виявила, що нова ревізія має різкіший розгін вентиляторів при певних порогах датчиків, що підвищувало пикове споживання достатньо, щоб важити при відмові PSU.

Оскільки у них були початкові дані, це не стало інцидентом. Вони відкоригували розміщення в стійці (менша щільність на той ланцюг для цієї ревізії), налаштували прошивку там, де дозволено, і оновили бюджет потужності.
Місяць по тому справжній відмовник PSU стався в продакшені під важкою задачею. Вузол залишився в мережі. Жодного впливу на клієнтів. Жодних героїчних дій. Просто тиха радість нудної інженерної практики, що спрацювала як слід.

План швидкої діагностики

Коли щось пахне електропостачанням — випадкові перезавантаження, відмови, що групуються по стійці, падіння продуктивності після виходу PSU — не блукайте. Перевіряйте в цьому порядку.
Мета — знайти вузьке місце за хвилини, а не після переписування половини планувальника.

Перше: підтвердіть, що саме відмовляє (вузол, стійка, ланцюг чи кімната)

  • Чи відмови групуються по стійці/PDU або по моделі заліза?
  • Чи події корелюють з бойовими завантаженнями, обслуговуванням або стрибками температури?
  • Чи бачите ви спрацьовування автоматів або тривоги UPS?

Друге: довіряйте PDU/UPS для вхідної потужності, потім перехресно перевірте BMC

  • Перевірте PDU на рівні розетки: вати/ампери і будь-які лічильники піків.
  • Порівняйте з BMC-значеннями; великі несходження вказують на погані сенсори або різні точки вимірювання.
  • Підтвердіть вхідну напругу. Низька напруга означає вищий струм при тій самій потужності і менший запас.

Третє: протестуйте поведінку резервування під навантаженням

  • У контрольованих умовах витягніть один PSU і спостерігайте: чи стрибне потужність? чи розженуться вентилятори? чи тротлить хост?
  • Підтвердіть, що кожен PSU підключений до різних живильних вводів і що вводи справді незалежні.
  • Якщо продуктивність змінюється суттєво, сприймайте це як ризик для продакшену, а не «приємний факт».

Четверте: ізолюйте транзієнтні причини

  • Пусковий струм і старт дисків: шукайте події автомата або піки PDU при відновленні живлення.
  • Зміни прошивки/криві вентиляторів: корелюйте з останніми оновленнями.
  • Сплески навантаження: корелюйте з телеметрією CPU/GPU і часом інцидентів.

Поширені помилки (симптом → корінь → виправлення)

1) Випадкові перезавантаження під навантаженням

Симптом: Хости перезавантажуються, коли стартують пакетні задачі або сплески використання GPU.
Корінь: Перевантаження PSU або проблеми транзієнтної реакції; інколи один PSU слабкий/старіє і колапсує на крок-навантаженнях.
Виправлення: Виміряйте на PDU під час навантаження. Протестуйте з одним PSU виключеним. Замініть підозрілий PSU. Якщо піки реальні — підвищуйте потужність PSU або обмежуйте потужність.

2) Спрацьовування автоматів після обслуговування або відновлення живлення

Симптом: Цілі стійки темні, автомати спрацьовують одразу при подачі живлення.
Корінь: Пусковий струм плюс синхронне завантаження; запуск дисків і розгін вентиляторів це посилює, особливо при 120V.
Виправлення: Рознесіть завантаження. Увімкніть staggered spin-up. Знизьте щільність на ланцюг або переведіть на вищу напругу.

3) «Резервний» PSU але один вихід спричиняє падіння продуктивності

Симптом: Без відмови, але затримки зростають і пропускна здатність падає, коли один PSU помирає.
Корінь: Режим з одним PSU викликає обмеження потужності або термальний стрес; залишений PSU працює гарячим і прошивка тротлить CPU/GPU.
Виправлення: Підберіть так, щоб один PSU міг витримати тривалий пік з запасом при найгіршій вхідній температурі. Тестуйте і документуйте продуктивність у режимі відмови.

4) PDU показує високі вати, BMC — низькі (або навпаки)

Симптом: Два «авторитетних» числа розходяться на 20–40%.
Корінь: Різні точки вимірювання (вхід проти обчисленого), дрейф калібрування сенсорів або баги прошивки BMC.
Виправлення: Довіряйте PDU/UPS як істині для виставлення рахунків і автомата. Використовуйте BMC для трендів. При потребі калібруйте разом з відомим метрологічним приладом.

5) Нова прошивка спричинила перевитрату бюджету потужності

Симптом: Після оновлення BIOS/BMC вартість стійки зросла або стрибнула потужність вентиляторів; з’явилися тривоги автомата або UPS.
Корінь: Оновлені криві вентиляторів, вищі ліміти boost-потужності або інші профілі за умовчанням.
Виправлення: Повторно характеризуйте споживання після змін прошивки. Фіксуйте профілі потужності. Rollout оновлень хвилями з моніторингом PDU.

6) «Ми підібрали по TDP» і тепер усе тісно

Симптом: Математика з табличок каже, що ви в безпеці; реальні виміри говорять протилежне.
Корінь: TDP — не обмеження; накладні витрати платформи, пам’ять, диски, NIC, вентилятори і поведінка boost не були враховані.
Виправлення: Побудуйте виміряну модель потужності для кожної платформи: idle, типовий, тривалий пік, inrush і режим N+1. Припиніть використовувати суму TDP як остаточну відповідь.

Контрольні списки / покроковий план

Покроково: як підібрати PSU для моделі сервера (без гадань)

  1. Визначте джерело істини для вимірювань. Для планування ємності використовуйте метрований PDU/UPS (вхідні вати); BMC — для трендів і статусу резервування.
  2. Зафіксуйте умови впуску. Занотуйте вхідну напругу та приблизну температуру на впуску під час тестів. Дані потужності без умов — плітки.
  3. Виміряйте чотири точки потужності:
    • Idle (після завантаження, сервіси стабільні)
    • Типове навантаження (репрезентативний продакшен-мікс)
    • Тривалий пік (стрес-тест, що імітує реальні вузькі місця)
    • Пуск/inrush (холодний старт, не теплий ребут)
  4. Протестуйте поведінку N+1. Під навантаженням відключіть один PSU і спостерігайте стабільність, тротлінг і поведінку вентиляторів. Зафіксуйте потужність і терміку.
  5. Застосуйте маржу свідомо. Додайте запас для помилок вимірювання, змін середовища, старіння і «сюрпризної прошивки». Уникайте миттєвої реакції «подвоїмо».
  6. Перевірте відповідність ланцюгу. Переведіть вати в ампери при вашій напрузі і переконайтеся, що ви не фліртуєте з лімітом гілки під піками і inrush.
  7. Визначте розмір PSU і режим резервування. Оберіть модель PSU так, щоб режим з одним PSU залишався стабільним на тривалому піку з реальним запасом.
  8. Документуйте профіль. Зберігайте виміряні значення і умови тестів у вашому runbook по залізу, щоб наступна людина не займалась археологією.
  9. Операціоналізуйте моніторинг. Налаштуйте оповіщення при незвичному зростанні потужності, але також при втраті резерву і несподіваних змінах в поділі навантаження.
  10. Повторно тестуйте після суттєвих змін. BIOS/BMC оновлення, нові NIC/HBA, зміни моделі GPU або зсуви в навантаженнях заслуговують повторного вимірювання.

Контрольний список: бюджету стояка, який ви зможете захистити на нараді

  • На стійку: виміряний типовий і виміряний пік, а не просто сума шильдиків.
  • На гілку: ампераж при фактичній напрузі з чіткими припущеннями про допустиму безперервну завантаженість.
  • План по inrush: процедура рознесення завантаження задокументована і протестована.
  • План резервування: PSU на різних вводах; PDU на різних upstream де можливо.
  • Тести приймання: кожна нова модель заліза проходить прогін характеристик потужності перед розгортанням.

Контрольний список: версія «ми збираємося додавати GPU»

  • Виміряйте ліміт потужності GPU на карту і підтвердьте загальну рамку потужності платформи.
  • Підтвердіть обмеження PCIe auxiliary power і riser; не припускайте, що проводка шасі відповідає маркетингу GPU.
  • Протестуйте сумарний CPU+GPU пік під реальними навантаженнями (не лише синтетичними).
  • Перевірте поведінку резервування при відключенні одного PSU під GPU-навантаженням.
  • Підтвердіть ланцюг і тип розетки PDU (C13 vs C19) та ліміти на розетку.

FAQ

1) Чи можу я підібрати PSU, підсумувавши TDP компонентів?

Використовуйте суму TDP лише як орієнтовний нижній межа. Реальні системи перевищують його через boost-поведінку, потужність вентиляторів, зарядні явища контролерів і транзієнти.
Вимірюйте на PDU.

2) Чи завжди купувати PSU з максимальною потужністю?

Ні. Надмірне збільшення може витрачати гроші і знижувати ефективність при низькому навантаженні. Купуйте для виміряного тривалого піка плюс запас, і переконайтеся, що режим з одним PSU безпечний, якщо ви використовуєте резервування.

3) Який запас слід додати?

Однозначної величини немає. Додавайте запас для помилки вимірювання, змін середовища, старіння і майбутніх доповнень. Правильний запас — це той, що проходить режим N+1 при найгіршій вхідній температурі без тротлінгу чи нестабільності.

4) Кому довіряти більше: BMC чи PDU?

Для планування автомата і ємності: PDU/UPS вхідні вати. Для трендів по хосту і статусу резервування: BMC корисний. Якщо вони розходяться, розберіться, але бюджетуйте за PDU.

5) Чому споживання стрибає після оновлення BIOS/BMC?

Прошивка може змінити ліміти потужності CPU, криві вентиляторів, поведінку ініціалізації пам’яті і керування живленням периферії. Ставте оновлення прошивки як зміну апаратного забезпечення: повторно вимірюйте потужність.

6) Як резервні PSU впливають на ефективність?

При спільному розподілі навантаження кожен PSU працює на нижчому відсотку завантаження, що може винести вас із «солодкої точки» ефективності. При active/standby один PSU може працювати близько до солодкої точки, але інший все одно споживатиме резервну потужність.
Виміряйте, не припускайте.

7) Що таке VA vs W при підборі UPS і ланцюгів?

W — реальна потужність; VA — уявна потужність. UPS і PDU можуть вказувати одне або інше. Якщо коефіцієнт потужності далеко від 1.0, VA може бути значно вищим за W, і це може стати обмеженням для ємності UPS, навіть коли вати в нормі.

8) Як уникнути спрацьовування автоматів під час перезапусків флоту?

Рознесіть завантаження, увімкніть staggered spin-up дисків де можливо і уникайте «усі вузли одночасно вгору». Підтвердіть за допомогою логів піків PDU і проведіть контрольований тест.

9) Чи треба мені хвилюватися про ліміти рейлів PSU?

Менше ніж у старих десктопів з багатьма рейлами, але так — інколи. Серверні PSU і бэкплейни зазвичай абстрагують це, але при високій щільності GPU і розподілі riser можна наткнутися на приховані ліміти.
Якщо ви бачите нестабільність під навантаженням GPU, перевіряйте розподіл живлення платформи, а не лише сумарні вати.

10) Який практичний спосіб обмежити потужність серверів, щоб не перевищувати ліміти?

Використовуйте інструменти вендора або профілі прошивки де можливо і перевіряйте через PDU. Для CPU обмеження на базі RAPL може допомогти, але підтвердіть поведінку під вашими навантаженнями — деякі навантаження міняють затримку заради ватів у неприємний спосіб.

Наступні кроки, які ви можете зробити цього тижня

  • Виберіть одну модель сервера і створіть профіль потужності: idle, типове, тривалий пік, пуск/inrush і результати тесту N+1.
  • Зробіть PDU джерелом істини для вхідної потужності і піків; підключіть SNMP-опитування до вашого пайплайна метрик.
  • Проведіть контрольований тест резервування: під значним навантаженням витягніть PSU і стежте за тротлінгом, розгоном вентиляторів і стрибками потужності.
  • Напишіть процедуру рознесення завантаження і відрепетируйте її. Після відключення не час виявляти, що ваші інструменти не вміють секвенувати.
  • Оновіть вимоги до закупівель: вимагайте метровані PSU/BMC сенсори де можливо і просіть вендорів описати поведінку в режимі одного PSU.
  • Повторно перевіряйте після оновлень прошивки. Підходьте до «незначних ревізій» як до нових моделей, поки не виміряєте їх.

Мета — не стати інженером з живлення. Мета — припинити ставитися до ватів як до фольклору. Вимірюйте, бюджетуйте, тестуйте режими відмови і переходьте до тих проблем, що справді цікаві — наприклад, чому вікно відновлення сховища все ще занадто довге.

Шурхіт аудіо в Windows 11: виправте затримки без покупки нового обладнання

Натиснули «відтворити» — і: шкряб, поп, тріск. Це не «теплота вінілового звучання». Це ваша машина на Windows 11 не встигає виконати дедлайни, ніби продукційна система з розгойданою мережею.

Добра новина: більшість клацань і шурхотів у Windows — не «погана звукова карта». Це затримки: драйвери блокують CPU надто довго, енергоменеджмент робить «корисні» речі, або USB поводиться так, ніби в нього алергія на тривалий трафік. Ми діагностуємо це як SRE: вимірюємо, ізолюємо, змінюємо одне, перевіряємо і зупиняємось, коли стає нудно.

Що таке шурхіт насправді: пропущені дедлайни, а не «поганий звук»

Аудіо в Windows — це майже реальний часовий конвеєр, що працює на ОС загального призначення. Він працює лише тому, що буфери ховають джиттер: додаток записує семпли, звуковий рушій мікшує їх, драйвер підживлює пристрій. Якщо щось блокує CPU настільки довго, що наступний буфер не може бути поданий вчасно, ви чуєте це як:

  • Клацання/потріскування: короткі недоопрацювання—відсутні семпли.
  • Затирання (stutter): повторні недоопрацювання або цикли ресинхронізації в Bluetooth.
  • Робот/шифрування голосу: дрейф тактування, агресивне пересемплювання або втрата пакетів (часто на Bluetooth).
  • Відпади (dropouts): скидання пристрою, події живлення USB або перезапуски драйверів.

Інженерний термін, який ви побачите в інструментах — затримка DPC/ISR:

  • ISR (Interrupt Service Routine): швидкий обробник переривань високого пріоритету від апаратури.
  • DPC (Deferred Procedure Call): робота, запланована ISR для виконання трохи пізніше, все ще з підвищеним пріоритетом.

Якщо драйвер «жере» час DPC — мережа, GPU, сховище, ACPI, USB — аудіо не зможе запуститися вчасно. Ваше завантаження CPU може бути 10% і при цьому чутися клацання, бо це не про «продуктивність». Це про «латентність під навантаженням».

Перефразована ідея від Werner Vogels (CTO Amazon): Усе ламається; стійкість приходить від проєктування та експлуатації систем, які витримують і відновлюються після помилок.

Той самий підхід тут. Ми не женемося за ідеалом. Ми прибираємо режими відмов, які перетворюють незначні планувальні затримки на чутні артефакти.

Швидкий план діагностики (робіть у вказаному порядку)

Спочатку: класифікуйте шурхіт

  1. Лише на Bluetooth? Перейдіть до Bluetooth‑аудіо та затирання.
  2. Лише на USB DAC/гарнітурі? Перейдіть до USB і хаби.
  3. Лише в одній програмі (Teams/Discord/гра/DAW)? Перейдіть до Налаштування буферів у додатках.
  4. Системно (YouTube + локальне аудіо + сповіщення)? Зазвичай це DPC/драйвер/живлення.

По-друге: вимірюйте затримку, не орієнтуйтесь на відчуття

  1. Запустіть інструмент для DPC (LatencyMon — найпоширеніший) і відтворіть шурхіт.
  2. Якщо він вказує на драйвер: не видаляйте все підряд. Підтвердіть зміною конкретних пристроїв (див. завдання нижче).

По-третє: приберіть три головні підозри у безпечному порядку

  1. План живлення: переключіться на стабільний план, вимкніть USB selective suspend, протестуйте.
  2. Мережа: тимчасово вимкніть Wi‑Fi, потім відключіть NIC offloads, потім оновіть/відкатайте драйвер.
  3. GPU/аудіо (HDMI): відключіть невикористовувані «NVIDIA/AMD High Definition Audio» кінцеві точки, оновіть GPU‑драйвер чистою інсталяцією.

По-четверте: зафіксуйте відому‑добру аудіо конфігурацію

  1. Встановіть 48 kHz (або 44.1 kHz, якщо ваш робочий процес орієнтований на музику), 24‑біт.
  2. Вимкніть enhancements, вимкніть spatial, перевірте exclusive mode ввімкненим/вимкненим залежно від сценарію.

По-п’яте: якщо це USB — ставтеся до нього як до шини, а не як до кабелю

  1. Перенесіть DAC/гарнітуру в інший порт (передня панель vs задня, контролер USB 2 vs USB 3).
  2. Вилучіть хаби/доки. Тестуйте пряме підключення.
  3. Вимкніть USB selective suspend і забороніть Windows вимикати пристрій для економії енергії.

Зупиніться, коли шурхіт зникне. Далі починається культ оптимізації: правки реєстру та «latency optimizer»‑програми, що часто погіршують ситуацію.

Цікаві факти та коротка історія (чому це повторюється)

  • Аудіо в Windows раніше змішувалося в ядрі в старіших версіях; сучасний Windows переніс мікшування в user mode (WASAPI) для стабільності та безпеки, але драйвери все ще мають значення.
  • Сплески затримки DPC не новина; вони відомі професійним аудіокористувачам щонайменше з ери Windows XP.
  • 48 kHz стало «дефолтом» здебільшого через відео/ТВ стандарти; багато PC‑аудіопайплайнів припускають 48 kHz навіть для музичних джерел у 44.1 kHz.
  • ACPI енергоменеджмент став розумнішим (і складнішим) з роками — корисно для батареї, але іноді погано для реальних тайм‑дедлайнів аудіо.
  • USB‑аудіо — isochronous — воно резервує пропускну здатність і очікує вчасної доставки; якщо контролер хоста затримується, ви чуєте це негайно.
  • Драйвери Wi‑Fi часто винні через сплески, переходи в енергозбереження та інтенсивні переривання.
  • GPU‑драйвери можуть блокувати систему таким чином, що це не видно як «високе завантаження CPU» в Диспетчері завдань, бо час витрачається на підвищеному IRQL в DPC/ISR.
  • Bluetooth‑аудіо — втратне і з буфером; воно створене для маскування відпадів через буферизацію, але Windows плюс радіоперешкоди можуть все одно спричинити чутні артефакти.
  • «Enhancements» — це DSP‑плагіни (APO), вставлені в пайплайн; деякі баговані, деякі додають затримку, деякі просто конфліктують зі змінами частоти дискретизації.

Практичні завдання: команди, виводи та рішення (12+)

Ці команди розраховані на звичайний комп’ютер з Windows 11 і вбудованими засобами. Я використовую PowerShell і стандартні утиліти. Кожне завдання включає: команду, приклад виводу, що це означає та яке рішення прийняти.

Завдання 1: Визначте аудіо‑кінцеві точки та їх стан

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class AudioEndpoint | Select-Object Status,FriendlyName,InstanceId | Format-Table -AutoSize"
Status FriendlyName                                   InstanceId
------ ------------                                   ----------
OK     Speakers (Realtek(R) Audio)                    SWD\MMDEVAPI\{0.0.0.00000000}.{...}
OK     Headphones (USB Audio DAC)                     SWD\MMDEVAPI\{0.0.0.00000000}.{...}
OK     NVIDIA High Definition Audio                   SWD\MMDEVAPI\{0.0.0.00000000}.{...}

Значення: Ви бачите кожну відтворювальну кінцеву точку, яку Windows надає, включаючи HDMI/DP‑аудіо з GPU.

Рішення: Якщо ви ніколи не користуєтесь «NVIDIA High Definition Audio» (або аналогом AMD), заплануйте відключення цієї кінцевої точки, щоб зменшити площу атаки драйверів.

Завдання 2: Перелік фактичних аудіо‑пристроїв (драйверів) за кінцевими точками

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class Sound,VideoAndGameControllers | Select-Object Status,FriendlyName,InstanceId | Format-Table -AutoSize"
Status FriendlyName                 InstanceId
------ ------------                 ----------
OK     Realtek(R) Audio             HDAUDIO\FUNC_01&VEN_10EC&DEV_...
OK     USB Audio DAC                USB\VID_1234&PID_5678\...
OK     NVIDIA Virtual Audio Device  ROOT\...

Значення: Це драйвери в режимі ядра, які можуть впливати на поведінку DPC.

Рішення: Якщо у вас декілька аудіостеків (Realtek + USB + віртуальні пристрої GPU), спростіть: відключіть те, чим ви не користуєтесь під час діагностики.

Завдання 3: Швидка перевірка плану живлення CPU (типова причина шурхотів)

cr0x@server:~$ powercfg /getactivescheme
Power Scheme GUID: 381b4222-f694-41f0-9685-ff5bb260df2e  (Balanced)

Значення: «Balanced» часто дозволяє агресивне енергозбереження (особливо на ноутбуках).

Рішення: Для тесту перемкніться на «Високу продуктивність» або «Ultimate Performance» (якщо доступно). Якщо шурхіт зникає — корінь проблеми в енергоменеджменті, а не в «аудіо‑залізі».

Завдання 4: Переключитись на Високу продуктивність (тест, не закріплюйте назавжди)

cr0x@server:~$ powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

Значення: Ви кажете Windows віддавати пріоритет продуктивності й зменшити кількість станів сну.

Рішення: Перевірте аудіо за своїм найважчим навантаженням (гра + Discord + браузер). Якщо стабільно, згодом ми налаштуємо кастомний план замість постійного використання «Високої продуктивності».

Завдання 5: Перевірте налаштування USB selective suspend

cr0x@server:~$ powercfg /qh SCHEME_CURRENT SUB_USB | findstr /i "Selective Suspend"
    USB selective suspend setting  (GUID: 2a737441-1930-4402-8d77-b2bebba308a3)
      Current AC Power Setting Index: 0x00000001
      Current DC Power Setting Index: 0x00000001

Значення: Значення 1 зазвичай означає «Увімкнено».

Рішення: Якщо ви використовуєте USB‑аудіо, вимкніть selective suspend для діагностики (особливо на ноутбуках і доках).

Завдання 6: Вимкнення USB selective suspend (AC + DC)

cr0x@server:~$ powercfg /setacvalueindex SCHEME_CURRENT SUB_USB 2a737441-1930-4402-8d77-b2bebba308a3 0
cr0x@server:~$ powercfg /setdcvalueindex SCHEME_CURRENT SUB_USB 2a737441-1930-4402-8d77-b2bebba308a3 0
cr0x@server:~$ powercfg /S SCHEME_CURRENT

Значення: Порти USB менше ймовірно будуть вимикатися для економії енергії в невідповідний момент.

Рішення: Якщо це усуває клацання на USB DAC/гарнітурі, тримайте цю опцію вимкненою (або вимкніть тільки на AC, якщо вам важлива батарея).

Завдання 7: Знайти ризики «вимкнути цей пристрій» для USB хабів/контролерів

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class USB | Where-Object {$_.FriendlyName -match 'Hub|Controller'} | Select-Object Status,FriendlyName | Format-Table -AutoSize"
Status FriendlyName
------ ------------
OK     USB Root Hub (USB 3.0)
OK     Generic USB Hub
OK     USB xHCI Compliant Host Controller

Значення: Ви перелічили інфраструктуру, від якої може залежати аудіо.

Рішення: Для хабів/контролерів перевірте Диспетчер пристроїв → вкладка «Power Management» і зніміть «Allow the computer to turn off this device to save power». (Немає універсального CLI‑перемикача для всіх драйверів.)

Завдання 8: Визначте NIC (мережеві адаптери — класичні DPC‑злочинці)

cr0x@server:~$ powershell -NoProfile -Command "Get-NetAdapter | Select-Object Name,Status,InterfaceDescription,LinkSpeed | Format-Table -AutoSize"
Name   Status InterfaceDescription                     LinkSpeed
----   ------ --------------------                     ---------
Wi-Fi  Up     Intel(R) Wi-Fi 6E AX211                 1.2 Gbps
Ethernet Up   Realtek PCIe GbE Family Controller      1 Gbps

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

Рішення: Якщо шурхіт корелює з мережею (завантаження, дзвінки Teams), спочатку протестуйте з вимкненим Wi‑Fi.

Завдання 9: Тимчасово вимкніть Wi‑Fi, щоб ізолювати вплив драйвера

cr0x@server:~$ powershell -NoProfile -Command "Disable-NetAdapter -Name 'Wi-Fi' -Confirm:\$false"

Значення: Ви прибрали велике джерело переривань із системи.

Рішення: Якщо аудіо стало ідеальним одразу — вам не потрібен новий DAC. Потрібен фікс Wi‑Fi драйвера/налаштувань (оновлення/відкат, вимкнення енергозбереження, тонке налаштування offloads).

Завдання 10: Перевірте дати встановлення драйверів (шукайте недавні «корисні» оновлення)

cr0x@server:~$ powershell -NoProfile -Command "Get-WmiObject Win32_PnPSignedDriver | Where-Object {$_.DeviceClass -in 'MEDIA','NET'} | Select-Object DeviceName,DriverVersion,DriverDate | Sort-Object DriverDate -Descending | Select-Object -First 10 | Format-Table -AutoSize"
DeviceName                           DriverVersion  DriverDate
----------                           -------------  ----------
Intel(R) Wi-Fi 6E AX211              23.40.0.4      2025-01-15
Realtek(R) Audio                     6.0.9652.1     2024-12-02
NVIDIA High Definition Audio         1.4.0.1        2024-11-20

Значення: Ви можете зв’язати початок шурхоту з оновленнями драйверів.

Рішення: Якщо шурхіт почався «недавно», цей список часто робить «коли» менш загадковим.

Завдання 11: Перевірте здоров’я аудіосервісів Windows (рідко, але швидко)

cr0x@server:~$ powershell -NoProfile -Command "Get-Service Audiosrv,AudioEndpointBuilder | Format-Table -AutoSize Name,Status,StartType"
Name                 Status StartType
----                 ------ ---------
Audiosrv             Running Automatic
AudioEndpointBuilder Running Automatic

Значення: Якщо ці сервіси зупинені або скакають — у вас інша проблема, не DPC‑латентність.

Рішення: Якщо вони не Running — відновіть стан сервісу спочатку (і перевірте Event Viewer, чому він зупиняється).

Завдання 12: Витягніть системні журнали подій щодо аудіо/скидань драйверів

cr0x@server:~$ powershell -NoProfile -Command "wevtutil qe System /q:\"*[System[(Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) <= 86400000]]]\" /f:text /c:40"
Event[0]:
  Log Name: System
  Source:   Kernel-PnP
  Level:    Error
  ...
  Message:  The device USB\VID_1234&PID_5678... was not migrated due to partial or ambiguous match.

Значення: Kernel‑PnP, USB і помилки драйверів за останні 24 години часто є явними підказками для відпадів.

Рішення: Якщо ви бачите повторювані повідомлення про відключення/підключення USB або помилки міграції — фокусуйтесь на USB‑живленні та портах, а не на налаштуваннях частоти дискретизації.

Завдання 13: Перевірте, який процес «жере» CPU у момент шурхоту (перевірка здорового глузду)

cr0x@server:~$ powershell -NoProfile -Command "Get-Process | Sort-Object CPU -Descending | Select-Object -First 8 Name,Id,CPU,WorkingSet | Format-Table -AutoSize"
Name            Id    CPU WorkingSet
----            --    --- ----------
chrome        1040  812.4  950000000
dwm           1880  210.1  240000000
audiodg       1324   45.7   65000000

Значення: Це не DPC‑вимірювання, але ловить очевидні сценарії «CPU реально завантажений» (паблік із браузерною вкладкою, що шалено працює).

Рішення: Якщо щось дійсно насичує CPU — виправте це спочатку. Якщо CPU виглядає спокійним — повертайтеся до полювання на драйвери за латентністю.

Завдання 14: Підтвердіть, що тиск пам’яті не викликає пейджинг під час аудіо

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Memory\Available MBytes','\Memory\Pages/sec' -SampleInterval 1 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -AutoSize"
Path                       CookedValue
----                       -----------
\Memory\Available MBytes        5120
\Memory\Pages/sec                 3

Значення: Дуже мало вільної пам’яті плюс високий Pages/sec можуть спричиняти непередбачувані «пасти» системи.

Рішення: Якщо Available MB дуже мало і Pages/sec постійно високий під час шурхоту — закрийте програми або виправляйте витік пам’яті. Не романтично, але ефективно.

Завдання 15: Захопіть короткий perf‑трейс для доказів DPC/ISR (вбудовано)

cr0x@server:~$ wpr -start generalprofile
cr0x@server:~$ powershell -NoProfile -Command "Start-Sleep -Seconds 20"
cr0x@server:~$ wpr -stop C:\Temp\audio-latency.etl
WPR: Tracing session stopped.
WPR: Trace file saved to C:\Temp\audio-latency.etl

Значення: Ви створили ETL‑трейс, який можна відкрити в Windows Performance Analyzer, щоб побачити використання CPU по DPC/ISR і які драйвери винні.

Рішення: Якщо LatencyMon не дає чіткої відповіді (або потрібен доказ), цей трейс дозволяє припинити сперечатися з відчуттями і вказати на конкретні драйвери.

Тріаж драйверів: типові підозрювані та як це довести

Більшість інцидентів «клацання в Windows 11» — це не сам аудіодрайвер. Аудіодрайвер — перший, кого звинувачують, бо його чутно. Звичайні підозрювані:

  • Wi‑Fi драйвери (шторми переривань, переходи в енергозбереження).
  • GPU драйвери (сплески DPC, невикористовувані HDMI‑аудіо кінцеві точки).
  • Драйвери сховища (рідше, але трапляється з дивними RAID/фільтр драйверами).
  • ACPI / чіпсет (платформний енергоменеджмент, поведінка таймерів).
  • USB контролери (проблеми драйвера host controller, selective suspend).
  • APO‑ефекти (audio enhancements) (DSP‑плагіни від OEM‑пакетів).

Що означає «виправити драйвери» насправді

«Оновити драйвер» іноді правильно, а іноді ви створюєте нову проблему. У виробничому підході: драйвери — це модулі ядра; ставтеся до них як до ризикових деплойментів.

  • Якщо шурхіт почався після Windows Update або оновлення OEM: відкат — дійсна міра пом’якшення.
  • Якщо у вас дуже старий драйвер: оновлення може виправити відомі баги DPC.
  • Якщо ви на ноутбучних OEM‑стеках: «найновіший generic драйвер» може прибрати OEM‑налаштування і порушити визначення роз’ємів або масиви мікрофонів.

Вимикайте те, чим не користуєтесь (зменшуйте площу ураження)

Аудіо‑кінцеві точки, якими ви не користуєтесь, все одно завантажують компоненти і можуть опитуватись. Вимкнення невикористаних HDMI‑аудіо кінцевих точок NVIDIA/AMD — одне з найбезпечніших рішень «менше процесів = менше проблем».

Та сама логіка для OEM‑«ефектів». Якщо вони вам не потрібні — вимкніть enhancements. Ваші вуха потребують стабільності, не віртуальної концертної зали.

Жарт #1: Клацання аудіо у Windows — це просто ваш ПК, що намагається додати перкусію до плейлиста. Воно не найняте, тож звільніть його.

Енергоменеджмент: тихий генератор шурхотів

Енергозбереження працює, даючи обладнанню заснути, паркуючи ядра CPU і знижуючи тактові частоти. Кожен перехід має затримку. Аудіо ненавидить сплески затримки більше, ніж трохи повільніший CPU.

Найважливіші налаштування

  • Мінімальний стан процесора: надто низьке значення може спричиняти швидкі зміни частоти і затримки пробудження.
  • PCI Express Link State Power Management: може додавати затримку пробудження для пристроїв за PCIe (включно з деякими аудіошляхами).
  • USB selective suspend: може «усипляти» ваш аудіопристрій або хаб у найневідповідніший момент.
  • Енергозбереження бездротового адаптера: обмін батареї на сплески латентності.

Мій однозначний принцип

Якщо вам важливе реальне аудіо на ноутбуці з Windows, створіть присвячений «Audio» план живлення. Balanced — для таблиць. High performance — для тестування. Кастомний план — для повсякденного використання.

У корпоративному середовищі часто говорять «ми не можемо змінювати політики живлення». Зазвичай можна: налаштування плану живлення на рівні користувача зазвичай дозволені, навіть якщо BIOS‑зміни закриті.

USB і хаби: де «працює добре» перетворюється на провал

USB‑аудіо зазвичай стабільне — поки не перестає бути. Головна проблема: аудіо чутливе до часу, а топологія USB — брудна. Ваш «один кабель» може проходити через:

  • гарнітуру через хаб монітора,
  • потім через док,
  • потім через контролер USB, спільний з вебкамерою,
  • в той час як selective suspend намагається зекономити 0.3 ватта,
  • і драйвер генерує DPC‑сплески.

Практична стратегія ізоляції USB

  1. Підключайте безпосередньо до ПК. Приберіть хаби/доки.
  2. Спробуйте інший контролер. Задні порти зазвичай відрізняються від портів на передній панелі; USB‑C може бути на іншому контролері.
  3. Для деяких DAC‑ів віддавайте перевагу USB 2 порту, якщо постачальник рекомендує. Це не «повільніше»; іноді простіше.
  4. Вимкніть selective suspend (Завдання 6).
  5. Вимкніть «Allow the computer to turn off this device» для хабів/контролерів у Диспетчері пристроїв.

Чого не робити

  • Не «вирішуйте» шурхіт купівлею випадкового живленого хабу. Це підкидання монети з додатковими проводами.
  • Не думайте, що USB DAC імунний до системної латентності. Шина все одно потребує вчасного обслуговування.

Bluetooth‑аудіо та затирання: затримки з додатковими кроками

Bluetooth додає радіоперешкоди, узгодження кодеків і буферизацію. Воно може клацати навіть коли дротове аудіо в порядку. Діагностуйте Bluetooth окремо, інакше втратите час на «тюнінг» не тієї підсистеми.

Типові режими відмов Bluetooth

  • Завантаженість 2.4 GHz: Wi‑Fi, мікрохвильовки, шум USB 3, і дешеві донгли все борються в цьому діапазоні.
  • Переключення профілю Hands‑Free: гарнітура переходить в HFP/HSP для використання мікрофона і якість падає, іноді з артефактами.
  • Енергозбереження: радіо може «дрімати» в невідповідні моменти.
  • Проблеми стеку драйверів: OEM‑стеки Bluetooth сильно відрізняються.

Що дійсно допомагає

  • Використовуйте 5 GHz Wi‑Fi (або Ethernet), щоб зменшити конкуренцію в 2.4 GHz.
  • Розмістіть Bluetooth‑антену/донгл далі від USB 3 портів/кабелів (USB 3 може створювати RF‑шум у діапазоні 2.4 GHz).
  • У комунікаційних додатках обирайте правильний пристрій: «Headset» vs «Headphones» має значення.
  • Оновіть Bluetooth‑драйвери від OEM/вендора, якщо система використовує комбінований Wi‑Fi/Bluetooth чіпсет.

Жарт #2: Bluetooth‑аудіо — як стендап‑зустріч через готельний Wi‑Fi: працює, доки це справді важливо, потім винаходить нові склади.

Налаштування звуку Windows, які насправді мають значення

Люди часто натискають налаштування в надії, що щось зміниться. Робімо менше кліків, але з розумом.

Встановіть адекватний формат за замовчуванням

Виберіть частоту дискретизації і тримайте її стабільною. Часті перемикання форматів можуть викликати збої на деяких драйверах.

  • Для загального Windows + відео: 48 kHz, 24‑біт.
  • Для музичної продукції на 44.1 kHz: 44.1 kHz, 24‑біт і тримайте DAW синхронізованим.

Вимкніть enhancements і spatial audio (для діагностики)

Enhancements — це Audio Processing Objects (APOs). Вони можуть працювати. Але можуть і бути причиною проблем.

Для діагностики: вимкніть enhancements і spatial audio. Якщо шурхіт зникає, вмикайте по одному елементу — як контрольований rollout, а не фестиваль.

Exclusive mode: розумійте, що він робить

Exclusive mode дозволяє додатку говорити безпосередньо з пристроєм, минаючи загальний міксер. Це може зменшити затримку і пересемплювання, але також може:

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

Якщо ви усуваєте системний шурхіт — тестуйте і exclusive увімкнений, і вимкнений. Якщо ви DAW‑користувач — exclusive (або ASIO) часто правильний вибір; для робочого ноутбука з Teams — стабільність спільного режиму важливіша.

Налаштування буферів на рівні додатків і DAW

Якщо шурхіт виникає лише в одній програмі — не поспішайте звинувачувати Windows. Додатки самі обирають розміри буферів, частоти та іноді використовують exclusive mode без попередження.

Браузери та додатки для конференцій

  • Teams/Zoom/Discord: вони можуть перемикати пристрої, брати exclusive‑шлях і викликати зміни Bluetooth‑профілів при включенні мікрофона.
  • Браузери: апаратне прискорення може змінювати поведінку GPU‑драйвера і опосередковано впливати на сплески латентності.

DAW і професійне аудіо

Якщо ви користуєтесь DAW:

  • Почніть з розміру буфера, що віддає перевагу стабільності (256–512 семплів) і зменшуйте лише для запису з моніторингом у реальному часі.
  • Використовуйте ASIO‑драйвер вендора, коли є; WASAPI shared mode не найкращий інструмент для низької латентності в продакшені.
  • Погоджуйте частоту проєкту з пристроєм, щоб уникати постійного пересемплювання.

Професійне аудіо на Windows може бути стабільним. Просто воно вимагає ставитися до змін драйверів і живлення як до змін у продакшені: по одній, з планом відкату.

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

Інцидент №1: неправильне припущення (і дорога зустріч)

Середня компанія надала Windows 11 ноутбуки відділу продажів. За тиждень лідери почали скаржитися: «аудіо клацає під час демо». Внутрішнє припущення було класичним: вбудовані динаміки дешеві — купимо гарнітури. Закупівля діяла швидко. Коробки приїхали. Клацання залишилося.

IT створили «war room». Команда відтворила проблему: почати демонстрацію, розпочати дзвінок, потім запустити велике завантаження у фоні. Клацання з’являлось гарантовано. Навантаження CPU було низьким. Це важлива деталь; вона виключила «недостатньо потужності».

Вони запустили інструменти латентності і побачили DPC‑сплески, пов’язані з Wi‑Fi драйвером. Ключова деталь: ноутбуки були налаштовані на агресивне енергозбереження Wi‑Fi, щоб продовжити батарею в дорозі. Добре по наміру, але не для демонстрацій. Демонстрації — не сон.

Виправлення не було в гарнітурах. Це була зміна політики: вимкнути агресивне енергозбереження Wi‑Fi на AC, оновити Wi‑Fi драйвер до стабільної версії і заборонити OS віднергозагати адаптер посеред дзвінка. Клацання щезло. Гарнітури стали «необов’язковими» і закупівля тихо припинила масові замовлення.

Урок: аудіопристрій був невинний. Планувальник не винен. Поведінка переривань одного драйвера в конкретному навантаженні — справжня область відмови.

Інцидент №2: оптимізація, що відкотилася (батарея виграла, аудіо програло)

Інша організація — інженерна, багато відеодзвонів — вирішила стандартизувати енергозбереження. Вони розіслали налаштування: зменшили мінімальний стан процесора, зробили selective suspend агресивнішим і оптимізували link‑state. На папері батарея покращилась, і хтось побачив гарні числа у дашборді.

Але черга до служби підтримки стала музичним музеєм: потріскування, затирання, «робот‑голос», особливо у користувачів з USB‑спікерфонами і док‑станціями. Патерн був тонким: гірше після простою. Перший дзвінок дня — ок. Другий після обіду — хаос.

Спочатку звинувачували доки. Заміняли. Все марно. Потім підключили журнали: переходи харчування USB і скидання пристроїв співпали з початком дзвінків. Selective suspend робив свою справу: вимикав частини USB‑ланцюга. Коли аудіо відновлювалось, латентність пробудження і іноді переенумерація створювали відпади.

Виправлення було негарним: вимкнути selective suspend для користувачів з USB‑аудіо на доках і налаштувати живлення по‑іншому на AC vs батареї. Батарея трохи постраждала. Аудіо перестало принижувати людей. Дашборди стали менш зеленими. Протоколи зустрічей стали точнішими.

Інцидент №3: нудна практика, що врятувала день (контроль змін драйверів)

Мала SRE‑команда підтримувала трейдинговий підрозділ, де аудіо важливе для запису дзвінків і відповідності. У них було правило: жодних оновлень драйверів на підлозі без тестової кільцевої групи. Звучало бюрократично, допоки не знадобилось.

Windows Update запропонував новий пакет драйверів GPU. В офісному флоті це би пройшло непомітно. Але тут GPU‑драйвери пов’язані з кількома моніторами, відеодекодингом і — сюрприз — HDMI‑аудіо кінцевими точками. Одна машина у пілотній групі отримала оновлення. Через кілька годин пілот повідомив про періодичні пліки при переміщенні вікон між моніторами під час дзвінка.

Команда захопила трейс (WPR) і побачила DPC‑сплески, пов’язані з шляхом GPU драйвера під час переконфігурації дисплея. Вони відкотили драйвер на пілотній машині, перевірили стабільність і заблокували оновлення для ширшого кола, поки не протестували іншу версію.

Без героїзму. Без ночних чергувань. Просто поетапний rollout і відкат. Практика була нудною — і саме тому спрацювала. Продуктивне аудіо залишилось чистим. Compliance нікого не турбувала. Пілот отримав каву і легку вдячність — емоційний максимум для такого середовища.

Типові помилки: симптом → корінь → виправлення

Клацання лише під час завантаження або дзвінків

  • Симптом: Аудіо пшикає під час мережевої активності; в іншому — ок.
  • Корінь: NIC/Wi‑Fi драйвер — DPC‑сплески, offloads, переходи енергозбереження.
  • Виправлення: Оновіть/відкотіть NIC‑драйвер, вимкніть агресивне енергозбереження бездротового адаптера, тестуйте з вимкненим Wi‑Fi (Завдання 9), віддавайте перевагу Ethernet для дзвінків.

USB‑гарнітура клацає після простою або при підключенні дока

  • Симптом: Перше аудіо після простою клацає; док/відкріплення викликає відпади.
  • Корінь: USB selective suspend, управління живленням хабів, топологія дока.
  • Виправлення: Вимкніть USB selective suspend (Завдання 5–6), вимкніть живлення для хабів, підключіть аудіопристрій безпосередньо або до іншого контролера/порту.

Клацання почалося після оновлення GPU‑драйвера

  • Симптом: Потріскування під час ігор, переміщення вікон або перемикання моніторів.
  • Корінь: GPU‑драйвер — DPC‑сплески; невикористані HDMI‑аудіо кінцеві точки; оверлеї.
  • Виправлення: Чиста інсталяція стабільного GPU‑драйвера, відключення невикористаних GPU‑аудіо кінцевих точок, вимкнення оверлеїв, тестування апаратного прискорення в додатку.

Лише Bluetooth репетує; дротове аудіо чисте

  • Симптом: Bluetooth‑аудіо рветься; USB/3.5 мм — чисто.
  • Корінь: Перешкоди у 2.4 GHz, перемикання профілю, енергозбереження/драйвер Bluetooth.
  • Виправлення: Використовуйте 5 GHz Wi‑Fi, розташуйте донгл подалі від шуму USB 3, переконайтесь у виборі правильної кінцевої точки, оновіть Bluetooth‑драйвери.

Клацання в одній конкретній програмі

  • Симптом: DAW клацає при малому буфері; інші програми в порядку.
  • Корінь: Буфер занадто малий, невідповідність частот, конфлікт exclusive mode.
  • Виправлення: Збільшіть буфер, вирівняйте частоти, використовуйте ASIO, вимкніть інші аудіо‑додатки, тестуйте exclusive mode.

Клацання при увімкнених «enhancements»

  • Симптом: Увімкнення spatial/enhancements погіршує потріскування.
  • Корінь: Багований APO/DSP, додаткова обробка, затримка.
  • Виправлення: Вимкніть enhancements/spatial; якщо вони потрібні — оновіть OEM‑пакет і вмикайте ефекти по одному.

Клацання незважаючи на низький CPU і «все оновлено»

  • Симптом: Диспетчер завдань спокійний; аудіо все одно клацає.
  • Корінь: Висока DPC/ISR‑витрата часу (пріоритет ядра), не видно в юзер‑CPU.
  • Виправлення: Вимірюйте Latency за допомогою інструментів; ізолюйте відключенням пристроїв по черзі; використайте WPR‑трейс (Завдання 15) для ідентифікації драйвера.

Чеклісти / покроковий план

Чекліст A: 20‑хвилинний план «зробіть так, щоб перестало»

  1. Відтворіть шурхіт на вимогу (та сама пісня/відео, такий самий гучність, те саме навантаження).
  2. Переключіться на Високий план живлення (Завдання 4). Повторіть тест.
  3. Вимкніть USB selective suspend (Завдання 6). Повторіть тест (особливо для USB‑аудіо).
  4. Тимчасово вимкніть Wi‑Fi (Завдання 9). Повторіть тест з локальним аудіо.
  5. Вимкніть невикористані аудіо кінцеві точки (GPU HDMI, віртуальні пристрої) в Диспетчері пристроїв. Повторіть тест.
  6. Вимкніть enhancements/spatial для активного пристрою відтворення. Повторіть тест.
  7. Встановіть формат за замовчуванням 48 kHz 24‑біт (або під свій робочий процес). Повторіть тест.
  8. Якщо Bluetooth: тимчасово перейдіть на дріт, щоб підтвердити, що це радіо‑проблема.

Чекліст B: Стабілізація без постійного High performance

  1. Клонувати поточний план у власний «Audio» план.
  2. На AC: підвищити мінімальний стан процесора, вимкнути USB selective suspend, зменшити PCIe link‑state power saving.
  3. На батареї: зберегти розумні дефолти, але уникати найагресивнішого енергозбереження бездротового адаптера, якщо ви приймаєте дзвінки на батареї.
  4. Задокументувати версії драйверів, що стабільні (Wi‑Fi, GPU, аудіо, чіпсет).
  5. Після кожного циклу Windows Update: повторно перевірити 5‑хвилинним аудіотестом.

Чекліст C: Коли потрібні докази (для IT, вендорів або майбутнього вас)

  1. Захопіть WPR‑трейс під час шурхоту (Завдання 15).
  2. Експортуйте відповідні системні журнали подій по часових мітках (Завдання 12).
  3. Запишіть: використовуваний пристрій (USB/Bluetooth/вбудований), стан живлення (AC/DC) і активну мережу (Wi‑Fi/Ethernet).
  4. Зробіть одну зміну. Повторіть тест. Ведіть нотатки.

FAQ

1) Чому аудіо клацає при низькому завантаженні CPU?

Бо проблема зазвичай у затримці DPC/ISR, а не в середньому завантаженні CPU. Драйвер може коротко блокувати важливі шляхи і спричиняти underrun буфера.

2) Чи обов’язковий LatencyMon?

Ні, але він зручний. Ви також можете використати вбудований WPR/WPA‑трейс (Завдання 15), щоб побачити поведінку DPC/ISR і знайти проблемні драйвери.

3) Чи варто вимкнути «audio enhancements»?

Для діагностики — так. Enhancements — DSP‑компоненти, що можуть додавати затримку або бути багованими. Якщо вимкнення вирішує проблему — вмикайте тільки потрібні ефекти.

4) Яку частоту дискретизації обрати: 44.1 чи 48 kHz?

Для загального Windows і відео 48 kHz зазвичай найменш несподівана. Для музичного проєкту на 44.1 kHz встановіть пристрій і проєкт на 44.1 kHz, щоб зменшити пересемплювання.

5) Чи вирішить купівля зовнішнього USB DAC завжди клацання?

Ні. Він може покращити аналоговий шум і обійти поганий вбудований кодек, але не вирішить DPC‑затримки або проблеми з USB‑енергозбереженням.

6) Чому Bluetooth гірший за дріт?

Bluetooth додає радіоперешкоди, буферизацію кодеків і перемикання профілів (особливо при активному мікрофоні). Дротові шляхи прибирають ці класи помилок.

7) Чи варто використовувати «Ultimate Performance»?

Використовуйте його для тесту. Якщо це вирішує шурхіт — створіть кастомний план, що зберігає потрібні налаштування, не спалюючи батарею постійно.

8) Який найшвидший спосіб ізолювати проблемний драйвер?

Вимикайте пристрої по черзі: Wi‑Fi, Bluetooth, невикористані GPU‑аудіо кінцеві точки, доки/хаби. Для надійних доказів захопіть WPR‑трейс і проаналізуйте DPC/ISR за драйвером.

9) Я чую клацання лише в іграх — що спробувати спочатку?

Перевірте стабільність GPU‑драйвера (чиста інсталяція), відключіть оверлеї, переконайтесь, що гра не нав’язує дивний аудіо формат. Також перевірте налаштування живлення — ігрові ноутбуки люблять агресивні переходи енергозбереження.

10) Чи може сховище спричинити клацання аудіо?

Менш імовірно на сучасних системах, але так: фільтр‑драйвери, драйвери шифрування або проблемні контролери сховища можуть створювати сплески латентності. Якщо журнали подій показують скидання сховища — не ігноруйте це.

Наступні кроки (нудний стабільний стан)

Якщо ви хочете аудіо без шурхоту в Windows 11 без покупки обладнання, виграшний крок — це не магічна опція. Це дисциплінований цикл:

  1. Відтворіть проблему надійно. Якщо не можна відтворити — ви не можете виправити, лише перемістити проблему.
  2. Вимірюйте затримку, не вгадуйте. Використовуйте інструменти латентності або WPR‑трейс за потреби.
  3. Стабілізуйте живлення. Кастомний «Audio» план кращий за постійний «High performance».
  4. Спрощуйте драйвери. Вимикайте те, чим не користуєтесь; оновлюйте або відкачуйте «винного».
  5. Тримайте USB простим. Прямі порти, без хабів, без selective suspend для USB‑аудіо.
  6. Змінюйте одне за раз. Ви налагоджуєте, а не виконуєте ритуал.

Робіть так, і шурхіт зникне. Ваша система стане нудною. А в операціях нудне — найвища похвала.

WSL2 + Kubernetes: налаштування, яке не перегріває ваш ноутбук

Ви встановили Kubernetes локально, бо хотіли швидкості: швидко ітерації, тестувати чарти, налагоджувати контролери, можливо запускати невеликий стек платформи.
Потім вентилятори переходять у режим турбіни, SSD починає навантажуватися, і ваш «швидкий дев-кластер» перетворюється на причину, через яку Slack питає, чи ви онлайн.

WSL2 може бути чудовим місцем для запуску Kubernetes — якщо ставитися до нього як до реальної віртуальної машини з обмеженнями диска та пам’яті, а не як до чарівної папки Linux.
Це практичне налаштування, яке уникає класичних режимів відмов: неконтрольованого використання ОЗУ, повільного вводу/виводу, дивних проблем з DNS і «чому kubectl зависає?».

Що ви насправді будуєте (і чому це перегріває ноутбуки)

На Windows із WSL2 «запуск Kubernetes» рідко означає лише «запуск Kubernetes».
Це стек вкладених абстракцій, кожна з яких має власні уявлення про планування CPU, звільнення пам’яті, семантику файлової системи та мережу.
Коли будь-який шар помиляється, вашим ноутбуком розплачуються.

Типове налаштування Kubernetes на WSL2 виглядає так:

  • Операційна система Windows (хост)
  • VM WSL2 (легка Hyper-V VM з віртуальним диском)
  • Дистрибутив Linux userland (Ubuntu, Debian тощо)
  • Рuntime контейнерів (Docker Engine, containerd або стек nerdctl)
  • Дистрибуція Kubernetes (kind, k3d, minikube, microk8s або інтегрований кластер Docker Desktop)
  • Ваші робочі навантаження: бази даних, оператори, конвеєри збірки, ingress-контролери, service mesh — тобто «малий продакшн»

Перегрів зазвичай походить з одного з трьох місць:

  1. Пам’ять: WSL2 охоче кешує сторінки і не завжди швидко їх віддає. Kubernetes розподіляє поди, поки вузол «здається» нормальним, аж поки це перестає бути правдою.
  2. Зберігання: перетин кордону між Windows і Linux-файловими системами може перетворити нормальний I/O у повільний інцидент. Бази даних підсилюють проблему через fsync і дрібні випадкові записи.
  3. Мережа/DNS: kube-dns, Windows DNS, віртуальні мережеві інтерфейси WSL2 та клієнти VPN утворюють трикутник суму.

Мета — не «зробити блискавично швидко в бенчмарках». Мета — «зробити передбачувано достатньо швидко»,
і що важливіше, зробити режими відмов очевидними.
Надійність у деві важлива, бо дев — це місце, де ви вирішуєте, про що потім пошкодуєте у проді.

Кілька фактів і історичний контекст (щоб дивні речі були зрозумілі)

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

  1. WSL1 був трансляцією системних викликів; WSL2 — справжнє ядро Linux у VM. Саме тому WSL2 може правильно запускати Kubernetes, але й поводиться як VM з власними дисковими й пам’ятними політиками.
  2. WSL2 за замовчуванням зберігає файли Linux у віртуальному диску (VHDX). Цей диск може швидко рости і не завжди зменшується, поки ви явно не компактнете його.
  3. Доступ до файлів Linux з Windows — не те саме, що доступ до Windows з Linux. Характеристики продуктивності дуже відрізняються, і повільний шлях вдарить по базах даних і збірках образів.
  4. Kubernetes не був створений для ноутбуків. Він про кластери, де «вузол — це корівна VM», і можна спалювати CPU на циклах реконциляції, не чутливо до вентиляторів.
  5. kind запускає Kubernetes у Docker-контейнерах. Це чудово для відтворюваності, але додає ще один шар, де зберігання і мережа можуть стати «креативними».
  6. k3s (і відповідно k3d) створено як легковаговий варіант. Він використовує SQLite за замовчуванням, що підходить локально, але все одно навантажує диск при великій кількості контролерів.
  7. cgroups v2 змінив поведінку ізоляції ресурсів. Багато розмов «чому ігнорується ліміт пам’яті?» насправді про режим cgroup.
  8. DNS — топова причина відмов у локальних кластерах. Не тому, що DNS складний, а тому, що корпоративні VPN і split-horizon DNS можуть непомітно все перекреслити.
  9. Збірка образів карає за метадані файлової системи. Різниця між швидкою файловою системою і «переправленою» стає очевидною при багатоступеневих збірках з тисячами дрібних файлів.

Виберіть локальний Kubernetes: kind vs k3d vs minikube (і що я рекомендую)

Моя стандартна рекомендація: kind у WSL2 з обмеженнями

Для більшості розробників і SRE, що працюють з платформою, kind дає відтворюваність, швидкість і чисте знищення середовища.
Кластер — «просто контейнери», і ви можете зафіксувати версію Kubernetes легко.
Ключ — обмежити ресурси WSL2 і тримати робочі навантаження на файловій системі Linux.

Коли віддати перевагу k3d (k3s у Docker)

Якщо ваша ціль — «запустити практичний дев-платформений стек з мінімальними накладними витратами», k3d відмінний вибір.
k3s обрізає зайве: менше компонентів, менше пам’яті. Він більш поблажливий на менших ноутбуках.
Також він ближчий до того, що часто використовують на edge-пристроях, що корисно, якщо ви деплоїте в обмежені середовища.

Коли використовувати minikube

minikube підходить, коли ви хочете «один інструмент для багатьох драйверів».
Але на WSL2 minikube може загнати вас у плутанину драйверів: Docker driver, KVM (зазвичай ні), Hyper-V (по стороні Windows),
і тоді ви почнете дебажити драйвер більше, ніж кластер.
Якщо ви вже комфортно користуєтеся Docker всередині WSL2, Docker driver minikube придатний.

Чого уникати (якщо немає вагомої причини)

  • Запускати важкі stateful навантаження на /mnt/c і потім звинувачувати Kubernetes у повільності. Це не Kubernetes; це межа файлових систем, яка просить припинити.
  • Перевиділяти CPU та RAM «бо це локально». WSL2 це прийме, Windows відповість, а ваш браузер програє.
  • Намагатися робити «як у проді» з усім увімкненим. Service mesh + розподілене трасування + три оператори + база даних + CI — це не дев-кластер; це хобі-центр обробки даних.

Короткий жарт, як обіцяно: Kubernetes схожий на кухню з 30 шефами — ніхто не готує швидше, але всі роблять звіт.

Базові положення WSL2: ліміти, ядро та речі, про які Windows не скаже

Встановіть обмеження WSL2 або прийміть хаос

За замовчуванням WSL2 буде масштабувати використання пам’яті до значної частини вашого системного ОЗП.
Це не злий намір. Це Linux робить свої Linux-справи — використовує пам’ять під кеш.
Проблема в тому, що Windows не завжди повертає цю пам’ять у спосіб, який відчувається ввічливо.

Покладіть файл .wslconfig у ваш профіль користувача Windows (на стороні Windows).
Потрібен верхній ліміт пам’яті та CPU, і бажано swap, який існує, але не замінює RAM.

cr0x@server:~$ cat /mnt/c/Users/$WINUSER/.wslconfig
[wsl2]
memory=8GB
processors=4
swap=4GB
localhostForwarding=true

Рішення: Якщо у вас 16GB RAM загалом, 8GB для WSL2 зазвичай розумно.
Якщо 32GB — можна 12–16GB. Більше зазвичай приховує витоки та погані межі подів.

Поведінка звільнення пам’яті WSL2: використайте наявні інструменти

У WSL2 поліпшили звільнення пам’яті, але іноді вона все ще прилипає після важких збірок або зміни кластерів.
Якщо потрібно швидко повернути пам’ять, вимкнення WSL — грубий, але дієвий інструмент.

cr0x@server:~$ wsl.exe --shutdown
...output...

Що означає вивід: Відсутність виводу — нормально. Це зупиняє всі дистрибутиви WSL і VM WSL2.
Рішення: Використовуйте це, коли Windows стискає пам’ять і потрібно повернути її негайно, а не під час налагодження проблем у кластері.

Використовуйте systemd у WSL2 (якщо доступно) і будьте явними

Сучасний WSL підтримує systemd. Це робить запуск Docker/containerd і інструментів Kubernetes менш незграбним.
Перевірте, чи увімкнено systemd.

cr0x@server:~$ ps -p 1 -o comm=
systemd

Що означає вивід: Якщо PID 1 — systemd, ви можете використовувати звичайне управління сервісами.
Якщо інше (наприклад, init), доведеться керувати демонами по-іншому.
Рішення: Віддавайте перевагу WSL з systemd для стабільності і менше «чому це не запустилося?» загадок.

Зберігання в WSL2: різниця між «працює» і «не ненавидить вас»

Правило №1: тримайте дані Kubernetes у файловій системі Linux

Розміщуйте стан кластера, образи контейнерів і дані персистентних томів у файловій системі дистрибутива Linux (наприклад, /home, /var).
Уникайте розміщення інтенсивних записів на /mnt/c.
Шар інтеграції може підходити для редагування коду, але це пастка для баз даних і всього, що інтенсивно викликає fsync.

Правило №2: зрозумійте, куди йдуть байти

Docker/containerd зберігає образи й writable-леєри десь під /var/lib.
kind і k3d додають власні шари.
Якщо ви багато будуєте образів або запускаєте CI-подібні навантаження, ваш VHDX ростиме. Він може не зменшуватись.
Це не моральний дефект; так працюють віртуальні диски.

Правило №3: вимірюйте I/O нудним способом

Вам не потрібні спеціальні інструменти зберігання, щоб помітити великі проблеми. Потрібні два порівняння:
продуктивність файлової системи Linux і продуктивність Windows-монту.
Якщо одна швидкість у 10 разів менша, не «налаштовуйте Kubernetes». Перенесіть навантаження.

cr0x@server:~$ dd if=/dev/zero of=/home/cr0x/io-test.bin bs=1M count=512 conv=fdatasync
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.24 s, 433 MB/s

Що означає вивід: Це грубий послідовний запис з флашем. Сотні MB/s очікувані на SSD.
Рішення: Якщо це однозначні MB/s, ваша VM під I/O тиском або диск має проблеми. Виправляйте це перед Kubernetes.

cr0x@server:~$ dd if=/dev/zero of=/mnt/c/Users/$WINUSER/io-test.bin bs=1M count=256 conv=fdatasync
256+0 records in
256+0 records out
268435456 bytes (268 MB, 256 MiB) copied, 12.8 s, 21.0 MB/s

Що означає вивід: Якщо ви бачите таке падіння, це шлях інтеграції.
Рішення: Не розміщуйте /var/lib/docker, /var/lib/containerd або каталоги PV на /mnt/c.
Тримайте там код, якщо потрібно, але кеші збірки та бази даних — у Linux-просторі.

Зростання VHDX: компактування — це обслуговування, а не одноразовий фікс

Якщо ваш віртуальний диск WSL2 виріс через збірки образів і churn, ви можете його компактнути — але це не автоматично.
Спочатку очистіть всередині Linux: видаліть невикористані образи, prune томи, очистіть кеші.
Потім компактніть зі сторони Windows. Конкретні кроки відрізняються в залежності від збірки Windows і інструментів, але принцип постійний:
видаліть невикористані блоки в гості, потім скажіть хосту компактнути.

Суха правда: локальні кластери створюють дані. Вони рідко їх видаляють так агресивно, як ви думаєте.
Якщо ставитись до дев-середовища як до продакшену, треба планувати обслуговування як у проді. Ось така угода.

Мережа: NodePorts, ingress, DNS і пастка localhost

Localhost — це не філософія; це рішення маршрутизації

У WSL2 «localhost» може означати localhost Windows або localhost WSL залежно від того, як запущено процес.
З localhostForwarding=true WSL може форвардити порти на Windows, але це не магія для всіх шаблонів трафіку.

Якщо ви запускаєте kind у WSL2 і відкриваєте сервіс через NodePort, ви часто будете звертатися до нього з Windows через форвард порти
або звертаючись до IP VM WSL. Обидва способи можуть працювати. Важливо бути послідовним і документувати, який метод використовує ваша команда.

DNS: мовчазний вбивця kubectl

Багато скарг «Kubernetes повільний» насправді — це таймаути DNS.
kubectl виглядає так, ніби завис, але чекає на виклики API-сервера, які ніяк не розв’язуються.
VPN-клієнти ускладнюють це, впроваджуючи резолвери або змушуючи split DNS.

Ваше завдання — відокремити «API-сервер повільний» від «розв’язування імен повільне» менш ніж за п’ять хвилин.
Потім можна сперечатися з корпоративним VPN.

Практичні завдання (команди, виводи та рішення)

Це реальні задачі, які ви виконуватимете при налаштуванні та під час налагодження.
Кожна містить, що означає вивід і яке рішення з нього випливає.
Робіть їх по черзі при створенні нового середовища; вибірково — коли все горить.

Завдання 1: Підтвердіть, що ви на WSL2 (не WSL1)

cr0x@server:~$ wsl.exe -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

Що означає вивід: VERSION 2 означає справжню Linux-VM. VERSION 1 — трансляцію системних викликів.
Рішення: Якщо у вас VERSION 1, зупиніться і конвертуйте. Kubernetes потребує реальної поведінки ядра.

Завдання 2: Перевірте ядро та режим cgroup

cr0x@server:~$ uname -r
5.15.146.1-microsoft-standard-WSL2
cr0x@server:~$ mount | grep cgroup2
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)

Що означає вивід: cgroup2 змонтований означає єдину ієрархію.
Рішення: Якщо ваше ПО очікує cgroup v1 (старі конфігурації Docker, деякі агенти моніторингу), готуйтеся до сюрпризів.

Завдання 3: Підтвердьте systemd і контроль сервісів

cr0x@server:~$ systemctl is-system-running
running

Що означає вивід: systemd активний і стабільний.
Рішення: Якщо ви бачите degraded, перевірте неуспішні одиниці перед тим, як звинувачувати Kubernetes у «випадкових» проблемах.

Завдання 4: Підтвердьте здоров’я runtime контейнерів (приклад Docker)

cr0x@server:~$ docker info --format '{{.ServerVersion}} {{.CgroupVersion}}'
24.0.7 2

Що означає вивід: Docker доступний і повідомляє версію cgroup.
Рішення: Якщо ця команда повільна або зависає, виправте Docker перед тим, як чіпати kind/k3d.

Завдання 5: Швидко виміряйте тиск пам’яті

cr0x@server:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       5.9Gi       310Mi       160Mi       1.5Gi       1.3Gi
Swap:          4.0Gi       1.2Gi       2.8Gi

Що означає вивід: available важливіший за free. Використання swap свідчить про тиск.
Рішення: Якщо available менше ~1Gi і swap росте, зменшіть кластер, знизьте ліміти або підвищте пам’ять WSL.

Завдання 6: Перевірте заповненість диска там, де це важливо

cr0x@server:~$ df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb       250G  180G   71G  72% /

Що означає вивід: Це файловa система вашого дистрибутива, підкріплена VHDX.
Рішення: Вище ~85% заповнення продуктивність і поведінка компактування погіршуються. Обріжте образи і старі PV.

Завдання 7: Встановіть і створіть кластер kind з розумними налаштуваннями

cr0x@server:~$ kind create cluster --name dev --image kindest/node:v1.29.2
Creating cluster "dev" ...
 ✓ Ensuring node image (kindest/node:v1.29.2) 🖼
 ✓ Preparing nodes 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
Set kubectl context to "kind-dev"
You can now use your cluster with:

kubectl cluster-info --context kind-dev

Що означає вивід: Кластер створено, контекст встановлено. StorageClass інстальовано (зазвичай standard).
Рішення: Якщо встановлення CNI зависає, підозрюйте DNS/proxy/VPN або проблеми з підтягуванням образів — не повторюйте спроби бездумно.

Завдання 8: Перевірте живучість кластера та здоров’я компонентів

cr0x@server:~$ kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:40685
CoreDNS is running at https://127.0.0.1:40685/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
cr0x@server:~$ kubectl get nodes -o wide
NAME                STATUS   ROLES           AGE   VERSION   INTERNAL-IP   OS-IMAGE
dev-control-plane   Ready    control-plane   2m    v1.29.2   172.18.0.2    Debian GNU/Linux 12 (bookworm)

Що означає вивід: API-сервер доступний, вузол Ready, внутрішня IP-адреса призначена.
Рішення: Якщо вузол NotReady — одразу дивіться kubectl describe node і логи CNI — не перевстановлюйте все поки що.

Завдання 9: Знайдіть справжніх споживачів ресурсів (вузли + поди)

cr0x@server:~$ kubectl top nodes
NAME                CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
dev-control-plane   620m         15%    2240Mi          56%

Що означає вивід: metrics-server працює (kind часто включає його через addons або ви його встановили).
Рішення: Якщо пам’ять висока в режимі простою — перевірте нав’язливі контролери, витоки dev-зборок або завислий лог-шифтер.

Завдання 10: Перевірка DNS у кластері (дешевий smoke test)

cr0x@server:~$ kubectl run -it --rm dns-test --image=busybox:1.36 --restart=Never -- nslookup kubernetes.default.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
pod "dns-test" deleted

Що означає вивід: CoreDNS відповідає, service discovery працює.
Рішення: Якщо це таймаутиться, виправте DNS перед тим, як налагоджувати додаток. Додаток невинний, поки не доведено інше.

Завдання 11: Підтвердіть, чи повільний kubectl через мережу або API-латентність

cr0x@server:~$ time kubectl get pods -A
NAMESPACE     NAME                                        READY   STATUS    RESTARTS   AGE
kube-system   coredns-76f75df574-2lq9r                    1/1     Running   0          4m
kube-system   coredns-76f75df574-9x2ns                    1/1     Running   0          4m
kube-system   etcd-dev-control-plane                      1/1     Running   0          4m
kube-system   kindnet-4cdbf                               1/1     Running   0          4m
kube-system   kube-apiserver-dev-control-plane            1/1     Running   0          4m
kube-system   kube-controller-manager-dev-control-plane   1/1     Running   0          4m
kube-system   kube-proxy-4xw26                            1/1     Running   0          4m
kube-system   kube-scheduler-dev-control-plane            1/1     Running   0          4m

real    0m0.312s
user    0m0.127s
sys     0m0.046s

Що означає вивід: 300ms — нормально для локального. Кілька секунд підозрілі — DNS, плутанина контекстів kubeconfig або проблеми API-сервера.
Рішення: Якщо це повільно, запустіть kubectl get --raw /readyz?verbose далі.

Завдання 12: Перевірте готовність API-сервера для реального блокера

cr0x@server:~$ kubectl get --raw='/readyz?verbose'
[+]ping ok
[+]log ok
[+]etcd ok
[+]informer-sync ok
[+]poststarthook/start-apiserver-admission-initializer ok
[+]poststarthook/start-apiextensions-informers ok
[+]poststarthook/start-apiextensions-controllers ok
readyz check passed

Що означає вивід: Якщо etcd або informer sync повільні/відмовляють, контрольна площина — вузьке місце.
Рішення: Повільний etcd часто означає затримку зберігання. Це натяк перевірити диск і уникати крос-файлової I/O.

Завдання 13: Знайдіть под, що «спалює» ваш ноутбук (CPU/пам’ять)

cr0x@server:~$ kubectl top pods -A --sort-by=memory | tail -n 10
default       api-7b7c7d8f6c-9bq5m             1/1     980Mi
observability prometheus-0                      2/2     1210Mi
observability loki-0                            1/1     1530Mi

Що означає вивід: Ви бачите топ-споживачів.
Рішення: Якщо ваш дев-кластер включає Prometheus/Loki за замовчуванням, ви щойно знайшли причину «чому гаряче?».
Зменшіть масштаб, скоротіть ретенцію або використайте легші інструменти локально.

Завдання 14: Перевірте використання диска runtime контейнерів (Docker)

cr0x@server:~$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          42        12        18.4GB    12.1GB (65%)
Containers      19        6         1.2GB     720MB (60%)
Local Volumes   27        9         9.8GB     6.3GB (64%)
Build Cache     124       0         22.6GB    22.6GB

Що означає вивід: Build cache часто — мовчазний пожирач диска.
Рішення: Якщо reclaimable велике, чистіть свідомо. Не чекайте, поки VHDX досягне 95% і все сповільниться.

Завдання 15: Працюйте з prune обережно (і прийміть компроміс)

cr0x@server:~$ docker builder prune --all --force
Deleted build cache objects:
v8m3q8qgk7yq4o0l5u3f7s1m2
...
Total reclaimed space: 22.6GB

Що означає вивід: Ви звільнили простір, за ціною повторної збірки шарів пізніше.
Рішення: У деві диск і стабільність важливіші, ніж зекономлені 90 секунд на наступній збірці.

Завдання 16: Перевірте, чи випадково не запускаєте навантаження на /mnt/c

cr0x@server:~$ kubectl get pv -A -o wide
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                      STORAGECLASS   REASON   AGE   VOLUMEMODE
pvc-1d2c7f7e-2f5d-4c0d-9a3a-2c6f9d8b1a7c   10Gi       RWO            Delete           Bound    default/db-data           standard                8m    Filesystem

Що означає вивід: Це не показує шлях хоста. У kind провайдер local-path і поведінка provisioning відрізняються.
Рішення: Розгляньте storage class і поведінку provisioner; якщо воно прив’язується до hostPath на Windows-монту, виправте негайно.

Завдання 17: Діагностика kubelet/container через логи вузла (контейнер kind node)

cr0x@server:~$ docker ps --format 'table {{.Names}}\t{{.Status}}' | grep dev-control-plane
dev-control-plane   Up 6 minutes
cr0x@server:~$ docker logs dev-control-plane | tail -n 20
I0205 09:10:12.123456       1 server.go:472] "Kubelet version" kubeletVersion="v1.29.2"
I0205 09:10:15.234567       1 kubelet.go:2050] "Skipping pod synchronization" error="PLEG is not healthy"
...

Що означає вивід: Якщо PLEG нездоровий, kubelet бореться — часто через I/O диска або повільний runtime контейнерів.
Рішення: Перевірте затримки диска, здоров’я runtime і кількість логів.

Завдання 18: Швидка перевірка «штормів логів» (вони можуть бути найгарячішим навантаженням)

cr0x@server:~$ kubectl logs -n kube-system deploy/coredns --tail=20
.:53
[INFO] plugin/reload: Running configuration SHA512 = 7a9b...
[INFO] 10.244.0.1:52044 - 46483 "A IN kubernetes.default.svc.cluster.local. udp 62 false 512" NOERROR qr,aa,rd 114 0.000131268s

Що означає вивід: Деякі DNS-логи — нормальні. Тисячі на секунду — ні.
Рішення: Якщо логи «гарячі», знизьте рівень логування, виправте цикл повторних спроб клієнта або ви заплатите CPU і дисковими записами.

Три корпоративні міні-історії з поля бою

Міні-історія 1: Інцидент через неправильне припущення

Команда, з якою я працював, стандартизувала WSL2 для дев-кластерів, бо це «майже Linux».
Вони тримали репозиторій на файловій системі Windows для зручності IDE, а потім монтували його в контейнери для збірок і тестів.
Здавалося, усе було добре для невеликих сервісів. Потім платформа додала локальний Postgres, контролер і тестовий набір, що запускав міграції при кожному запуску.

Симптом був дивний: міграції іноді займали 30 секунд, іноді 10 хвилин.
Люди звинувачували «накладні витрати Kubernetes» і «той оператор».
Один інженер намагався виправити це, підвищивши ліміти CPU. Стало гірше — більше CPU тільки прискорило досягнення дискового вузького місця.

Неправильне припущення було простим: вони вважали /mnt/c «ще однією файловою системою».
Це не так. Це межа з іншою поведінкою кешування, іншою продуктивністю метаданих і іншою семантикою скидання.
Їхній том бази даних і кеші збірки були на повільному шляху.

Виправлення було непривабливим: перемістити базу даних і кеші збірки у файлову систему Linux, і тримати вихідний код на Windows лише якщо потрібно.
Вони також додали preflight-скрипт, що відмовлявся запускати стек, якщо виявляв PV, спрямовані на /mnt/c.
Продуктивність стабілізувалась миттєво. Ніхто не святкував — отже, це було правильне рішення.

Міні-історія 2: Оптимізація, що обернулася проти

Інша компанія хотіла «швидші локальні кластери», тому заздалегідь підвантажила все: стек спостереження, ingress, cert-manager і кілька операторів.
Ідея була благородна: скоротити час онбордингу, гарантувати однакову базу для всіх, уникнути «працює на моєму ноутбуці».
Вони навіть створили внутрішній скрипт, що створював кластер і встановлював усі чарти за один раз.

Потім почалися тікети. Ноутбуки нагрівалися на нарадах. Тривалість роботи акумулятора впала.
kubectl іноді лагав на кілька секунд. Розробники почали відключати компоненти «тимчасово», що перетворилося на постійний дріфт.
Команда платформи відповіла, підвищивши дефолтні ліміти ресурсів і кількість реплік, бо «парність з продом».

Зворотний ефект виник через фонову роботу контролерів і їхню активність.
Prometheus scraping, Loki ingest, cert-manager reconciliation і цикли операторів — це не безкоштовно.
У реальному кластері цю вартість амортизує кілька серверів. На ноутбуку ви відчуваєте це щоразу, коли вентилятор розкручується.

Виправлення — визначити два профілі: core (ingress + DNS + storage + metrics-server) і full (важкий стек).
Core — за замовчуванням; full — за бажанням для налагодження.
Вони також знизили інтервали скрейпу і ретенцію в локальному режимі. Іронія: онбординг прискорився, бо люди перестали боротись із середовищем.

Міні-історія 3: Нудна, але правильна практика, що врятувала

Регульована підприємницька організація (та, що любить таблиці) мала дивно гладкий досвід WSL2 Kubernetes.
Секрет не в досконалому стеку інструментів. Секрет — дисципліна: фіксація версій, відтворюване створення кластера і агресивне прибирання.
Кожен розробник мав той самий образ kind node, ті самі версії чартів і однакові дефолтні ліміти ресурсів.

Вони також мали тижневу рутинну процедуру: prune невикористані образи, видаляти невживані неймспейси і компактувати дев-середовище при потребі.
Це було заплановано, задокументовано і нудно.
Розробники спочатку скаржилися — ніхто не любить «день обслуговування» для ноутбука.

Потім стався день, коли оновлення Windows змінило щось тонке в мережі.
Піворганізації почали отримувати переривчасті DNS-збої.
Команди з різними середовищами мали хаос: різні версії CNI, випадкові kubeconfig, непослідовні локальні DNS-переопреділення.
Дисципліновані команди швидко відтворили проблему і порівняли «яблука з яблуками».

Вони локалізували проблему до поведінки резолвера під VPN, накотили стандартизоване рішення і повернулися до роботи.
Нудна практика врятувала день: послідовні версії і базові налаштування роблять відлагодження кінцевим.

Швидкий план діагностики: що перевіряти спочатку, потім, далі

Коли ваш ноутбук плавиться або кластер «повільний», часу милуватися архітектурою немає.
Потрібен детермінований шлях до вузького місця.

Перш за все: чи зазнає хост (Windows + WSL2) навантаження по ресурсам?

  1. Перевірте використання пам’яті і swap WSL2: free -h. Якщо available низький і swap росте — ви обмежені пам’яттю.
  2. Перевірте заповненість диска: df -h /. Якщо майже повний — усе стає повільнішим і вразливішим.
  3. Швидка перевірка I/O: dd ... conv=fdatasync на Linux FS vs /mnt/c. Якщо Linux FS теж повільний — проблема на рівні системи.

Друге: чи здорова контрольна площина Kubernetes або вона застрягла?

  1. API readyz: kubectl get --raw='/readyz?verbose'. Якщо перевірки etcd повільні — підозрюйте затримку зберігання.
  2. Стан вузлів: kubectl get nodes і kubectl describe node. Якщо NotReady — дивіться CNI і симптоми kubelet.
  3. Smoke test CoreDNS: запустіть busybox nslookup. Якщо DNS зламаний — зупиніть притягування додатка у відповідальність.

Третє: яке навантаження справді «спалює» CPU/пам’ять/I/O?

  1. Топ-споживачі: kubectl top pods -A --sort-by=memory і --sort-by=cpu.
  2. Шторми логів: перевірте логи підозрюваних подів. Висока швидкість запису = тиск на I/O = загальне уповільнення.
  3. Частота збірок/образів: docker system df і при потребі prune build cache, якщо він роздувся.

Парафраз ідеї Вернера Фогельса: «Усе ламається, постійно». Будуйте локальне середовище так, щоб відмова була швидко діагностованою, а не загадковою.

Поширені помилки: симптом → корінна причина → виправлення

1) Симптом: вентилятори ноутбука спрацьовують, коли кластер «в режимі простою»

Корінна причина: фонові контролери (стек спостереження, оператори) постійно роблять реконциляцію; або под у crash loop записує логи.

Виправлення: kubectl top pods -A, знайдіть хижака; зменшіть масштаб; скоротіть ретенцію/інтервали скрейпу; виправте crash loop; встановіть розумні requests/limits.

2) Симптом: kubectl іноді виконується 5–30 секунд

Корінна причина: таймаути DNS або втручання VPN-резолвера; іноді kubeconfig вказує на мертвий контекст.

Виправлення: запустіть time kubectl get pods -A, потім kubectl get --raw='/readyz?verbose'. Якщо readyz у порядку, перевірте DNS у кластері. Якщо DNS ламається — вирішіть resolv.conf/policy split DNS або працюйте без VPN для локальних задач.

3) Симптом: Postgres/MySQL у кластері надто повільні

Корінна причина: PV або bind mounts на /mnt/c або іншому повільному кордоні; fsync-інтенсивні навантаження підсилюють це.

Виправлення: тримайте дані PV у файловій системі Linux; використовуйте local-path provisioner, що пише в /var всередині WSL, а не на Windows-монти.

4) Симптом: WSL2 поглинає RAM і ніколи не віддає

Корінна причина: кеш сторінок Linux + поведінка звільнення WSL2; великі збірки і pull образів заповнюють кеш; не задано ліміт пам’яті.

Виправлення: встановіть обмеження у .wslconfig; перезапускайте WSL через wsl.exe --shutdown коли потрібно; зменшіть відбиток кластера і уникайте запуску всього одночасно.

5) Симптом: диск «таємниче» заповнюється

Корінна причина: шари образів контейнерів, build cache, залишкові PV дані і логи; VHDX росте; prune не виконувалися.

Виправлення: docker system df і docker builder prune --all; видаліть невикористані неймспейси/PV; слідкуйте за df -h.

6) Симптом: вузол стає NotReady; поди зависають у ContainerCreating

Корінна причина: CNI зламаний або kubelet/runtime контейнерів страждають через I/O; контейнер kind node нездоровий.

Виправлення: перевірте логи контейнера kind node; перевірте CNI-поди в kube-system; виправте дисковий тиск; відновіть кластер, якщо образ вузла пошкоджено.

7) Симптом: ingress працює з WSL, але не з Windows

Корінна причина: неправильні очікування форвардингу портів; брандмауер Windows/VPN; плутанина між IP WSL і localhost Windows.

Виправлення: оберіть один метод доступу (форвардинг localhost або IP WSL); задокументуйте його; відкрийте ingress з передбачуваним відображенням; перевірте curl з обох сторін.

8) Симптом: збірки всередині контейнерів повільніші за збірки на Windows

Корінна причина: дерево сорсів на Windows-монті; інтенсивні операції з метаданими через межу; антивірус Windows сканує шлях.

Виправлення: тримайте вихідник у файловій системі Linux для збірок; користуйтеся IDE через інтеграцію WSL; виключіть каталоги збірки з AV, якщо політика дозволяє.

Другий і останній короткий жарт: Якщо ваш дев-кластер потребує runbook — вітаю, ви побудували малий продакшен з гіршим фінансуванням.

Контрольні списки / покроковий план

План налаштування (зробіть це одного разу на ноутбук)

  1. Встановіть ліміти WSL2 у .wslconfig: обмежте пам’ять і CPU; увімкніть розумний swap.
  2. Увімкніть systemd у WSL (якщо підтримується) і стандартизуйте це в команді.
  3. Виберіть один runtime: Docker Engine у WSL2 підходить; уникайте змішування Docker Desktop + WSL Docker, якщо вам не до вподоби невизначеність.
  4. Виберіть один інструмент Kubernetes: kind (рекомендовано) або k3d. Виберіть і стандартизируйте скрипти створення кластера.
  5. Тримайте дані кластера в Linux FS: переконайтеся, що зберігання runtime і PV не на /mnt/c.
  6. Визначте профілі: «core» за замовчуванням; «full» — опційно. Ноутбук — не staging.
  7. Зафіксуйте версії: image версії kind node, версії чартів і критичних аддонів.

Щоденний робочий список (залишайтесь швидкими і адекватними)

  1. Перед важкою роботою: free -h і df -h /. Якщо низько — зробіть prune перш ніж починати.
  2. Після важкого дня збірок: docker system df. Якщо build cache величезний — prune.
  3. Коли щось здається повільним: спочатку тест DNS і перевірки /readyz, перш ніж щось міняти.
  4. Тримайте репозиторій там, де інструменти найшвидші: якщо збірки у Linux — робочу копію тримайте у Linux.

Щотижневий чеклист обслуговування (нудно, але дієво)

  1. Prune build cache: docker builder prune --all.
  2. Prune невикористані образи і контейнери: docker system prune (обережно: зрозумійте, що видаляється).
  3. Видаліть невикористані неймспейси і PV у дев-кластері.
  4. Пересоздайте кластер, якщо накопичився дріфт. Розрив і пересоздання — це функція.
  5. Поверніть пам’ять, якщо Windows прижимає: wsl.exe --shutdown.

Питання й відповіді

1) Чи використовувати Docker Desktop чи Docker Engine у WSL2?

Якщо ви хочете найпростішу інтеграцію з Windows і в компанії стандартизовано Docker Desktop — це нормально.
Якщо хочете менше рухомих частин і більш передбачувану поведінку Linux — використовуйте Docker Engine у WSL2.
Виберіть одне і дотримуйтеся; змішані налаштування породжують фольклор дебагу.

2) Чому зберігання даних на /mnt/c таке проблемне?

Тому що ви перетинаєте віртуалізаційний/інтероперабельний кордон з різним кешуванням і семантикою метаданих.
Бази даних роблять багато дрібних записів і викликів fsync. Цей шлях карає їх.
Тримайте інтенсивні I/O в Linux-файловій системі і сприймайте /mnt/c як «добре для документів, не для гарячих даних».

3) kind чи k3d: що менше «розплавить» мій ноутбук?

k3d часто вимагає менше пам’яті за замовчуванням, бо k3s компактніший.
kind надзвичайно передбачуваний і легко фіксувати версії. Обидва можуть бути безпечними для ноутбука, якщо навантаження помірне і встановлено ліміти WSL2.
Моя уподобання: kind для роботи з платформою та імітації мультивузловості; k3d для «просто запустити стек».

4) Скільки RAM виділити WSL2?

На 16GB всього: 6–8GB як верхня межа — хороший вибір.
На 32GB: 12–16GB підходить.
Якщо виділити занадто багато, ви заховаєте погані ліміти подів і тонко голодуватимете Windows-додатки.

5) Чому WSL2 тримає пам’ять після зупинки навантажень?

Linux агресивно використовує пам’ять під файловий кеш. Це зазвичай добре.
Звільнення пам’яті WSL2 назад у Windows може бути повільнішим, ніж хочеться.
Якщо треба RAM негайно — вимкніть WSL; якщо хочете довготривалу нормальність — обмежте пам’ять і зменшіть фоновий шум.

6) Чому kubectl повільний лише коли увімкнений VPN?

VPN-клієнти часто впроваджують DNS-резолвери і правила маршрутизації.
Kubernetes залежить від DNS внутрішньо, а kubectl — від надійного з’єднання з API.
Діагностуйте за допомогою тесту DNS і readyz; потім вирішіть, чи split-tunnel, налаштування резолверів або робота з локальним кластером без VPN.

7) Як відкрити сервіси в Windows з кластера у WSL2?

Визначте, чи використовуєте ви форвардинг localhost або IP VM WSL.
Для передбачуваного UX багато команд роблять порт-форвард (kubectl port-forward) або запускають ingress, який відображається на відомих портах.
Задокументуйте метод, щоб команда не дебагала «localhost» заради розваги.

8) Чи можна запускати stateful навантаження (Postgres, Kafka) локально у WSL2 Kubernetes?

Так, але будьте реалістичні. Postgres підходить для деву, якщо дані живуть у файловій системі Linux і ви не запускаєте ще п’ять важких стеків.
Kafka можлива, але часто локальна «парність» перетворюється на «локальне покарання». Розгляньте легші замінники, якщо не дебажите специфічну поведінку Kafka.

9) Як часто пересоздавати локальний кластер?

Якщо ви працюєте з платформою та багатьма CRD і контролерами, пересоздавання щотижня або раз на два тижні — нормально.
Якщо кластер стабільний і лаконічний, можна тримати його довше.
Пересоздавайте одразу, коли підозрюєте дріфт: дивний DNS, застряглі вебхуки або таємничі admission-помилки.

10) Яка найпоширеніша корінна причина «все повільно»?

Зберігання. Або навантаження на неправильному шляху файлової системи, або диск майже повний, або система пише логи ніби за рядок платять.
Пам’ять — друга. DNS — третя. Kubernetes рідко перший винуватець; він просто сцена, на якій проблема виступає.

Наступні кроки, які можна зробити сьогодні

  1. Встановіть ліміти WSL2 (пам’ять, CPU, swap). Якщо робити лише одну річ — зробіть це.
  2. Перемістіть гарячі дані з /mnt/c: storage runtime, PV, бази даних, кеші збірки — тримайте їх у файловій системі Linux.
  3. Оберіть лаконічний профіль кластера: kind або k3d з лише основними addon-ами. Зробіть «повний стек» опційним.
  4. Прийміть швидкий план діагностики: перевірка тиску хоста, потім здоров’я контрольної площини, потім топ-споживачі. Хватить гадати.
  5. Заплануйте нудне обслуговування: prune кеші, видаляйте невикористані неймспейси і пересоздавайте кластер, коли з’являється дріфт.

Кінцева ідея не в тому, щоб побудувати найефектніший локальний кластер. Мета — побудувати такий, що веде себе передбачувано під навантаженням.
Передбачуваність — це те, що тримає ваш ноутбук прохолодним — і вашу голову теж.

ІТ‑індустрія: брехня «переписати з нуля» — чому це провалюється і що працює

Ви успадковуєте систему, скріплену cron‑джобами, племінними знаннями та схемою бази даних, яка виглядає так, ніби її проектували під час пожежної тривоги. Хтось вимовляє чарівні слова: «Давайте перепишемо її з нуля». Голови кивають. Дорожні карти оновлюються. З’являється новий репозиторій, як чистий зошит першого січня.

Потім настає продакшн. Перепис не знає ваших клієнтів, граничних випадків, експлуатаційних обмежень або «гравітації даних». І ваша ротація on‑call точно не підписувалася на «дві системи, обидві зламані, назавжди».

Брехня: чому «переписати з нуля» здається правильним

Переписи продають надію. Вони пропонують чистий розрив із накопиченим безладом: більше ніяких застарілих фреймворків, ніяких «тимчасових» хаків з 2017 року, ніяких нетестованих модулів, ніякої тієї одної збереженої процедури, до якої всі бояться торкатися. Подача емоційно правильна. Проблема в тому, що продакшн‑системи не працюють на емоціях. Вони працюють на інваріантах.

Перепис «з нуля» зазвичай продають як технічний проєкт. Насправді це організаційна ставка: що ви зможете відновити не лише код, а й поведінку, семантику даних, експлуатаційну позицію та обробку відмов — поки стара система продовжує еволюціонувати під реальним навантаженням клієнтів.

Ось частина, якої люди не згадують у презентації перепису: стара система — це копалини реальних інцидентів. Вона містить рубцеву тканину аварій, спроб шахрайства, дивних клієнтських пристроїв, часткових відмов і регуляторних сюрпризів. Ця рубцева тканина потворна. Вона також цінна.

Переписи ігнорують те, що «вимоги» не в системі тикетів. Вони в графіках продакшну, у нотатках on‑call і у тих тихих припущеннях, які тримають світло ввімкненим. Коли ви переписуєте, ви видаляєте ці припущення — а потім знову їх відкриваєте о 2:13 ранку.

Жарт №1: План перепису — це як купити нову бігову доріжку, щоб стати у формі. Купівля здається продуктивною; біг — це те, де з’являється реальність.

Чому переписи провалюються в продакшні (справжні причини)

1) Паритет функцій — це пастка, а не етап

Команди трактують «паритет функцій» як чек‑ліст. Насправді стара система має не функції, а поведінку. Поведінка включає недокументовані значення за замовчуванням, часові особливості, очікування ідемпотентності, семантику повторів і робочі процеси корекції даних, які відбуваються поза щасливим шляхом.

Коли перепис прагне паритету, він орієнтується на видиму поверхню UI/API і пропускає брудні частини, що важливі: як система поводиться, коли платіжний шлюз таймаутиться, коли бекенд повільний, коли клієнт повторює POST, коли годинники розходяться або коли потрібно перебігати день подій.

2) Дані — це продукт, і дані важкі

Більшість систем — це системи даних, що носять UI. Перепис, який не починається з семантики даних — що означають записи, як вони змінюються з часом, що можна робити з eventual consistency — відхилиться у «нову схему бази, яка приємніша», а потім вріже об реальність під час вирубки.

Міграція даних — це не проект на вихідні. Це тривала вправа на надійність з бекфілами, dual‑write (або change data capture), звірками й планами відкату. Якщо ваш план перепису не включає місяці одночасної роботи обох шляхів даних, ви не плануєте cutover — ви плануєте підкидання монети.

3) Перепис створює організацію зі «split‑brain»

Два кодові бази означають дві пріоритети, дві черги баґів, дві моделі експлуатації й одну спільну базу клієнтів, яка очікує однакового сервісу. Зазвичай старші люди витягують у перепис, лишаючи легасі зменшеним у потужності та зростаючим ризиком. Потім у легасі відбувається інцидент, і графік перепису розкрадають, щоб реагувати. Перепис гальмує. Легасі деградує. Всі програють.

4) Операційна готовність — це не «ми тепер маємо Kubernetes»

Сучасні стекі можуть погіршити ситуацію, коли їх використовують як пропуск на довіру. Заміна одного набору режимів відмов на інший — не прогрес; це просто нові способи дзвонити людям.

Операційна готовність — це: чітко визначені SLO, інструментування, якісні алерти, контрольовані релізи, моделювання ємності, управління залежностями, рунибуки та культура, яка може витримувати постійні зміни. Якщо команда перепису не може добре запускати стару систему, вона не зможе і нову — просто з більш блискучим YAML.

5) Продуктивність — це властивість, що виникає, її не можна запрограмувати в unit‑тестах

Стара система має оптимізації, що з’явилися в бою: кешування на дивних шарах, денормалізовані таблиці, попередньо обчислені агрегати, ретельно підібрані індекси, коалесценція запитів і правила «не робити цього на гарячому шляху». Перепис часто починається чистим, потім під навантаженням з’являються регресії продуктивності. Тоді додають кеші, черги й фон‑завдання, поступово відтворюючи ту саму складність — але без інституційної пам’яті.

6) Нова система правильна в малому і неправильно в великому

Код‑рев’ю ловлять локальні проблеми. Вони не ловлять поведінку системи під частковими відмовами. Переписи провалюються, бо моделюють світ як надійний і консистентний. Продакшн цим не є.

7) Безпека та відповідність не «потім»

Переписи часто відсувають контролі безпеки, журнали аудиту, правила зберігання та принцип найменших привілеїв. Потім виявляється, що «дивні» логування й доступи в легасі були через те, що колись аудитор поставив дуже конкретне питання. Ви або метушитеся, або відкладаєте cutover. Обидва варіанти дорогі.

Факти й історія: індустрія вже була тут раніше

  • 1980–1990‑ті: Великі організації неодноразово намагалися робити переписи на базі CASE‑інструментів головнихфрейм‑систем; багато проектів розвалювалися через обсяг і складність міграції даних.
  • Рік 2000 (Y2K) навчив підприємства жорсткого уроку: замінити все рідко реально; виправлення і триаж на основі ризиків часто перемагають.
  • Епоха «big bang» впроваджень ERP показала закономірність: cutover‑и провалюються, коли бізнес‑процеси не змодельовані під реальні робочі потоки і винятки.
  • Зростання сервісно‑орієнтованої архітектури (SOA) обіцяв модульність; багато проєктів дали розподілені моноліти з більшими затримками й складнішим дебагом.
  • Популярність мікросервісів (середина 2010‑х) збільшила спокусу переписати, але також підвищила витрати на операційну зрілість: трасування, мапування залежностей і локалізація відмов стали обов’язковими.
  • Інструменти change data capture (CDC) дозріли і зробили інкрементальні міграції більш практичними, змінивши економіку на користь не «big‑bang» переписів.
  • Хмарна еластичність зменшила деякі ризики ємності, але внесла нові: «шиліди шуму» (noisy neighbors), квоти сервісів і інциденти через білінг.
  • Observability як дисципліна (метрики, логи, трасування) стала мейнстримом; вона показала, що багато «легасі» аварій насправді були проблемами залежностей і ємності.

Три короткі історії з корпоративних окопів

Коротка історія 1: Інцидент через хибне припущення

Середня SaaS‑компанія переписала свій білінговий сервіс на новій мові, щоб «зробити його підтримуванішим». Команда ретельно попрацювала над unit‑тестами та контрактом API. Вони побудували чисту схему бази і випустили за feature‑флагом.

Хибне припущення було тонким: вони вважали, що всі клієнти ставитимуться до POST /charge як до неідемпотентної операції й ніколи не повторюватимуть автоматично. У легасі тихо реалізували ідемпотентність через токен, який надсилав клієнт, бо років тому мобільний клієнт повторював запити через непевні мережі.

Перепис цього не реалізував. Під час рутинних мережевих коливань між регіонами частина клієнтів повторила платежі. Новий сервіс правильно створив кілька платежів. Підтримка загорілася. Фінанси втрутилися. Інженерів заспамили сторінками за «інцидент коректності даних», що довго боліло навіть коли графіки виключилися.

Виправлення не було «додати ще тестів». Виправлення — вважати ідемпотентність і повтори вимогою першого порядку, задокументувати їх як інваріанти і побудувати інструменти звірки. Також вони додали canary, що симулював повтори і перевіряв стабільність бухгалтерії.

Мораль: якщо ви явно не змоделюєте поведінку клієнта, мережа зробить це за вас.

Коротка історія 2: Оптимізація, що відкотилася

Внутрішня платформа великого підприємства переписала пайплайн звітності, щоб знизити витрати. Вони замінили агрегаційні job‑и на стрімінговий пайплайн і агресивно налаштували батчинг, щоб мінімізувати CPU і зберігання.

Оптимізація виглядала чудово у синтетичних бенчмарках. Продакшн був іншим. Їхній батчинг збільшив end‑to‑end затримку і створив сплески навантаження на downstream‑сервіси. «Дешевий» пайплайн перетворився на генератор thundering herd. Нижчестоячі сервіси ввімкнули rate‑limit. Повтори накопичилися. Внутрішні буфери стрімінгової системи зросли, і логіка backpressure почала скидати повідомлення під тривалим навантаженням.

Тепер система мала дві проблеми замість одної: звіти запізнювалися і деякі були неправильні. Команда витратила тижні на побудову компенсуючих контролів: dead‑letter черги, інструменти для реплею і процес корекції «пізніх даних». Витрати зросли, а не впали, бо операційні витрати теж — просто оплачуються людською увагою.

Вони врешті‑решт послабили батчинг, прийняли вищі постійні витрати на обчислення і встановили суворі SLO для свіжості й коректності. «Оптимізація» оптимізувала неправильну річ: рахунок, а не продукт.

Коротка історія 3: Нудна, але правильна практика, що врятувала ситуацію

Компанія, що модернізувала стек автентифікації, втрималася від спокуси переписати і зробила боляче непоказну річ: побудувала сумісну тест‑систему на основі реального продакшн‑трафіку. Не просто unit‑тести — записані запити, крайові токени і представницькі режими відмов.

Вони розгорнули новий сервіс як shadow‑читач спочатку. Він валідовував токени й обчислював рішення, але не застосовував їх. Протягом тижнів він порівнював свої результати з рішеннями легасі і логував невідповідності з достатнім контекстом для дебагу.

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

Коли вони нарешті переключили трафік, запуск був майже нудним. On‑call отримав кілька сторінок — здебільшого через надмірну чутливість дашбордів — а потім все стабілізувалося. «Нудна практика» означала ставлення до міграції як до збору доказів, а не як до героїчного стрибка.

Що насправді працює: патерни, що переживають зіткнення з реальністю

Почніть з інваріантів, а не з архітектури

Перш ніж сперечатися про фреймворки, запишіть інваріанти. Речі, що мають залишатися істинними навіть коли залежності відмовляють:

  • Правила ідемпотентності: які операції можна безпечно повторювати і як саме.
  • Обмеження коректності даних: що «не може трапитися» (подвійне списання, від’ємний баланс, втрачені записи аудиту).
  • Бюджети затримки і цілі доступності: що користувач потерпить.
  • Вимоги консистентності: де допустима eventual consistency, а де ні.
  • Вимоги відката: що означає скасувати деплой, міграцію або бекфіл.

Використовуйте патерн strangler fig (і робіть це серйозно)

Патерн strangler fig працює, бо поважає, що продакшн‑системи — живі екосистеми. Ви не замінюєте дерево за один день; ви вирощуєте нову систему навколо нього і поступово переводите відповідальності.

Практично це означає:

  • Поставте шар маршрутизації (API‑gateway, reverse proxy або ingress сервісної сітки) перед старою системою.
  • Переносьте по одній кінцевій точці, одному робочому процесу або одній доменній частці за раз.
  • Тримайте швидкий відкат: миттєво маршрутизувати трафік назад.
  • Використовуйте shadow‑читання та порівняння, коли це можливо.

Надавайте перевагу «заміні за інтерфейсом» над «переписати все»

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

Міграція даних: dual‑write або CDC, плюс звірка

Оберіть отруту обережно:

  • Dual‑write: застосунок пише в старе і нове сховища. Простішe концептуально, складніше зробити коректним при часткових відмовах.
  • CDC: трактуйте стару базу як джерело істини і стриміть зміни в нове сховище. Часто більш надійно, але вимагає уважного порядку і дисципліни еволюції схем.

У будь‑якому разі потрібна звірка: періодичні завдання, що порівнюють підрахунки, контрольні суми і інваріанти між старим і новим. Без звірки ви працюєте на відчуттях.

Побудуйте операційну паритетність перед функціональним паритетом

Операційна паритетність — це здатність запускати, відлагоджувати і відновлювати. Вона включає:

  • Дашборди, що показують насичення, помилки, затримки і здоров’я залежностей.
  • Алертинг, який дієво (pages за симптоми, а не шум).
  • Рунибуки, що передбачають часткові відмови і включають відкати.
  • Навантажувальне тестування, що відповідає формі продакшна, а не тільки обсягу.

Цитата, яку варто приклеїти до монітора

Надія — це не стратегія. — Джеймс Кемерон

Операції не цинічні; вони алергічні до магічного мислення. Плануйте режими відмов, які у вас точно будуть.

Тримайте стару систему здоровою під час міграції

Тут керівництво має дозріти. Якщо ви голодуєте легасі під час побудови заміни, легасі впаде і поглине команду, що робить заміну. Виділіть явну потужність на роботу з надійністю легасі під час міграції. Розглядайте це як зниження ризику, а не «витрачені зусилля».

Жарт №2: Єдина річ гірша за одну крихку систему — це дві крихкі системи, які сперечаються, чия це провина.

Практичні завдання: команди, виводи, що це означає, і що ви вирішуєте

Ось завдання, які ви реально виконуєте, коли хтось каже «перепис вирішить продуктивність/надійність». Ви не сперечаєтеся. Ви вимірюєте. Кожне завдання нижче містить реалістичну команду, типовий вивід, що означає цей вивід і рішення, яке з нього випливає.

1) Визначити насичення CPU проти скарг на затримки

cr0x@server:~$ uptime
 14:22:01 up 37 days,  4:11,  2 users,  load average: 18.42, 17.96, 16.88

Що це означає: Середнє навантаження значно вище за кількість ядер (треба знати cores) — це свідчить про конкуренцію за CPU або накопичення runnable‑черги, можливo також I/O‑wait залежно від навантаження.

Рішення: Не починайте перепис через «повільно». Спочатку визначте, чи ви CPU‑bound, I/O‑bound або lock‑bound. Далі: перевірте розподіл CPU і чергу виконуваних процесів.

2) Перевірити використання CPU по ядрах та iowait

cr0x@server:~$ mpstat -P ALL 1 3
Linux 6.5.0 (prod-app-01)  02/04/2026  _x86_64_  (16 CPU)

22:22:10     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
22:22:11     all   62.11    0.00   11.83   18.44    0.00    0.52    0.00    0.00    0.00    7.10
22:22:11       0   71.00    0.00   12.00   10.00    0.00    0.00    0.00    0.00    0.00    7.00

Що це означає: Високий %iowait вказує, що CPU чекає диск/мережеве сховище. Високий %usr — завантаження обчисленнями. Тут обидва: CPU зайнятий і чекає на I/O.

Рішення: Дослідіть затримки сховища та бази даних перед переписом логіки застосунку. Перепис не змінить ваші диски.

3) Перевірити тиск пам’яті і свопінг

cr0x@server:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            62Gi        54Gi       1.1Gi       1.8Gi       6.9Gi       4.2Gi
Swap:          8.0Gi       2.7Gi       5.3Gi

Що це означає: Використання swap‑у — нетривіальне. Якщо система активно свопиться, хвостова затримка різко зросте.

Рішення: Перед переписом вирішіть питання розміру пам’яті, витоків або лімітів контейнерів. Якщо ви не можете запускати поточний сервіс без свопінгу, новий, ймовірно, зробить це теж — просто швидше.

4) Перевірити активний свопінг і major‑faults

cr0x@server:~$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 8  2 2795520 1187328  9120 6852140   0  64  1220  1780 8210 9230 61 11  7 21  0
 7  1 2795584 1169000  9120 6854100   0 128  1100  1650 8030 9012 60 12  8 20  0

Що це означає: so (swap out) вказує на активний свопінг. wa також високий, що узгоджується з I/O‑wait.

Рішення: Розглядайте це як опс‑інцидент, а не як можливість у дорожній карті. Зменшіть пам’ять, виправте «шумних сусідів» або масштабуйте. Перепис цього не вилікує.

5) Знайти головних споживачів CPU

cr0x@server:~$ ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head
  PID COMMAND         %CPU %MEM
 8123 java            345.2 18.4
 9001 redis-server     72.1  3.2
 7442 nginx            38.0  0.8

Що це означає: Один процес, що споживає кілька ядер, може бути очікуваним, але підтвердіть, чи це узгоджується з пропускною здатністю. Якщо CPU високий, а пропускна здатність низька — ви крутитеся в циклі або є contention.

Рішення: Профілюйте гарячий процес і перевірте контенцію потоків. Якщо аргумент перепису «нова мова буде швидшою», вимагайте доказів у вигляді flame‑graph спочатку.

6) Швидко ідентифікувати вузькі місця диска

cr0x@server:~$ iostat -xz 1 3
Linux 6.5.0 (prod-db-01)  02/04/2026  _x86_64_  (16 CPU)

Device            r/s     w/s   rMB/s   wMB/s  await  svctm  %util
nvme0n1         220.0   410.0    35.2    88.1  18.40   0.90  92.50

Що це означає: Високий %util і зростаючий await означають, що пристрій насичений або черга зростає. Низький svctm при високому await вказує на проблему з чергою/латентністю, а не на сиру повільність пристрою.

Рішення: Потрібна оптимізація запитів, зміни індексів або розподіл I/O. Перепис, що зберігає ті самі шаблони доступу, натрапить на ту саму стіну.

7) Перевірити ємність файлової системи та виснаження inode

cr0x@server:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p2  900G  855G   45G  96% /
cr0x@server:~$ df -i
Filesystem       Inodes   IUsed    IFree IUse% Mounted on
/dev/nvme0n1p2  5900000 5892000     8000  100% /

Що це означає: Майже повний диск — погано; виснаження inode — підступніше і може зламати деплої, логування і тимчасові файли.

Рішення: Зупиніться. Очистіть. Додайте політики зберігання. Якщо ваш перепис «бо деплої падають», а причина — inode, вам не потрібна нова кодова база — потрібне прибирання.

8) Перевірити помилки мережі і повторні передачі

cr0x@server:~$ netstat -s | egrep -i 'retrans|listen|listenoverflows|packet receive errors' | head
    12455 segments retransmitted
    37 packet receive errors

Що це означає: Повторні передачі і помилки прийому можуть давати «випадкові затримки». Ваш застосунок може бути невинним.

Рішення: Дослідіть NIC, невідповідності MTU, перевантажені балансувальники навантаження або проблеми між зонами доступності перед переписом шару застосунку.

9) Інспектувати стани TCP‑з’єднань (витоки або повільні клієнти)

cr0x@server:~$ ss -s
Total: 14021
TCP:   10234 (estab 812, closed 9132, orphaned 5, timewait 7210)

Transport Total     IP        IPv6
RAW       0         0         0
UDP       29        25        4
TCP       1102      1011      91
INET      1131      1036      95
FRAG      0         0         0

Що це означає: Надмірний timewait може вказувати на короткоживучі з’єднання без keep‑alive або агресивну поведінку клієнтів з повтореннями.

Рішення: Налаштуйте повторне використання з’єднань, параметри балансувальника навантаження та поведінку клієнтів. Перепис не змінить фізику TCP.

10) Перевірити тротлінг контейнерів (Kubernetes CPU limits)

cr0x@server:~$ kubectl -n payments top pods | head
NAME                           CPU(cores)   MEMORY(bytes)
payments-api-6d8d6c6b6c-2qz7m  980m         740Mi
payments-api-6d8d6c6b6c-pk9h4  995m         755Mi
cr0x@server:~$ kubectl -n payments describe pod payments-api-6d8d6c6b6c-2qz7m | egrep -i 'Limits|Requests|throttl' -n | head -n 20
118:    Limits:
119:      cpu:     1
120:      memory:  1Gi

Що це означає: Поди, що тримаються на межі ліміту CPU, ймовірно, зазнають тротлінгу, що викликає сплески затримки, які виглядають як «новий сервіс повільніший».

Рішення: Перегляньте CPU limits/requests і політики HPA. Якщо ви переписуєте на Kubernetes без розуміння тротлінгу, ви просто перенесли проблему у YAML.

11) Виявити lock‑контенцію в базі даних (класична сліпота при переписі)

cr0x@server:~$ psql -U postgres -d appdb -c "select pid, wait_event_type, wait_event, state, query from pg_stat_activity where wait_event_type is not null order by pid limit 5;"
 pid  | wait_event_type |   wait_event   | state  |                  query
------+-----------------+----------------+--------+------------------------------------------
 4142 | Lock            | transactionid  | active | UPDATE invoices SET status='paid' ...
 4221 | Lock            | relation       | active | ALTER TABLE ledger ADD COLUMN ...

Що це означає: Запити блокуються через локи. Проблеми з продуктивністю можуть бути через DDL‑міграції, а не через якість коду застосунку.

Рішення: Плануйте важкі міграції, зменшуйте обсяги блокувань, використовуйте онлайн‑зміни схем. Не переписуйте через «Postgres повільний», коли ви тримаєте локи.

12) Перевірити повільні запити і знайти топ‑винуватців

cr0x@server:~$ psql -U postgres -d appdb -c "select calls, mean_exec_time, rows, left(query,120) as q from pg_stat_statements order by mean_exec_time desc limit 5;"
 calls | mean_exec_time | rows | q
-------+----------------+------+------------------------------------------------------------
   412 |         982.14 |   12 | SELECT * FROM orders WHERE customer_id = $1 ORDER BY created_at DESC LIMIT 50
   201 |         744.33 |    1 | SELECT balance FROM accounts WHERE id = $1 FOR UPDATE

Що це означає: У вас є конкретні цілі: додати індекси, змінити форму запиту, зменшити блокування. Зазвичай це дешевше, ніж перепис.

Рішення: Виправте «гарячі» запити спочатку. Якщо ви все ще хочете перепис, принаймні перенесіть уроки про запити, щоб нова система не повторила помилки.

13) Перевірити лаг реплікації перед cutover

cr0x@server:~$ mysql -e "SHOW SLAVE STATUS\G" | egrep -i 'Seconds_Behind_Master|Slave_IO_Running|Slave_SQL_Running'
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 43

Що це означає: Лаг реплікації означає, що «читання з нової системи» може бути застарілим. Це може порушити очікування користувачів під час міграції.

Рішення: Або прийміть застарілість явно (і спроектуйте для неї), або не переключайте читання, поки лаг не буде стабільно низьким.

14) Виявити зміну частоти помилок під час canary‑релізу

cr0x@server:~$ kubectl -n payments logs deploy/payments-api --since=5m | egrep -c " 5[0-9][0-9] "
27

Що це означає: Зростаюча кількість 5xx після деплою — це канар‑фейл поки не доведено протилежне.

Рішення: Откатуйте швидко, потім відлагоджуйте з трасуванням і перевірками залежностей. Не «протискайте» через реліз, бо дорожня карта перепису цього вимагає.

15) Підтвердити достатню кількість дескрипторів файлів під навантаженням

cr0x@server:~$ ulimit -n
1024
cr0x@server:~$ cat /proc/$(pgrep -n nginx)/limits | egrep -i "open files"
Max open files            1024                 1024                 files

Що це означає: 1024 FD часто замало для навантажених проксі/сервісів. Ви можете отримувати помилки з’єднань, що виглядають як «новий ап flaky».

Рішення: Підніміть ліміти, перевірте налаштування рантайму контейнера і повторно протестуйте. Знову: виправте фундаментальні речі перш ніж перебудовувати всесвіт.

Швидкий план діагностики: що перевіряти перше/друге/третє

Це процедура, коли хтось каже «легасі — вузьке місце» або «перепис буде швидшим». Ви можете виконати це за годину на живому інциденті (акуратно) або в стенді з продакшн‑подібним навантаженням.

Перше: Насичення, помилки чи затримка залежностей?

  • Перевірити рівень помилок (сплески 5xx/4xx, таймаути). Якщо помилки стрибнули, продуктивність може бути симптомом часткової відмови.
  • Перевірити насичення: CPU iowait, disk await, мережеві retransmits, з’єднання DB, пул потоків.
  • Перевірити здоров’я залежностей: БД, кеш, брокер повідомлень, зовнішні API, DNS, термін дії сертифікатів.

Мета: класифікувати проблему: compute‑bound, I/O‑bound, lock‑bound, network‑bound або відмова залежності.

Друге: Знайдіть тісний цикл у шляху запиту

  • Виберіть одну кінцеву точку, що впливає на користувача (найбільший трафік або найвища затримка).
  • Протрейсіть її наскрізь (distributed tracing, якщо є; інакше — кореляційні ID у логах).
  • Виміряйте час у: CPU застосунку, запитах БД, кеші, апстримі, серіалізації, повторних спробах.

Мета: з’ясувати, куди йде час, а не куди здається, що йде.

Третє: Підтвердіть контрольованим експериментом

  • Зробіть одну зміну (індекс, TTL кешу, розмір pool‑у з’єднань, ліміт CPU).
  • Запустіть її як canary на невеликій частці трафіку.
  • Порівняйте: latency percentiles, error rates, метрики насичення.

Мета: рішення на підставі доказів. Якщо пропозиція перепису не витримує такого рівня перевірки, це проект моралі, а не інженерний проєкт.

Поширені помилки: симптоми → корінь → виправлення

«Ми переписали, а затримка погіршилася»

Симптоми: p95/p99 затримки вгору, CPU в нормі, дашборди показують більше мережевих викликів.

Корінь: Ви розклали в процесі виклики на RPC‑ланцюжки без бюджету затримки, перетворивши in‑process виклики в RPC‑ланцюги. Ви побудували розподілений моноліт.

Виправлення: Згорніть балакучі межі, пакетизуйте виклики, введіть локальний кеш і вимагайте бюджети на кожен хоп. Надавайте перевагу грубозернистим API перед «чистими» межами мікросервісів.

«Cutover спрацював, потім з’явився дрейф даних»

Симптоми: Звіти не співпадають, баланси різняться, клієнти бачать неконсистентні стани через дні.

Корінь: Dual‑write без semantics exactly‑once; відсутня звірка; події приходять у різному порядку; різні правила часових зон/округлень.

Виправлення: Реалізуйте завдання звірки та перевірки інваріантів; використовуйте ключі ідемпотентності; визначте авторитетне джерело для полів; за можливості прийміть CDC з гарантіями порядку.

«Нова система стабільна, але on‑call гірший»

Симптоми: Більше алертів, складніший дебаг, більше невідомих невідомих.

Корінь: Відтермінували observability і рунибуки; алерти побудовані на сирих метриках замість сигналів впливу на користувача; немає трасування.

Виправлення: Інструментувати «золоті» сигнали (latency, traffic, errors, saturation). Додати трасування. Переписати алерти під симптоми і пов’язати з SLO.

«Ми не можемо відпустити, бо женемося за паритетом назавжди»

Симптоми: Проєкт перепису тягнеться квартали/роки, бізнес додає фічі в легасі, перепис не наздоганяє.

Корінь: Мислення big‑bang; відсутні інкрементальні cutover‑и; команда перепису ізольована від реальних продуктових пріоритетів.

Виправлення: Патерн strangler з тонкими вертикальними зрізами. Переносьте один робочий процес наскрізь. Заморозьте певні легасі‑фічі або перенаправляйте нові фічі лише в новий шлях.

«Ми замінили схему бази даних і все болить»

Симптоми: Повільні запити, contention по локу, розширення вікон міграцій, ризикові відкати.

Корінь: Перепроект схеми ігнорував шаблони доступу й експлуатаційні обмеження; відсутні індекси; незмірені міграції.

Виправлення: Почніть з профілювання запитів і стратегії індексів. Використовуйте онлайн‑міграції, бекфіли і фазовані обмеження. Тримайте стару схему як адаптер, коли потрібно.

«Ми переписали заради безпеки і ввели нові дірки»

Симптоми: Відсутні журнали аудиту, слабші перевірки авторизації, розростання секретів.

Корінь: Контролі безпеки були імпліцитні в легасі і не змоделовані; новий стек випущено без threat‑modeling.

Виправлення: Інвентаризуйте інваріанти безпеки (правила authz, логування, зберігання). Додайте автоматичні перевірки в CI. Використовуйте принцип найменших привілеїв і централізоване управління секретами з першого дня.

Чек‑листи / покроковий план

Чек‑лист рішення: чи варто взагалі переписувати?

  1. Чи можете назвати вузьке місце? Якщо ні — спочатку вимірювання (див. завдання й план діагностики).
  2. Проблема в підтримуваності коду чи в поведінці системи? Якщо інциденти здебільшого через ємність/залежності, перепис коду не допоможе.
  3. Чи є стабільний контракт? Якщо інтерфейс нестабільний, зафіксуйте його перед зміною інтернів.
  4. Є план щодо даних? Якщо ви не можете описати dual‑write/CDC, звірку й відкат — ви не готові.
  5. Чи маєте опс‑зрілість? Дашборди, алерти, трасування, рунибуки, поетапні релізи. Якщо ні — побудуйте це спочатку.
  6. Чи можете закрити дві системи ресурсами? Якщо ні — робіть поступову заміну, а не паралельні переписи.

Безпечніший план модернізації (працює навіть при обмеженому часі)

  1. Інвентар інваріантів: ідемпотентність, правила коректності, зберігання, авторизація, коди помилок, ліміти швидкості.
  2. Інструментувати легасі, якщо воно сліпе: додайте request‑ID, гістограми затримок, таксономію помилок.
  3. Поставте шар маршрутизації: gateway/proxy, що може розділяти трафік і миттєво відкатувати.
  4. Виберіть один вертикальний зріз: один робочий процес, що дає реальну цінність і зачіпає реальні залежності.
  5. Shadow спочатку: нова система обчислює відповіді і логгує невідповідності, але не віддає їх.
  6. Canary: 1% трафіку, потім 5%, потім 25%, вимірюючи SLO і інваріанти.
  7. Обережно переключайте шляхи читання: застарілі читання видимі користувачу. Використовуйте бюджети консистентності і явну поведінку.
  8. Перемикайте шляхи запису останніми: переконайтеся, що ідемпотентність, повтори і звірка доведені.
  9. Деактивуйте по частинах: видаляйте легасі‑endpoint‑и коли трафік для них сходить до нуля; зберігайте шляхи архівації для аудиту.

Чек‑лист релізу для мігрованого компонента

  • SLO визначений; дашборди показують золоті сигнали.
  • Алертинг налаштований; on‑call має рунибуки і інструкції відкату.
  • Тестовано ємність під навантаженням, що імітує форму продакшна.
  • Таймаути залежностей і повтори налаштовані (з бюджетами).
  • Ідемпотентність реалізована для небезпечних операцій.
  • Завдання звірки даних на місці; процес триажу невідповідностей визначений.
  • Контролі безпеки перевірені: паритет authz, журнали аудиту, зберігання.
  • Проведено game‑day: відмова залежності, повільна БД, частковий деплой, відкат.

Часті питання

1) Коли перепис насправді виправданий?

Коли поточну систему неможливо розвивати безпечно: неподтримуваний рантайм з неможливістю патчів через ризик безпеки, ліцензійні обмеження або архітектура, що блокує критичні бізнес‑вимоги. Навіть тоді надавайте перевагу інкрементальній заміні за стабільними інтерфейсами.

2) Хіба інкрементальна міграція не повільніша за перепис?

Інкрементальна здається повільнішою, бо чесна щодо одночасного існування двох реальностей. Великі переписи здаються швидкими, поки ви не зіштовхнетеся з інтеграцією, даними та операціями — тоді час розростається. Інкрементальна міграція перемагає, бо доставляє цінність раніше і знижує екзистенційний ризик.

3) У нас жахлива якість коду. Хіба це не вимагає перепису?

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

4) Як уникнути «дві системи назавжди»?

Міграцією зрізами, які повністю виводять з обігу відповідальність легасі. Не будьте тим, хто будує паралельну систему, що дублює все перед релізом. Маршрутизуйте трафік, переключіть зріз, потім видаліть старий зріз. Видалення — це віхa.

5) Який найбільший прихований ризик у переписах?

Семантичне відхилення: нова система поводиться інакше при повторних спробах, часткових відмовах і дивному вводі. Користувачі не пишуть тикети про «семантичне відхилення». Вони пишуть тикети про зниклі гроші, неправильні дані і «ваш API ненадійний».

6) Чи потребує мікросервісна архітектура перепису?

Ні. Ви можете витягувати сервіси з моноліту поступово. Перший крок часто — створити внутрішні модульні межі і витягти одну доменну частку з чіткою відповідальністю і контрактами даних.

7) Як виконати міграцію даних без простою?

Використовуйте CDC або dual‑write, потім звіряйте. Переключайте читання, коли застарілість прийнятна або її пом’якшено; переключайте записи останніми з сильною ідемпотентністю. Завжди майте маршрут відкату і план бекфілів.

8) Що має вимірювати керівництво, щоб знати, що міграція здорова?

Не story points. Вимірюйте досягнення SLO, частоту інцидентів, частоту відкатів, час до виявлення/відновлення і прогрес міграції у вигляді вилученої легасі‑поверхні (видалені endpoints/робочі процеси).

9) Як зупинити інженерів від «закипання океану»?

Визначте тонкий вертикальний зріз, що доходить до продакшна, і вимагайте, щоб кожне розширення включало план виходу для рівнозначної легасі‑шляху. Заохочуйте видалення й експлуатаційну стабільність, а не новації.

Наступні кроки, які можна відправити цього кварталу

Якщо ви сидите на зустрічі, де хтось пропонує перепис як панацею, ось що робити натомість — практично, без драм:

  1. Запустіть швидкий план діагностики і опублікуйте класифікацію вузького місця. Виведіть дебати з площини естетики.
  2. Запишіть інваріанти (ідемпотентність, коректність, бюджети затримки, правила авторизації). Зробіть їх доступними для рев’ю і тестування.
  3. Виберіть один робочий процес і мігруйте його з маршрутизацією + канарі + відкат. Доведіть, що можете переміщувати зрізи безпечно.
  4. Інвестуйте в операційну паритетність: дашборди, трасування, гігієна алертів, рунибуки. Зробіть підтримку систем простішою, ніж сперечання про них.
  5. Зробіть звірку даних продуктною фічею, а не побічним квестом. Якщо ви не можете довести коректність даних, у вас немає коректності.

Брехня «переписати з нуля» живе доти, доки пропонує історію, де складність зникає. У реальних систем складність не зникає; вона переміщується. Ваше завдання — перемістити її в місця, де її можна виміряти, контролювати і зробити нудною. Нудне недооцінене. Нудне відправляється.

Панель керування NVIDIA відсутня: поверніть її без здогадок

Ви клацаєте правою кнопкою робочого столу, щоб змінити налаштування, і… нічого. Немає Панелі керування NVIDIA. GPU явно присутній, ігри запускаються, вентилятори крутяться, але потрібний інтерфейс зник, наче пішов на незручну нараду.

Ця проблема витрачає час, бо люди трактують її як «перевстановіть драйвер» — це забобон. Не робіть так. Розглядайте це як інцидент: підтвердіть модель драйвера, перевірте служби, перевірте пакет додатка, а потім застосуйте найменше втручання, яке поверне контроль.

Швидкий план діагностики (перший/другий/третій)

Коли Панель керування NVIDIA «відсутня», вузьке місце зазвичай одна з трьох речей: невірний тип драйвера (DCH проти Standard), пошкоджений пакет додатка (Store/AppX) або зупинена служба NVIDIA Display Container. Ви можете з’ясувати це за кілька хвилин.

Перший крок: визначте, що у вас запущено (апарат, модель драйвера, сесія)

  • У вас ноутбук із гібридною графікою? Якщо внутрішня панель керується iGPU, опції Панелі керування NVIDIA можуть бути обмежені або переміщені.
  • Ви використовуєте DCH драйвери? Якщо так, Панель керування часто постачається як додаток Microsoft Store; його можна втратити незалежно від драйвера.
  • Ви в RDP/віртуальній машині? Віддалені сесії та ВМ можуть приховувати інтерфейс або показувати інший адаптер.

Другий крок: перевірте службу, що хостить UI

  • NVIDIA Display Container LS — типовий підозрюваний. Якщо вона зупинена/відключена, Панель керування може не з’являтись у контекстному меню або не запускатись коректно.

Третій крок: перевірте реєстрацію додатка (Store-пакет / виконуваний файл)

  • Якщо DCH: підтвердіть, що пакет Панель керування NVIDIA (AppX) існує для вашого користувача та не в пошкодженому стані.
  • Якщо Standard: підтвердіть, що nvcplui.exe існує та його можна запустити.

Лише після цих кроків варто «вдарити молотком» (DDU, повна перевстановлення). У більшості випадків це можна виправити без очищення стеку драйверів.

Цікаві факти й контекст (чому це відбувається)

Частина цього безладу має історичне коріння. Частина — сучасні механізми Windows для додатків. У будь-якому разі ви будете діагностувати швидше, якщо розумієте, з чим маєте справу.

  1. DCH драйвери змінили механіку розповсюдження. З DCH (Declarative, Componentized, Hardware Support Apps) постачальники можуть відвантажувати частини UI як окремі додатки замість вбудовування всього в інсталятор драйвера.
  2. Панель керування NVIDIA може бути додатком із Store (AppX). На багатьох системах панель — це AppX-пакет; Windows може оновлювати або видаляти його незалежно від драйвера GPU.
  3. Контекстне меню при правому кліку робочого столу не гарантується. Shell Windows і обробники контекстного меню залежать від політик, збірки та коректного перезапуску Explorer.
  4. OEM-образи часто прив’язують конкретну гілку драйверів. Виробники ноутбуків іноді кастомізують INF і включають утиліти; перехід на універсальний драйвер може залишити деякі UI-компоненти сиротами.
  5. Раніше NVIDIA постачала більше постійних tray-елементів і компонентів UI. З часом вендори прагнуть зменшити час запуску. Це добре, поки є служба, яка зв’язує UI і стан драйвера, і її не вимикають.
  6. Microsoft посилила розділення драйвера та UI для безпеки й обслуговування. Компонентна модель теоретично покращує оновлення, але на практиці додає більше рухомих частин, що можуть відмовити.
  7. Політики можуть блокувати Store і AppX. У корпоративних середовищах доступ до Store може бути обмежений, через що DCH UI зникає, хоча драйвер працює.
  8. Віддалений робочий стіл може вводити в оману. RDP може показувати інший шлях драйвера відображення; ви можете діагностувати протокол віддаленого доступу, а не стек GPU.
  9. Windows Update іноді замінює драйвери. Фічевий апдейт може переключити ваш NVIDIA-пакет на іншу гілку, залишивши Панель керування не синхронізованою або видаленою.

Що означає «відсутня» насправді (режими відмов)

«Відсутня Панель керування NVIDIA» — це симптом, а не діагноз. В термінах операцій — це сповіщення без ярликів. Ось реальні режими відмов, які ви побачите в полі:

1) Додаток UI не встановлено (або встановлено для іншого користувача)

Поширено для DCH драйверів. Драйвер присутній, nvidia-smi працює, але пакет Панелі керування не встановлений для вашого профілю користувача або взагалі відсутній.

2) Додаток UI встановлений, але пошкоджений (проблема реєстрації AppX або залежностей)

Store-пакети можуть опинитися в дивному стані після міграції профілю, інструментів очищення або корпоративних політик. Пакет існує, але не запускається або запускається й миттєво закривається.

3) Служба-хост зупинена/відключена

Панель залежить від служб та запланованих завдань. Якщо NVDisplay.ContainerLocalSystem зупинена або відключена, інтеграція UI часто зникає.

4) Насправді ви не використовуєте NVIDIA GPU для шляху відображення

На ноутбуках з Optimus/iGPU внутрішній дисплей може керуватись iGPU, а NVIDIA виконує рендер/обчислення. Деякі налаштування переміщуються, зникають або вимагають підключення дисплея до порту, прив’язаного до NVIDIA.

5) Інсталяція драйвера часткова або пошкоджена

Класичний стан «ніби працює»: пристрій видно, але ключові компоненти відсутні. Часто спричинено перерваними оновленнями, утилітами очищення, що видаляють елементи driver store, або змішуванням OEM і generic пакетів.

6) Неправильні очікування: контекстне меню Windows 11 та shell-розширення

Навіть коли все встановлено правильно, контекстне меню Windows 11 може ховати застарілі записи під «Show more options», або політика може прибрати обробники.

Одна суха істина з інженерії надійності: «Якщо ви не можете виміряти, ви не можете виправити». Це перефразована думка, часто притаманна W. Edwards Deming. Тому ми вимірюємо: служби, пакети, драйвери та політику.

Жарт №1: Панель керування NVIDIA не «зникає». Вона просто підвищується до середнього керівництва, де ніхто її не може знайти.

Практичні завдання: команди, результати, рішення

Це реальні завдання, які ви можете виконати у Windows. Кожне включає: команду, що означає типовий результат, і рішення, яке треба прийняти далі. Запускайте PowerShell від імені Адміністратора, якщо не зазначено інше.

Завдання 1: Підтвердіть збірку та редакцію Windows (мають значення політики Store)

cr0x@server:~$ powershell -NoProfile -Command "Get-ComputerInfo | Select-Object WindowsProductName,WindowsVersion,OsBuildNumber"
WindowsProductName WindowsVersion OsBuildNumber
----------------- -------------- -------------
Windows 11 Pro     23H2           22631

Що це означає: У вас Windows 11 Pro 23H2. Поведінка Store і AppX відрізняється між збірками; корпоративні політики часто застосовуються на Pro/Enterprise.

Рішення: Тримайте «DCH + Store app» серед основних підозрюваних. Якщо це Enterprise, вважайте Store обмеженим, поки не доведете протилежне.

Завдання 2: Підтвердіть присутність NVIDIA GPU і встановлений драйвер

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class Display | Format-Table -AutoSize Status,FriendlyName,InstanceId"
Status FriendlyName                      InstanceId
------ ------------                      ----------
OK     NVIDIA GeForce RTX 3070 Laptop GPU PCI\VEN_10DE&DEV_24DD&SUBSYS_...
OK     Intel(R) Iris(R) Xe Graphics      PCI\VEN_8086&DEV_9A49&SUBSYS_...

Що це означає: Гібридна графіка. Якщо внутрішній дисплей керується iGPU, деякі опції Панелі керування NVIDIA можуть бути обмежені.

Рішення: Не робіть висновку, що опції «зникли» через відсутність додатка. Спочатку підтвердіть, чи додаток відсутній або просто не відображається в shell.

Завдання 3: Перевірте дату/версію драйвера у Windows

cr0x@server:~$ powershell -NoProfile -Command "Get-WmiObject Win32_PnPSignedDriver | Where-Object {$_.DeviceClass -eq 'DISPLAY' -and $_.Manufacturer -match 'NVIDIA'} | Select-Object DeviceName,DriverVersion,DriverDate | Format-Table -AutoSize"
DeviceName                         DriverVersion DriverDate
----------                         ------------- ----------
NVIDIA GeForce RTX 3070 Laptop GPU 31.0.15.5176  2024-01-15

Що це означає: Драйвер встановлено і Windows його бачить.

Рішення: Якщо Панель керування відсутня, ймовірно, причина в пакуванні/службі/shell, а не у відсутності драйвера.

Завдання 4: Підтвердіть наявність і стан служб NVIDIA

cr0x@server:~$ powershell -NoProfile -Command "Get-Service *NVIDIA* | Sort-Object Status,Name | Format-Table -AutoSize Name,Status,StartType"
Name                         Status  StartType
----                         ------  ---------
NVDisplay.ContainerLocalSystem Stopped Automatic
NVIDIAFrameViewSDKService     Running Manual
NvContainerLocalSystem        Running Automatic

Що це означає: Служба Display Container зупинена. Це червоний прапорець для інтеграції Панелі керування.

Рішення: Запустіть її та перевірте Панель керування ще раз. Якщо не стартує — витягніть журнали.

Завдання 5: Запустіть службу Display Container (швидке виправлення)

cr0x@server:~$ powershell -NoProfile -Command "Start-Service NVDisplay.ContainerLocalSystem; Get-Service NVDisplay.ContainerLocalSystem | Format-List Status,StartType"
Status    : Running
StartType : Automatic

Що це означає: Служба успішно запустилась.

Рішення: Вийдіть із сесії/увійдіть або перезапустіть Explorer; потім перевірте контекстне меню робочого столу та меню Пуск для Панелі керування NVIDIA.

Завдання 6: Якщо служба не стартує — візьміть помилку з журналу System

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='System'; StartTime=(Get-Date).AddHours(-2)} | Where-Object {$_.Message -match 'NVDisplay.Container'} | Select-Object -First 3 TimeCreated,Id,LevelDisplayName,Message | Format-List"
TimeCreated      : 2/4/2026 8:12:44 AM
Id               : 7000
LevelDisplayName : Error
Message          : The NVDisplay.ContainerLocalSystem service failed to start due to the following error: The system cannot find the file specified.

Що це означає: Служба вказує на відсутній бінарник. Це пошкоджена інсталяція або надто ретельний інструмент очищення.

Рішення: Припиніть «гойдатись» зі службами. Перейдіть до відновлення/повної перевстановлення пакета драйверів коректно.

Завдання 7: Визначте, чи Панель керування встановлена як AppX-пакет (шлях DCH)

cr0x@server:~$ powershell -NoProfile -Command "Get-AppxPackage -Name *NVIDIACorp.NVIDIAControlPanel* | Select-Object Name,Version,Status,PackageFullName"
Name                             Version      Status PackageFullName
----                             -------      ------ ---------------
NVIDIACorp.NVIDIAControlPanel    8.1.962.0    Ok     NVIDIACorp.NVIDIAControlPanel_8.1.962.0_x64__56jybvy8sckqj

Що це означає: Пакет додатка встановлений і здоровий.

Рішення: Якщо він все ще «відсутній», швидше за все мова про проблеми shell/контекстного меню або шлях запуску.

Завдання 8: Якщо AppX-пакет відсутній — перевірте, чи Store заблоковано політикою

cr0x@server:~$ powershell -NoProfile -Command "reg query HKLM\SOFTWARE\Policies\Microsoft\WindowsStore /v RemoveWindowsStore"
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsStore
    RemoveWindowsStore    REG_DWORD    0x1

Що це означає: Store вимкнено політикою. На DCH-системах це часто означає «без Панелі керування».

Рішення: Або (a) отримайте виняток політики для розгортання пакета NVIDIA Control Panel, або (b) перейдіть на пакет драйвера, який включає UI без залежності від Store (часто OEM або non-DCH/Standard, якщо підтримується).

Завдання 9: Запустіть Панель керування NVIDIA прямо (працює навіть коли меню не показує)

cr0x@server:~$ powershell -NoProfile -Command "Start-Process shell:AppsFolder\\NVIDIACorp.NVIDIAControlPanel_56jybvy8sckqj!NVIDIACorp.NVIDIAControlPanel"

Що це означає: Якщо Панель керування відкривається, додаток у порядку; проблема — у віднаходженні (контекстне меню/меню Пуск/індекс пошуку), а не в інсталяції.

Рішення: Виправляйте інтеграцію shell (перезапуск Explorer, налаштування контекстного меню, стан служби), а не перевстановлення всього стека.

Завдання 10: Перезапустіть Explorer, щоб відновити обробники контекстного меню

cr0x@server:~$ powershell -NoProfile -Command "Stop-Process -Name explorer -Force; Start-Process explorer.exe"

Що це означає: Explorer перезапустився. Це часто відновлює записи при правому кліку після оновлення служби/додатка.

Рішення: Якщо Панель з’явилася, ви підтвердили проблему оновлення shell. Якщо ні — продовжуйте діагностику служб і пакетів.

Завдання 11: Перевірте наявність класичного виконуваного файлу для Standard драйверів

cr0x@server:~$ powershell -NoProfile -Command "Test-Path 'C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe'; Get-Item 'C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe' -ErrorAction SilentlyContinue | Select-Object FullName,Length,LastWriteTime"
True

FullName                                                       Length LastWriteTime
--------                                                       ------ -------------
C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe  708512 1/15/2024 6:34:10 PM

Що це означає: Виконуваний файл існує. Якщо додаток «відсутній», скоріш за все проблема в ярликах/контекстному меню, а не в бінарнику.

Рішення: Спробуйте запустити його; якщо він не запускається — перевірте залежності/стан служби.

Завдання 12: Запустіть виконуваний файл напряму (шлях Standard)

cr0x@server:~$ powershell -NoProfile -Command "& 'C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe'"

Що це означає: Якщо він відкривається, створіть ярлик у меню Пуск і не витрачайте на це півдня.

Рішення: Відновіть віднаходження (ярлики, контекстне меню), а не перевстановлення.

Завдання 13: Перевірте реєстрацію контекстного меню Панелі керування NVIDIA (перевірка)

cr0x@server:~$ powershell -NoProfile -Command "reg query 'HKCR\Directory\Background\shellex\ContextMenuHandlers' | findstr /i nvidia"
{0BB76A54-...}
NvCplDesktopContext

Що це означає: Обробник існує. Якщо пункт меню все ж відсутній, Windows 11 може ховати його під «Show more options», або Explorer потребує оновлення.

Рішення: Перевірте класичне контекстне меню; врахуйте можливі конфлікти shell-розширень; перезапустіть Explorer.

Завдання 14: Підтвердіть працездатність драйвера через nvidia-smi

cr0x@server:~$ nvidia-smi
Tue Feb  4 09:10:12 2026
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 551.76       Driver Version: 551.76       CUDA Version: 12.4     |
|-------------------------------+----------------------+----------------------|
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
|  0  RTX 3070 ... Off          | 00000000:01:00.0  On |                  N/A |
+-------------------------------+----------------------+----------------------+

Що це означає: Драйвер завантажений і працює принаймні настільки, щоб відповідати на запити керування.

Рішення: Зосередьте увагу на доставці UI (AppX/служба/shell), а не на виявленні GPU.

Завдання 15: Аудит недавніх встановлень драйверів (хто змінив що)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -LogName 'Microsoft-Windows-DriverFrameworks-UserMode/Operational' -MaxEvents 20 | Select-Object TimeCreated,Id,Message | Format-Table -AutoSize"
TimeCreated           Id Message
-----------           -- -------
2/3/2026 6:44:18 PM 2003 Driver package added: oem86.inf
2/3/2026 6:44:21 PM 2004 Driver package installed for device PCI\VEN_10DE...

Що це означає: Нещодавно щось змінилось, і це зафіксовано. Добре.

Рішення: Якщо Панель керування зникла відразу після цього, припустіть зміну типу драйвера (DCH/Standard або OEM/generic) або часткове оновлення.

Завдання 16: Перевірте базові показники стану диска (так, дійсно)

cr0x@server:~$ powershell -NoProfile -Command "Get-PhysicalDisk | Select-Object FriendlyName,HealthStatus,OperationalStatus | Format-Table -AutoSize"
FriendlyName      HealthStatus OperationalStatus
------------      ------------ -----------------
NVMe Samsung 980  Healthy      OK

Що це означає: Сховище явно не розвалюється.

Рішення: Якщо диск був у поганому стані, «відсутні файли» можуть бути буквальними. Не ігноруйте підкладку.

Жарт №2: «Спробували вимкнути та увімкнути?» смішно, поки ви це не зробите і воно не працює — тоді ви винні всесвіту вибаченням.

Три корпоративні історії з практики

Міні-історія 1: Інцидент через хибне припущення

Ситуація: команда дизайнерів на ноутбуках з Windows 11, що працювали з зовнішніми дисплеями. Вночі частина користувачів повідомила, що Панель керування NVIDIA зникла, і профілі кольору перестали поводитись очікувано. Служба підтримки зробила те, що роблять служби: перевстановила драйвери. Половина машин покращилась. Половина — стала гірше.

Хибне припущення було простим: «Панель керування — це частина драйвера». На тих ноутбуках IT давно перейшло на DCH драйвери. UI постачався з AppX-пакетом, а доступ до Store у компанії був закритий суворіше, ніж бюджетні витрати.

Що сталося? Windows Update доставив оновлення драйвера. Драйвер встановився нормально. Але додаток Панелі керування не зміг перевстановитись або оновитись, бо Store був заблокований, а pipeline AppX не був налаштований для цього пакета. Користувачі не втратили апаратне прискорення — вони втратили UI, який керував потрібними їм контролами.

Виправлення не було в перевстановленні драйвера. Потрібна була політика і пакування: вони додали виняток для розгортання цього конкретного пакета і провізіювали його для всіх користувачів на машинах. Потім задокументували процедуру, включно з перевіркою наявності AppX-пакета.

Після інциденту команда припинила трактувати «відсутність Панелі керування» як збій драйвера і почала розглядати це як проблему доставки. Середній час відновлення зменшився, і служба підтримки перестала грати в рулетку з перевстановленнями.

Міні-історія 2: Оптимізація, що відбилася боком

Фінансовий відділ поскаржився, що ноутбуки «повільно завантажуються». Хтось вирішив оптимізувати: GPO «оптимізація запуску»: відключити непотрібні служби, зменшити кількість tray-додатків і посилити фон-режими. Це спрацювало — логіни стали відчутно швидшими.

Через два тижні інженери почали повідомляти, що Панель керування NVIDIA зникла і контекстні меню, пов’язані з GPU, пропали. Деякі машини також втратили збереження налаштувань дисплея після перезавантаження. Драйвери NVIDIA були на місці. nvidia-smi працював. Це ускладнило сприйняття скарг, поки кілька людей не витратили годин на відновлення масштабування для зовнішніх моніторів.

Причина: політика відключила NVDisplay.ContainerLocalSystem. Хтось побачив «container» і вирішив, що це опціональна хмарна штука. Це припущення має місце в музеї поганих ідей.

Повторне включення служби негайно виправило проблему на уражених кінцевих точках. Оптимізацію відкликали і замінили на курований перелік, який залишав критичні служби ввімкненими. Урок простий: тонке налаштування Windows — не буфет. Якщо не знаєш, що робить служба — не відключай її на продакшн-пристроях.

Міні-історія 3: Нудна, але правильна практика, що врятувала день

VFX-студія підтримувала стандартний образ робочих станцій для різних команд. IT-лідер не любив «таємничих змін», тому вони фіксували базовий драйвер для кожної моделі обладнання, прив’язували за device ID і перевіряли щоквартально. Також у них був невеличкий скрипт, що перевіряв: присутність пристрою NVIDIA, роботу Display Container, встановлення пакету Панелі керування (де застосовно) і відомий робочий спосіб запуску.

Після хвилі фічевих оновлень Windows кілька машин втратили Панель керування NVIDIA. Паніка почалась. Але базові перевірки студії запускались при вході і відзначили точну відмову: AppX-пакет був відсутній для нових профілів користувачів, створених після оновлення.

Вони не перевстановлювали драйвери. Не витирали машини. Провізіювали додаток для всіх користувачів і заново зареєстрували його для уражених профілів. Проблема зникла до обіду, а художники повернулись сперечатись про размиття об’єктива замість драйверних UI.

«Нудна практика» — просто ставитись до кінцевих точок як до флоту: фіксовані базові версії, невеликі health-чекі й задокументовані шляхи відновлення. Це не гламурно. Але це утримує систему в роботі.

Типові помилки: симптом → корінна причина → виправлення

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

1) Симптом: Панель керування відсутня в контекстному меню робочого столу (Windows 11)

Корінна причина: Windows 11 ховає застарілі записи контекстного меню під «Show more options», або Explorer не оновився після інсталяції/оновлення.

Виправлення: Використайте «Show more options», перезапустіть Explorer і запустіть через AppsFolder. Якщо AppsFolder працює — проблема вирішена.

2) Симптом: Панелі керування немає в пошуку меню Пуск

Корінна причина: AppX встановлено, але індекс пошуку не оновлений; або інсталяція прив’язана до конкретного профілю користувача.

Виправлення: Запустіть напряму (AppsFolder або nvcplui.exe), потім закріпіть у меню Пуск. Якщо відсутній лише для одного користувача — перевірте і перевірте повторну реєстрацію AppX для цього профілю.

3) Симптом: Панель керування відкривається й миттєво закривається

Корінна причина: Пошкоджена реєстрація AppX, несумісні компоненти після оновлення драйвера або відключений NVIDIA Display Container.

Виправлення: Переконайтесь, що Display Container працює. Якщо так — перевірте повторну реєстрацію/перевстановлення AppX-пакета Панелі керування. Якщо служба не стартує через відсутній файл — виконайте чисту перевстановку драйвера.

4) Симптом: Панель керування встановлена, але відсутні налаштування «Display»

Корінна причина: Гібридна графіка; iGPU володіє шляхом відображення (часто на ноутбуках). Панель керування NVIDIA не покаже налаштувань дисплея, які вона не контролює.

Виправлення: Використовуйте налаштування Windows і засоби iGPU (Intel/AMD); або підключіть дисплей до порту, прив’язаного до NVIDIA GPU (залежить від моделі); або перемкніть MUX у BIOS, якщо підтримується.

5) Симптом: Драйвер є, але AppX-пакет Панелі керування не встановлено, а Store заблоковано

Корінна причина: DCH UI залежить від Store/AppX; корпоративна політика блокує Store.

Виправлення: Провізіонуйте додаток через затверджений корпоративний механізм AppX або змініть стратегію пакування драйверів у контрольований спосіб. Не просіть користувачів «просто увійти в Store» — це проблема відповідності політикам.

6) Симптом: Перевстановлення драйверів «інколи» виправляє проблему

Корінна причина: Ви періодично перемикаєтесь між OEM та generic пакетами або між моделями драйверів, і іноді UI випадково опиняється в робочому стані.

Виправлення: Виберіть один підтриманий шлях пакета для цієї моделі машини. Стандартизуйтесь. Перевіряйте сервіс + пакет додатка + тест запуску.

7) Симптом: Панель керування відсутня лише під час віддаленого робочого столу

Корінна причина: RDP-сесія використовує інший шлях драйвера відображення або політику; UI може не показувати ті самі опції.

Виправлення: Перевіряйте локально/консольно. Якщо управління через віддалений доступ необхідне — використовуйте OOB-методи або забезпечте сесію з прискоренням GPU, де потрібно.

8) Симптом: Панель керування зникла після «debloat» або утиліт очищення

Корінна причина: Ці інструменти видаляють AppX-пакети, служби або заплановані завдання, не розуміючи залежностей.

Виправлення: Скасуйте зміни інструмента, якщо можливо; відновіть пакет/службу; інакше виконайте чисту перевстановку. Потім забороніть цей інструмент на продакшн-пристроях.

Чек-листи / покрокові плани

План A: Мінімальний, розсудливий шлях (виправлення без перевстановлення)

  1. Перевірте присутність GPU (Завдання 2). Якщо пристрій NVIDIA не в порядку, проблема не в «відсутній Панелі керування», а в драйвері/обладнанні.
  2. Перевірте службу Display Container (Завдання 4). Якщо зупинена — запустіть її (Завдання 5). Якщо не стартує — візьміть журнал подій (Завдання 6).
  3. Перевірте, чи Панель керування — AppX (Завдання 7). Якщо є — запустіть через AppsFolder (Завдання 9). Якщо запускається — виправляйте віднаходження (Завдання 10).
  4. Якщо існує виконуваний файл Standard драйвера (Завдання 11) — запустіть його (Завдання 12), потім закріпіть у меню Пуск.
  5. Повторно перевірте симптом: пошук у меню Пуск, контекстне меню правого кліку та прямий запуск. Не оголошуйте перемогу, поки не зможете відтворити виправлення.

План B: Корпоративне середовище (враховуючи політику)

  1. Перевірте політику Store (Завдання 8). Якщо Store вимкнено і ви на DCH, вважайте, що UI потребує корпоративної провізії.
  2. Визначте спосіб доставки, що підтримується: провізіонуйте AppX для всіх користувачів або оберіть OEM-пакет, який включає UI і не залежить від Store у вашому середовищі.
  3. Підтвердіть через health-check при вході: служба працює, пакет встановлений, тест запуску. Розглядайте це як гігієну кінцевих точок.
  4. Заморозьте відому добру версію драйвера для кожної моделі і змінюйте її навмисно, а не коли Windows Update «надихнеться».

План C: Чиста перевстановлення (коли файли/служби дійсно пошкоджені)

  1. Підтвердіть, що служба не працює через відсутні бінарні файли (Завдання 6). Якщо так — припиніть намагатись «перегорнути» служби.
  2. Видаліть конфліктуючі пакети стандартними шляхами видалення. Уникайте змішування OEM і generic інсталяторів «на ходу».
  3. Встановіть відомий добрий пакет драйвера, відповідний для hardware і вашого середовища (DCH з провізією AppX або Standard де підтримується).
  4. Негайно перевірте: служба працює, Панель керування запускається, контекстне меню відображається, налаштування зберігаються після перезавантаження.

Операційний чек-лист: що задокументувати на наступний раз

  • Гілка драйвера і версія, що працює для цієї моделі машини.
  • Чи система використовує DCH і тому потребує провізії AppX.
  • Необхідні служби (особливо NVDisplay.ContainerLocalSystem) і їхній StartType.
  • Відомий робочий спосіб запуску (команда AppsFolder або шлях nvcplui.exe).
  • Примітки щодо обмежень гібридної графіки (який порт прив’язаний до якого GPU, поведінка BIOS MUX).

FAQ

Чому Панель керування NVIDIA зникла після оновлення драйвера?

Тому що драйвер і UI можуть постачатись окремо (особливо з DCH). Драйвер оновився; додаток UI міг не оновитись, бути видаленим або не встановитись через політику.

Чи Панель керування NVIDIA тепер — додаток Microsoft Store?

На багатьох DCH-установках — так: це AppX-пакет (часто від NVIDIA Corporation). Це полегшує оновлення, але й ускладнює ситуацію в обмежених середовищах.

Я не можу використовувати Microsoft Store на робочому ПК. Як повернути Панель керування?

Спочатку перевірте, чи Store заблоковано політикою (Завдання 8). Далі потрібен корпоративно-затверджений спосіб провізії AppX-пакета Панелі керування NVIDIA або підтримуваний шлях пакування драйвера для вашого флоту. «Просто увійдіть особистим обліковим записом» — не рішення; це питання відповідності політикам.

Додаток встановлено, але нема в контекстному меню. Чи він зламався?

Не обов’язково. Windows 11 може ховати запис під «Show more options», і Explorer може не оновити shell-розширення після оновлення. Перезапустіть Explorer (Завдання 10) і спробуйте запуск напряму (Завдання 9 або 12).

Чому всередині Панелі керування відсутні налаштування «Display»?

На багатьох ноутбуках iGPU керує вбудованим дисплеєм. NVIDIA може не контролювати пайплайн відображення, тому вона не покаже налаштувань, які вона не може застосувати. Це нормально.

Яку службу перевіряти перш за все?

NVDisplay.ContainerLocalSystem (часто відображається як NVIDIA Display Container LS). Якщо вона зупинена або відключена — інтеграція UI часто зникає.

Чи можна просто скопіювати nvcplui.exe з іншої машини?

Можна, але не варто. Панель керування пов’язана з компонентами драйвера та реєстраціями. Копіювання бінарників створює крихкий, непідтримуваний стан. Виправляйте через коректну інсталяцію або провізію AppX.

Чи впливає GeForce Experience на появу Панелі керування?

GeForce Experience не є обов’язковим для Панелі керування, але може впливати на шляхи інсталяції драйверів і вибір компонентів. При діагностиці збережіть стек простим: драйвер + необхідні служби + пакет Панелі керування.

Чому все працює локально, але не по RDP?

Тому що RDP може представляти інший шлях графіки і не відкривати ті самі UI-хуки. Спочатку перевіряйте локально; віддалену поведінку розглядайте окремо.

Що робити, якщо nvidia-smi працює, а Панель керування ні?

Зазвичай це означає, що драйвер у порядку, а проблема — у доставці UI (AppX відсутній/пошкоджений) або у службі/shell-інтеграції. Почніть з Завдань 4, 7 і 9.

Висновок: дієві кроки далі

Припиніть ставитись до відсутньої Панелі керування NVIDIA як до містичної історії. Розглядайте систему як набір компонентів: драйвер, служби, пакет додатка і інтеграція shell. Спершу вимірюйте, потім змінюйте по одному параметру.

  1. Пройдіть швидкий план діагностики: пристрій присутній, Display Container працює, пакет/виконуваний файл існує, прямий запуск працює.
  2. Якщо служба зупинена, запустіть її і перезапустіть Explorer. Це найвищий ROI-виправлення.
  3. Якщо Store заблоковано і ви на DCH, піднімайте питання провізії AppX або змінюйте шлях пакування на підтримуваний. Не боріться з політикою хаками.
  4. Якщо інсталяції пошкоджені, робіть чисту перевстановку — але лише після доведення її необхідності.
  5. Документуйте вашу базу (версія драйвера, DCH/Standard, необхідні служби, спосіб запуску), щоб наступного разу все було нудно й швидко.