diff options
Diffstat (limited to 'extras/glusterfs-defrag.in')
-rw-r--r-- | extras/glusterfs-defrag.in | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/extras/glusterfs-defrag.in b/extras/glusterfs-defrag.in deleted file mode 100644 index 68a393f1c3a..00000000000 --- a/extras/glusterfs-defrag.in +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash - -# Please leave 'added_bricks' as empty if you want 100% defrag. -# If you want to move data to newly added bricks, properly give -# brick info as "<hostname>:<export-dir>" form (which was given -# in 'gluster volume create' command) -# More than one brick can be given with space inbetween. - -# -# (c) 2010 Gluster Inc <http://www.gluster.com/> -# - -set -e; - -# -#added_bricks="node1:/gfs/export1" -# -added_bricks="" - -CP="cp" -MV="mv" - -scan_dir() -{ - path=$1; - # run defrag on files first # - find "$path" -maxdepth 1 -type f -perm +01000 -exec $0 '{}' \; - - for subdir in $(find "$path" -maxdepth 1 -type d | sed 1d); do - $0 "$subdir"; - done -} - -fix_xattr() -{ - path=$1; - getfattr -n trusted.distribute.fix.layout "$path" 2>/dev/null; -} - -rsync_filename() -{ - path=$1 - dir=$(dirname "$path"); - file=$(basename "$path"); - - echo "$dir/.$file.zr$$"; -} - -relocate_file() -{ - path=$1; - - # Make sure we don't 'defrag' valid file. - stat_info=$(stat -c '%a' "$path"); - if [ $stat_info -lt 1000 ] ; then - return; - fi - - size=$(stat -c '%s' "$path"); - - # If there are some entries in added_bricks, then check - # if the link file is present on those nodes, if not, - # set flag=1, so full defrag happens - - flag=0; - for bricks in ${added_bricks}; do - linknode=$(getfattr --only-values -n trusted.distribute.linkinfo $path 2>/dev/null); - if [ -z $linknode ] ; then - return; - fi - current_brick=${linknode:0:${#bricks}}; - if [ "${bricks}" == "${current_brick}" ]; then - flag=1; - fi - done - - if [ -z ${added_bricks} ] ; then - flag=1; - fi - - if [ $flag -ne 1 ]; then - return; - fi - - tmp_path=$(rsync_filename "$path"); - - pre_mtime=$(stat -c '%Y' "$path"); - $CP -a "$path" "$tmp_path"; - post_mtime=$(stat -c '%Y' "$path"); - - if [ $pre_mtime = $post_mtime ]; then - chmod -t "$tmp_path"; - $MV "$tmp_path" "$path"; - echo "file '$path' relocated" - else - echo "file '$path' modified during defrag. skipping" - rm -f "$tmp_path"; - fi -} - -defrag_usage() -{ - echo "Usage: $0 <directory>" -} - -main() -{ - path="$1"; - - if [ -z "$path" ]; then - defrag_usage; - return; - fi - - if [ -d "$path" ]; then - fix_xattr "$path"; - scan_dir "$path"; - else - relocate_file "$@"; - fi -} - -main "$1" |