How to free up disk space on an Ubuntu Nginx or Apache Web Server
Last updated: October 16th 2023
Introduction
Wondering why your webserver is running out of disk space despite not having uploaded any files to it? In this article we go through the most common methods of discovering what is using your disk space, and what you can remove safely in order to free up some disk space.
Prerequisites
This guide assumes you are on Ubuntu 16.04 Xenial or 18.04 Bionic or later. Most of the commands listed here will work with other Linux distributions as well.
In addition, you should have shell (SSH) access to your VPS.
Discovering what is consuming disk space
You can start with checking out the overall disk space consumption for your system. You do this by executing the df command. On a typical Webdock VPS this will look like:
# sudo df -h
Sample output:
Filesystem Size Used Avail Use% Mounted on lxd/containers/maintenance 94G 2.6G 91G 3% / none 492K 4.0K 488K 1% /dev udev 189G 0 189G 0% /dev/tty tmpfs 100K 0 100K 0% /dev/lxd tmpfs 100K 0 100K 0% /dev/.lxd-mounts tmpfs 189G 0 189G 0% /dev/shm tmpfs 189G 192K 189G 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 189G 0 189G 0% /sys/fs/cgroup
The -h argument we pass to df just means "human readable" so you get the disk space utilization in Megabytes, Gigabytes etc. instead of bytes which can be hard to read.
Here you can see our server is consuming 2.6 Gigabyte of a total of 94 Gigabyte available. Usually the partition you are interested in, is the one mounted on / this is the root of your system and which (usually) holds all your data and applications.
But where is all that space being used? Here we use the du, or disk utilization, command.
# sudo du -h --max-depth=1 / 2>/dev/null
Sample output:
512 /mnt 43K /tmp 0 /sys 30K /home 512 /opt 512 /srv 4.0K /dev 874M /var 17M /sbin 512 /boot 1.7G /usr 18M /bin 8.3M /etc 192K /run 4.0K /proc 184K /root 1.0K /lib64 512 /media 5.0K /snap 52M /lib 2.6G /
This command may take a while to run as it is iterating throughout your entire filesystem - all files and folders - and tallying up disk utilization.
As you can see from the highlighted entries /var and /usr is using up the most disk space. This is normal for an Ubuntu webserver, as in /var you have all your data typically (website/application and database data) and under /usr you have all your installed applications.
But what specifically in /var is using up space? Here you just modify the path you pass to the du command to see which directories under /var are using the most disk space:
Tip: Instead of using the "du" you can also "apt install ncdu" and then run it with "ncdu" which is a graphical equivalent to du, enabling you to browse your filesystem in a, possibly easier, interface than running du commands over and over as shown here below.
# sudo du -h --max-depth=1 /var 2>/dev/null
Sample output:
80M /var/cache 13K /var/spool 512 /var/snap 587M /var/lib 1.9M /var/backups 171M /var/www 512 /var/opt 28K /var/tmp 512 /var/crash 512 /var/local 512 /var/mail 35M /var/log 874M /var
The directories you need to pay attention to here are your /var/log and /var/www directories. It is normal for your website to use a lot of space, but you may want to dig deeper there and check if your /var/www/logs/ (on Webdock servers at least) is consuming a lot of space. This would indicate that either your access log is very big as you get a lot of traffic (congratulations!) or your error log is very big, which might indicate a problem with your application.
For example if your website is throwing lots of PHP warnings, you may want to fix those issues.
If your access log is very big, but your website is a low traffic website - you may want to inspect the log to see what is happening. Maybe you are being subjected to brute force or DOS attackes which generates a lot of activity in your logs.
If your /var/log directory is consuming lots of space, you should also inspect the contents of that directory and try to pin down which software is eating up lots of log space. There are a few ways to clean up logs which we will go into in the next section.
Useful commands for freeing up disk space
Once you've discovered what the cause is of your disk space consumption you can much more easily figure out what to do about it. But regardless of what is using up your disk space, here are some commands you can safely run in order to free up disk space on any Webdock webserver.
Changing the Docker storage driver
You can save a lot of disk space and deploy your Docker images faster on Webdock if you change to the fuse-overlayfs storage driver instead of the vfs default. Click here to read our guide on how to change to fuse-overlayfs on existing Docker installations.
Clearing Docker Image and Build Cache
If you are running Docker on your server, it may be helpful to clear the Docker Build and Image Caches:
# sudo docker builder prune # sudo docker image prune
In some cases you will see the docker image directory - /var/lib/docker/vfs - bloat up on VFS backed servers. This is apparently expected behavior and is due to docker keeping a lot of duplicate data around. As far as we are aware, there is currently no way to mitigate this additional bloat at this time.
Cleaning log files
There are a few commands you can run to clean out extraneous log files:
# sudo journalctl --vacuum-size=1M
This command essentially cleans out your journal logs and reduces them down to 1 Megabyte. This log can over time grow quite big.
# sudo rm /var/log/*.gz
This command removes any old, gzipped, files in your log directory which logrotate hasn't deleted on its own yet. These files will automatically be removed over time, but they are safe to delete if you need some disk space right away.
Permanently limiting the size of your Journal (Systemd) logs
If you want to set an upper limit on your journal logs so they never grow too large, you can do so by editing /etc/systemd/journald.conf in your favorite editor:
# sudo nano /etc/systemd/journald.conf
Look for the SystemMaxUse directive, uncomment it and set it to something like 50M or whatever you want:
... #RateLimitBurst=1000 SystemMaxUse=50M #SystemKeepFree= ...
As you can see, there are lots of other knobs and settings un there you can tweak. Check out the man page for journald for details. Once finished, restart the journald service:
# sudo systemctl restart systemd-journald
Clearing the Composer cache
If you use Composer you may want to clear the cache as it can grow quite big over time.
# sudo composer clearcache
Cleaning out your apt cache and unneeded packages
Apt can sometimes keep some junk around which is no longer needed. In order to clean this up you can run the following commands
# sudo apt clean; sudo apt autoremove --purge;
Uninstalling packages you are not using
In a typical Webdock stack we pre-install stuff like MongoDB and Redis. You should take a look at our Perfect Server guides in order to see everything which has been pre-installed and if there is stuff you are not using, then you can safely remove it. Let's assume you are just running a basic Wordpress site that just needs the webserver and MySQL - you can then run the following to free up quite a bit of disk space
# sudo apt remove -y --purge lftp bzip2 arj nomarch lzop gcc binutils make zsh nodejs redis-server libcurl4-openssl-dev pkg-config libssl-dev mongodb # sudo apt autoremove -y
And to remove the MongoDB PHP extension
# sudo pecl uninstall mongodb
This will typically (at the time of writing) free up about 500Mb of disk space
Disabling the MariaDB Binary Log
WARNING: Disabling the binary log may be dangerous in case your server unexpectedly crashes as this will prevent MariaDB from reconstructing data which had not been written to the database yet. Only disable the binary log if you really have to.
If you notice that the MySQl log is very big in /var/log/mysql - you have a lot of big .bin files in there then this is your MariaDB binary log which has grown large. You should first of all inspect this log to see if your application has some errors which is throwing a lot of noise. If it's just due to your site having a lot of traffic, you may want to consider disabling this log. You do so by editing your MariaDB config:
$ sudo nano /etc/mysql/my.cnf
OR
$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
And add skip-log-bin in the [mysqld] section
[mysqld] skip-log-bin
Further down you should also comment out the following lines if they are enabled:
#log_bin = /var/log/mysql/mariadb-bin #log_bin_index = /var/log/mysql/mariadb-bin.index
And then you restart MariaDB
# sudo systemctl restart mariadb
Now it is safe to delete all those .bin files in the mysql log directory
Conclusion
It is always a good idea to check out why your webserver is consuming a lot more disk space than you expect as this can reveal problems with your application or attacks/hacks.
Running all of these commands on a basic Webdock webserver will save you approximately 500Mb of disk space. Most of this is due to uninstalling software, as we always clean our base images as much as possible before publishing.
We hope this guide helps you in optimizing your server and getting the most out of the resources you are paying for. If all else fails, it is fortunately easy to scale your VPS to your needs.
Related articles
-
Optimizing Network Speed on Your Webdock KVM Server
A mini article with some kernel tweaks to improve network performance on your server
Last updated: September 6th 2024
-
How to configure Crontab on Linux
In this article we detail how Crontab works and all the available options for configuration along with correct syntax and examples.
Last updated: January 4th 2024
-
How to monitor webdock server resources using Prometheus, Grafana, Node Exporter and Prometheus Alert Manager
This guide includes the step by step procedure of installing different packages like Prometheus, Grafana, Node exporter and Alert Manager.
Last updated: December 7th 2022
-
How to Disable IPv6 on Your Webdock Server
The article explain how to disable IPv6 on your Webdock server, both temporarily and permanently.
Last updated: August 13th 2024
-
Automating Initial Server Configuration with Ansible
Read our new article: Learn how to automate your cloud server configuration using Ansible.
Last updated: July 19th 2023
-
Top Tools to Install on Your Ubuntu Web Server
A list of important tools that you can install on your production Ubuntu web server
Last updated: July 19th 2023
-
How To Benchmark Your Server with YABS
A guide to do benchmarking of your server's CPU, network performance, and such using YABS.
Last updated: April 1st 2024
-
Systemd Units - A Comprehensive Guide for Linux Admins
A detailed guide on systemd internals for Linux admins
Last updated: August 13th 2024
-
A Quick Guide to Managing Systemd Services
A short guide that helps you manage systemd services
Last updated: August 13th 2024
-
How to Benchmark PHP Performance on Your Webdock Server
Instructions for bechmarking PHP performance on your Webdock server
Last updated: August 29th 2024