arch-system/scripts/prepare-disk.sh
grayTerminal-sh 14e547ce56 refactor: reorganize Arch system backup and restore
Separate system configuration from Dotfiles_ArchAP.

Add package manifests, system inventories, reusable templates,
safer backup/deployment scripts, on-demand service management,
TLP and zram configuration, and updated maintenance documentation.
2026-07-26 23:25:25 +02:00

70 lines
2.2 KiB
Bash
Executable file

#!/usr/bin/env bash
set -Eeuo pipefail
if (( EUID != 0 )); then
echo "Lance ce script avec sudo." >&2
exit 1
fi
if (( $# != 1 )); then
printf 'Usage : %s /dev/nvmeXnY\n' "$0" >&2
exit 2
fi
readonly DISK="$(readlink -f "$1")"
readonly MOUNT_ROOT="/mnt"
[[ -b "$DISK" ]] || { echo "Périphérique invalide : $DISK" >&2; exit 1; }
if findmnt -rn "$MOUNT_ROOT" >/dev/null 2>&1; then
echo "$MOUNT_ROOT est déjà monté. Démonte-le avant de continuer." >&2
exit 1
fi
if lsblk -nr -o MOUNTPOINTS "$DISK" | grep -q '/'; then
echo "Le disque ou une de ses partitions est monté. Abandon." >&2
lsblk -o NAME,MODEL,SIZE,FSTYPE,MOUNTPOINTS "$DISK"
exit 1
fi
lsblk -o NAME,MODEL,SIZE,TRAN,FSTYPE,MOUNTPOINTS "$DISK"
printf '\nCette opération efface entièrement %s.\n' "$DISK"
read -rp "Tape exactement ERASE $DISK : " confirmation
[[ "$confirmation" == "ERASE $DISK" ]] || { echo "Annulé."; exit 0; }
part_suffix=""
[[ "$DISK" =~ [0-9]$ ]] && part_suffix="p"
readonly EFI_PART="${DISK}${part_suffix}1"
readonly ROOT_PART="${DISK}${part_suffix}2"
wipefs -af "$DISK"
parted -s "$DISK" mklabel gpt
parted -s "$DISK" mkpart ESP fat32 1MiB 1025MiB
parted -s "$DISK" set 1 esp on
parted -s "$DISK" mkpart ARCH btrfs 1025MiB 100%
partprobe "$DISK"
udevadm settle
mkfs.fat -F 32 -n EFI "$EFI_PART"
mkfs.btrfs -f -L ARCH "$ROOT_PART"
mount "$ROOT_PART" "$MOUNT_ROOT"
btrfs subvolume create "$MOUNT_ROOT/@"
btrfs subvolume create "$MOUNT_ROOT/@home"
btrfs subvolume create "$MOUNT_ROOT/@log"
btrfs subvolume create "$MOUNT_ROOT/@pkg"
umount "$MOUNT_ROOT"
readonly OPTS="rw,relatime,ssd,discard=async,space_cache=v2"
mount -o "$OPTS,subvol=@" "$ROOT_PART" "$MOUNT_ROOT"
mkdir -p "$MOUNT_ROOT"/{boot,home,var/log,var/cache/pacman/pkg,.snapshots}
btrfs subvolume create "$MOUNT_ROOT/.snapshots"
mount -o "$OPTS,subvol=@home" "$ROOT_PART" "$MOUNT_ROOT/home"
mount -o "$OPTS,subvol=@log" "$ROOT_PART" "$MOUNT_ROOT/var/log"
mount -o "$OPTS,subvol=@pkg" "$ROOT_PART" "$MOUNT_ROOT/var/cache/pacman/pkg"
mount -o "$OPTS,subvol=@/.snapshots" "$ROOT_PART" "$MOUNT_ROOT/.snapshots"
mount "$EFI_PART" "$MOUNT_ROOT/boot"
printf '\n[+] Disque préparé et monté sous %s\n' "$MOUNT_ROOT"
lsblk -o NAME,SIZE,FSTYPE,LABEL,MOUNTPOINTS "$DISK"