Você pode executar seu script de backup assim no seu cron
fgrep -q /mnt/backup /proc/mounts && backup.sh
Mas é melhor adicionar o teste no seu script para registrar as tentativas com falha
Como parte da reformulação do meu esquema de backup, agora estou adicionando discos rígidos externos rotativos, mantendo um com segurança fora do site o tempo todo enquanto o outro está recebendo dados de backup. Naturalmente, para garantir que meus backups sejam realmente concluídos, os backups serão criados em script e cron.
Meu plano é conectar e montar manualmente o disco rígido e deixá-lo lá até a hora de desmontá-lo (novamente manualmente), retirá-lo, trazer o próximo e (manualmente) montá-lo. Ambas as unidades seriam montadas em, e. / mnt / backup.
Agora, vem a pergunta: não quero que o script de backup seja executado se eu esquecer de conectar ou montar o disco rígido. Portanto, preciso ser capaz de detectar se há um dispositivo montado em / mnt / backup antes que o script possa ser executado. Meu primeiro pensamento é colocar um arquivo chamado, por exemplo, 'NO_DRIVE_MOUNTED' no diretório (desmontado) / mnt / backup e, em seguida, certifique-se de que não exista antes de executar a rotina de backup, mas isso é apenas hackish. (Da mesma forma, o inverso de colocar um arquivo chamado, por exemplo, 'BACKUP_DEVICE_READY' em cada disco rígido externo e verificar se o arquivo faz existe, parece tão agressivo.)
Existe uma maneira melhor de detectar se um dispositivo está ou não montado em um determinado diretório? Eu prefiro evitar a verificação do dispositivo em si, já que minha experiência é que conectar uma unidade no Linux apenas a atribui ao próximo arquivo / dev / sdX, então, enquanto a unidade de backup pode ser / dev / sdf um dia, se eu ter uma unidade diferente conectada ao conectar a unidade de backup na próxima vez que seria / dev / sdg, o que significa que o teste para / dev / sdf falharia! Eu também prefiro evitar a identificação específica do dispositivo (por exemplo, pelo UUID) para que eu possa substituir / atualizar as unidades de maneira mais fácil e transparente.
Isso será no Ubuntu 10.10 (ou possivelmente 11.04 se eu arrastar meus pés por tempo suficiente, já que eu estou no processo de reconstruir todo o servidor de qualquer maneira), e idealmente eu gostaria de um teste simples de uma linha que eu pode prefixar meu comando de backup diretamente no meu crontab (mas também não tenho medo de scripts Bash, se necessário).
Aqui estão duas maneiras de verificar se /mnt/backup
é um ponto de montagem. O método /proc/mounts
é específico para o Linux, o método df
é portável para todos os sistemas unix; Além disso, não há motivos importantes para preferir um ou outro. Ambos podem falhar em casos de canto quando um ponto de montagem contém espaço em branco (apenas… não faça isso!).
case $(df -P /var) in *" /var") echo mounted;; esac
if fgrep -q " /tmp " </proc/mounts; then echo mounted; fi
Observe que você pode atribuir um determinado nome de dispositivo a uma determinada unidade removível, com base em critérios como o número de série do dispositivo, um UUID do sistema de arquivos ou um rótulo do sistema de arquivos (o último pode ser um indicador confiável). Tudo o que é necessário é uma linha na configuração do udev. Mas, embora isso seja uma boa ideia para facilitar a montagem no ponto de montagem apropriado, contar com a presença do dispositivo não é bom: o dispositivo pode estar presente, mas não montado, portanto, se o script depender de um dispositivo montado, verifique a montagem ponto.
Existe outra maneira (melhor ?, mais segura?) de alcançar o que você deseja fazer. Em vez de verificar se sua unidade de backup está montada, por que não deixá-la conectada, mas desmontada quando não é realmente usada.
Isto é provavelmente melhor para o disco (alguns apenas descansam), e
evita o acesso acidental a ele. O cron job pode mount
quando
começa e umount
quando termina. Isso pode ser feito como um
usuário com os comandos mount /mnt/backup
e umount /mnt/backup
,
desde que você tenha descrito o que deseja em uma entrada de /etc/fstab
. A entrada deve incluir a opção users
se a montagem for feita como usuário normal. Agora só tem
para detectar se o disco está realmente conectado. O comando mount
irá dizer-lhe que por falhar com erro 32 para tentar montar um disco desconectado (existem outras causas
para esse erro também).
O último ponto é dizer ao / etc / fstab como fazer o trabalho. Como você percebeu, você não pode confiar no nome do dispositivo, já que ele muda o tempo todo. Mas um dispositivo atual pode ser reconhecido por si mesmo. No caso do disco rígido, as partições têm um nome que pode ser determinado pelas ferramentas apropriadas, como blkid
ou vol_id
.
O comando blkid
funcionará para um usuário normal chamando /sbin/blkid
.
(BTW, isso funciona também para DVDs).
Por exemplo, eu tenho um disco com duas partições, atualmente no dispositivo /dev/sdc
. Eu vou pegar o "UUID" da primeira partição chamando como superusuário:
$ /sbin/blkid /dev/sdc1
/dev/sdc1: UUID="7aeb2d15-9a1b-410a-b5ed-5437e68cb528" SEC_TYPE="ext2" TYPE="ext3"
Em seguida, adiciono a /etc/fstab
da linha
UUID="7aeb2d15-9a1b-410a-b5ed-5437e68cb528" /mnt/backup ext3 users,noauto,rw,relatime,data=ordered
e /etc/fstab
fornecerão as informações corretas para mount /mnt/backup
para montar a partição correta (se disponível) em /mnt/backup
. O mesmo vale para umount
.
Infelizmente, isso funciona apenas se você tiver um único DVD de backup. o
A razão é que o comando mount /mnt/backup
usará o primeiro
entrada em /etc/fstab
que tem /mnt/backup
como um ponto de montagem. Se isso
acontece para não coincidir com o disco que você conectou, ele irá falhar sem
procurando mais entradas que possam fazer o trabalho com um diferente
disco para o mesmo ponto de montagem (eu realmente me pergunto
porque).
Uma solução é associar todos os discos de backup a /mnt/backup
como ponto de montagem
em código%. Um script (mesmo no usuário normal
mode) pode tentar montar cada partição de disco de backup com /etc/fstab
, quando mount -U 'xxxxxxx'
é o UID desse disco (partição)
usado para identificá-lo em xxxxxxx
. Se um dos discos de backup estiver conectado, o script será bem-sucedido.
Observe que isso também evitará a destruição acidental de um disco
confundido com um disco de backup. Se você conectar um disco que não seja conhecido
ao seu script, o script não poderá montá-lo, mesmo se o disco tiver uma entrada em /etc/fstab
.
Outra possibilidade (ainda mais simples) de ser verificada (nunca usei isso) é usar o comando /etc/fstab
que montará todos os discos para os quais a entrada mount -a -O my_option
inclui a opção /etc/fstab
. E, claro, você precisa adicionar essa opção em cada entrada para um disco de backup em 'my_option'
. O risco disso é que, se dois discos de backup estiverem conectados, eles poderão ser montados um em cima do outro em /etc/fstab
. Isso não deve ser um problema, pois apenas o segundo, no topo, será visível. Mas eu não tenho certeza de quão cuidadoso um tem que ser para ter certeza de que ambos
desmontado no final. Algumas experiências provavelmente estão em ordem.
No entanto, parece que /mnt/backup
está disponível apenas para o superusuário, mesmo para o dispositivo que os usuários normais podem montar de acordo com mount -a -O my_option
. Mais uma vez, pergunto-me porquê.
Tags backup mount linux block-device