Add ripcord/ripcord.sh
This commit is contained in:
parent
c67812cfdf
commit
4f314e0180
1 changed files with 79 additions and 0 deletions
79
ripcord/ripcord.sh
Normal file
79
ripcord/ripcord.sh
Normal file
|
@ -0,0 +1,79 @@
|
|||
#!/bin/sh
|
||||
|
||||
# ==============================================================================
|
||||
# Ripcord - Your server's last-ditch emergency disk space release.
|
||||
#
|
||||
# This script runs once on first boot to create a large "ballast" file.
|
||||
# Deleting this file in an emergency frees up critical disk space.
|
||||
# The data is from /dev/urandom to ensure it is not compressible by ZFS/lz4.
|
||||
# ==============================================================================
|
||||
|
||||
# --- Configuration ---
|
||||
|
||||
# Percentage of the total root filesystem size to use for the emergency file.
|
||||
PERCENTAGE=5
|
||||
|
||||
# The emergency file. The name itself is the instruction.
|
||||
# It contains the project name for easy identification.
|
||||
TARGET_FILE="/RIPCORD_EMERGENCY_DELETE_FOR_DISK_SPACE.dat"
|
||||
|
||||
# A flag file to ensure this script only ever runs once.
|
||||
FLAG_FILE="/var/log/ripcord-deployed.flag"
|
||||
|
||||
# --- Script Logic ---
|
||||
|
||||
# Function to log messages with a timestamp
|
||||
log() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1"
|
||||
}
|
||||
|
||||
# 1. Check if Ripcord has already been deployed
|
||||
if [ -f "$FLAG_FILE" ]; then
|
||||
log "Ripcord has already been deployed. Exiting."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
log "--- Deploying Ripcord ---"
|
||||
|
||||
# 2. Create the emergency ballast file
|
||||
if [ -f "$TARGET_FILE" ]; then
|
||||
log "Warning: Ripcord target file '$TARGET_FILE' already exists. Skipping creation."
|
||||
else
|
||||
log "Preparing to create Ripcord ballast file at '$TARGET_FILE'."
|
||||
|
||||
# Get total size of '/' in Kilobytes using the POSIX standard format.
|
||||
total_kb=$(df -Pk / | tail -1 | awk '{print $2}')
|
||||
|
||||
if [ -z "$total_kb" ]; then
|
||||
log "Error: Could not determine total disk size for '/'."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Total size of root filesystem: ${total_kb} KB."
|
||||
|
||||
# Calculate the target file size in Kilobytes.
|
||||
target_size_kb=$(( (total_kb * PERCENTAGE) / 100 ))
|
||||
|
||||
log "Target ballast file size will be ${PERCENTAGE}% of total: ${target_size_kb} KB."
|
||||
|
||||
# Use dd to create the file from /dev/urandom.
|
||||
# This data is uncompressible, which is critical for filesystems like ZFS.
|
||||
log "Creating file from /dev/urandom... This may take a significant amount of time."
|
||||
dd if=/dev/urandom of="$TARGET_FILE" bs=1024 count="$target_size_kb" status=none 2>/dev/null
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log "Successfully created '$TARGET_FILE'."
|
||||
else
|
||||
log "Error: dd command failed to create '$TARGET_FILE'."
|
||||
rm -f "$TARGET_FILE" # Clean up partial file on failure
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 3. Create the flag file to prevent this script from running again
|
||||
log "Creating deployment flag at '$FLAG_FILE'."
|
||||
touch "$FLAG_FILE"
|
||||
|
||||
log "--- Ripcord deployment complete ---"
|
||||
|
||||
exit 0
|
Loading…
Add table
Add a link
Reference in a new issue