Verifique se uma unidade foi zerada com xxd e uniq?

2

Estou procurando uma maneira de verificar se todo o conteúdo binário de um dispositivo USB é puramente 0s.

Estou tentando este comando: sudo xxd /dev/sdb | uniq , mas não tem saída e é executado para sempre.

Eu considerei o comando Classificar, mas, no meu entender, é necessário que um arquivo seja lido em vez de apenas a saída do terminal padrão.

update: Eu percebi que eu poderia checar com sudo xxd -a /dev/sdb , mas a minha pergunta ainda permanece: existe uma maneira de classificar a saída do terminal de maneira única sem salvá-lo em um arquivo primeiro?

    
por Tom Bennett 18.04.2014 / 14:03

2 respostas

1

O simples uso de od ou hexdump deve ser bom, pois esses programas evitam a emissão de linhas repetidas (ou usam xxd -a como acima). Por exemplo:

$ truncate -s 1M test
$ hexdump test
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0100000
$ od test
0000000 000000 000000 000000 000000 000000 000000 000000 000000
*
4000000

Se a unidade estiver zerada, a saída não será muito diferente, exceto que o endereço final será muito maior. Se você ver qualquer outro dado, você pode simplesmente pressionar Crtl - C .

Para evitar a continuação após a descoberta de dados diferentes de zero e o preenchimento do terminal, você poderia fazer algo assim (em bash ):

count=0
stdbuf -oL od /dev/sdb |
  while read line; do
    echo "$line"
    (( ++count > 3 )) && break
  done

Isto irá imprimir no máximo 4 linhas de saída, a partir das quais você pode dizer se a unidade está zerada ou não.

Top fez isso grosseiramente com a classificação, você poderia ter feito sudo xxd /dev/sdb | sort -u . Adicionar a opção -u para classificar é equivalente a fazer sort | uniq .

    
por 18.04.2014 / 14:18
1

xxd não me parece o martelo certo para esse parafuso. Você pode executar tr para remover bytes nulos e ver se resta alguma coisa:

[ -n "$(</dev/sdb tr -dc '
[ "$(od -tx1 -An -w1 | head -n 2 | tr -d ' \n')" = "00*" ]
' | head -c 1)" ]

Você também pode usar od , que recolhe linhas preenchidas com nulo:

[ -n "$(</dev/sdb tr -dc '
[ "$(od -tx1 -An -w1 | head -n 2 | tr -d ' \n')" = "00*" ]
' | head -c 1)" ]
    
por 19.04.2014 / 03:20