Skip to content
Snippets Groups Projects
Select Git revision
  • 5a0ef763655c25daeacde1f878c99f1073f1a79f
  • master default protected
  • rednatco-v2
  • rednatco
  • test
  • ntc-tube-uniform-color
  • ntc-tube-missing-atoms
  • restore-vertex-array-per-program
  • watlas2
  • dnatco_new
  • cleanup-old-nodejs
  • webmmb
  • fix_auth_seq_id
  • update_deps
  • ext_dev
  • ntc_balls
  • nci-2
  • plugin
  • bugfix-0.4.5
  • nci
  • servers
  • v0.5.0-dev.1
  • v0.4.5
  • v0.4.4
  • v0.4.3
  • v0.4.2
  • v0.4.1
  • v0.4.0
  • v0.3.12
  • v0.3.11
  • v0.3.10
  • v0.3.9
  • v0.3.8
  • v0.3.7
  • v0.3.6
  • v0.3.5
  • v0.3.4
  • v0.3.3
  • v0.3.2
  • v0.3.1
  • v0.3.0
41 results

rollup.config.js

Blame
  • xfs-quotas.sh 2.95 KiB
    #! /bin/sh -e
    #
    # Set the XFS project quotas on specified directories
    #
    # Only directories without projects in /etc/projects and /etc/projid are set,
    # existing project assignments and quotas are not touched.
    #
    # After removing from /etc/projects and /etc/projid, this script will set again
    # the project assignments and quota.
    #
    # Check result:
    #
    # xfs_quota -xc 'report -ph'
    #
    # Check individual file project assignment (replace $DIR by path):
    #
    # xfs_io -c lsproj $DIR
    #
    # Clear project assignment (replace $DIR_OR_ID by project name or ID):
    #
    # xfs_quota -xc "project -C $DIR_OR_ID" /exports
    # vim /etc/projects /etc/projid
    #
    
    PROG="$0"
    SOFT=1024M
    HARD=1152M
    DISK_MOUNTPOINT=/exports
    TARGET_PATH=/exports
    
    usage() {
    	cat << EOF
    $PROG [OPTIONS]
    OPTIONS are:
      -h,--help
      -n,--dry-run
      -i,--include REGEXP
      -e,--exclude REGEXP
      -s,--soft-quota QUOTA (default $SOFT)
      -q,--hard-quota QUOTA (default $HARD)
    EOF
    	return 0
    }
    
    
    TEMP=$(getopt -o 'i:e:s:q:hn' --long 'include:,exclude:,soft-quota:,hard-quota:,help,dry-run' -n 'xfs-quotas.sh' -- "$@") || exit $?
    eval set -- "$TEMP"
    unset TEMP
    
    soft="$SOFT"
    hard="$HARD"
    
    truncate -s 0 /tmp/quota.list
    while true; do
    	case "$1" in
    		-h|--help)
    			usage
    			shift
    			exit 0
    			;;
    		-s|--soft-quota)
    			soft="$2"
    			shift 2
    			continue
    			;;
    		-q|--hard-quota)
    			hard="$2"
    			shift 2
    			continue
    			;;
    		-e|--exclude)
    			grep -v "$2" /tmp/quota.list > /tmp/quota.list2
    			mv /tmp/quota.list2 /tmp/quota.list
    			shift 2
    			continue
    			;;
    		-i|--include)
    			find $TARGET_PATH -mindepth 1 -maxdepth 1 -type d | grep "$2" >> /tmp/quota.list
    			shift 2
    			continue
    			;;
    		-n|--dry-run)
    			dry_run=1
    			shift
    			continue
    			;;
    		--)
    			shift
    			break
    			;;
    		*)
    			usage
    			exit 1
    			;;
    	esac
    done
    
    test -f /etc/projects || touch /etc/projects
    test -f /etc/projid || touch /etc/projid
    
    # all specified directories
    sort /tmp/quota.list | uniq > /tmp/quota.list2
    mv /tmp/quota.list2 /tmp/quota.list
    
    # directories with quota
    cut -d: -f1 /etc/projid 2>/dev/null | sort | uniq > /tmp/quota.xfs.list
    
    lastid=0
    lastid="$( (maxid=0; IFS=:; while read -r dir id; do if test "$id" -gt "$maxid"; then maxid="$id"; fi; done; echo "$maxid") < /etc/projid )"
    cat <<EOF > /tmp/quota-cmd.sh
    #! /bin/sh -e
    cp -p /etc/projects /etc/projects.new
    cp -p /etc/projid /etc/projid.new
    
    EOF
    diff /tmp/quota.list /tmp/quota.xfs.list | grep '^< ' | while read -r _ dir; do
    	lastid=$((lastid+1))
    	id="$lastid"
    	cat <<EOF >> /tmp/quota-cmd.sh
    echo "$id:$dir" >> /etc/projects.new
    echo "$dir:$id" >> /etc/projid.new
    xfs_quota -x -D /etc/projects.new -P /etc/projid.new -c "project -s $dir" $DISK_MOUNTPOINT >/dev/null
    xfs_quota -x  -D /etc/projects.new -P /etc/projid.new -c "limit -p bsoft=$soft bhard=$hard $dir" $DISK_MOUNTPOINT
    
    EOF
    done
    cat <<EOF >>/tmp/quota-cmd.sh
    mv /etc/projects.new /etc/projects
    mv /etc/projid.new /etc/projid
    EOF
    
    if test -z "$dry_run"; then
    	sh -e /tmp/quota-cmd.sh
    else
    	cat /tmp/quota-cmd.sh
    fi
    
    rm -f /tmp/quota-cmd.sh /tmp/quota.list /tmp/quota.list2 /tmp/quota.xfs.list