forked from colin/disk-space-report
Compare commits
12 Commits
Author | SHA1 | Date |
---|---|---|
|
8a6f7416bd | |
|
894fe5fb8f | |
|
d038f4a6d4 | |
|
cdd8e6e47b | |
|
8df33c9269 | |
|
805f472732 | |
|
2d33022069 | |
|
2c7b0fd090 | |
|
6c48e599fc | |
|
05b76a2412 | |
|
33f4f52aa1 | |
|
2e26be15ab |
41
README.md
41
README.md
|
@ -1,44 +1,39 @@
|
|||
# Swap File Creation Script
|
||||
# Disk Space Report Script
|
||||
|
||||
This script automatically creates a swap file on your system, allowing you to increase the available virtual memory. It calculates the optimal swap file size based on the available disk space, ensuring that the swap file does not exceed 30GB or 5% of the free disk space, whichever is smaller.
|
||||
This script helps diagnose disk usage by estimating potential storage savings and identifying large directories on your system. It does not take any action; it only reports the current state of your disk usage.
|
||||
|
||||
## Features
|
||||
|
||||
- Detects the main disk partition used by the system.
|
||||
- Calculates the optimal swap file size (up to 30GB or 5% of the free space).
|
||||
- Creates and activates a swap file at `/swapfile`.
|
||||
- Optionally persists the swap file across reboots using the `--persist` flag.
|
||||
- Displays the status of the created swap file.
|
||||
- Estimates the size of the apt cache.
|
||||
- Estimates the size of old installed packages.
|
||||
- Estimates the size of journal logs.
|
||||
- Estimates the size of temporary files.
|
||||
- Estimates the size of unused Docker volumes.
|
||||
- Lists directories consuming more than 5GB and 10GB.
|
||||
|
||||
## Usage
|
||||
|
||||
To use this script, you can execute it directly from the URL without downloading it.
|
||||
To use this script, execute it directly from the URL without downloading it, which is particularly useful when disk space is limited.
|
||||
|
||||
### Execute Directly from URL
|
||||
|
||||
Run the script directly from the URL using `curl` and piping to `bash`:
|
||||
|
||||
```bash
|
||||
curl -sSL https://git.nixc.us/colin/swap-increase/raw/branch/main/swap.sh | bash
|
||||
```
|
||||
|
||||
### Persist the Swap File Across Reboots
|
||||
|
||||
To ensure the swap file is persisted across reboots, run the script with the `--persist` flag:
|
||||
|
||||
```bash
|
||||
curl -sSL https://git.nixc.us/colin/swap-increase/raw/branch/main/swap.sh | bash -s -- --persist
|
||||
curl -sSL https://git.nixc.us/colin/disk-space-report/raw/branch/main/disk-check.sh | bash
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
The script will provide the following output:
|
||||
The script will output the following information:
|
||||
|
||||
- The calculated size of the swap file.
|
||||
- Confirmation of swap file creation and activation.
|
||||
- Whether the swap file will persist after reboot (based on the `--persist` flag).
|
||||
- Information on the current swap status using `swapon --show`.
|
||||
- The size of the apt cache.
|
||||
- The size of old installed packages.
|
||||
- The size of journal logs.
|
||||
- The size of temporary files.
|
||||
- The size of unused Docker volumes.
|
||||
- Directories consuming more than 5GB and 10GB.
|
||||
|
||||
## Note
|
||||
|
||||
This script requires `sudo` privileges to create and activate the swap file, as well as to modify the `/etc/fstab` file for persistence across reboots when using the `--persist` flag.
|
||||
This script requires `sudo` privileges to estimate certain sizes and access system directories.
|
|
@ -0,0 +1,109 @@
|
|||
#!/bin/bash
|
||||
|
||||
LOG_FILE="/tmp/disk_space_report.log"
|
||||
HASTE_URL="https://haste.nixc.us/documents"
|
||||
|
||||
# Clear the log file if it exists
|
||||
> "$LOG_FILE"
|
||||
|
||||
echo "Starting disk space report... This may take a few minutes." | tee -a "$LOG_FILE"
|
||||
|
||||
# Function to estimate the size of the apt cache
|
||||
estimate_apt_cache_size() {
|
||||
echo "Estimating the size of the apt cache:" | tee -a "$LOG_FILE"
|
||||
sudo du -sh /var/cache/apt | tee -a "$LOG_FILE"
|
||||
echo | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Function to estimate the size of old installed packages
|
||||
estimate_old_packages_size() {
|
||||
echo "Estimating the size of old installed packages:" | tee -a "$LOG_FILE"
|
||||
sudo du -sh /var/lib/apt/lists /var/lib/apt/lists/partial | tee -a "$LOG_FILE"
|
||||
echo | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Function to estimate the size of journal logs
|
||||
estimate_journal_size() {
|
||||
echo "Estimating the size of journal logs:" | tee -a "$LOG_FILE"
|
||||
sudo journalctl --disk-usage | tee -a "$LOG_FILE"
|
||||
echo | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Function to estimate the size of temporary files
|
||||
estimate_tmp_size() {
|
||||
echo "Estimating the size of temporary files:" | tee -a "$LOG_FILE"
|
||||
sudo du -sh /tmp /var/tmp | tee -a "$LOG_FILE"
|
||||
echo | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Function to estimate the size of unused Docker volumes
|
||||
estimate_docker_volumes_size() {
|
||||
echo "Estimating the size of unused Docker volumes:" | tee -a "$LOG_FILE"
|
||||
docker volume ls -qf dangling=true | xargs -I {} docker volume inspect --format '{{ .Mountpoint }}' {} | xargs -I {} sudo du -sh {} | awk '{ sum += $1 } END { print sum "B" }' | tee -a "$LOG_FILE"
|
||||
echo | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Function to check and suggest logrotate for large Docker logs
|
||||
check_docker_logs() {
|
||||
echo "Checking Docker logs for large files..." | tee -a "$LOG_FILE"
|
||||
large_logs=$(docker ps -q --filter "status=exited" | xargs -I {} docker inspect --format '{{.LogPath}}' {} | xargs -I {} sudo find {} -type f -size +1G)
|
||||
if [ -n "$large_logs" ]; then
|
||||
echo "The following Docker logs are larger than 1GB:" | tee -a "$LOG_FILE"
|
||||
echo "$large_logs" | tee -a "$LOG_FILE"
|
||||
echo | tee -a "$LOG_FILE"
|
||||
echo "Consider setting up logrotate to manage Docker logs." | tee -a "$LOG_FILE"
|
||||
echo "To truncate all Docker logs, run:" | tee -a "$LOG_FILE"
|
||||
echo 'sudo find /var/lib/docker/containers/ -type f -name "*.log" -exec truncate -s 0 {} \;' | tee -a "$LOG_FILE"
|
||||
echo | tee -a "$LOG_FILE"
|
||||
else
|
||||
echo "No large Docker logs found." | tee -a "$LOG_FILE"
|
||||
echo | tee -a "$LOG_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to list directories consuming more than a specified size
|
||||
list_large_directories() {
|
||||
local directory=$1
|
||||
local size_limit=$2
|
||||
echo "Directories in $directory consuming more than ${size_limit}GB:" | tee -a "$LOG_FILE"
|
||||
sudo du -ahx "$directory" 2>/dev/null | awk -v limit="$size_limit" '{
|
||||
size=$1; unit=substr(size, length(size));
|
||||
size_val=substr(size, 1, length(size)-1);
|
||||
if ((unit=="G" && size_val+0 > limit) || (unit=="T" && size_val*1024 > limit)) {
|
||||
print
|
||||
}
|
||||
}' | tee -a "$LOG_FILE"
|
||||
echo | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Estimate storage savings
|
||||
echo "Estimating potential storage savings..." | tee -a "$LOG_FILE"
|
||||
estimate_apt_cache_size
|
||||
estimate_old_packages_size
|
||||
estimate_journal_size
|
||||
estimate_tmp_size
|
||||
estimate_docker_volumes_size
|
||||
|
||||
# Check Docker logs
|
||||
check_docker_logs
|
||||
|
||||
# List large directories
|
||||
echo "Listing directories consuming more than 5GB and 10GB:" | tee -a "$LOG_FILE"
|
||||
list_large_directories / 5
|
||||
list_large_directories /home 5
|
||||
list_large_directories / 10
|
||||
list_large_directories /home 10
|
||||
|
||||
echo "Storage savings estimation and large directory listing completed." | tee -a "$LOG_FILE"
|
||||
|
||||
# Upload the log file to Hastebin
|
||||
echo "Uploading report to Hastebin..." | tee -a "$LOG_FILE"
|
||||
response=$(curl -s -X POST -T "$LOG_FILE" "$HASTE_URL")
|
||||
if [[ $response == *"key"* ]]; then
|
||||
key=$(echo "$response" | jq -r '.key')
|
||||
# Remove /documents/ and use the key to form the correct URL
|
||||
report_url="https://haste.nixc.us/$key"
|
||||
echo "Report available at: $report_url" | tee -a "$LOG_FILE"
|
||||
else
|
||||
echo "Failed to upload report to Hastebin. Response: $response" | tee -a "$LOG_FILE"
|
||||
fi
|
68
swap.sh
68
swap.sh
|
@ -1,68 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Function to create swap file
|
||||
create_swapfile() {
|
||||
# Detect the partition mounted on root ('/')
|
||||
mount_point=$(df / | tail -1 | awk '{print $6}')
|
||||
|
||||
# Get available space on the root partition in MB
|
||||
available_space=$(df -BM $mount_point | tail -1 | awk '{print $4}' | sed 's/M//')
|
||||
|
||||
# Calculate 5% of the available space in MB
|
||||
swap_size=$((available_space * 5 / 100)) # 5% of available space in MB
|
||||
|
||||
# Convert swap size from MB to GB
|
||||
swap_size=$((swap_size / 1024)) # Convert MB to GB
|
||||
|
||||
# Set upper limit of 30GB for the swap file
|
||||
if [ $swap_size -gt 30 ]; then
|
||||
swap_size=30
|
||||
fi
|
||||
|
||||
# Abort if the calculated swap size is less than 1GB
|
||||
if [ $swap_size -lt 1 ]; then
|
||||
echo "Not enough disk space to create a swap file."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Creating a ${swap_size}GB swap file at /swapfile..."
|
||||
|
||||
# Remove existing swapfile if it exists
|
||||
if [ -f /swapfile ]; then
|
||||
sudo swapoff /swapfile
|
||||
sudo rm /swapfile
|
||||
echo "Existing swapfile removed."
|
||||
fi
|
||||
|
||||
# Create the swap file
|
||||
sudo fallocate -l ${swap_size}G /swapfile
|
||||
sudo chmod 600 /swapfile
|
||||
sudo mkswap /swapfile
|
||||
sudo swapon /swapfile
|
||||
|
||||
echo "Swap file of ${swap_size}GB created and activated."
|
||||
}
|
||||
|
||||
# Function to persist the swap file across reboots
|
||||
persist_swapfile() {
|
||||
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
|
||||
echo "Swap file added to /etc/fstab."
|
||||
}
|
||||
|
||||
# Check if --persist flag is passed
|
||||
persist=false
|
||||
if [ "$1" == "--persist" ]; then
|
||||
persist=true
|
||||
fi
|
||||
|
||||
# Main script execution
|
||||
create_swapfile
|
||||
|
||||
if [ "$persist" = true ]; then
|
||||
persist_swapfile
|
||||
else
|
||||
echo "Swap file will not persist after reboot."
|
||||
fi
|
||||
|
||||
# Show current swap status
|
||||
sudo swapon --show
|
Loading…
Reference in New Issue