Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
| it:jednodeskove-pocitace:raspberry-pi-5-domaci-server [2025/02/15 18:58] – [Konfigurace softwarového RAIDu – zrcadlení] Petr Nosek | it:jednodeskove-pocitace:raspberry-pi-5-domaci-server [2025/08/23 19:33] (aktuální) – Petr Nosek | ||
|---|---|---|---|
| Řádek 49: | Řádek 49: | ||
| </ | </ | ||
| - | Uložte změny | + | Uložte změny, vložte disk do Raspberry |
| - | + | ||
| - | <code bash> | + | |
| - | sudo reboot | + | |
| - | </ | + | |
| Řádek 91: | Řádek 87: | ||
| Uložte změny a restartujte Raspberry Pi. | Uložte změny a restartujte Raspberry Pi. | ||
| + | |||
| + | |||
| + | ===== Raspberry Pi 5 s 4TB disk: převod MBR na GPT a oprava PARTUUID ===== | ||
| + | |||
| + | Raspberry Pi 5 je konečně dost výkonné na to, aby zvládlo velký disk a dělalo serverové úlohy. Ale pokud připojíte 4TB disk, narazíte na starý známý problém – **MBR tabulka oddílů**. Ta má strop **2 TiB**. Zbytek disku jako by neexistoval. Řešením je **GPT**. Jenže když jsem převedl disk z MBR na GPT, Raspberry Pi po restartu nenabootovalo. V tomhle článku popíšu krok za krokem, jak jsem to vyřešil. | ||
| + | |||
| + | Důležitá poznámka: samotný disk jsem měl připojený k jinému počítači přes USB redukci, abych mohl bezpečně provádět změny. Teprve po úpravách jsem ho vrátil zpět k Raspberry Pi. | ||
| + | |||
| + | ==== Co je MBR a GPT ==== | ||
| + | |||
| + | **MBR (Master Boot Record)** je historický způsob zápisu tabulky oddílů, používaný od počátků PC. Využívá 32bit adresy sektorů, a proto dokáže adresovat maximálně 2 TiB na disku se sektory 512 B. Je kompatibilní téměř se vším, ale omezený kapacitou. | ||
| + | |||
| + | **GPT (GUID Partition Table)** je modernější standard, součást specifikace UEFI. Umožňuje prakticky neomezenou velikost disků (v řádu zettabajtů), | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Problém: MBR limit ==== | ||
| + | |||
| + | MBR (msdos) tabulka oddílů používá 32bit adresy sektorů. Při velikosti sektoru 512 B umí oslovit maximálně **2 TiB** disku. Na mém 4TB disku jsem proto viděl jen polovinu kapacity. GPT (GUID Partition Table) žádný takový limit nemá. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Krok 1: převod na GPT pomocí gdisk ==== | ||
| + | |||
| + | Nechtěl jsem přijít o systém, takže jsem sáhl po nástroji **gdisk**, který umí převést MBR → GPT bez mazání dat. | ||
| + | |||
| + | <code bash> | ||
| + | sudo apt install gdisk | ||
| + | sudo gdisk /dev/sda | ||
| + | </ | ||
| + | |||
| + | Po spuštění `gdisk` hlásil, že našel MBR tabulku, a nabídl převod na GPT. Stačilo zkontrolovat oddíly příkazem `p` a uložit změny příkazem `w`. | ||
| + | |||
| + | Při potvrzení mě `gdisk` vystrašil hláškou: | ||
| + | |||
| + | < | ||
| + | Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! | ||
| + | </ | ||
| + | |||
| + | Na první pohled to vypadá, že smaže všechno. Ve skutečnosti to znamená jen tolik, že se přepíše **tabulka oddílů** – data na samotných oddílech zůstanou. Přesto doporučuju mít zálohu. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Krok 2: první boot a chyba ==== | ||
| + | |||
| + | Po restartu Raspberry Pi 5 kernel nastartoval, | ||
| + | |||
| + | < | ||
| + | ALERT! PARTUUID=xxxx-02 does not exist. | ||
| + | </ | ||
| + | |||
| + | Co se stalo? Raspberry Pi OS používá k identifikaci oddílů **PARTUUID**. Jenže převodem na GPT se PARTUUID všech oddílů změnily. Konfigurační soubory pořád ukazovaly na staré hodnoty. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Krok 3: oprava cmdline.txt ==== | ||
| + | |||
| + | V adresáři `/ | ||
| + | Pomocí příkazu: | ||
| + | |||
| + | <code bash> | ||
| + | lsblk -o NAME, | ||
| + | </ | ||
| + | |||
| + | jsem zjistil nové PARTUUID oddílů. Ukázkový výpis: | ||
| + | |||
| + | < | ||
| + | NAME | ||
| + | sda | ||
| + | ├─sda1 vfat | ||
| + | └─sda2 ext4 | ||
| + | </ | ||
| + | |||
| + | * `/dev/sda1` je boot (FAT32 → / | ||
| + | * `/dev/sda2` je root (ext4 → /) | ||
| + | |||
| + | Do `cmdline.txt` jsem zapsal správnou hodnotu: | ||
| + | |||
| + | < | ||
| + | console=serial0, | ||
| + | </ | ||
| + | |||
| + | To posunulo boot dál – kernel už root oddíl našel. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Krok 4: oprava /etc/fstab ==== | ||
| + | |||
| + | Jenže boot stále padal do emergency módu. Důvod? `/ | ||
| + | |||
| + | Správně to má vypadat takto: | ||
| + | |||
| + | < | ||
| + | proc /proc | ||
| + | PARTUUID=1c9f7d17-01 | ||
| + | PARTUUID=1c9f7d17-02 | ||
| + | </ | ||
| + | |||
| + | Po úpravě `/ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Výsledek ==== | ||
| + | |||
| + | Po opravě PARTUUID Raspberry Pi 5 nabootovalo z mého 4TB disku s tabulkou GPT. Celá kapacita disku je k dispozici a systém funguje, jako by se nic nestalo. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Shrnutí ==== | ||
| + | |||
| + | - Raspberry Pi OS standardně instaluje disk s **MBR**, takže na 4TB disku vidíte jen 2TB. | ||
| + | - Pomocí `gdisk` lze převést tabulku na **GPT** bez ztráty dat. | ||
| + | - Po převodu je nutné **opravit PARTUUID v `cmdline.txt` i `/ | ||
| + | - Pak Pi 5 bez problémů bootuje z GPT disku a využije celou kapacitu. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ✅ Pokud tedy narazíte na 2TB strop na Raspberry Pi, řešením je převést disk na GPT a opravit konfiguraci.\\ | ||
| + | 📌 Doporučení: | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Jak číst výpis lsblk ==== | ||
| + | |||
| + | Ukázkový výpis: | ||
| + | |||
| + | < | ||
| + | NAME | ||
| + | sda | ||
| + | ├─sda1 vfat | ||
| + | └─sda2 ext4 | ||
| + | </ | ||
| + | |||
| + | Vysvětlení sloupců: | ||
| + | |||
| + | * **NAME** – název zařízení nebo oddílu (např. `sda1`) | ||
| + | * **FSTYPE** – typ souborového systému (např. `vfat`, `ext4`) | ||
| + | * **LABEL** – název oddílu, pokud je nastaven | ||
| + | * **UUID** – unikátní identifikátor souborového systému | ||
| + | * **PARTUUID** – unikátní identifikátor oddílu v tabulce oddílů (právě ten se změnil při převodu MBR → GPT) | ||
| Řádek 440: | Řádek 576: | ||
| [Service] | [Service] | ||
| Type=simple | Type=simple | ||
| - | ExecStart=/ | + | ExecStart=/ |
| Restart=always | Restart=always | ||
| User=root | User=root | ||
| - | StandardOutput=append:/ | + | #StandardOutput=append:/ |
| + | StandardOutput=null | ||
| StandardError=append:/ | StandardError=append:/ | ||
| Řádek 1100: | Řádek 1237: | ||
| ✅ **RAID nyní probíhá synchronizace a disk bude plně zrcadlen po dokončení procesu.** | ✅ **RAID nyní probíhá synchronizace a disk bude plně zrcadlen po dokončení procesu.** | ||
| + | |||
| + | |||
| + | === Priorita disků po odpojení a opětovném připojení === | ||
| + | |||
| + | Pokud dojde k **odpojení jednoho disku** a následně jej znovu připojíme, | ||
| + | |||
| + | Nezáleží na tom, **že je disk ve slotu SSD2**, protože po připojení obou disků systém automaticky **vybere ten, který běžel jako poslední aktivní po rozpojení RAIDu**. | ||
| + | |||
| + | === Jak systém určuje, který disk bude upřednostněn? | ||
| + | |||
| + | Systém rozhoduje na základě **poslední aktualizace metadat RAIDu**. Každý disk v RAIDu obsahuje **metadata (superblock)**, | ||
| + | **Klíčový parametr je tzv. Event Count**, což je čítač změn. | ||
| + | |||
| + | ✅ **RAID vybere disk s nejvyšším Event Count jako platný.** | ||
| + | Pokud má jeden disk vyšší Event Count než druhý, systém považuje tento disk za aktuální a použije jej jako primární. | ||
| + | |||
| + | === Jak zjistit, který disk má vyšší Event Count? === | ||
| + | |||
| + | Můžeš si ověřit, který disk má aktuálnější metadata pomocí příkazu: | ||
| + | |||
| + | <code bash> | ||
| + | mdadm --examine / | ||
| + | </ | ||
| + | |||
| + | **Výstup bude obsahovat řádky podobné tomuto:** | ||
| + | |||
| + | < | ||
| + | / | ||
| + | | ||
| + | |||
| + | / | ||
| + | | ||
| + | </ | ||
| + | |||
| + | ✅ **Disk s vyšším číslem „Events“ je považován za aktuální.** | ||
| + | Pokud se **Event Count neshoduje**, | ||
| + | |||
| + | === Co se stane při neaktuálním disku? === | ||
| + | |||
| + | Pokud má jeden z disků nižší Event Count, systém jej při dalším spuštění považuje za **zastaralý** a označí jej jako neaktivní. | ||
| + | RAID pak při připojení tohoto disku provede **resynchronizaci** dat. | ||
| + | |||
| + | Proto je důležité po výpadku disku **zkontrolovat stav RAID** | ||
| + | |||
| + | |||
| + | ===== Nastavení NetworkManagera a statické IP adresy ===== | ||
| + | |||
| + | Nejprve jsem řešil přejmenování připojení v NetworkManageru: | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== 🟢 1. Ověř existující připojení ==== | ||
| + | |||
| + | <code bash> | ||
| + | nmcli con show | ||
| + | </ | ||
| + | |||
| + | Výstup: | ||
| + | |||
| + | < | ||
| + | NAME | ||
| + | Drátové připojení 1 95b853d9-d49d-3af0-ac2e-38a74299292d | ||
| + | </ | ||
| + | |||
| + | ==== 🔑 2. Přejmenuj připojení ==== | ||
| + | |||
| + | Například pro nový název `eth0-static`: | ||
| + | |||
| + | <code bash> | ||
| + | nmcli con modify " | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== 🛠️ 3. Ověř změnu ==== | ||
| + | |||
| + | <code bash> | ||
| + | nmcli con show | ||
| + | </ | ||
| + | |||
| + | Výstup bude vypadat takto: | ||
| + | |||
| + | < | ||
| + | NAME UUID TYPE DEVICE | ||
| + | eth0-static | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== 🔄 4. Restartuj připojení (volitelné): | ||
| + | |||
| + | Pro jistotu můžeš restartovat síťové připojení: | ||
| + | |||
| + | <code bash> | ||
| + | nmcli con down " | ||
| + | </ | ||
| + | |||
| + | Nyní mohu pracovat s připojením pod vlastním názvem a upravit jeho parametry podle potřeby. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | Pokud složka `/ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | |||
| + | ==== 🟢 Jak zjistit současnou konfiguraci: | ||
| + | |||
| + | **Zobraz detaily aktuálního připojení: | ||
| + | |||
| + | <code bash> | ||
| + | nmcli con show " | ||
| + | </ | ||
| + | |||
| + | To ukáže všechny parametry připojení, | ||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | **Vytvoř trvalý konfigurační soubor:** | ||
| + | |||
| + | Pokud chceš, aby bylo připojení trvalé a mělo statickou IP, můžeš ho upravit a uložit: | ||
| + | |||
| + | <code bash> | ||
| + | nmcli con modify " | ||
| + | nmcli con up " | ||
| + | </ | ||
| + | |||
| + | Tím se vytvoří i soubor v `/ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Zálohuj konfiguraci (volitelné): | ||
| + | |||
| + | Před změnami můžeš exportovat aktuální nastavení: | ||
| + | |||
| + | <code bash> | ||
| + | nmcli con export " | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Ověř novou konfiguraci a soubor:** | ||
| + | |||
| + | Po úpravě by se měl v `/ | ||
| + | |||
| + | |||