#!/bin/bash ENABLED=yes [ "$ENABLED" != "yes" ] && exit 0 DEBUGMODE=no unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/os-config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" SYSCONF="${ROOTFS}/${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/security; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null #declare -A DISK_QUOTA #DISK_QUOTA[usrquota:/dev/sda4]=enable #DISK_QUOTA[usrquota:/dev/sda4]=disable #DISK_QUOTA[usrquota:/dev/sda4:user-1,user-2]=7M:8M:0:0:86400:86400 #DISK_QUOTA[usrquota:/dev/sda4:user-1]=5M:6M:0:0 #DISK_QUOTA[usrquota:/dev/sda4:user-2]=7M:8M:0:0 #DISK_QUOTA[usrquota:/mnt/MyExt4:user-1,user-2]=5M:6M:0:0 #DISK_QUOTA[usrquota:/dev/sda4]=0:0:0:0:1604800:8604800 #DISK_QUOTA[grpquota:/dev/sda4]=enable #DISK_QUOTA[grpquota:/dev/sda4]=disable #DISK_QUOTA[grpquota:/dev/sda4:users]=2M:3M:0:0:604800:604800 #DISK_QUOTA[grpquota:/mnt/MyExt4:users]=5M:6M:0:0:604800:604800 #DISK_QUOTA[prjquota:/tmp/5/dir23:3,MyPN-3]=3M:4M:10:20:3600:3600 #DISK_QUOTA[prjquota:/mnt/MyExt4/test1:1,PN-1]=2M:3M:0:0:3600:3600 #DISK_QUOTA[prjquota:/mnt/sda4/test1:AUTO,PN-1]=2M:3M:0:0:3600:3600 #DISK_QUOTA[prjquota:/mnt/MyExt4/test2:2,PN-2]=3M:4M:10:12:3600:3600 #DISK_QUOTA[prjquota:/mnt/sda4/test1]=clean #DISK_QUOTA[prjquota:/mnt/sda4/test1]=disable #DISK_QUOTA[quota]=disable #DISK_QUOTA[quota]=enable #DISK_QUOTA[quota:/dev/sda4]=clean ## Назначение квот на дисковые ресурсы ## Может принимать входящий параметр: ## exec_disk_quota DISK_QUOTA[usrquota:/dev/sdc1]=user-1,user-2:5M:6M:0:0 DISK_QUOTA[usrquota:/dev/sdc2]=enable exec_disk_quota(){ ## Использовать дисковые квоты на файловые системы enable_quota(){ # Включить поддержку квоты ## Варианты опций mount для квотирования: ## noquota # Отключить простые квоты на пользователя и группу ## quota # Включить простые квоты на пользователя и группу ## usrquota # Включить простые квоты на пользователя ## grpquota # Включить простые квоты на группу ## prjquota # Включить квоты на проект ## usrjquota=aquota.user # Включить журналируемые квоты на пользователя ## grpjquota=aquota.group # Включить журналируемые квоты на группу ## jqfmt=vfsold # Использовать БД для простых квот V1 ## jqfmt=vfsv0 # Выключить журналирование. Использовать БД для журналируемых квот V2 ## jqfmt=vfsv1 # Включить журналирование. Использовать БД для журналируемых квот V2 #cat /proc/mounts | grep -q "^${PATH_DEVICE}.,*${ATTR_QUOTA}" && return 0 local MOUNT_DEVICE=$(cat /proc/mounts | grep "^${PATH_DEVICE}" | head -1) if [[ -n ${MOUNT_DEVICE} ]]; then if [[ ${ISFS_EXT234_FEATURES} == yes ]]; then if [[ ${MOUNT_DEVICE} =~ ^${PATH_DEVICE}.*,${ATTR_QUOTA} ]]; then return 0 elif mount -o remount,${MOUNT_DISK_ATTR[${PATH_DEVICE}]} ${PATH_DEVICE}; then # Перемонтировать со всеми атрибутами квот [[ ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} =~ usrquota ]] && rm -f ${MOUNT_POINT}/{aquota.user,quota.user} [[ ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} =~ grpquota ]] && rm -f ${MOUNT_POINT}/{aquota.group,quota.group} else echo "ERROR: Device '${PATH_DEVICE}' not remounted with options 'remount,${MOUNT_DISK_ATTR[${PATH_DEVICE}]}'" return 1 fi elif [[ ${ISFS_EXT234_FEATURES} == no ]]; then if [[ ${MOUNT_DEVICE} =~ ^${PATH_DEVICE}.*,${ATTR_QUOTA} && -f "${MOUNT_POINT}/${FILE_QUOTA}" ]]; then return 0 elif [[ ! ${PATH_DEVICE} =~ ^/dev/loop* ]] && umount --quiet ${PATH_DEVICE} 2>/dev/null; then ${ROOTFS}/usr/bin/tune2fs -Q ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} ${PATH_DEVICE} && ISFS_EXT234_FEATURES=yes mount --all mount -o ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} ${PATH_DEVICE} ${MOUNT_POINT} [[ ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} =~ usrquota ]] && rm -f ${MOUNT_POINT}/{aquota.user,quota.user} [[ ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} =~ grpquota ]] && rm -f ${MOUNT_POINT}/{aquota.group,quota.group} elif [[ ${ATTR_QUOTA} != prjquota ]]; then if mount -o remount,${ATTR_QUOTA} ${PATH_DEVICE}; then #${ROOTFS}/usr/bin/quotaoff -${ARG_CMD} ${PATH_DEVICE} 2>/dev/null [[ -f "${MOUNT_POINT}/${FILE_QUOTA}" ]] || ${ROOTFS}/usr/bin/quotacheck -${ARG_CMD}cm ${PATH_DEVICE} ${ROOTFS}/usr/bin/quotacheck -${ARG_CMD} ${PATH_DEVICE} else echo "ERROR: Device '${PATH_DEVICE}' not remounted with options 'remount,${ATTR_QUOTA}'" return 1 fi fi elif [[ ${ISFS_NFS} == yes ]]; then if [[ ${MOUNT_DEVICE} =~ ^${PATH_DEVICE}.*,${ATTR_QUOTA} && -f "${MOUNT_POINT}/${FILE_QUOTA}" ]]; then return 0 fi true fi if [[ -z ${ROOTFS} ]]; then /usr/bin/ubconfig --quiet --source system get config SERVICESSTART | grep -q systemd-quotacheck 2>/dev/null \ || /usr/bin/ubconfig --quiet --target system set config SERVICESSTART+=,systemd-quotacheck else chroot . /usr/bin/ubconfig --quiet --source system get config SERVICESSTART | grep -q systemd-quotacheck 2>/dev/null \ || /usr/bin/ubconfig --quiet --noexecute --target system set config SERVICESSTART+=,systemd-quotacheck fi else [[ -n ${ISFS_EXT234} && ${ISFS_EXT234_FEATURES} == no ]] && ${ROOTFS}/usr/bin/tune2fs -Q ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} ${PATH_DEVICE} #2>/dev/null echo "ERROR: Device '${PATH_DEVICE}' not mounted." fi } disable_quota(){ # Отключить поддержку квот cat /proc/mounts | grep -q "${PATH_DEVICE}.*,${ATTR_QUOTA}" || return 0 ${ROOTFS}/usr/bin/quotaoff -${ARG_CMD} ${PATH_DEVICE} &>/dev/null if [[ ${ATTR_QUOTA} == quota ]]; then if [[ -z ${ROOTFS} ]]; then /usr/bin/ubconfig --quiet --target system set config SERVICESSTART--=,systemd-quotacheck else chroot . /usr/bin/ubconfig --quiet --noexecute --target system set config SERVICESSTART--=,systemd-quotacheck fi cat /proc/mounts | grep -q "${PATH_DEVICE}.*${ATTR_QUOTA}" && mount -o remount,noquota ${PATH_DEVICE} &>/dev/null fi } set_quota(){ # Установить квоту QUOTA_LIMITS=$(cut -d: -f1,2,3,4 <<< ${ALL_VALUE_QUOTA} | tr : ' ') QUOTA_GRACE=$(cut -d: -f5,6 <<< ${ALL_VALUE_QUOTA} | tr : ' ') #${ROOTFS}/usr/bin/quotaoff -${ARG_CMD} ${PATH_DEVICE} #2>/dev/null [[ -n ${QUOTA_GRACE} ]] && setquota -${ARG_CMD}t ${QUOTA_GRACE} ${MOUNT_POINT} if [[ ${ATTR_QUOTA} == @(usrquota|grpquota) && -n ${UGP_QUOTA} ]]; then while read SELECT_UG_QUOTA; do ${ROOTFS}/usr/bin/setquota -${ARG_CMD} ${SELECT_UG_QUOTA} ${QUOTA_LIMITS} ${PATH_DEVICE} done < <(tr ",;[[:space:]]" \\n <<< ${UGP_QUOTA}) elif [[ ${ATTR_QUOTA} == prjquota && -n ${UGP_QUOTA} ]]; then ID_PROJECT=${UGP_QUOTA%%,*} NAME_PROJECT=${UGP_QUOTA#*,} if [[ ${ID_PROJECT,,} == auto ]]; then FIND_ID_PROJECT=$(lsattr -p -d "${PATH_PRJ}" | cut -d' ' -f1) [[ -n ${FIND_ID_PROJECT} && ${FIND_ID_PROJECT} != 0 ]] && ID_PROJECT=${FIND_ID_PROJECT} || ID_PROJECT=${RANDOM} fi [[ -f ${ROOTFS}/etc/projects ]] && sed "\|^${ID_PROJECT}:.*|d; \|.*:${PATH_PRJ}$|d" -i ${ROOTFS}/etc/projects 2>/dev/null echo "${ID_PROJECT}:${PATH_PRJ}" >> ${ROOTFS}/etc/projects [[ -f ${ROOTFS}/etc/projid ]] && sed "/.*:${ID_PROJECT}$/d" -i ${ROOTFS}/etc/projid 2>/dev/null if [[ -n ${NAME_PROJECT} ]]; then [[ -f ${ROOTFS}/etc/projid ]] && sed "/^${NAME_PROJECT}:.*/d" -i ${ROOTFS}/etc/projid 2>/dev/null echo "${NAME_PROJECT}:${ID_PROJECT}" >> ${ROOTFS}/etc/projid fi if [[ -n ${ISFS_EXT234} || -n ${ISFS_XFS} || -n ${ISFS_BTRFS} ]]; then ${ROOTFS}/usr/bin/chattr -R -p ${ID_PROJECT} ${PATH_PRJ} ${ROOTFS}/usr/bin/chattr +P ${PATH_PRJ} fi ${ROOTFS}/usr/bin/setquota -${ARG_CMD} ${ID_PROJECT} ${QUOTA_LIMITS} ${PATH_DEVICE} fi } clean_quota(){ # Очистить данные квот #disable_quota local MOUNT_DEVICE=$(cat /proc/mounts | grep "^${PATH_DEVICE}" | head -1) if [[ -n ${MOUNT_DEVICE} ]]; then if [[ ${ATTR_QUOTA} == prjquota ]]; then ${ROOTFS}/usr/bin/quotaoff -P ${PATH_DEVICE} 2>/dev/null if [[ -n ${UGP_QUOTA} ]]; then ID_PROJECT=${UGP_QUOTA%%,*} NAME_PROJECT=${UGP_QUOTA#*,} [[ -f ${ROOTFS}/etc/projects ]] && sed "\|^${ID_PROJECT}:.*|d; \|.*:${PATH_PRJ}$|d" -i ${ROOTFS}/etc/projects 2>/dev/null [[ -f ${ROOTFS}/etc/projid ]] && sed "/.*:${ID_PROJECT}$/d" -i ${ROOTFS}/etc/projid 2>/dev/null [[ -f ${ROOTFS}/etc/projid && -n ${NAME_PROJECT} ]] && sed "/^${NAME_PROJECT}:.*/d" -i ${ROOTFS}/etc/projid 2>/dev/null fi if [[ -n ${PATH_PRJ} ]] && [[ -n ${ISFS_EXT234} || -n ${ISFS_XFS} || -n ${ISFS_BTRFS} ]]; then ${ROOTFS}/usr/bin/chattr -R -p 0 ${PATH_PRJ} ${ROOTFS}/usr/bin/chattr -P ${PATH_PRJ} fi elif [[ ${ATTR_QUOTA} == quota && ${ATTR_QUOTA} == usrquota && ${ATTR_QUOTA} == grpquota ]]; then ${ROOTFS}/usr/bin/quotaoff -ugP ${PATH_DEVICE} 2>/dev/null if [[ ${ISFS_EXT234_FEATURES} == yes ]]; then if umount --quiet ${PATH_DEVICE} 2>/dev/null; then ${ROOTFS}/usr/bin/tune2fs -Q ^usrquota,^grpquota,^prjquota ${PATH_DEVICE} 2>/dev/null #${ROOTFS}/usr/bin/tune2fs -Q quota,project ${PATH_DEVICE} 2>/dev/null mount --all mount ${PATH_DEVICE} ${MOUNT_POINT} else echo "WARNING: Device '${PATH_DEVICE}' is busy." fi else [[ ${MOUNT_DEVICE} =~ ^${PATH_DEVICE}.*,${ATTR_QUOTA} ]] && mount -o remount,noquota ${PATH_DEVICE} &>/dev/null rm -f ${MOUNT_POINT}/{aquota.user,aquota.group,quota.user,quota.group} fi fi else if [[ ${ISFS_EXT234_FEATURES} == yes ]]; then ${ROOTFS}/usr/bin/tune2fs -Q ^quota,^project ${PATH_DEVICE} 2>/dev/null #${ROOTFS}/usr/bin/tune2fs -Q quota,project ${PATH_DEVICE} 2>/dev/null fi fi } debug(){ echo "--------------------------" echo "ATTR_QUOTA=${ATTR_QUOTA}" echo "UGP_QUOTA=${UGP_QUOTA}" echo "ALL_VALUE_QUOTA=${ALL_VALUE_QUOTA}" echo "IDENT_DEVICE=${IDENT_DEVICE}" echo "PATH_DEVICE_LSBLK=${PATH_DEVICE_LSBLK}" echo "PATH_DEVICE=${PATH_DEVICE}" echo "MOUNT_POINT=${MOUNT_POINT}" echo "PATH_PRJ=${PATH_PRJ}" echo "ISFS_EXT234=${ISFS_EXT234}" echo "ISFS_EXT234_FEATURES=${ISFS_EXT234_FEATURES}" } # Если заданы входящие параметр имя переменной со значением, то применяются параметры как основной DISK_QUOTA [[ -n $@ ]] && declare -A DISK_QUOTA && eval $@ if [[ -n ${DISK_QUOTA[@]} ]]; then local -A MOUNT_DISK_ATTR KNOW_LSBLK=$("${ROOTFS}"/usr/bin/lsblk --raw --fs --output PATH,FSTYPE,LABEL,PARTLABEL,UUID,PARTUUID,MOUNTPOINT,MOUNTPOINTS --exclude 11,253) # Построить массив всех из указанных устройств со всеми аттрибутами монтирования для которых существуют квоты for SELECT_DISK_QUOTA in "${!DISK_QUOTA[@]}"; do ATTR_QUOTA=${SELECT_DISK_QUOTA%%:*} IDENT_DEVICE=${SELECT_DISK_QUOTA#*:}; IDENT_DEVICE=${IDENT_DEVICE%:*} [[ ${IDENT_DEVICE} == quota ]] && continue if [[ ${ATTR_QUOTA} == @(usrquota|grpquota|quota) && -n ${IDENT_DEVICE} ]]; then PATH_DEVICE_LSBLK=$(grep "${IDENT_DEVICE}" <<< ${KNOW_LSBLK} | cut -d' ' -f1) [[ -n ${PATH_DEVICE_LSBLK} ]] && PATH_DEVICE=${PATH_DEVICE_LSBLK} || PATH_DEVICE=${IDENT_DEVICE} elif [[ ${ATTR_QUOTA} == prjquota && -n ${IDENT_DEVICE} ]]; then PATH_PRJ=${IDENT_DEVICE} [[ -d ${PATH_PRJ} ]] || continue PATH_DEVICE=$(${ROOTFS}/usr/bin/findmnt -n -o SOURCE --target ${PATH_PRJ}) [[ -n ${PATH_DEVICE} ]] || PATH_DEVICE=${IDENT_DEVICE} fi [[ -z ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} ]] && MOUNT_DISK_ATTR[${PATH_DEVICE}]="${ATTR_QUOTA}" || MOUNT_DISK_ATTR[${PATH_DEVICE}]+=",${ATTR_QUOTA}" done #echo "#MOUNT_DISK_ATTR[@]=${#MOUNT_DISK_ATTR[@]}" #echo "!MOUNT_DISK_ATTR[@]=${!MOUNT_DISK_ATTR[@]}" #echo "MOUNT_DISK_ATTR[@]=${MOUNT_DISK_ATTR[@]}" # Установить квоты for SELECT_DISK_QUOTA in "${!DISK_QUOTA[@]}"; do local ISFS_EXT234= MOUNT_POINT= PATH_PRJ= KNOW_LSBLK= PATH_DEVICE= PATH_DEVICE_LSBLK= local ISFS_EXT234_FEATURES= # Данные квот храняться в служебных данных файловой системы ATTR_QUOTA=${SELECT_DISK_QUOTA%%:*} case ${ATTR_QUOTA} in quota) ARG_CMD="ugP"; ARG_TUNE2FS=" quota inode:"; FILE_QUOTA="aquota.user" ;; usrquota) ARG_CMD="u"; ARG_TUNE2FS="User quota inode:"; FILE_QUOTA="aquota.user" ;; grpquota) ARG_CMD="g"; ARG_TUNE2FS="Group quota inode:"; FILE_QUOTA="aquota.group" ;; prjquota) ARG_CMD="P"; ARG_TUNE2FS="Project quota inode:"; FILE_QUOTA= ;; *) exit 1 ;; esac ALL_VALUE_QUOTA="${DISK_QUOTA[${SELECT_DISK_QUOTA}]}" UGP_QUOTA=${SELECT_DISK_QUOTA##*:} IDENT_DEVICE=${SELECT_DISK_QUOTA#*:}; IDENT_DEVICE=${IDENT_DEVICE%:*} [[ ${IDENT_DEVICE} == ${UGP_QUOTA} ]] && unset UGP_QUOTA #[[ ${IDENT_DEVICE} == quota ]] && unset IDENT_DEVICE if [[ ${ATTR_QUOTA} == quota && ${IDENT_DEVICE} == quota ]]; then unset IDENT_DEVICE elif [[ ${ATTR_QUOTA} == @(usrquota|grpquota|quota) && -n ${IDENT_DEVICE} ]]; then KNOW_LSBLK=$("${ROOTFS}"/usr/bin/lsblk --raw --fs --output PATH,FSTYPE,LABEL,PARTLABEL,UUID,PARTUUID,MOUNTPOINT,MOUNTPOINTS --exclude 11,253) PATH_DEVICE_LSBLK=$(grep "${IDENT_DEVICE}" <<< ${KNOW_LSBLK} | cut -d' ' -f1) [[ -n ${PATH_DEVICE_LSBLK} ]] && PATH_DEVICE=${PATH_DEVICE_LSBLK} || PATH_DEVICE=${IDENT_DEVICE} MOUNT_POINT=$(grep "${PATH_DEVICE}" <<< ${KNOW_LSBLK} | cut -d' ' -f7) elif [[ ${ATTR_QUOTA} == prjquota && -n ${IDENT_DEVICE} ]]; then PATH_PRJ=${SELECT_DISK_QUOTA#*:}; PATH_PRJ=${PATH_PRJ%:*} [[ -d ${PATH_PRJ} ]] || { echo "ERROR: The specified project directory '${PATH_PRJ}' does not exist." && continue; } KNOW_LSBLK=$("${ROOTFS}"/usr/bin/findmnt -n -o SOURCE,FSTYPE,TARGET --target ${PATH_PRJ} | xargs) PATH_DEVICE=$("${ROOTFS}"/usr/bin/findmnt -n -o SOURCE --target ${PATH_PRJ}) [[ -n ${PATH_DEVICE} ]] || PATH_DEVICE=${IDENT_DEVICE} MOUNT_POINT=$("${ROOTFS}"/usr/bin/findmnt -n -o TARGET --target ${PATH_PRJ}) fi [[ -n ${KNOW_LSBLK} ]] && ISFS_EXT234=$(grep -oE "${PATH_DEVICE} (ext2|ext3|ext4)" <<< ${KNOW_LSBLK}) #" [[ -n ${KNOW_LSBLK} && -z ${ISFS_EXT234} ]] && ISFS_XFS=$(grep -oE "${PATH_DEVICE} xfs" <<< ${KNOW_LSBLK}) # Проверить ФС на поддержку SW|HW режимов квот [[ -n ${ISFS_EXT234} ]] && { ${ROOTFS}/usr/bin/tune2fs -l ${PATH_DEVICE} | grep -q "${ARG_TUNE2FS}" && ISFS_EXT234_FEATURES=yes || ISFS_EXT234_FEATURES=no; } # TODO: Уточнить получение атрибутов у ФС XFS [[ -n ${ISFS_XFS} ]] && { ${ROOTFS}/usr/bin/tune2fs -l ${PATH_DEVICE} | grep -q "${ARG_TUNE2FS}" && ISFS_XFS_FEATURES=yes || ISFS_XFS_FEATURES=no; } #debug #continue if [[ ${ALL_VALUE_QUOTA,,} == enable ]]; then if [[ -n ${PATH_DEVICE} ]]; then enable_quota ${ROOTFS}/usr/bin/quotaon -${ARG_CMD}vp ${PATH_DEVICE} | grep -qi 'is on (enforced)' || ${ROOTFS}/usr/bin/quotaon -${ARG_CMD} ${PATH_DEVICE} else ${ROOTFS}/usr/bin/quotaoff -augP 2>/dev/null ${ROOTFS}/usr/bin/quotacheck -aug 2>/dev/null ${ROOTFS}/usr/bin/quotaon -augP 2>/dev/null #${ROOTFS}/usr/bin/ubconfig --quiet set config SERVICESSTART+=,quotaon.service fi elif [[ ${ALL_VALUE_QUOTA,,} == disable ]]; then if [[ -n ${PATH_DEVICE} ]]; then disable_quota else disable_quota ${ROOTFS}/usr/bin/quotaoff -augP 2>/dev/null #${ROOTFS}/usr/bin/ubconfig --quiet set config SERVICESSTART--=,quotaon.service fi elif [[ ${ALL_VALUE_QUOTA,,} == clean ]]; then [[ -n ${PATH_DEVICE} ]] && clean_quota elif [[ ${ALL_VALUE_QUOTA} =~ .*:.*:.*:.* ]]; then if [[ -n ${PATH_DEVICE} ]]; then enable_quota [[ ${ATTR_QUOTA} == prjquota && ${ISFS_EXT234_FEATURES} == no ]] && { echo "ERROR: Project '${UGP_QUOTA}' quota feature not enabled. Cannot enable project quota enforcement." && continue; } [[ ${ATTR_QUOTA} == prjquota && ${ISFS_XFS_FEATURES} == no ]] && { echo "ERROR: Project '${UGP_QUOTA}' quota feature not enabled. Cannot enable project quota enforcement." && continue; } if [[ -n ${MOUNT_POINT} ]]; then set_quota ${ROOTFS}/usr/bin/quotaon -${ARG_CMD}vp ${PATH_DEVICE} | grep -qi 'is on (enforced)' || ${ROOTFS}/usr/bin/quotaon -${ARG_CMD} ${PATH_DEVICE} 2>/dev/null || echo "ERROR: Quota '${ATTR_QUOTA}' not enabled on device '${PATH_DEVICE}'" fi fi fi done fi } exec_disk_quota_get(){ KNOW_LSBLK=$("${ROOTFS}"/usr/bin/lsblk --raw --fs --output PATH,FSTYPE,LABEL,PARTLABEL,UUID,PARTUUID,MOUNTPOINT,MOUNTPOINTS --exclude 11,253) PATH_DEVICE_LSBLK=$(grep -E " (ext2|ext3|ext4|xfs|btrfs|nfs) " <<< ${KNOW_LSBLK} | cut -d' ' -f1) #" echo "${PATH_DEVICE_LSBLK}" } ################ ##### MAIN ##### ################ if [[ -z $@ || $1 == set ]]; then shift exec_disk_quota $@ elif [[ $1 == get ]]; then shift exec_disk_quota_get $@ fi