df 출력에서 ​​읽기 전용 파일 시스템을 필터링하는 방법은 무엇입니까?

df 출력에서 ​​읽기 전용 파일 시스템을 필터링하는 방법은 무엇입니까?

나는 이것을 사용하여 df마운트된 파일 시스템이 가득 찼는지 확인합니다. 나는 그 중 하나라도 90% 이상의 사용량을 얻으면 나에게 이메일을 보내는 cron 작업을 가지고 있습니다.

문제는 일부 응용 프로그램(Ubuntu 배포판)이 이제 스냅을 사용하여 해당 응용 프로그램을 위해 특별히 마운트된 읽기 전용 파일 시스템을 생성한다는 것입니다. 보고된 대로 항상 100% 꽉 차 있습니다 df. 읽기 전용이고 더 완벽하게 만들 수 없기 때문에 이것이 적절하다고 생각합니다. df출력에서 제외하고 싶습니다 .

df-x, --exclude-type=TYPE도움이 될 것 같은 명령줄 플래그가 있지만 매뉴얼 페이지에는 가능한 값이 문서화되어 있지 않으므로 TYPE이를 사용하여 읽기 전용 파일 시스템을 제외할 수 있는지 확실하지 않습니다.

df다음은 내 시스템 중 하나의 출력 예입니다.

$ df --output=pcent,target 
Use% Mounted on
  0% /dev
  1% /run
  7% /
  1% /dev/shm
  1% /run/lock
  0% /sys/fs/cgroup
100% /snap/gnome-3-26-1604/74
100% /snap/gnome-characters/139
100% /snap/core/5662
100% /snap/gnome-system-monitor/57
100% /snap/gnome-calculator/238
100% /snap/gnome-logs/45
100% /snap/gtk-common-themes/701
100% /snap/core/5742

cron이 실행하는 스크립트는 다음과 같습니다.

#!/bin/bash    
set -e 
THRESHOLD_PERCENT=90    
host=`hostname -f`
df --output=pcent,target | while read line 
do
    if [[ "$line" != Use* ]]
    then
        percent=${line/\%*/};
        if (( percent >= THRESHOLD_PERCENT ))
        then
            file=${line/* /}
            echo "$percent% disk usage on $host:$file"
        fi
    fi
done

이러한 전체 스냅샷 항목과 나중에 읽기 전용으로 마운트될 수 있는 다른 파일 시스템을 모두 삭제하고 싶습니다.

답변1

예, 파일 시스템 목록에 대한 snap의 침입은 짜증스러울 수 있습니다...

당신 말이 맞아요 df -x-스냅크래프트모든 스냅샷은 읽기 전용 Squashfs 파일 시스템을 사용하므로 다음을 사용하여 모두 필터링할 수 있습니다.

df -xsquashfs

답변2

에서 사용된 파일 시스템 유형은 df파일 시스템의 형식을 나타냅니다 ext4.

/proc/mounts필터링(또는 의 출력)을 통해 mount읽기 및 쓰기 파일 시스템을 찾은 rw다음 이를 사용하여 출력을 필터링할 수 있습니다 df.

목록에 표시하고 싶지 않은 항목 도 포함되어 있으므로 여기 rw에 있는 항목을 모두 사용할 수는 없습니다 ./proc/mounts/proc

편집하다

#!/bin/bash
df --output=pcent,target | grep -f <(awk '$4 ~ /^rw.*/ { print $2"$" }' /proc/mounts)

답변3

내가 아는 한 df는 마운트 명령이 있기 때문에 마운트 옵션에 대해 알지 못합니다. 이를 사용하여 장치 목록을 가져와서 df에 인수로 전달할 수 있습니다.

df --output=pcent,target $(mount -t ext4 | grep rw | cut -d" " -f1)

이는 파일 시스템 ext4를 기준으로 필터링한 다음 마운트 옵션을 사용하여 파일 시스템을 grep하고 rwdf에서 사용할 출력을 정리한 다음 장치 목록을 df에 전달합니다. mount의 명령을 사용하여 $(...)목적에 맞게 필터링을 조정할 수 있습니다 .

관련 정보