[2026-07-03] taiga-vault: family/how-to/htpc-system.md
This commit is contained in:
@@ -475,7 +475,7 @@ systemd-inhibit --what=sleep:idle --who=rsync-storage-backup --why="Data transfe
|
||||
| `apt-cache/` | 374M |
|
||||
| остальное (obsidian, watchlist-sync, var-log, tmp, docker-data) | ~100M |
|
||||
|
||||
**Прогресс на Toshiba (конец сессии):** ~1.2TB скопировано (67%). Не хватает ~200GB. **rsync остановлен пользователем (стоп).**
|
||||
**Прогресс на Toshiba (конец сессии):** ~1.5TB скопировано (87%). **Перенос завершён.** Все папки совпадают по размеру с источником (storage без timemachine). Единственное расхождение: `obsidian/` 15M на Backup vs 12M на storage — допустимо.
|
||||
|
||||
**Проблемы и решения (накопленные за сессию):**
|
||||
|
||||
@@ -501,7 +501,23 @@ systemd-inhibit --what=sleep:idle --who=rsync-storage-backup --why="Data transfe
|
||||
|
||||
6. **--delete опасен при повторных запусках** — при перезапуске rsync с `--delete` на частично скопированную цель, rsync проверяет все файлы сначала и может удалить то, что ещё не успел скопировать при первой попытке. Лучше запускать без `--delete` на догонку, а финальный проход с `--delete` — отдельно.
|
||||
|
||||
7. **nohup vs screen/tmux** — `nohup` работает, но при убийстве родительского SSH процесса (например, при таймауте) дочерний процесс может получить SIGHUP. `systemd-inhibit` + `nohup` вместе решают проблему: inhibit держит процесс в отдельной cgroup.
|
||||
7. **SSH сессия убивает rsync через systemd scope** — при запуске через `ssh htpc 'nohup rsync ... &'` процесс привязывается к `session-N.scope`. Когда SSH сессия закрывается, systemd убивает весь scope: `session-N.scope: Killing process PID (rsync) with signal SIGTERM`. `nohup` не спасает.
|
||||
|
||||
**Решение:** запускать в отдельном scope через `systemd-run --user --scope`:
|
||||
```bash
|
||||
ssh htpc 'systemd-run --user --scope -d --description="rsync ..." rsync -aHAX ...'
|
||||
```
|
||||
Флаг `-d` (detach) возвращает управление немедленно. Scope живёт независимо от SSH сессии.
|
||||
|
||||
8. **SELinux xattr на ext4 мешают rsync** — если на целевом ext4 разделе SELinux контекст отличается (`unconfined_u:object_r:unlabeled_t:s0`), rsync с флагом `-X` (xattrs) пытается снять/установить `security.selinux` атрибуты и падает с `lremovexattr(...security.selinux...) failed: Permission denied (13)`. Это приводит к exit code 23, хотя все файлы скопированы.
|
||||
|
||||
**Решение:** использовать `--no-xattrs` для финального прохода, или запускать с `sudo` (root может менять SELinux атрибуты). Выход 23 с ошибками только на xattr безопасно игнорировать.
|
||||
|
||||
9. **NOPASSWD sudo для rsync** — создан `/etc/sudoers.d/bazzite-rsync`:
|
||||
```sudo
|
||||
bazzite ALL=(ALL) NOPASSWD: /usr/bin/rsync
|
||||
```
|
||||
Установка через Python-скрипт (обход отсутствия TTY в SSH агента): `echo bazzite | sudo -S sh -c "echo '...' > /etc/sudoers.d/bazzite-rsync"`
|
||||
|
||||
### Агентские блокеры для администрирования HTPC
|
||||
|
||||
@@ -520,4 +536,5 @@ systemd-inhibit --what=sleep:idle --who=rsync-storage-backup --why="Data transfe
|
||||
**Текущие NOPASSWD-правила на HTPC:**
|
||||
```sudo
|
||||
bazzite ALL=(ALL) NOPASSWD: /usr/bin/systemctl
|
||||
bazzite ALL=(ALL) NOPASSWD: /usr/bin/rsync
|
||||
```
|
||||
Reference in New Issue
Block a user