commit 23b6e58e5761665aed8672b6e713d73f06b1c2eb Author: Archos Date: Fri Apr 24 14:28:22 2026 +0200 initial: migrace.sh + struktura repa diff --git a/migrace/README.md b/migrace/README.md new file mode 100644 index 0000000..ae62e1c --- /dev/null +++ b/migrace/README.md @@ -0,0 +1,137 @@ +# Migrace Arch Linuxu z nvme1n1 na nvme0n1 + +Skript migruje tvůj běžící Arch (na `nvme1n1`) na druhý NVMe disk (`nvme0n1`) s většími oddíly: + +- `/boot` = 1 GB (EFI, FAT32) +- `/` = 150 GB (ext4) +- `/home` = zbytek ~780 GB (ext4) + +Systémový obsah se kopíruje 1:1 (balíčky, služby, configy, Docker, GPG, atd.), jen na větší disk. + +--- + +## Před migrací (z běžícího systému) + +```bash +# 1. Záloha klíčů ze starého opuštěného disku +sudo mount /dev/nvme0n1p3 /mnt +mkdir -p ~/zaloha_stary_disk_2026 +sudo cp -a /mnt/archos/gpg ~/zaloha_stary_disk_2026/ 2>/dev/null +sudo cp -a /mnt/archos/luks_keyfile ~/zaloha_stary_disk_2026/ 2>/dev/null +sudo cp -a /mnt/archos/kody_yubikey ~/zaloha_stary_disk_2026/ 2>/dev/null +sudo cp -a /mnt/archos/zalohy_cloudron_kliče ~/zaloha_stary_disk_2026/ 2>/dev/null +sudo chown -R $USER:$USER ~/zaloha_stary_disk_2026 +sudo umount /mnt + +# 2. Nech borgmatic doběhnout (pro jistotu čerstvá záloha) +borgmatic --stats +borgmatic list --last 3 + +# 3. Push skriptu na git.arch-linux.cz +# (udělej repo migrace/ a pushni migrace.sh + README.md) + +# 4. Arch ISO na USB flash +# stáhni z https://archlinux.org/download/ +sudo dd if=archlinux-*-x86_64.iso of=/dev/sdX bs=4M status=progress oflag=sync +sync +``` + +--- + +## Postup v live USB + +```bash +# 1. Boot z USB flash (v BIOSu, nebo F8/F11/F12 boot menu) + +# 2. V live prostředí: +# - připoj internet (ethernet automaticky; wifi přes iwctl) +iwctl +# device list +# station wlan0 scan +# station wlan0 get-networks +# station wlan0 connect +# exit + +ping -c 2 archlinux.org + +# 3. Stáhni skript +curl -O https://git.arch-linux.cz/Archos/migrace/raw/branch/main/migrace.sh +# nebo kompletní repo: +# pacman -Sy git +# git clone https://git.arch-linux.cz/Archos/migrace.git +# cd migrace + +# 4. Spusť +chmod +x migrace.sh +sudo bash ./migrace.sh + +# 5. Skript se tě postupně ptá před každým destruktivním krokem. +# Odpovídej "ano" (vše jiné = zrušit). + +# 6. Po dokončení: +reboot + +# 7. V BIOSu nastav boot priority: nvme0n1 PŘED nvme1n1 +``` + +--- + +## Po rebootu (nový systém) + +```bash +# Ověř, že běžíš z nového disku +df -hT / +# /dev/nvme0n1p2 ext4 147G XG YG X% / + +lsblk +# nvme0n1 → mountnutý (/, /boot, /home) +# nvme1n1 → volný (starý systém jen leží) + +bootctl status + +# YubiKey test +gpg --card-status + +# Docker +systemctl status docker + +# Síť +nmcli +``` + +--- + +## Kdyby cokoliv padlo + +**Nenabootuje nový systém:** +1. V BIOSu přepni zpět na `nvme1n1` → starý systém stále funguje (nic jsme na něm neměnili) +2. Boot z live USB, mount `/dev/nvme0n1p2` na `/mnt`, arch-chroot a zkontroluj: + ```bash + mount /dev/nvme0n1p2 /mnt + mount /dev/nvme0n1p1 /mnt/boot + arch-chroot /mnt + cat /etc/fstab + cat /boot/loader/entries/*.conf + blkid | grep nvme0n1 + bootctl --path=/boot install + mkinitcpio -P + exit + reboot + ``` + +**Starý systém je pořád celý na nvme1n1** – dokud ho ručně nepřerozdělíš, je to tvoje záchranná síť. + +--- + +## Až vše funguje (týden+) + +```bash +# Smaž staré oddíly a použij nvme1n1 na co chceš +sudo cfdisk /dev/nvme1n1 + +# Návrhy využití: +# - Docker volumes na oddělený disk (rychlejší than sdílet NVMe) +# - Lokální borg mirror (druhá záloha vedle Hetzner Storage Box) +# - /home/archos/scratch pro build cache a VM disky +# - RAID1 mirror nvme0n1 (paranoia mode) +``` diff --git a/migrace/migrace.sh b/migrace/migrace.sh new file mode 100644 index 0000000..4eca8b9 --- /dev/null +++ b/migrace/migrace.sh @@ -0,0 +1,346 @@ +#!/bin/bash +# migrace.sh - Přesun Arch Linuxu z nvme1n1 na nvme0n1 +# Autor: pro Archose, v1.0 (2026-04) +# +# Spouštěj z live USB prostředí (Arch ISO). +# NIKDY ne z běžícího systému, který chceš migrovat. + +set -e # padni při první chybě +set -u # padni při nedefinované proměnné + +# ======== BAREVNÉ VÝSTUPY ======== +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +log() { echo -e "${BLUE}[INFO]${NC} $*"; } +ok() { echo -e "${GREEN}[OK]${NC} $*"; } +warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } +err() { echo -e "${RED}[ERR]${NC} $*" >&2; } + +# ======== KONFIGURACE ======== +SRC_DISK="/dev/nvme1n1" # stávající systém +SRC_BOOT="${SRC_DISK}p1" +SRC_ROOT="${SRC_DISK}p2" +SRC_HOME="${SRC_DISK}p3" + +DST_DISK="/dev/nvme0n1" # cíl +DST_BOOT="${DST_DISK}p1" +DST_ROOT="${DST_DISK}p2" +DST_HOME="${DST_DISK}p3" + +ROOT_SIZE_GB=150 +BOOT_SIZE_MB=1024 + +MNT_OLD="/mnt/old" +MNT_NEW="/mnt/new" + +LOG_FILE="/tmp/migrace-$(date +%Y%m%d-%H%M%S).log" + +# ======== POMOCNÉ FUNKCE ======== + +confirm() { + local msg="$1" + echo + echo -e "${YELLOW}>>> $msg${NC}" + read -rp "Pokračovat? (ano/NE): " odp + if [[ "$odp" != "ano" ]]; then + err "Zrušeno uživatelem." + exit 1 + fi +} + +check_root() { + if [[ $EUID -ne 0 ]]; then + err "Spusť jako root (sudo bash migrace.sh)" + exit 1 + fi +} + +check_live_env() { + # Pokud je /dev/nvme1n1p2 mountnutý jako /, tak jsme v běžícím systému + if findmnt -n -o SOURCE / | grep -q "nvme1n1p2"; then + err "Běžíš z nvme1n1p2, kterou chceš migrovat!" + err "Tohle MUSÍ běžet z live USB prostředí." + exit 1 + fi +} + +check_disks() { + for d in "$SRC_DISK" "$DST_DISK"; do + if [[ ! -b "$d" ]]; then + err "Disk $d neexistuje!" + exit 1 + fi + done + log "Zdroj: $SRC_DISK ($(lsblk -dno SIZE $SRC_DISK))" + log "Cíl: $DST_DISK ($(lsblk -dno SIZE $DST_DISK))" +} + +# ======== KROKY ======== + +step_01_info() { + clear + cat < "$MNT_NEW/etc/fstab" <>> bootctl install..." +bootctl --path=/boot install + +echo ">>> mkinitcpio -P..." +mkinitcpio -P + +echo ">>> bootctl status:" +bootctl status || true + +echo ">>> Hotovo v chroot." +CHROOT_EOF + + ok "Chroot dokončen." +} + +step_11_umount() { + log "Krok 9: Umount" + + umount -R "$MNT_NEW" || true + umount -R "$MNT_OLD" || true + + ok "Odpojeno." +} + +step_12_final() { + cat < >(tee -a "$LOG_FILE") 2>&1 + + step_01_info + step_02_partition + step_03_mkfs + step_04_mount + step_05_rsync_root + step_06_rsync_boot + step_07_rsync_home + step_08_update_fstab + step_09_update_boot_entry + step_10_chroot_bootctl + step_11_umount + step_12_final +} + +main "$@"