From 9d41f5a538646d378690e8bdd180eeb51a080335 Mon Sep 17 00:00:00 2001 From: hermes Date: Sat, 12 Sep 2026 09:28:00 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20davfs2=20hang=20incident=20=E2=80=94=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B1=D0=BE=D1=80,=20=D0=BB=D0=B5=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5,=20=D1=81=D1=82=D0=B0=D1=82=D1=83?= =?UTF-8?q?=D1=81=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PRD.md | 27 ++++++++++++++++++++++ README.md | 38 ++++++++++++++++--------------- STATUS.md | 26 +++++++++++++++++++++ TODO.md | 6 +++++ WALKTHROUGH.md | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 140 insertions(+), 18 deletions(-) create mode 100644 PRD.md create mode 100644 STATUS.md create mode 100644 TODO.md create mode 100644 WALKTHROUGH.md diff --git a/PRD.md b/PRD.md new file mode 100644 index 0000000..5131ab7 --- /dev/null +++ b/PRD.md @@ -0,0 +1,27 @@ +# PRD — Infrastructure + +## Цель +Каталог /opt/infrastructure — единая точка управления домашней инфраструктурой: конфиги, плейбуки, спеки (openspec), запись операционного опыта (инциденты, разборы) для повторяемости. + +## Пользователи +- Владелец инфраструктуры (техноблогер): управляет серверами, бэкапами, сетью; ведёт техблог. + +## Функциональные требования +- Документировать инфраструктуру: сервисы (/opt/), монтирования, бэкапы. +- Фиксировать опыт инцидентов: диагностика, команды, выводы (WALKTHROUGH). +- Поддерживать спеки openspec для изменений (s3, tunnel-proxy и т.д.). +- Содержать точные порты/маппинги и корректные технические детали (важно для пользователя). + +## Нефункциональные требования +- Всё в /opt/infrastructure (правило единого каталога; данные не в $HOME). +- Данные пользователя не удалять (любые операции — только с подтверждением). +- Документация на русском, точная, без «приблизительно». + +## Границы (что НЕ делаем) +- Не дублируем конфиги сервисов, живущих в /opt/ — только ссылки/описания. +- Не храним секреты в открытом виде (только пути к файлам секретов). + +## Критерии готовности +- STATUS.md актуален после каждой сессии. +- Каждый инцидент закончен записью в WALKTHROUGH.md с командами и выводами. +- TODO.md — журнал задач с датами и ссылками на сессии. \ No newline at end of file diff --git a/README.md b/README.md index 6679992..33dfadb 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,28 @@ -```markdown -# Project Name +# Infrastructure -## Description +Домашняя инфраструктура: единый каталог конфигов, плейбуков, спеков (openspec) и операционного опыта. -### Setup Instructions -1. Clone the repository -2. Install dependencies -3. Configure environment +## Структура +- `README.md` — это описание +- `STATUS.md` — текущее состояние (живой документ, обновляется при закрытии сессии) +- `PRD.md` — требования к проекту +- `TODO.md` — журнал задач +- `WALKTHROUGH.md` — капитанский журнал: разборы инцидентов, команды, выводы +- `openspec/` — спеки и изменения (openspec workflow) +- `roles/` — ansible-роли (например, garage) -### Usage Examples -```bash -./run.sh -``` +## Текущее состояние +См. STATUS.md -### Contribution Guidelines -- Submit issues -- Follow code of conduct -- Submit pull requests +## Быстрый старт / проверка +- Проверить монтирование Яндекс.Диска: `grep yandex /proc/mounts`, `ls /mnt/yandex-disk/` +- Демон davfs2: `ps aux | grep mount.davfs` + +## Как фиксировать опыт +Инцидент разобран → добавить запись в WALKTHROUGH.md (симптом, разбор, команды, выводы) + закрыть задачу в TODO.md. ## License -[License Type] +MIT (см. LICENSE) ## Security -[Security Policy] -``` \ No newline at end of file +См. SECURITY.md \ No newline at end of file diff --git a/STATUS.md b/STATUS.md new file mode 100644 index 0000000..d1242ca --- /dev/null +++ b/STATUS.md @@ -0,0 +1,26 @@ +# Infrastructure — Статус + +Обновлено: 2026-09-12 (сессия: davfs2-hang-fix) + +## Текущее состояние +- Инфраструктура-репозиторий /opt/infrastructure (git, openspec) — живой. +- Инцидент с зависшим davfs2 (Яндекс.Диск WebDAV) разобран и устранён: точка /mnt/yandex-disk перемонтирована, данные целы, бэкапы снова пишутся. +- Открыт вопрос: добавить watchdog для авто-перемонтирования зависшего davfs2. + +## Сделано +- 2026-09-12: Диагностика и устранение зависшего монтирования /mnt/yandex-disk (davfs2). +- 2026-09-12: Зафиксирован опыт в WALKTHROUGH.md (разбор, команды, выводы). + +## В работе / Следующие шаги +- [ ] Watchdog: детектор «точка /mnt/yandex-disk молчит > N сек» + тихое перемонтирование (cron no_agent). + +## Как запустить / проверить +- Проверить монтирование: `grep yandex /proc/mounts`, `ls /mnt/yandex-disk/` +- Демон: `ps aux | grep mount.davfs` + +## Ключевые артефакты +- WALKTHROUGH.md — полный разбор инцидента с командами +- README.md — описание проекта + +## Открытые вопросы +- Нужен ли watchdog (рекомендуется, пользователь ещё не подтвердил). \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..10537c5 --- /dev/null +++ b/TODO.md @@ -0,0 +1,6 @@ +# TODO — Infrastructure + +Формат: | дата | задача | статус | закрыта в +|---|---|---|---| +| 2026-09-12 | Инцидент: зависший davfs2 (/mnt/yandex-disk), бэкапы встали | ✅ закрыта | сессия davfs2-hang-fix (2026-09-11/12, CLI) | +| 2026-09-12 | Watchdog: авто-детект зависшего davfs2 + тихое перемонтирование | 🔵 открыта | | \ No newline at end of file diff --git a/WALKTHROUGH.md b/WALKTHROUGH.md new file mode 100644 index 0000000..46fe1dd --- /dev/null +++ b/WALKTHROUGH.md @@ -0,0 +1,61 @@ +# WALKTHROUGH — Infrastructure (капитанский журнал) + +Хронология работ, команд, решений и ошибок. Цель — воспроизводимость. + +--- + +## 2026-09-12 — Инцидент: зависший davfs2 (Яндекс.Диск), «не работает systemd» + +### Симптом +- Бэкапы на /mnt/yandex-disk не сделались (встали). +- Любое обращение к /mnt зависает: `ls /mnt`, `ls /mnt/yandex-disk` — висят без ошибки. +- «systemd не работает»: сервисы не управляются. + +### Разбор (по шагам) +1. `grep yandex /proc/mounts` → точка жива: `https://webdav.yandex.ru /mnt/yandex-disk fuse rw,...` + - Это ручное/скриптовое монтирование, а НЕ systemd unit. +2. `systemctl status mnt-yandex-disk.mount` → «could not be found». **Причина «сломанного systemd»**: точка смонтирована мимо unit-а, systemd ею не управляет и «не находит» её. Не systemd виноват, а ресурс, которым он пытается управлять. +3. `ps aux | grep davfs` → демон живой: `/sbin/mount.davfs https://webdav.yandex.ru /mnt/yandex-disk -o rw uid=1000 file_mode=600 dir_mode=700` (процесс). FUSE-соединение есть (/sys/fs/fuse/connections), но запросы не обслуживаются. +4. `curl -I https://webdav.yandex.ru` → отвечает 302 мгновенно. **Сервер жив, сеть жива — завис только локальный FUSE-мост** (клиент davfs2), а не сервер. + +### Почему «всё висит» +FUSE-драйвер, который не обслуживает запросы, не выдаёт ошибку — он молчит. Любой syscall (readdir/stat) к этой точке уходит в FUSE и ждёт ответа; процесс висит, пока ядро не таймаутнет. Отсюда ощущение «зависла вся система»: любой процесс, дотронувшийся до /mnt/yandex-disk, встаёт. + +### Лечение (данные не теряются — они в облаке) +```bash +# 1. Найти PID демона +ps aux | grep mount.davfs +# 2. Убить жёстко (-15 демон в подвешенном состоянии не обработает) +sudo kill -9 +# 3. Размонтировать (davfs может ругнуться на пропавший pid — это нормально) +sudo umount /mnt/yandex-disk +# 4. Убрать осиротевший pid-файл, чтобы следующий старт был чистым +sudo rm -f /var/run/mount.davfs/mnt-yandex-disk.pid +# 5. Проверить, что размонтировано +grep yandex /proc/mounts # пусто +# 6. Смонтировать заново (креды из /etc/davfs2/secrets) +sudo mount.davfs https://webdav.yandex.ru /mnt/yandex-disk \ + -o rw,uid=1000,file_mode=600,dir_mode=700 +# 7. Проверить глубину +ls /mnt/yandex-disk/projects +ls /mnt/yandex-disk/obsidian/mozg +``` +Результат: точка смонтирована, каталоги отвечают мгновенно, данные на месте. + +### Конфиг монтирования (/etc/fstab) +``` +https://webdav.yandex.ru /mnt/yandex-disk davfs _netdev,auto,rw,uid=1000,file_mode=600,dir_mode=700 0 0 +``` +Секреты: /etc/davfs2/secrets (root:root 600). + +### Выводы / правила на будущее +1. Сетевые диски (WebDAV/SMB/NFS через FUSE) — самое хрупкое звено. Выглядят как папки, но это процессы, которые могут замереть тихо, без логов. +2. «Не отвечает systemd» = «не отвечает ресурс, которым systemd управляет». Проверять цепочку: сервис → точка монтирования → процесс → сеть. +3. `curl -I` на источник ДО убийства монтирования — 10 секунд уверенности, что лечим клиента, а не сервер. +4. Бэкап на сетевой диск — не бэкап. Нужна вторая дверь (или watchdog, который тихо перемонтирует). +5. Watchdog (открытая задача в TODO): детектор «/mnt/yandex-disk не отвечает > N сек» → тихое перемонтирование, без шума (cron no_agent). + +### Артефакты +- Статус: STATUS.md +- Задачи: TODO.md +- Пост для блога: (опыт был подготовлен как техноблог-пост в сессии) \ No newline at end of file