mirror of
https://gitverse.ru/kpa39l/infrastructure.git
synced 2026-09-29 01:55:03 +00:00
docs: davfs2 hang incident — разбор, лечение, статус проекта
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# PRD — Infrastructure
|
||||
|
||||
## Цель
|
||||
Каталог /opt/infrastructure — единая точка управления домашней инфраструктурой: конфиги, плейбуки, спеки (openspec), запись операционного опыта (инциденты, разборы) для повторяемости.
|
||||
|
||||
## Пользователи
|
||||
- Владелец инфраструктуры (техноблогер): управляет серверами, бэкапами, сетью; ведёт техблог.
|
||||
|
||||
## Функциональные требования
|
||||
- Документировать инфраструктуру: сервисы (/opt/<svc>), монтирования, бэкапы.
|
||||
- Фиксировать опыт инцидентов: диагностика, команды, выводы (WALKTHROUGH).
|
||||
- Поддерживать спеки openspec для изменений (s3, tunnel-proxy и т.д.).
|
||||
- Содержать точные порты/маппинги и корректные технические детали (важно для пользователя).
|
||||
|
||||
## Нефункциональные требования
|
||||
- Всё в /opt/infrastructure (правило единого каталога; данные не в $HOME).
|
||||
- Данные пользователя не удалять (любые операции — только с подтверждением).
|
||||
- Документация на русском, точная, без «приблизительно».
|
||||
|
||||
## Границы (что НЕ делаем)
|
||||
- Не дублируем конфиги сервисов, живущих в /opt/<svc> — только ссылки/описания.
|
||||
- Не храним секреты в открытом виде (только пути к файлам секретов).
|
||||
|
||||
## Критерии готовности
|
||||
- STATUS.md актуален после каждой сессии.
|
||||
- Каждый инцидент закончен записью в WALKTHROUGH.md с командами и выводами.
|
||||
- TODO.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]
|
||||
```
|
||||
См. SECURITY.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 (рекомендуется, пользователь ещё не подтвердил).
|
||||
@@ -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 + тихое перемонтирование | 🔵 открыта | |
|
||||
@@ -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 <PID>
|
||||
# 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
|
||||
- Пост для блога: (опыт был подготовлен как техноблог-пост в сессии)
|
||||
Reference in New Issue
Block a user