defrag-btrfs 848 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/bin/bash
  2. set -e
  3. #set -x
  4. DEFRAG_ROOT="$1"
  5. SHARE_ROOT="/mnt2"
  6. LOG=~jason/logs/btrfs-defrag-$(date '+%Y-%m-%d_%H-%M').log
  7. function log() {
  8. date_str=`date '+%Y-%m-%d %H:%M:%S'`
  9. echo "[$date_str]: $1" 2>&1 | tee -a $LOG
  10. }
  11. CURR_USER=`whoami`
  12. if [ "$CURR_USER" != "root" ]; then
  13. echo "Must be run as root"
  14. exit -1
  15. fi
  16. function logCmd() {
  17. cmd="$@"
  18. log "Running '${cmd}'"
  19. time $cmd 2>&1 | tee -a $LOG
  20. }
  21. function doDefrag() {
  22. log "Starting defrag of: $DEFRAG_ROOT"
  23. logCmd /usr/sbin/btrfs filesystem defrag -rvf "$DEFRAG_ROOT"
  24. }
  25. function defragAll() {
  26. for d in $SHARE_ROOT/*; do
  27. DEFRAG_ROOT=$d
  28. time doDefrag
  29. done
  30. }
  31. if [ "$DEFRAG_ROOT" = "" ]; then
  32. echo "No share specified. Going to defrag all shares under $SHARE_ROOT"
  33. #read -p "Press any key to continue, or ctrl+C to cancel."
  34. time defragAll
  35. else
  36. time doDefrag
  37. fi
  38. log "Done"