O script Bash falha ao detectar o disco

1

Eu tenho um script que deve reformatar e montar /dev/disk/by-label/backup_disk em /mnt/backup_disk . Assim:

/sbin/mkfs.ext4 -q -L backup_disk /dev/disk/by-label/backup_disk
mount -t ext4 /dev/disk/by-label/backup_disk /mnt/backup_disk -o noatime,data=writeback

A saída do Bash é:

mount: special device /dev/disk/by-label/backup_disk does not exist

Mas logo após a execução, se eu digitar no terminal:

mount /dev/disk/by-label/backup_disk /mnt/backup_disk/

A montagem está bem sem nenhum tipo de erro.

O que está causando o erro ao usar o script?

EDIT: Resolvido adicionando alguns segundos de sono, como sugerido nos comentários.

    
por realpclaudio 04.05.2016 / 11:35

2 respostas

0

Você provavelmente deve fazer algum tipo de loop de atraso (com um máximo de iterações) que durma por 1 segundo e, em seguida, verifica se o diretório /dev/disk/by-label/backup_disk agora existe. O seguinte deve funcionar, mas você pode precisar depurá-lo.

#!/bin/bash
set -o errexit
set -o unset

$DIRECTORY=/dev/disk/by-label/backup_disk
# do your reformat here
until [ -d "$DIRECTORY" ]; do 
  sleep 1 
done
# now continue with the mount and other operations...

Eu gosto de escrever scripts bascos defensivos . Isso é o que as duas instruções "set -o" são para.

Você também pode adicionar um contador para acompanhar quantas vezes você passa pelo loop e, em seguida, interrompe após 30/60/90 segundos.

    
por 04.05.2016 / 14:38
0

Você deve dar ao SO alguns segundos para realmente detectar que a partição recém-formatada está disponível. Comece com um

sleep 10

antes da linha com mount .. (e talvez reduza isso se você não quiser esperar tanto tempo enquanto executa o script).

    
por 22.08.2016 / 13:11