From a34abe3152f64881567ed39a49327fc1c81809f9 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Mon, 15 Jun 2020 15:47:00 +0200 Subject: update --- bin/backup | 17 +++++++---------- bin/byo | 34 ++++++++++++++++++++++++++++++++++ bin/yoda | 12 +++++++----- 3 files changed, 48 insertions(+), 15 deletions(-) create mode 100755 bin/byo (limited to 'bin') diff --git a/bin/backup b/bin/backup index 3f1d586..059f2dc 100755 --- a/bin/backup +++ b/bin/backup @@ -1,17 +1,12 @@ #!/bin/sh +# Incremental backup using rsync(1). [ "$USER" = root ] || exec sudo "$0" "$@" -# incremental backup using rsync(1) - -die() { echo "$0: fatal: $@" >&2; exit 1; } - -#[ "$(id -u)" = 0 ] || die must run as root - -while getopts :v opt; do +while getopts :Fv opt; do case $opt in - (v) optv=v ;; - (*) echo "Usage: $0 [-v] [[host:]dir]"; exit 1 ;; + (F|v) eval "opt$opt=$opt" ;; + (*) echo "Usage: $0 [-Fv] [[host:]dir]"; exit 1 ;; esac done shift $((OPTIND - 1)) @@ -25,4 +20,6 @@ case $last in (*) opt_link=;; esac -rsync -DSHxa$optv --exclude-from=/etc/backup/ignore $opt_link / /boot $dest/$date +[ "$optF" ] && fsfreeze -f / && trap 'fsfreeze -u /' EXIT + +rsync -HSxa$optv --exclude-from=/etc/backup/ignore $opt_link / /boot $dest/$date diff --git a/bin/byo b/bin/byo new file mode 100755 index 0000000..173c2a7 --- /dev/null +++ b/bin/byo @@ -0,0 +1,34 @@ +#!/bin/sh -e +# Backup to yoda +[ "$USER" = root ] || exec sudo "$0" "$@" + +usage='Usage: byo [-cdk] +Backup local disk to yoda external disk. + +Options: + -c close and umount yoda + -d dedupe yoda + -k do not umount and close yoda +' + +while getopts :cdk opt; do + case $opt in + (c|d|k) eval "opt$opt=$opt" ;; + (*) printf %s "$usage"; exit 1 ;; + esac +done +shift $((OPTIND - 1)) + +yoda_uuid='8c463221-6bb7-414e-9060-c9570bb3a6bb' + +dest=/mnt/backup/$(hostname) +[ -b /dev/mapper/yoda ] && noclose=1 || cryptsetup open "$(blkid --uuid "$yoda_uuid")" yoda +findmnt /dev/mapper/yoda /mnt >/dev/null && noumount=1 || mount /dev/mapper/yoda /mnt +time backup -Fv "$dest" +backup-clean -v "$dest" +[ ! "$optd" ] || time duperemove -drh --hashfile="$dest/.hashfile" "$dest" +[ ! "$optk" ] || noumount=1 noclose=1 +[ ! "$optc" ] || noumount='' noclose='' +[ "$noumount" ] || umount /mnt +[ "$noclose" ] || cryptsetup close yoda +echo "bye" diff --git a/bin/yoda b/bin/yoda index 4a2e0f9..8ff9e81 100755 --- a/bin/yoda +++ b/bin/yoda @@ -1,7 +1,9 @@ #!/bin/sh # Setup an archlinux system to a media -version='yoda-0.2' +[ "$USER" = root ] || exec sudo "$0" "$@" + +version='yoda-0.3' help() { echo 'usage: yoda [-CV] [-u user] dev @@ -38,7 +40,7 @@ skip() { # return 1 if any of the required commands is missing prereq() { ok='ok' - for cmd in cryptsetup dd fdisk mkfs.fat mkfs.ext4 mount pacstrap genfstab arch-chroot + for cmd in cryptsetup dd fdisk mkfs.fat mkfs.ext4 mkfs.xfs mount pacstrap genfstab arch-chroot do command -v "$cmd" >/dev/null || { ok=''; echo "$cmd not found"; } done @@ -81,7 +83,7 @@ step2() { # Step 3: Format partitions. step3() { mkfs.fat -F32 "${dev}${ppref}1" - yes | mkfs.ext4 "$rootpart" + mkfs.xfs "$rootpart" } # Step 4: Mount partitions. @@ -172,7 +174,7 @@ DNSSEC=no EOT packages="linux linux-firmware intel-ucode amd-ucode sof-firmware \ - dosfstools sudo vi wireless_tools wpa_supplicant openssh arch-install-scripts" + xfsprogs dosfstools sudo vi wireless_tools wpa_supplicant openssh arch-install-scripts" arch-chroot /mnt << EOT locale-gen @@ -237,8 +239,8 @@ while getopts :CFH:S:u:V opt; do done shift $((OPTIND - 1)) -[ "$(id -u)" = 0 ] || die "not root" [ "$1" ] && dev=$1 || die 'no device' + par=${dev##*/}root case $dev in (*nvme*) ppref='p';; esac rootpart="${dev}${ppref}2" -- cgit v1.2.3