SSD trimming as a cron jobPosted: 2016-01-23 Filed under: system | Tags: cron, crontab, ext4, fstrim, fstrimDaemon, SSD, trim, XFS 3 Comments
I use XFS for my SSD and the partitions are mounted with default settings in
/etc/fstab. Instead of using the
discard option, I decided to set the
fstrim command running as a
cron job. As a side note, other filesystems that support trimming listed in the Arch Wiki are: Btrfs, Ext4, JFS.
How often shall the cron job run? In Ubuntu, it seems they run it weekly. This discussion about TRIM suggests that in order to prevent long-term performance degradation, running
fstrim weekly is just fine. However, depending on the usage, more regular trimming may be needed. I searched a bit and found suggestions for running the TRIM command daily. To do this, I simply created a file in
trim.sh. On the SSD, I have separate partitions for
/tmp, so in my case that file should contain:
#!/bin/sh fstrim / fstrim /home fstrim /tmp fstrim /var
Another blog suggests to run
fstrim in verbose mode (with the
-v option) and log its output. In such case, the contents of the above file would be:
#!/bin/sh LOG=/var/log/trim.log echo "*** $(date -R) ***" >> $LOG fstrim -v / >> $LOG fstrim -v /home >> $LOG fstrim -v /tmp >> $LOG fstrim -v /var >> $LOG
I don’t think I need to have the output logged, but it is an option. Make
trim.sh executable and it should run:
chmod +x /etc/cron.daily/trim.sh
Another approach is running
fstrim more frequently, say twice a day. To do this, parameters should be specified by
crontab -e. The default editor is set to
vim, but something else can be used, such as
nano. Run as root:
EDITOR=nano crontab -e
I modified a bit the example given by Gentoo, to trim each partition at a different time and not to be verbose:
#Mins Hours Days Months Day of the week command 15 10,22 * * * /sbin/fstrim / 20 10,22 * * * /sbin/fstrim /home 25 10,22 * * * /sbin/fstrim /tmp 30 10,22 * * * /sbin/fstrim /var
In this way,
fstrim will run every day in the mornings and evenings, starting with the root partition at 10.15 h and 22.15 h. The other partitions,
/var will be trimmed successively, 5 min apart. May be it does not matter, but I decided not to trim all partitions at the same time. As the Gentoo Wiki points, if the computer is turned off when
cron scheduled its job,
fstrim would not be called at all. To go around this problem, they suggest the
fstrimDaemon, but I have not tried it, yet. Instead I just specified times, when my computer is normally turned on. By running
crontab -e, the time settings for the daily and other jobs can be tweaked, as well. For example, the daily jobs are set for 4:40h by default:
# Run hourly cron jobs at 47 minutes after the hour: 47 * * * * /usr/bin/run-parts /etc/cron.hourly 1> /dev/null # # Run daily cron jobs at 4:40 every day: 40 4 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null # # Run weekly cron jobs at 4:30 on the first day of the week: 30 4 * * 0 /usr/bin/run-parts /etc/cron.weekly 1> /dev/null # # Run monthly cron jobs at 4:20 on the first day of the month: 20 4 1 * * /usr/bin/run-parts /etc/cron.monthly 1> /dev/null
This could be changed to whenever the computer is usually on.
Read the original sites first and decide what fits you best, yourself!
>As the Gentoo Wiki points, if the computer is turned off when cron scheduled its job, fstrim would not be called at all.
This is with Gentoo. Slackware uses a better cron, if you put the following to the root’s crontab:
@hourly ID=sys-hourly /usr/bin/run-parts /etc/cron.hourly 1> /dev/null
@daily ID=sys-daily /usr/bin/run-parts /etc/cron.daily 1> /dev/null
@weekly ID=sys-weekly /usr/bin/run-parts /etc/cron.weekly 1> /dev/null
@monthly ID=sys-monthly /usr/bin/run-parts /etc/cron.monthly 1> /dev/null
it will run all jobs even if you power off/on your computer. man has all details.
(Also, usually people run fstrim once a day.)
thanks for the hint!
This is a great post thankks