[2026-09-20] eagle: family/how-to/kraken-access.md family/plans/kraken-backup-to-truenas.md personal/tech/docker-data-root-mount-race.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-20 11:44:53 +06:00
1 parent d295d69a4c
commit 49e1c1a11f
3 files changed
+96 -2

No files matched your search

@@ -133,3 +133,34 @@ docker info --format "containers={{.Containers}} running={{.ContainersRunning}}"
Кратко: boot 17:29:17, dockerd 17:31:01, диск 17:31:27 (на 26 с позже) → 0
контейнеров. Фикс: drop-in `RequiresMountsFor=/srv/.../6194539b.../docker-data`
+ чистка fstab. Бэкап: `/home/kraken/backups/docker-recovery-20260920-105228/`.
## Смежная ловушка: смешанные владельцы под data-root
Бэкап (или tar) дерева сервисов на том же диске часто упирается в **разных владельцев** —
часть каталогов `root:root` (созданы root-контейнерами), часть `1000:1000`.
Бэкап от обычного юзера получит `Permission denied` на root-каталогах и **молча
сделает неполный архив**.
```bash
sudo ls -ldn /srv/dev-disk-by-uuid-<DISK>/docker/*/ | awk '{print $3, $4, $NF}'
```
Если `sudo -n true` проходит (NOPASSWD есть) — архивировать под `sudo -n`, а на приёмной
стороне выставить владельца бэкап-юзера: `rsync --chown=<user>:<group>` (не голое копирование,
иначе файл ляжет `root:root`).
**ПИТФОЛЛ — длинный `chown -R`/архив умирает вместе с SSH-сессией.** Рекурсивный `chown`
(или большой `tar`) по медленному USB-HDD идёт минутами и убивается при обрыве SSH.
Запускать отвязанно:
```bash
sudo systemd-run --unit=<name> --collect --property=Type=oneshot chown -R 1000:1000 <path>
systemctl is-active <name> # 'activating' = ещё идёт, доживёт до конца независимо от SSH
```
Тем же приёмом — любую долгую удалённую задачу через флаки-линк.
**ПИТФОЛЛ — контейнер в `Restarting (1)` с `mkdir: Permission denied` на своём каталоге данных** —
тот же класс багов, но наоборот: UID владельца на хосте не совпадает с UID, под которым
работает контейнер (образ `USER` или compose `user:`). Лечится `chown <container-uid>:<gid> <host-dir>`.
Ожидаемый UID: `docker inspect <name> --format '{{.Config.User}}'`.
Первые несколько `mkdir`-ошибок могут быть **остатком буфера** от прежнего падения — прежде
чем объявлять провал, убедиться, что контейнер реально держится `Up`.