Como posso filtrar somente sistemas de arquivos de saída df?

2

Eu uso df para verificar se algum dos meus sistemas de arquivos montados está perto de ficar cheio. Eu tenho um cron job que me envia e-mail se algum deles está ficando acima de 90%.

O problema é que alguns aplicativos (distribuição do Ubuntu) são instalados usando o snap, que cria um sistema de arquivos somente leitura montado especificamente para esse aplicativo. Eles estão sempre 100% cheios conforme relatado por df . Eu acho que é apropriado, uma vez que eles são apenas de leitura e não podem ficar mais cheios. Eu gostaria de excluí-los da saída df .

df tem um sinalizador de linha de comando -x, --exclude-type=TYPE que parece ser útil, mas a página man não documenta valores possíveis para TYPE , por isso não tenho certeza se posso usar isso para excluir a leitura apenas sistemas de arquivos ou não.

Aqui está um exemplo de df output em um dos meus sistemas:

$ 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

Aqui está o meu script que é executado pelo 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

Gostaria de remover todas essas entradas de snap completo e quaisquer outros sistemas de arquivos que possam ser montados somente leitura no futuro.

    
por Stephen Ostermiller 01.11.2018 / 11:56

2 respostas

3

O tipo de sistema de arquivos usado em df refere-se ao formato do sistema de arquivos, como ext4 .

Você pode encontrar os sistemas de arquivos de leitura / gravação filtrando /proc/mounts (ou a saída de mount ) para rw e, em seguida, use-os para filtrar a saída de df .

Você não pode usar todas as entradas rw de /proc/mounts , porque isso também contém entradas como /proc que você não deseja em sua lista.

Editar

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

De acordo com meu conhecimento, o df não sabe sobre as opções de montagem, pois existe o comando mount para isso. Que você poderia usar para obter uma lista de dispositivos e passá-los como um argumento para df. Assim:

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

Isto filtra por sistema de arquivos ext4 e depois procura aqueles com opções de montagem rw , limpa a saída a ser usada para df e então passa a lista de dispositivos para df. Você pode jogar com o comando mount dentro de $(...) para obter sua filtragem correta para seus objetivos.

    
por 01.11.2018 / 12:20