CH-J Toolsspráva serverů přes SSH
Menu
Vydané zdroje

CH-J Tools

Procházejte adresáře a soubory konkrétního vydání aplikace.

Stáhnout zdroje ZIP
CH-J / Server Manager 406 souborů
core-20261024T135205Z-7c487d719de2 Přidáno: · Sestaveno:
disks-plugin.md Přidáno: Datum není evidováno 6,5 KB · 69 řádků
Kód Stáhnout soubor
1# chj.disks – Disk Manager (správa disků vzdálených Linux serverů)
3Vestavěný plugin pro grafickou správu blokových zařízení vzdáleného Linux serveru přes existující SSH relaci Core,
4podobně jako GParted. Na serveru není potřeba grafické prostředí. Plugin je jen UI (vlastní okno a partition);
5veškerou logiku provádí Core služba `src/main/disks/diskService.js` s pevným skriptem `src/main/disks/remoteDisks.sh`.
6Neexistuje obecné spouštění příkazů ani obecný root exec.
8## Architektura
10| Část | Soubor | Odpovědnost |
11|---|---|---|
12| Manifest / UI | `src/main/firstPartyPlugins/chj.disks/0.0.1/` (`manifest.json`, `ui/index.html`, `ui/index.js`, `ui/i18n.js`, `ui/styles.css`) | mapa disků, tabulka, kontextové menu, dialogy, fronta, kontrola plánu, monitor úloh, SMART; CS/DE/EN |
13| Inventura (model) | `src/main/disks/inventory.js` | graf zařízení ze sysfs (holders/slaves), obohacený o lsblk/blkid/sfdisk/LVM/cryptsetup; vrstvy disk → oddíl → LUKS → PV → VG → LV → FS; volné místo GPT/MBR |
14| Plánovač | `src/main/disks/planner.js` | validace a simulace fronty operací, generování whitelistovaných kroků, návrhy automatického rozšíření |
15| Core služba | `src/main/disks/diskService.js` | detekce platformy, inspect, plán (vázaný na identitu serveru, TTL 30 min, jednorázový), apply s novým ověřením, úlohy, SMART |
16| Vzdálený helper | `src/main/disks/remoteDisks.sh` | POSIX sh (dash/bash/BusyBox ash): inspect, smart, job-start/job-run/job-status/job-list, kroky |
17| IPC | `src/main/plugins/pluginRuntime.js`, `src/preload/pluginPreload.js` | `plugin:disks:inspect/smart/jobs/jobStatus` (`disks.read`), `plan/autoExpand/cancelPlan/apply` (`disks.manage`); Plugin API 1.6.0 |
19## Bezpečnostní pravidla
20- Čtení běží bez roota (sysfs, lsblk, blkid cache, mountinfo, df); inventura bez roota je označena jako neúplná. Plné
21 údaje (tabulky oddílů, LVM, LUKS, velikosti FS) a všechny změny jdou přes `PrivilegedExecutor` (root/sudo, heslo jen
22 přes stdin; volitelně jen v paměti pro relaci kvůli sledování úloh).
23- Každá operace je validována v Core i znovu ve skriptu (zařízení, čísla, štítky `[A-Za-z0-9._-]`, přípojné body jen
24 `/mnt` a `/media`). Řádky plánu nesmí obsahovat glob ani uvozovky.
25- Nikdy automaticky: odpojení systémových přípojných bodů, swapoff, zavření LUKS, deaktivace LVM, restart, instalace
26 balíčků, `umount -f/-l`, `btrfs check --repair`. Spouštěcí oddíly (BIOS boot, ESP) disku s běžícím systémem nelze
27 smazat ani formátovat. Úložiště hostitele Proxmox a disky hostů (`vm-<id>-disk-*`) jsou chráněné.
28- Před každou změnou: `verify-disk` (velikost + SHA-256 výpisu `sfdisk -d`), `verify-size` u LV/LUKS, záloha metadat
29 tabulky oddílů do `/var/lib/chj-server-manager/disks/backups` (posledních 50). **Záloha tabulky není záloha dat.**
30- Apply znovu načte inventuru a plán musí vyjít krok za krokem stejně; jinak `DISKS_PLAN_STALE` bez jakékoli změny.
31 Plán je jednorázový; ID úlohy na serveru nelze spustit podruhé (`DISKS_JOB_EXISTS`).
33## Úlohy a výpadky SSH
34- `job-start` uloží plán a kopii helperu do `/var/lib/chj-server-manager/disks/jobs/<uuid>/` (0700) a spustí běh
35 odděleně od SSH: `systemd-run` (transient unit `chj-disks-<id>`), bez systemd `setsid` (Alpine/OpenRC).
36- Stav `state`, `step`, `log`, `error`, `pid`; po reconnectu UI načte stav a pokračování logu. `running` bez živého
37 procesu = **unknown** (nikdy se nespouští znovu). Jediný globální zámek `/run/chj-disks.lock` brání souběžným
38 diskovým úlohám na serveru (`DISKS_BUSY`). Běžící úlohu UI nepřerušuje.
39- Procenta se nezobrazují (nástroje nedávají spolehlivý průběh): krok k z n + neurčitý indikátor + skutečný log.
40- Pokud jádro nepřevezme novou geometrii oddílu (`blockdev --rereadpt`, jinak `partx`), úloha skončí stavem
41 `pending-reboot` a další kroky neprovede.
43## Podporované operace
45| Oblast | Stav |
46|---|---|
47| GPT/MBR tabulka, nový/smazaný oddíl (MBR jen primární), název (GPT), příznaky boot/legacy_boot a typové (esp, bios-boot, lvm, raid, swap, basic-data) | implementováno |
48| Formátování ext4, XFS, Btrfs, FAT32, NTFS, swap (podle nástrojů), štítky | implementováno |
49| ext4: zvětšení online/offline; zmenšení jen odpojené: e2fsck -f -p, minimum `resize2fs -P` + rezerva max(10 %, 128 MiB), FS → oddíl → `e2fsck -n` | implementováno, ověřeno na VM |
50| XFS: zvětšení jen připojené (`xfs_growfs`); zmenšení odmítnuto s vysvětlením (migrace dat) | implementováno, ověřeno |
51| Btrfs: zvětšení/zmenšení připojeného jednozařízeného FS s kontrolou alokace | implementováno, na VM neověřeno |
52| NTFS: `ntfsresize` s dry-run | implementováno, na VM neověřeno |
53| swap: změna oddílu jen u neaktivního swapu, `mkswap` se stejným UUID/štítkem | implementováno, na VM neověřeno |
54| LVM: PV resize, LV extend (+FS), LV reduce jen ext4 odpojené jako pokročilá operace; thin pool/thin volume jen zobrazení | implementováno; auto řetězec ověřen |
55| LUKS: resize mapování jen s klíčem v dm-crypt; klíč v keyringu (vyžaduje heslo) = odmítnuto; zmenšení nikdy | implementováno, ověřeno |
56| Automatické rozšíření (oddíl s volným místem za ním, FS menší než zařízení, PV, volné místo VG), přesun záložní GPT hlavičky | implementováno, ověřeno |
57| Kontrola FS (jen čtení / oprava), mount/unmount (dočasně, bez fstab) | implementováno |
58| SMART/NVMe (`smartctl -j`, `nvme smart-log`) | implementováno; na VM jen stav „nedostupné“ |
59| Přesun/kopírování oddílů, FAT resize, rozšířené/logické MBR oddíly, RAID/ZFS změny | záměrně vypnuto (jen zobrazení) |
60| Windows/jiné platformy | jen detekce a srozumitelné odmítnutí; žádné Linux nástroje se nespouštějí |
62## Testy
63- `test/disksPlanner.test.js` (23): model, plánovač, návrhy a kontrakty služby (prázdný GPT, více oddílů, ext4 s/bez
64 volného místa, online/offline ext4, XFS, LVM, LUKS+ext4, LUKS+LVM, systémový root, zvětšený virtuální disk, bez sudo,
65 chybějící nástroje, stale plán, SMART nedostupný, souběh, Windows).
66- `test/disksVmIntegration.test.js` (CHJ_VM_*; destruktivní část jen s `CHJ_DISKS_WRITE=1`, výhradně loop obrazy
67 `/var/tmp/chj-disks-test/chjtest-*.img` z `test/fixtures/disks/loopFixture.sh`, ověřované před každou změnou;
68 Proxmox jen read-only).
69- `test/disksWindowsIntegration.test.js` (CHJ_DISKS_WINDOWS_*), `scripts/smokeDisksUi.js` (Electron UI).
SHA-256ff21e179356ceb62a59dbc89af0f65a15d2e0d3c843ec05071e0e69f3f1b7a8d

CH-J Proprietary Software License 1.14 · Zdroje jsou zveřejněny pod CH-J Proprietary Software License 1.14. Jejich dostupnost nemění licenční podmínky ani neposkytuje další oprávnění.

SHA-256 archivu476ed8aef0f1e96a5acdf223127b6692acdf4492eeaf5d0816b6e2a634fbbda6
Soubory