Skip to content

Commit 17efa7f

Browse files
committed
1 parent 1677c91 commit 17efa7f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+14906
-21
lines changed

.gitattributes

Lines changed: 0 additions & 1 deletion
This file was deleted.

README.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
```
21
Scripts-collection/
32
├── bsd
43
│   ├── freenas-iocage-nextcloud
54
│   │   └── configs
65
│   ├── freenas-truenas
6+
│   │   └── rclone
77
│   ├── iocage-plugin-emby-master
88
│   └── zip
99
├── docker
@@ -196,6 +196,7 @@ Scripts-collection/
196196
│   ├── jellyfin
197197
│   ├── jellyfin-vue
198198
│   ├── kim-python-argument
199+
│   ├── kyoo
199200
│   ├── lemmy
200201
│   ├── librenms
201202
│   ├── linshare
@@ -236,6 +237,7 @@ Scripts-collection/
236237
│   │   │   └── lib
237238
│   │   │   └── pgdata
238239
│   │   └── ssl
240+
│   ├── linuxserver-codeserver
239241
│   ├── linuxserver-doublecommander
240242
│   ├── linuxserver.io
241243
│   │   └── nginx
@@ -245,6 +247,8 @@ Scripts-collection/
245247
│   ├── linuxserver-nextcloud
246248
│   │   └── Collabora Online
247249
│   ├── linuxserver-ombi
250+
│   ├── linuxserver-radarr
251+
│   ├── linuxserver-sonarr
248252
│   ├── linuxserver-syslog
249253
│   ├── nextcloud-mariadb-redis
250254
│   ├── nextcloud-postgres-redis-collabora
@@ -380,6 +384,7 @@ Scripts-collection/
380384
│   │   └── letsencrypt
381385
│   ├── nginx-regex-tester
382386
│   │   └── regextester
387+
│   ├── nitter
383388
│   ├── porn-vault
384389
│   ├── portainer
385390
│   │   ├── data
@@ -392,6 +397,7 @@ Scripts-collection/
392397
│   ├── Seafile
393398
│   ├── shadowsocks-libev
394399
│   ├── shadowsocks-rust
400+
│   ├── slink
395401
│   ├── smokeping
396402
│   ├── sonarr
397403
│   ├── SWAG
@@ -401,6 +407,7 @@ Scripts-collection/
401407
│   ├── torrents-csv-server
402408
│   ├── transmission-vpn
403409
│   ├── travisflix.com
410+
│   ├── tubearchivist
404411
│   ├── unbound
405412
│   │   └── my_conf
406413
│   ├── webgrabplus
@@ -4376,7 +4383,6 @@ Scripts-collection/
43764383
│   │   ├── init.d
43774384
│   │   └── src
43784385
│   ├── screen
4379-
│   ├── screenrc
43804386
│   ├── script-git-backup
43814387
│   ├── simple-html-maintenance-page
43824388
│   ├── sublime-text_crack
@@ -4390,6 +4396,7 @@ Scripts-collection/
43904396
│   ├── tabulate
43914397
│   │   └── images
43924398
│   ├── temp
4399+
│   ├── transmission
43934400
│   ├── tutorials
43944401
│   │   ├── case-statements
43954402
│   │   │   ├── lessons
@@ -5453,6 +5460,8 @@ Scripts-collection/
54535460
│   │   ├── Tutorials and How-to guides
54545461
│   │   └── Windows Script Host
54555462
│   ├── Template
5463+
│   ├── VMware Tools
5464+
│   │   └── serviceDiscovery
54565465
│   ├── webserver-report
54575466
│   ├── Win11
54585467
│   ├── Windows10Debloater-master
@@ -5514,5 +5523,5 @@ Scripts-collection/
55145523
└── printing
55155524
└── checkifnetworkprinterisconnected
55165525
└── Documentation_files
5517-
```
55185526

5527+
5524 directories

bsd/freebsd-memory.sh

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
#!/bin/sh
2+
3+
# Display memory usage information on FreeBSD
4+
# This function is a shell re-writting of the perl script:
5+
## freebsd-memory -- List Total System Memory Usage
6+
## Copyright (c) 2003-2004 Ralf S. Engelschall <rse@engelschall.com>
7+
## http://www.cyberciti.biz/files/scripts/freebsd-memory.pl.txt
8+
9+
# round the physical memory size to the next power of two which is
10+
# reasonable for memory cards. We do this by first determining the
11+
# guessed memory card size under the assumption that usual computer
12+
# hardware has an average of a maximally eight memory cards installed
13+
# and those are usually of equal size.
14+
15+
# Strict script
16+
set -eu
17+
18+
mem_rounded () {
19+
mem_size=$1
20+
chip_size=1
21+
chip_guess=$(echo "$mem_size / 8 - 1" | bc)
22+
while [ $chip_guess != 0 ]; do
23+
chip_guess=$(echo "$chip_guess / 2" | bc)
24+
chip_size=$(echo "$chip_size * 2" | bc)
25+
done
26+
mem_round=$(echo "( $mem_size / $chip_size + 1 ) * $chip_size" | bc)
27+
echo $mem_round
28+
exit 0
29+
}
30+
31+
free_memory () {
32+
# determine the individual known information
33+
# NOTICE: forget hw.usermem, it is just (hw.physmem - vm.stats.vm.v_wire_count).
34+
# NOTICE: forget vm.stats.misc.zero_page_count, it is just the subset of
35+
# vm.stats.vm.v_free_count which is already pre-zeroed.
36+
mem_phys=$(sysctl -n hw.physmem)
37+
set +e
38+
mem_hw=$(mem_rounded $mem_phys)
39+
set -e
40+
sysctl_pagesize=$(sysctl -n hw.pagesize)
41+
mem_all=$(echo "$(sysctl -n vm.stats.vm.v_page_count) * $sysctl_pagesize" | bc)
42+
mem_wire=$(echo "$(sysctl -n vm.stats.vm.v_wire_count) * $sysctl_pagesize" | bc)
43+
mem_active=$(echo "$(sysctl -n vm.stats.vm.v_active_count) * $sysctl_pagesize" | bc)
44+
mem_inactive=$(echo "$(sysctl -n vm.stats.vm.v_inactive_count) * $sysctl_pagesize" | bc)
45+
if sysctl -q vm.stats.vm.v_cache_count > /dev/null 2>&1 ; then
46+
mem_cache=$(echo "$(sysctl -n vm.stats.vm.v_cache_count) * $sysctl_pagesize" | bc)
47+
mem_laundry=""
48+
else
49+
mem_laundry=$(echo "$(sysctl -n vm.stats.vm.v_laundry_count) * $sysctl_pagesize" | bc)
50+
mem_cache=""
51+
fi
52+
mem_free=$(echo "$(sysctl -n vm.stats.vm.v_free_count) * $sysctl_pagesize" | bc)
53+
# determine the individual unknown information
54+
if [ -n "${mem_cache}" ]; then
55+
mem_gap_vm=$(echo "$mem_all - ( $mem_wire + $mem_active + \
56+
$mem_inactive + $mem_cache + $mem_free )" | bc)
57+
else
58+
mem_gap_vm=$(echo "$mem_all - ( $mem_wire + $mem_active + \
59+
$mem_inactive + $mem_laundry + $mem_free )" | bc)
60+
fi
61+
mem_gap_sys=$(echo "$mem_phys - $mem_all" | bc)
62+
mem_gap_hw=$(echo "$mem_hw - $mem_phys" | bc)
63+
64+
# determine logical summary information
65+
mem_total=$mem_hw
66+
if [ -n "${mem_cache}" ]; then
67+
mem_avail=$(echo "$mem_inactive + $mem_cache + $mem_free" | bc)
68+
else
69+
mem_avail=$(echo "$mem_inactive + $mem_laundry + $mem_free" | bc)
70+
fi
71+
mem_used=$(echo "$mem_total - $mem_avail" | bc)
72+
73+
# Swap
74+
swap_info=$(swapctl -sk)
75+
swap_total=$(echo "$(echo "$swap_info" | awk 'BEGIN {FS=" "} {print $2}' | bc) * 1024" | bc)
76+
swap_used=$(echo "$(echo "$swap_info" | awk 'BEGIN {FS=" "} {print $3}' | bc) * 1024" | bc)
77+
swap_avail=$(echo "$swap_total - $swap_used" | bc)
78+
79+
# print system results
80+
printf "SYSTEM MEMORY INFORMATION:\n"
81+
printf "mem_wire: %12d (%7dMB) [%3d%%] %s\n" $mem_wire \
82+
$(echo "$mem_wire / ( 1024 * 1024 )" | bc) $(echo "$mem_wire \
83+
* 100 / $mem_all" | bc) "Wired: disabled for paging out"
84+
printf "mem_active: + %12d (%7dMB) [%3d%%] %s\n" $mem_active \
85+
$(echo "$mem_active / ( 1024 * 1024 )" | bc) $(echo "$mem_active \
86+
* 100 / $mem_all" | bc) "Active: recently referenced"
87+
printf "mem_inactive:+ %12d (%7dMB) [%3d%%] %s\n" $mem_inactive \
88+
$(echo "$mem_inactive / ( 1024 * 1024 )" | bc) $(echo "$mem_inactive \
89+
* 100 / $mem_all" | bc) "Inactive: recently not referenced"
90+
if [ -n "${mem_cache}" ]; then
91+
printf "mem_cache: + %12d (%7dMB) [%3d%%] %s\n" $mem_cache \
92+
$(echo "$mem_cache / ( 1024 * 1024 )" | bc) $(echo "$mem_cache \
93+
* 100 / $mem_all" | bc) "Cached: almost avail. for allocation"
94+
else
95+
printf "mem_laundry: + %12d (%7dMB) [%3d%%] %s\n" $mem_laundry \
96+
$(echo "$mem_laundry / ( 1024 * 1024 )" | bc) $(echo "$mem_laundry \
97+
* 100 / $mem_all" | bc) "Laundry: Pages eligible for laundering"
98+
fi
99+
printf "mem_free: + %12d (%7dMB) [%3d%%] %s\n" $mem_free \
100+
$(echo "$mem_free / ( 1024 * 1024 )" | bc) $(echo "$mem_free \
101+
* 100 / $mem_all" | bc) "Free: fully available for allocation"
102+
printf "mem_gap_vm: + %12d (%7dMB) [%3d%%] %s\n" $mem_gap_vm \
103+
$(echo "$mem_gap_vm / ( 1024 * 1024 )" | bc) $(echo "$mem_gap_vm \
104+
* 100 / $mem_all" | bc) "Memory gap: UNKNOWN"
105+
printf "______________ ____________ ___________ ______\n"
106+
printf "mem_all: = %12d (%7dMB) [100%%] %s\n" $mem_all \
107+
$(echo "$mem_all / ( 1024 * 1024 )" | bc) "Total real memory managed"
108+
printf "mem_gap_sys: + %12d (%7dMB) %s\n" $mem_gap_sys \
109+
$(echo "$mem_gap_sys / ( 1024 * 1024 )" | bc) "Memory gap: Kernel?!"
110+
printf "______________ ____________ ___________\n"
111+
printf "mem_phys: = %12d (%7dMB) %s\n" $mem_phys \
112+
$(echo "$mem_phys / ( 1024 * 1024 )" | bc) "Total real memory available"
113+
printf "mem_gap_hw: + %12d (%7dMB) %s\n" $mem_gap_hw \
114+
$(echo "$mem_gap_hw / ( 1024 * 1024 )" | bc) "Memory gap: Segment Mappings?!"
115+
printf "______________ ____________ ___________\n"
116+
printf "mem_hw: = %12d (%7dMB) %s\n" $mem_hw \
117+
$(echo "$mem_hw / ( 1024 * 1024 )" | bc) "Total real memory installed"
118+
printf "\n"
119+
120+
printf "SYSTEM MEMORY SUMMARY:\n"
121+
printf "mem_used: %12d (%7dMB) [%3d%%] %s\n" $mem_used \
122+
$(echo "$mem_used / ( 1024 * 1024 )" | bc) $(echo "$mem_used \
123+
* 100 / $mem_total" | bc) "Logically used memory"
124+
printf "mem_avail: + %12d (%7dMB) [%3d%%] %s\n" $mem_avail \
125+
$(echo "$mem_avail / ( 1024 * 1024 )" | bc) $(echo "$mem_avail \
126+
* 100 / $mem_total" | bc) "Logically available memory"
127+
printf "______________ ____________ __________ _______\n"
128+
printf "mem_total: = %12d (%7dMB) [100%%] %s\n" $mem_total \
129+
$(echo "$mem_total / ( 1024 * 1024 )" | bc) "Logically total memory"
130+
printf "\n"
131+
if [ $swap_total != 0 ]; then
132+
printf "SWAP SUMMARY:\n"
133+
printf "swap_used: %12d (%7dMB) [%3d%%] %s\n" $swap_used \
134+
$(echo "$swap_used / ( 1024 * 1024 )" | bc) $(echo "$swap_used \
135+
* 100 / $swap_total" | bc) "Used"
136+
printf "swap_avail: + %12d (%7dMB) [%3d%%] %s\n" $swap_avail \
137+
$(echo "$swap_avail / ( 1024 * 1024 )" | bc) $(echo "$swap_avail \
138+
* 100 / $swap_total" | bc) "Available"
139+
printf "______________ ____________ ___________\n"
140+
printf "swap_total: = %12d (%7dMB) [100%%] %s\n" $swap_total \
141+
$(echo "$swap_total / ( 1024 * 1024 )" | bc) "Total"
142+
fi
143+
exit 0
144+
}
145+
146+
###################
147+
## Main function ##
148+
###################
149+
150+
free_memory
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
#!/bin/sh
2+
3+
### Parameters ###
4+
logfile="/tmp/smart_report.tmp"
5+
email="travisrunyard@gmail.com"
6+
subject="SMART SAS Status Report for FreeNAS"
7+
drives="da5 da6"
8+
tempWarn=40
9+
tempCrit=45
10+
warnSymbol="?"
11+
critSymbol="!"
12+
13+
### Set email headers ###
14+
(
15+
echo "To: ${email}"
16+
echo "Subject: ${subject}"
17+
echo "Content-Type: text/html"
18+
echo "MIME-Version: 1.0"
19+
echo -e "\r\n"
20+
) > ${logfile}
21+
22+
### Set email body ###
23+
echo "<pre style=\"font-size:14px\">" >> ${logfile}
24+
25+
###### summary ######
26+
(
27+
echo ""
28+
echo "########## SMART status report summary for all drives ##########"
29+
echo ""
30+
echo "+------+---------------+----+-----+------+------+------+------+------+------+"
31+
echo "|Device|Serial |Temp|Start|Load |Defect|Uncorr|Uncorr|Uncorr|Non |"
32+
echo "| | | |Stop |Unload|List |Read |Write |Verify|Medium|"
33+
echo "| | | |Count|Count |Elems |Errors|Errors|Errors|Errors|"
34+
echo "+------+---------------+----+-----+------+------+------+------+------+------+"
35+
) >> ${logfile}
36+
for drive in $drives
37+
do
38+
(
39+
smartctl -a /dev/${drive} | \
40+
awk -v device=${drive} -v tempWarn=${tempWarn} -v tempCrit=${tempCrit} \
41+
-v warnSymbol=${warnSymbol} -v critSymbol=${critSymbol} '\
42+
/Serial number:/{serial=$3} \
43+
/Current Drive Temperature:/{temp=$4} \
44+
/start-stop cycles:/{startStop=$4} \
45+
/load-unload cycles:/{loadUnload=$4} \
46+
/grown defect list:/{defectList=$6} \
47+
/read:/{readErrors=$8} \
48+
/write:/{writeErrors=$8} \
49+
/verify:/{verifyErrors=$8} \
50+
/Non-medium error count:/{nonMediumErrors=$4} \
51+
END {
52+
if (temp > tempCrit)
53+
device=device " " critSymbol;
54+
else if (temp > tempWarn)
55+
device=device " " warnSymbol;
56+
printf "|%-6s|%-15s| %s |%5s|%6s|%6s|%6s|%6s|%6s|%6s|\n",
57+
device, serial, temp, startStop, loadUnload, defectList, \
58+
readErrors, writeErrors, verifyErrors, nonMediumErrors;
59+
}'
60+
) >> ${logfile}
61+
done
62+
(
63+
echo "+------+---------------+----+-----+------+------+------+------+------+------+"
64+
echo ""
65+
echo ""
66+
) >> ${logfile}
67+
68+
###### for each drive ######
69+
for drive in $drives
70+
do
71+
serial=`smartctl -i /dev/${drive} | grep "Serial number" | awk '{print $3}'`
72+
(
73+
echo ""
74+
echo "########## SMART status report for ${drive} drive (${serial}) ##########"
75+
smartctl -a /dev/${drive}
76+
echo ""
77+
echo ""
78+
) >> ${logfile}
79+
done
80+
sed -i '' -e '/smartctl 6.3/d' ${logfile}
81+
sed -i '' -e '/Copyright/d' ${logfile}
82+
sed -i '' -e '/Compliance/d' ${logfile}
83+
sed -i '' -e '/LU is resource/d' ${logfile}
84+
sed -i '' -e '/Form Factor/d' ${logfile}
85+
sed -i '' -e '/Logical Unit/d' ${logfile}
86+
sed -i '' -e '/Device type/d' ${logfile}
87+
sed -i '' -e '/Local Time/d' ${logfile}
88+
sed -i '' -e '/SMART support/d' ${logfile}
89+
sed -i '' -e '/Temperature Warning/d' ${logfile}
90+
sed -i '' -e '/=== START OF/d' ${logfile}
91+
sed -i '' -e '/SMART Attributes Data/d' ${logfile}
92+
sed -i '' -e '/Drive Trip/d' ${logfile}
93+
sed -i '' -e '/Manufactured/d' ${logfile}
94+
sed -i '' -e '/Specified cycle count/d' ${logfile}
95+
sed -i '' -e '/Specified load-unload/d' ${logfile}
96+
sed -i '' -e '/Vendor/d' ${logfile}
97+
sed -i '' -e '/Error counter/d' ${logfile}
98+
sed -i '' -e '/SMART Self-test/d' ${logfile}
99+
echo "</pre>" >> ${logfile}
100+
101+
### Send report ###
102+
sendmail -t < ${logfile}
103+
rm ${logfile}

0 commit comments

Comments
 (0)