-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmdisk.lib
More file actions
executable file
·93 lines (84 loc) · 3.02 KB
/
mdisk.lib
File metadata and controls
executable file
·93 lines (84 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env bash
#
# ############################################################################
# Project: scripts (none)
# File...: mdisk.lib
# Created: Friday, 2023/08/18 - 21:43:52
# Author.: @fbnmtz, (fabiano.matoz@gmail.com)
# ~·~·~·~·~·~·~·~·~·~·~·~·~~·~·~·~·~·~·~·~·~·~·~·~·~~·~·~·~·~·~~·~·~·~·~·~·~·~
# Last Modified: Wednesday, 2023/10/04 - 02:58:37
# Modified By..: @fbnmtz, (fabiano.matoz@gmail.com)
# ~·~·~·~·~·~·~·~·~·~·~·~·~~·~·~·~·~·~·~·~·~·~·~·~·~~·~·~·~·~·~~·~·~·~·~·~·~·~
# Version: 0.0.5.109
# ~·~·~·~·~·~·~·~·~·~·~·~·~~·~·~·~·~·~·~·~·~·~·~·~·~~·~·~·~·~·~~·~·~·~·~·~·~·~
# Description:
# >
# ############################################################################
# HISTORY:
#
_xLIB_MDISK_=true
xrequirements aw awk bc cut grep lsblk lshw mdate numfmt paste printf rev sfdisk smartctl
xsetHome
_disks_="lsblk -lpn"
_filter_="grep 'part\|crypt\|lvm\|loop\|disk'"
_mounted(){
$_disks_ | eval "$_filter_" | \
awk '$7!="" {printf "%-10s (%6s) - %s\n", $1, $4, $7}'
}
_unmounted(){
$_disks_ | eval "$_filter_" | \
awk '$7=="" {printf "%-10s (%6s)\n", $1, $4 }'
}
_list(){
t=$1
values=$($_disks_ -o name,type,size | grep disk)
case "$t" in
mounted|m ) _mounted ;;
umounted|u) _unmounted ;;
all|a|* ) echo "$values" ;;
esac
expr=$(echo -e "$values" | aw 3 | tr -d 'G' | tr -s '\n' '+' | sed 's/.$//')
# expr=$(echo -e "$values" | aw 3 | tr -s '\n' '+' | sed 's/.$//')
bruteSize=$(lshw -quiet -class disk -class storage -json 2>/dev/null |
grep -Po '"size" : \K\d+' |
paste -sd + - |
bc |
numfmt --to=si --suffix=B)
s=$(echo "scale=3; (${expr})/1000" | bc 2> /dev/null)
# s=$(echo "scale=3; (${expr/G//})/1000" | bc 2> /dev/null)
d=$(xhr 3 -s 40)
echo -e "$d\nsum: ${expr} = ${s}TB (${bruteSize})\n$d"
}
_backup(){
if [ -n "$disk" ]; then
filename="$(getFilename $disk -d).sfdisk"
if doBackup $disk $filename; then
echo "'$disk' backup done"
else
rm "$APP_HOME/$filename"
echo "disk '$disk' not found"
fi
else
for disk in $(lsblk -lpn -o name,type,size | grep disk | aw 1); do
disk_name=$(getFilename $disk)
filename="$(getFilename $disk -d).sfdisk"
doBackup $disk $filename
sudo smartctl -i $disk > $APP_HOME/$disk_name.info
echo "partition table backup: '$disk' done"
done
fi
}
doBackup(){
local disk=$1;
local filename=$2
sfdisk -d $disk 2>/dev/null > "$APP_HOME/$filename"
}
getFilename(){
[ "$2" == '-d' ] && local suffix="-$(mdate -y -m -d)"
local disk_name=$(echo $1 | rev | cut -d '/' -f1 | rev)
echo "${disk_name}${suffix}"
}
_resotore(){
echo -e "${RED}Warning!${RESET} this is an experimental feature and can cause data loss!\nPlease, do it at your own risk.\n"
echo -e "sfdisk /dev/$disk < $APP_HOME/${disk}-YYYYMMDD.sfdisk"
}