Linux tends to allocate a relatively small amount of storage space to the /boot
volume during the install process and, as a result, it can quickly fill up with kernel updates, particularly if you have your server set up to automatically apply any security updates. In my experience, when this happens then the server can begin to act twitchy.
So I needed to find a way for my servers to automatically notify me so I can get in there and clean up /boot
before it becomes a problem. Some quick Google searching turned up this great shell script, which I’ve repurposed for my own use:
#!/bin/sh ADMIN="recipientEmailAddress" ALERT=80 df -h /dev/sda1 | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output; do #echo $output usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 ) partition=$(echo $output | awk '{ print $2 }' ) if [ $usep -ge $ALERT ]; then echo "" | mail -s "ALERT: /boot is $usep% full" $ADMIN -aFrom:'senderName<senderEmailAddress>' -aImportance:'high' fi done
Note that there are a few caveats here:
- Line 2: You can specify multiple recipients by separating each e-mail addresses with a comma.
- Line 3: You can change the ALERT value to whatever percentage full you want to be alerted at.
- Line 4: I added the
/dev/sda1
value so that the df command will only check the/boot
volume (without it, this script will generate an alert for each volume on the machine that is getting full). - Line 10: I made a few tweaks to the mail command – I added the
-aFrom
variable so I could create a descriptive sender e-mail address (otherwise, this shows as having been sent by whatever *nix account was used to execute the shell script) and I used-aImportance
to set the message’s priority as “high” in order to make it stand out when sent as an email.
Add this script as a cron job and you’ll never get caught flat-footed by your /boot
volume again!
P.S. – Don’t forget to check out my earlier post, Clearing space on Linux /boot partition, to learn how to properly remove those space-wasting, old kernels.
Update
Based on comments, here’s a simplified version (16.03.31: now including code to automatically run autoremove in order to clean up /boot without user intervention; I’ve kept the notification code in in case something goes wrong with autoremove):
#!/bin/sh ADMIN="recipientEmailAddress" ALERT=80 usep=$(df -h /boot | grep -vE '^Filesystem' | awk '{ print $5 }' | cut -d'%' -f1); if [ $usep -ge $ALERT ]; then apt-get autoremove -y fi
usep=$(df -h /boot | grep -vE '^Filesystem' | awk '{ print $5 }' | cut -d'%' -f1); if [ $usep -ge $ALERT ]; then echo "" | mail -s "ALERT: /boot is $usep% full" $ADMIN -aFrom:'senderName<senderEmailAddress>' -aImportance:'high' fi
Leave a Reply