Compare commits
2 commits
a967445005
...
703d281308
Author | SHA1 | Date | |
---|---|---|---|
703d281308 | |||
4a9c6f0894 |
3 changed files with 131 additions and 0 deletions
84
scripts/functions.sh
Normal file
84
scripts/functions.sh
Normal file
|
@ -0,0 +1,84 @@
|
|||
#!/bin/bash
|
||||
|
||||
###########################################################
|
||||
### Utility & Common Functions
|
||||
###########################################################
|
||||
|
||||
function is_bin_in_path {
|
||||
builtin type -P "$1" &>/dev/null
|
||||
}
|
||||
|
||||
###########################################################
|
||||
### BACKUP and RESTORE FUNCTIONS
|
||||
###########################################################
|
||||
|
||||
#dumpPartitions() {
|
||||
backup_partitions() {
|
||||
local rootPart rootDisk
|
||||
|
||||
rootPart="$(findmnt -no SOURCE / | sed -E 's/\[.*\]$//')"
|
||||
rootDisk="/dev/$(lsblk -no pkname "$rootPart" | head -n1)"
|
||||
|
||||
sfdisk --dump "$rootDisk" > "${restoreDir}/sfdisk.dump"
|
||||
blkid -o export "$rootPart" > "${restoreDir}/blkid.dump"
|
||||
btrfs subvolume list -p / > "${restoreDir}/btrfs.dump"
|
||||
mount | grep "$rootPart" > "${restoreDir}/mounts.dump"
|
||||
}
|
||||
|
||||
#restorePartitions() {
|
||||
restore_partitions() {
|
||||
local rootPart rootDisk
|
||||
|
||||
rootPart="$1"
|
||||
rootDisk="$2"
|
||||
|
||||
if [[ -z "$rootDisk" || -z "$rootPart" ]]; then
|
||||
echo "ERROR, restorePartitions not supplied with rootDisk and/or rootPartition"
|
||||
exit 200
|
||||
fi
|
||||
|
||||
# Restore Partition Table (without modification)
|
||||
sfdisk "$rootDisk" < "${restoreDir}/sfdisk.dump"
|
||||
|
||||
# Restore UUIDs
|
||||
while read -r line; do
|
||||
if [[ $line == UUID=* ]]; then
|
||||
eval "$line"
|
||||
tune2fs "$rootPart" -U "$UUID"
|
||||
fi
|
||||
done < "${restoreDir}/blkid.dump"
|
||||
|
||||
echo "Partition table and UUID information have been restored."
|
||||
}
|
||||
|
||||
#restoreBtrFSSubvolumes() {
|
||||
restore_btrfs_subvolumes() {
|
||||
local rootBase subvolID subvolPath
|
||||
|
||||
rootBase="$1"
|
||||
|
||||
while read -r line; do
|
||||
# Extract the subvolume ID and Path
|
||||
subvolID="$(echo "$line" | awk '{print $2}')"
|
||||
subvolPath="$(echo "$line" | awk '{print $NF}')"
|
||||
|
||||
# Restore the subvolume
|
||||
btrfs subvolume create "${rootBase}/${subvolPath}"
|
||||
done < "${restoreDir}/btrfs.dump"
|
||||
}
|
||||
|
||||
#restoreBtrFSMounts() {
|
||||
restore_btfs_mounts() {
|
||||
local rootBase mountSource mountDest
|
||||
|
||||
rootBase="$1"
|
||||
|
||||
while read -r line; do
|
||||
# Extract mount source and destination
|
||||
mountSource="$(echo "$line" | awk '{print $1}')"
|
||||
mountDest="$(echo "$line" | awk '{print $3}')"
|
||||
|
||||
# Mount the subvolume
|
||||
mount "$mountSource" "${rootBase}/${mountDest}"
|
||||
done < "$restoreDir/mounts.dump"
|
||||
}
|
45
scripts/mount-btrfs
Executable file
45
scripts/mount-btrfs
Executable file
|
@ -0,0 +1,45 @@
|
|||
#!/bin/bash
|
||||
|
||||
restoreDir="/etc/restore"
|
||||
|
||||
scriptPath="$(dirname "$(readlink -f "$0")")"
|
||||
|
||||
source "${scriptPath}/functions.sh"
|
||||
|
||||
hook_before() {
|
||||
local btrfsPartition
|
||||
|
||||
btrfsPartition="$(findmnt -oSOURCE -rnv /)"
|
||||
|
||||
if [[ ! -d "/.btrfs" ]]; then
|
||||
mkdir /.btrfs
|
||||
fi
|
||||
|
||||
if ! mount | grep '\.btrfs' &>/dev/null; then
|
||||
mount "$btrfsPartition" -o subvolid=5 /.btrfs || exit 200
|
||||
fi
|
||||
}
|
||||
|
||||
hook_fail() {
|
||||
if mount | grep '\.btrfs' &>/dev/null; then
|
||||
umount /.brtfs || exit 200
|
||||
fi
|
||||
}
|
||||
|
||||
hook_after() {
|
||||
:
|
||||
}
|
||||
|
||||
hook_final() {
|
||||
if mount | grep '\.btrfs' &>/dev/null; then
|
||||
umount /.brtfs || exit 200
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
case "$1" in
|
||||
before) hook_before || exit $?;;
|
||||
after) hook_after || exit $?;;
|
||||
fail) hook_final || exit $?;;
|
||||
finally) hook_final || exit $?;;
|
||||
esac
|
|
@ -5,6 +5,7 @@ restoreDir="/etc/restore"
|
|||
kernel="$(uname -s)"
|
||||
scriptPath="$(dirname "$(readlink -f "$0")")"
|
||||
|
||||
source "${scriptPath}/functions.sh"
|
||||
|
||||
if [[ "$kernel" == "Darwin" ]]; then
|
||||
restoreDir="${HOME}/restore"
|
||||
|
@ -78,6 +79,7 @@ hook_fail() {
|
|||
|
||||
hook_after() {
|
||||
checkOS || exit 200
|
||||
backup_partitions || exit 200
|
||||
runOsHook after
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue