Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # This script is just meant to defrag all my XFS drives (except the root
- # partition).
- set -eo pipefail
- if [[ $EUID -ne 0 ]]; then
- printf '\n%s\n\n' 'You need to be root to run this script!'
- exit
- fi
- date=$(date "+%F")
- passes='60'
- xfs_log="${HOME}/xfs_defrag_log-${date}_${RANDOM}.txt"
- mapfile -t lines < <(mount -t xfs)
- xfs_defrag () {
- declare -a partitions
- for (( i = 0; i < ${#lines[@]}; i++ )); do
- line="${lines[${i}]}"
- mapfile -d' ' -t line_parts <<<"$line"
- line_parts[-1]="${line_parts[-1]%$'\n'}"
- if [[ ${line_parts[2]} == '/' ]]; then
- continue
- fi
- if [[ -b ${line_parts[0]} ]]; then
- partitions+=("${line_parts[0]}")
- fi
- done
- for (( i = 0; i < ${#partitions[@]}; i++ )); do
- partition="${partitions[${i}]}"
- printf '\n%s\n\n' "*** ${partition}"
- xfs_fsr -v -p "$passes" "$partition"
- done
- for (( i = 0; i < ${#partitions[@]}; i++ )); do
- partition="${partitions[${i}]}"
- printf '\n%s\n\n' "*** ${partition}"
- xfs_db -c frag -r "$partition"
- done
- }
- xfs_defrag | tee "$xfs_log"
Advertisement
Add Comment
Please, Sign In to add comment