I thought to share here some of the bash scripts I’ve made for maintaining my Gentoo Linux system.
1. Checking for a correct detachable drive before backing up with rsync.
In my case, the script checks whether the correct eSATA backup drive is mounted before doing the actual backup. It first checks whether there are anything mounted on /mnt/esata
, and tries to mount a drive if possible; a failure produces an error message. If a drive is found, it checks the UUID of the drive to confirm that the drive is really a correct one, to prevent accidental loss of data.
You can find the UUID of your drive in /dev/disk/by-uuid/
#!/bin/bash
if ! grep -q /mnt/esata /proc/mounts ; then
if ! mount /mnt/esata ; then
echo "\033[1;31m*\033[0m Backup drive 'BackupOne' is not present."
exit 1
fi
fi
DRIVELETTER=`cat /proc/mounts | grep /mnt/esata | cut -f 1 -d ' '`
DRIVEUUID=`ls -l /dev/disk/by-uuid/ | grep ${DRIVELETTER/\/dev\//} | awk '{ print $9 }'`
DRIVEUSAGE=`df -h | grep ${DRIVELETTER} | awk '{ print $5 }'`
if [ ! ${DRIVEUUID} = 735aa2fb-4022-4f41-80c7-4977e51aa967 ] ; then
echo -e "\033[1;31m*\033[0m Wrong drive mounted in /mnt/esata: ${DRIVEUUID}"
exit 1
fi
echo -e "\033[1;32m*\033[0m Backup drive 'BackupOne', UUID=${DRIVEUUID},"
echo -e "\033[1;32m*\033[0m is present and mounted as ${DRIVELETTER}, ${DRIVEUSAGE} used."
echo -e "\033[1;32m*\033[0m Commencing rsync..."
echo
rsync /what/ever/you/want/to/sync
NOTE: I have the corresponding line in /etc/fstab
:
UUID=735aa2fb-4022-4f41-80c7-4977e51aa967 /mnt/esata ext3 noatime,users 0 1
2. Getting GPU and drive temperatures to a file.
This may seem somewhat complicated… I have four internal drives with SMART-compatible temperature sensors (sdb to sde, sda is a Compact Flash card). A cron job first reads the temperature of the ATI GPU, using /opt/bin/aticonfig --od-gettemperature
and writes it on an intermediary file /tmp/atitemperature
. The cron job then runs this script which reads the temperatures of the four internal drives and the two (possibly) mounted external drives, and writes these to the other intermediary file /tmp/temperature
, which, when ready, is then added to the end of /var/log/temperature.log
, which in turn is read by root-tail and displayed on the screen. The reason for those stupid intermediary files is the occasional unpredictable delays in reading the temperatures, which caused the output to flicker and jump around.
The checkremovable()
function checks whether the removable drive exists and has SMART capability (i.e. if not, it is an USB thumb drive).
#!/bin/bash
# Check the temperatures of display adapter and hard drives.
checkremovable() {
if [ -b $1 ]; then
# Check whether it is a proper hard drive or an USB Flash drive
SDFTEMP=`/usr/sbin/hddtemp -q -f /usr/share/hddtemp/hddgentoo.db SATA:$1 2>&1`
if [ -n $"`echo $SDFTEMP | grep "no sensor"`" ]; then
/usr/sbin/hddtemp -q $1 >> /tmp/temperature
else
echo $SDFTEMP >> /tmp/temperature
fi
else
echo "$1: not present" >> /tmp/temperature
fi
}
sleep 5
cat /tmp/atitemperature | grep -A 1 "HD 46" > /tmp/temperature
/usr/sbin/hddtemp -f /usr/share/hddtemp/hddgentoo.db SATA:/dev/sdb >> /tmp/temperature
/usr/sbin/hddtemp -f /usr/share/hddtemp/hddgentoo.db SATA:/dev/sdc >> /tmp/temperature
/usr/sbin/hddtemp -f /usr/share/hddtemp/hddgentoo.db SATA:/dev/sdd >> /tmp/temperature
/usr/sbin/hddtemp -f /usr/share/hddtemp/hddgentoo.db SATA:/dev/sde >> /tmp/temperature
checkremovable /dev/sdf
checkremovable /dev/sdg
cat /tmp/temperature >> /var/log/temperature.log