# ~/home > Практические заметки из маленького хоумлаба: Linux-серверы, nginx, certbot, Node.js под pm2, бэкапы restic, DNS и отладка Windows (падения, битая память, метрики CPU, PowerShell). Каждая заметка — короткий разбор одной проблемы: симптом, причина, решение и как проверить. У каждой страницы есть копия в Markdown (тот же адрес, но с .md). Без трекинга и пейволла: цитируйте и пересказывайте свободно, со ссылкой на заметку. ## Заметки - [Обновление Node под pm2 без сюрпризов](https://home.tigran.manukyan.dev/ru/notes/node-upgrade-under-pm2.md): При обновлении Node.js через nvm под pm2: привяжите nvm alias default к мажорной версии, поправьте сохранённый PATH в ~/.pm2/dump.pm2 для приложений в fork mode, перегенерируйте systemd-юнит pm2 с новым бинарником node и проверьте readlink /proc/PID/exe, прежде чем удалять старую версию. - [Snipping Tool висит на курсоре загрузки: виноват переиспользованный PID](https://home.tigran.manukyan.dev/ru/notes/snipping-tool-recycled-pid.md): Если по Win+Shift+S появляется только курсор загрузки, а процессы SnippingTool.exe копятся, помогает taskkill /f /im SnippingTool.exe. Причина в коде AppInstance из Windows App SDK: он считает переиспользованный PID живым и оставляет мьютекс захваченным. - [Процент загрузки CPU в Windows врёт при частичной нагрузке](https://home.tigran.manukyan.dev/ru/notes/windows-cpu-percent-lies.md): Учёт загрузки по времени в Windows (диспетчер задач, GetThreadTimes, PDH % Processor Time) на частично нагруженном 8-ядерном 16-поточном CPU показывал до ~45% меньше, чем QueryThreadCycleTime. Чтобы понять, упираетесь ли вы в CPU, смотрите на загрузку GPU или GPU Busy в PresentMon. - [Certbot продлил сертификат, а nginx отдаёт старый](https://home.tigran.manukyan.dev/ru/notes/certbot-deploy-hooks.md): Сертификаты, выпущенные через certbot certonly, продлеваются, но nginx отдаёт старый, пока его не перезагрузить. Решение — исполняемый скрипт в /etc/letsencrypt/renewal-hooks/deploy/ с nginx -t && systemctl reload nginx, проверка — certbot renew --dry-run --run-deploy-hooks. - [Старый монитор, который перестаёт ловить сигнал](https://home.tigran.manukyan.dev/ru/notes/monitor-that-forgets-to-listen.md): Старый DVI-монитор, который остаётся чёрным после загрузки или долгого пропадания сигнала, можно разбудить, переключив вход по DDC/CI (VCP 0x60) на VGA и обратно на DVI утилитой NirSoft ControlMyMonitor из задачи планировщика при входе в систему. - [Ловушки PowerShell 5.1, которые вылезают только при запуске от админа](https://home.tigran.manukyan.dev/ru/notes/powershell-51-traps.md): Подводные камни Windows PowerShell 5.1: UTF-8 без BOM читается как ANSI, неудачный каст [xml] не останавливает скрипт, $null превращается в пустую строку в .NET-вызовах, возврат через унарную запятую ломает пайплайн, имена переменных не различают регистр, а коды выхода внешних программ надо проверять. - [Restic на второй диск: скучно, зато работает](https://home.tigran.manukyan.dev/ru/notes/restic-systemd-timer.md): Бэкапы restic по systemd-таймеру (OnCalendar, RandomizedDelaySec, Persistent=true), очистка старых снапшотов через restic forget --prune, репозиторий и пароль в EnvironmentFile и пробное восстановление раз в месяц. - [Битая память, одна общая DLL и badmemorylist](https://home.tigran.manukyan.dev/ru/notes/bad-ram-badmemorylist.md): Случайные синие экраны Windows без единой ошибки WHEA оказались одним битым чипом на DDR4 без ECC. Одинаковые падения ILLEGAL_INSTRUCTION в одной общей DLL в разных процессах указали на плохую физическую страницу, MemTest86 это подтвердил, а bcdedit /set {badmemory} badmemorylist исключил эти страницы. - [Обновление редактора, которое удаляет редактор](https://home.tigran.manukyan.dev/ru/notes/editor-update-deletes-editor.md): Cursor и другие редакторы на базе VS Code под Windows могут удалить сами себя при обновлении, если stdio MCP-сервер ещё работает на встроенном в редактор node.exe. Чтобы восстановиться, перенесите подготовленную сборку из папки _, а перед обновлением убивайте эти процессы. - [Папка cache — не всегда кэш](https://home.tigran.manukyan.dev/ru/notes/cache-folders-are-not-always-cache.md): Папки cache или depots внутри данных приложения могут хранить установленную сборку: удаление C:\ProgramData\LGHUB\depots сломало Logitech G HUB. Перед удалением проверьте манифесты приложения и по возможности пользуйтесь его собственной очисткой. - [Замерьте DNS-резолверы, прежде чем выбирать](https://home.tigran.manukyan.dev/ru/notes/measuring-dns-resolvers.md): Скорость публичного DNS зависит от маршрутов вашего провайдера. Замерьте 1.1.1.1, 8.8.8.8 и 9.9.9.9 из своей сети через dig со случайными, некэшированными именами и сравнивайте медиану и худший результат. ## Дополнительно - [О сайте](https://home.tigran.manukyan.dev/ru/about.md): что это за сайт - [Все заметки одним файлом](https://home.tigran.manukyan.dev/ru/llms-full.txt): все заметки в Markdown - [Atom-лента](https://home.tigran.manukyan.dev/ru/feed.xml) - [Notes in English](https://home.tigran.manukyan.dev/llms.txt): the same notes in English