Ignora a alteração do tamanho de “df -h” enquanto usa diff

4

Estou tentando comparar os sistemas de arquivos entre muitos outros serviços básicos, antes e depois da reinicialização do servidor, para verificar se alguma incompatibilidade está presente.

Atualmente, estou salvando os dados em um arquivo e estou comparando usando o comando diff

Como existem muitos servidores, isso não está sendo efetivo, já que isso também está verificando a diferença no tamanho do FS; como pode ser visto abaixo.

diff -rs ./prechecks/file ./postchecks/file
10c10
< udev                                                                  7.8G  164K  7.8G   1% /dev
---
> udev                                                                  7.8G  156K  7.8G   1% /dev
13c13
< /dev/mapper/vg01-lvopt_IBM                                            9.9G  8.2G  1.2G  88% /opt/IBM
---
> /dev/mapper/vg01-lvopt_IBM                                            9.9G  8.3G  1.2G  88% /opt/IBM
18,19c18,19

Eu tentei usar a opção ignore, mas não consegui passar pela lógica.

Eu quero verificar se podemos superar isso. Isso está tomando conta, já que tenho que lidar com muitas centenas de servidores a cada vez.

Senão, existe uma maneira de ignorar as guias - Tamanho; Usava; Aproveitar; Usar%; na saída de df -h como visto abaixo, o que eliminará a verificação em primeiro lugar.

Filesystem                                      Size  Used Avail Use% Mounted on
/dev/mapper/vg00-lvroot                          20G   16G  4.5G  78% /

Ajude-me a resolver o desafio. Obrigado!!

EDIT1: df --output=source,fstype,target é minha primeira escolha, mas não consigo em outros servidores     df: opção não reconhecida '--output = source, fstype, target'     Tente 'df --help' para mais informações. Qualquer outra solução alternativa.?

    
por Hemanth 06.05.2017 / 23:25

4 respostas

2

Is there a way to ignore the tabs - Size; Used; Avail; Use%;

Os campos de saída do comando df são ajustáveis via --output option:

df -h --output='source'

O acima irá mostrar apenas a lista de nomes sistema de arquivos

Filesystem
/dev/mapper/vg00-lvroot

--output[=FIELD_LIST]
use the output format defined by FIELD_LIST, or print all fields if FIELD_LIST is omitted.

Se algumas opções não forem suportadas, tente a seguinte solução alternativa com awk :

df -h | awk '{print $1}'
    
por 06.05.2017 / 23:41
3

Você pode querer comparar a saída do comando mount em vez do comando df se quiser comparar apenas os pontos de montagem.

Isso também compararia as opções de montagem e os tipos de sistema de arquivos, o que pode ser bom também.

$ mount
server:/export/client/root on / type nfs (v3, udp, timeo=100, retrans=101)
server:/export/shared/usr on /usr type nfs (nodev, wxallowed, v3, tcp, soft, intr, timeo=100)
amd:20004 on /home type nfs (v2, udp, intr, timeo=100, retrans=101)
server:/export/shared/home on /tmp_mnt/server/export/shared/home type nfs (nodev, nosuid, v2, udp, soft, intr, timeo=100)
    
por 06.05.2017 / 23:33
2

O GNU diff tem dois tipos de maneiras de ignorar as mudanças. Existem opções para ignorar certos tipos de diferenças, como espaços em branco ou maiúsculas e minúsculas, mas estas estão limitadas a algumas predefinições. E há uma opção para ignorar linhas que correspondam a determinados padrões, mas isso só permite ignorar linhas, não ignorar certas alterações nas linhas. Ignorar alterações de espaço em branco ( diff -w ) pode ajudá-lo, caso as colunas sejam formatadas em larguras diferentes, mas, para ignorar alguns números, você precisa de algo mais.

A maneira usual de ignorar certas diferenças é pré-processar os dois arquivos para remover ou canonizar as partes que você deseja ignorar. Por exemplo, se você deseja ignorar as colunas used / available / percentage, supondo que seus nomes de volume e pontos de montagem não contenham espaço em branco, você pode usar

awk '{print $1, $2, $6}'

como o pré-processador. Você também pode querer classificar os arquivos, a menos que você já esteja fazendo isso, porque a diferença na ordem de enumeração de df não é significativa. Em um shell com substituição de processo (ksh, bash, zsh):

diff <(<./prechecks/file awk '{print $1, $2, $6}' | sort) \
     <(<./postchecks/file awk '{print $1, $2, $6}' | sort)

Se você estava fazendo isso com muitos arquivos, em vez de usar diff -rs , crie seu próprio loop para chamar o diff em arquivos individualmente.

    
por 06.05.2017 / 23:39
0

Você também pode considerar a saída do comando lsblk . Este é um utilitário somente para Linux, mas lista todos os dispositivos de bloco, mesmo que não estejam montados. Veja a man page para a opção -n , que desativa os cabeçalhos, e a opção -o , que permite especificar quais colunas você deseja.

    
por 07.05.2017 / 01:24