Last active
June 17, 2019 20:21
-
-
Save apla/d634b2d984b1fa4e1038bab28b1106ec to your computer and use it in GitHub Desktop.
Linux clone disk
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# parted --list | |
sudo lsblk -o name,mountpoint,parttype,partlabel,label,size,uuid | |
DISKS=( $(lsblk --nodeps -n -o name) ) | |
read -e -p "Source disk: " -i "sda" FROM | |
read -e -p "Destination disk: " -i "sdb" TO | |
if [ "x$FROM" == "x$TO" ] || [[ ! " ${DISKS[@]} " =~ " ${FROM} " ]] || [[ ! " ${DISKS[@]} " =~ " ${TO} " ]] | |
then | |
echo "Error occured: source and destination can't be the same device, device must be plugged in" | |
exit 1 | |
fi | |
#read -p "Now I will copy /dev/$FROM to /dev/$TO. Type Y (or y) to proceed: " -n 1 -r | |
# | |
#if [[ ! $REPLY =~ ^[Yy]$ ]] ; then | |
# | |
# exit 0 | |
# | |
#fi | |
#echo # (optional) move to a new line | |
if [ "x$NO_PART" == "x" ] ; then | |
# partition? | |
# GPT | |
# sudo parted /dev/$TO mklabel gpt | |
# MBR | |
sudo parted /dev/$TO mklabel msdos | |
# Create the New Partition | |
# Once the format is selected, you can create a partition spanning the entire drive by typing: | |
# sudo parted -a opt /dev/$TO mkpart primary ext4 0% 100% | |
# https://askubuntu.com/questions/8819/unmounting-several-partitions-at-once | |
TO_PARTS=$(ls /dev/$TO?*) | |
if [ $? -eq 0 ] ; then | |
for TO_PART in $TO_PARTS ; do | |
umount -l $TO_PART | |
done | |
fi | |
# sleep a little? | |
sleep 5 | |
sfdisk -d /dev/${FROM} > part_table | |
sfdisk /dev/${TO} < part_table | |
sleep 5 | |
# sleep a little more | |
sudo partprobe /dev/${TO} | |
fi | |
FROM_UUID=`lsblk -nr -o UUID,MOUNTPOINT | grep -Po '.*(?= /$)'` | |
FROM_SWAP_UUID=`lsblk -nr -o UUID,MOUNTPOINT | grep -Po '.*(?= \[SWAP\]$)'` | |
# find a target partition | |
TO_LINUX_PART=$(sudo fdisk -l /dev/${TO} | grep Linux | head -n 1 | cut -d ' ' -f 1) | |
TO_SWAP_PART=$(sudo fdisk -l /dev/${TO} | grep swap | head -n 1 | cut -d ' ' -f 1) | |
if [ "x$NO_FORMAT" == "x" ] ; then | |
# exit 1 | |
sudo mkfs.ext4 ${TO_LINUX_PART} | |
sudo mkswap ${TO_SWAP_PART} | |
#sudo mkfs.ext4 -L datapartition ${TO_LINUX_PART} | |
# sudo e2label ${TO_LINUX_PART} system | |
#echo "FROM_UUID $FROM_UUID" | |
#echo "FROM_SWAP_UUID $FROM_SWAP_UUID" | |
fi | |
TO_UUID=`lsblk -nr -o UUID $TO_LINUX_PART` | |
TO_SWAP_UUID=`lsblk -nr -o UUID $TO_SWAP_PART` | |
echo "LINUX $FROM ($FROM_UUID) => $TO#$TO_LINUX_PART ($TO_UUID)" | |
echo "SWAP $FROM ($FROM_SWAP_UUID) => $TO#$TO_SWAP_PART ($TO_SWAP_UUID)" | |
# echo "TO: LINUX $TO_LINUX_PART, SWAP $TO_SWAP_PART" | |
TO_MOUNT_DIR=/media/backup | |
if [ "x$NO_COPY" == "x" ] ; then | |
sudo mkdir $TO_MOUNT_DIR | |
sudo mount -t ext4 $TO_LINUX_PART $TO_MOUNT_DIR | |
sudo grub-install --boot-directory=$TO_MOUNT_DIR/boot /dev/$TO | |
rsync -avxHAXW --progress / $TO_MOUNT_DIR/ | |
sed -i -- "s/${FROM_UUID}/$TO_UUID/g" $TO_MOUNT_DIR/etc/fstab | |
sed -i -- "s/${FROM_SWAP_UUID}/$TO_SWAP_UUID/g" $TO_MOUNT_DIR/etc/fstab | |
sed -i -- "s/${FROM_UUID}/$TO_UUID/g" $TO_MOUNT_DIR/boot/grub/grub.cfg | |
sed -i -- "s/${FROM_SWAP_UUID}/$TO_SWAP_UUID/g" $TO_MOUNT_DIR/boot/grub/grub.cfg | |
sed -i -- "s/${FROM_UUID}/$TO_UUID/g" $TO_MOUNT_DIR/boot/grub/i386-pc/load.cfg | |
sed -i -- "s/${FROM_SWAP_UUID}/$TO_SWAP_UUID/g" $TO_MOUNT_DIR/boot/grub/i386-pc/load.cfg | |
fi | |
if [ "x$SET_HOSTNAME" != "x" ] ; then | |
sed -i -- "s/${HOSTNAME}/$SET_HOSTNAME/g" $TO_MOUNT_DIR/etc/hostname | |
sed -i -- "s/${HOSTNAME}/$SET_HOSTNAME/g" $TO_MOUNT_DIR/etc/hosts | |
sed -i -- "s/${HOSTNAME}/$SET_HOSTNAME/g" $TO_MOUNT_DIR/etc/sysconfig/network | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
https://www.belightsoft.com/products/resources/apfs-bootable-clone-with-command-line |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
To fix
Gave up waiting for suspend/resume device
, after the first boot:/etc/initramfs-tools/conf.d/resume
.sudo update-initramfs -u