Files
PBX-Image-Script/CloneToDisk.sh
2025-06-25 13:34:39 -05:00

73 lines
1.8 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -e
# Ensure the script is run as root
if [ $EUID -ne 0 ] then
   echo "❌ This script must be run as root. Please use sudo."
   exit 1
fi
# Set your target disk here
udevadm trigger
lsblk
read -rp "Enter the target disk (e.g., sda): " disk_suffix
disk_name="/dev/${disk_suffix}"
read -rp "Enter the name of the usb partition in /dev/mapper (e.g., sda1): " disk_suffix
usb_name="/dev/mapper/${disk_suffix}"
# Mount Ventoy
echo "Mounting Ventoy..."
mkdir /mnt/ventoy
mount /dev/mapper/usb_name /mnt/ventoy
cd /mnt/ventoy/Images
# Decompress and write image
echo "Writing image to $disk_name..."
lz4 -dc PBX-LVM.img.lz4 | dd of=$disk_name status=progress
# Repartition disk using sgdisk
echo "Expanding Partition 3 on $disk_name..."
sgdisk -v $disk_name
sgdisk --delete=3 $disk_name
sgdisk --new=3:0:0 --typecode=3:8e00 --change-name=3:"Linux LVM" $disk_name
# Inform the OS of partition table changes
partprobe $disk_name
sleep 2 # Give the system a moment to recognize changes
# Resize physical volume
echo "Resizing physical volume..."
pvresize ${disk_name}3
# Resize swap and root logical volumes
echo "Resizing swap and root volumes..."
lvresize -L +7G PBX-vg/swap_1
lvresize -l +100%FREE --resizefs PBX-vg/root
# Mount restored system for chroot
echo "Mounting restored system..."
mkdir /mnt/debian
mount /dev/mapper/PBX--vg-root /mnt/debian/
mount ${DISKNAME}2 /mnt/debian/boot
mount ${DISKNAME}1 /mnt/debian/boot/efi
for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do mount -B $i /mnt/debian/$i; done
# Chroot and reinstall GRUB
echo "Entering chroot to reinstall GRUB..."
chroot /mnt/debian /bin/bash -c "
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian
update-grub
"
# Exit chroot and unmount
echo "Cleaning up..."
umount -R /mnt
echo "Restore and resize complete!"