NAS aan en uit wanneer MacBook aan en uit is

Door balk op zaterdag 7 januari 2017 13:50 - Reacties (10)
Categorie: -, Views: 4.061

Ik heb een Intel D510MO met twee HDD's draaiend op Debian. Dit ding is vooral een backup server voor de MacBook die hier in huis rondslingert. Het verbruik is ongeveer 20W en dat zijn natuurlijk weggegooide wattjes wanneer we slapen of werken.

Vanaf de Mac stuur ik elk uur een incremental backup met behulp van CCC naar de NAS. Het ene uur grote bestanden naar een share. Het andere uur kleine bestanden naar een image op een share. Kleine files? zaken als de Aperture library van 90 GB en enkele 100.000en files. Grote files? zaken als de raw foto bestanden.

Ik had eens ergens een script vandaan gehaald dat zorgde dat de NAS automatisch aan gaat als een bepaalde computer aan gaat, aan blijft als deze aan is, en weer uit gaat als die computer uit gaat. Bron is weg, dus ik herhaal hier schaamteloos de scriptjes.

1. Wake on Lan

In het BIOS van mijn NAS moest ik Wake On Lan activeren.

2. Wek de NAS wanneer MacBook ontwaakt

Met behulp van Sleepwatcher laat ik een script draaien wanneer de laptop wakker wordt. Dit staat in het bestand ~/.wakeup.

code:
1
2
3
4
5
6
7
8
9
#!/bin/bash


/usr/bin/perl /path/to/wol.pl --mac xx:xx:xx:xx:xx:xx

/bin/sleep 120

# vul IP van server in
/usr/bin/ssh 192.x.x.x '/bin/echo $(/bin/date +%s)  > /path/to/folder/wake/upmark'



Dit [url=]http://www.cpan.org/authors/id/S/SR/SRAMKI/]Wake on lan script[/] heb je nodig om met perl de NAS te WoL'en. Dit script heeft enkele dependencies. Installeer die ook.

Op de NAS moet je ook een (door de user beschrijfbare) directory aanmaken. Die van mij staat in ~/wake. Maak daarin een bestand upmark:
touch ~/wake/upmark

Bovenstaand script zal de NAS wakker schudden en twee minuten later de tijd schrijven naar ~/wake/upmark.

3. Hou de NAS wakker (kant van de Mac)

Ik heb op de Mac het volgende script: ticker.sh

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

ip="192.168.0.NAS" # IP of NAS

if ! ping -c 1 -W 5 "$ip" &>/dev/null ; then

echo "$ip is down, they're all going to laugh at you!"
/usr/bin/perl /path/to/wol.pl --mac xx:xx:xx:xx:xx:xx
/bin/sleep 120
else
echo "$ip is up"
fi

/usr/bin/ssh 192.168.0.NAS '/bin/echo $(/bin/date +%s)  > /path/to/wake/upmark'
#$(/bin/date +%s)


Met behulp van Launcontrol roep ik elk kwartier dit script aan:
ticker.sh

4. Hou de NAS wakker (kant van de NAS)

Op de NAS, installeer pm-utils en test de correcte werking. Het laat je NAS hibernaten, dit schrijft de inhoud van je RAM naar schijf en de NAS gaat helemaal uit.

CreŽer het bestand /path/to/wake/keepawake.sh

code:
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
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

file="/path/to/wake/upmark"
LOGPATH="/path/to/wake/log_wake.log"

timestamp() {
  /bin/date
}

mactime=$(/bin/cat "$file")
now=$(/bin/date +%s)

#deltat=`/usr/bin/expr $(/bin/date +%s)-$mactime`
deltat=$(($now  - $mactime))
limit=1200

/bin/echo $deltat
/bin/echo $limit

if (( deltat > limit ));
then
        # hibernate
        /bin/echo "$(timestamp): system hibernated" >> $LOGPATH
#       /bin/systemctl hibernate
        /usr/bin/sudo /usr/sbin/pm-hibernate
        exit
else
        # do nothing
        
        /bin/echo "$(timestamp): system kept awake, delta is $deltat" >> $LOGPATH
        exit
fi


Als user:
crontab -e


code:
1
5,20,35,50 * * * * /path/to/wake/keepawake.sh


Dit roept elk uur, 5 minuten nadat er een ticker binnen is gekomen van de Mac, het script op dat de huidige tijd met de ticker tijd vergelijkt. Is er geen ticker binnengekomen? Dan is de Mac offline en kan de NAS gaan slapen.