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 `/ | ||
+ | |||
+ | |||