#!/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 "$@"