Detectar se uma unidade (NTFS) está montada ou não. Se não, monte-o

5

Eu quero sincronizar uma unidade USB com uma pasta localizada em uma partição NTFS que não está montada no momento da inicialização. Eu encontrei um comando para fazer isso: rsync -axu /media/USB/folder /home/user/folder . Mas eu tenho que ter a unidade NTFS já montada.

Como posso detectar se uma unidade NTFS está montada ou não em um script e se não é montá-lo? Eu uso o Linux (Ubuntu).

Este é o pequeno script modificado (o original é aqui ) com a sua ajuda!

#!/bin/bash
## CONFIG SECTION
MOUNT_DRIVE=/dev/disk/by-id/scsi-SATA_Hitachi_HTS5416_SB3404GRGJRKBS-part5
MOUNT_POINT=/media/Windows/
# Local folder to sync with
SYNC_LOC=/media/Windows/vasia/Disertatie/
# Device folder to sync with
SYNC_DEV=Disertatie
#
## SCRIPT SECTION
#verify if the drives are mounted
if mount | grep -q "/media/Windows/"; then
#device is mounted
echo "Windows NTFS Drive is mounted!"
else
#device is not mounted,let's mount it
mount $MOUNT_DRIVE $MOUNT_POINT
fi
# Wait for thumbdrive to settle
sleep 10
# Synchronize thumbdrive with local
rsync -axu /media/DISK_IMG/${SYNC_DEV}/ ${SYNC_LOC}/
# Synchronize local with thumbdrive
#rsync -axu ${SYNC_LOC}/ /media/disk/${SYNC_DEV}/
# Inform user that synchronization is complete.
zenity --title "Thumbdrive Sync" \
       --info --text "File synchronization        complete."

    
por vasiauvi 21.05.2011 / 14:35

4 respostas

2

Existe uma outra solução sobre como você pode fazer isso. Você pode criar um arquivo no sistema de arquivos NTFS e, em seguida, verificar se esse arquivo existe. No seu caso, as outras soluções são provavelmente melhores. Mas se você precisar verificar se um sistema de arquivos NFS ou SMB está montado, às vezes é melhor verificar um arquivo porque você quer ter certeza de que ele não está apenas montado, mas também acessível. Então você faria assim:

if [ ! -f /your/mounted/fs/mount-check.txt ];
then
    echo "Here you have to put your mount command."
fi
    
por 21.05.2011 / 20:29
3

Existem várias maneiras de verificar se um determinado diretório é um ponto de montagem, por exemplo (no Linux), verificando a lista de pontos de montagem

if ! </proc/mounts awk '$2 == "/mount/point" {exit(0)} END {exit(1)}'; then
  mount /mount/point
fi

ou (portably) verificando se o ponto de montagem do sistema de arquivos do caminho é ele mesmo

if ! df -P /mount/point | grep -q '/mount/point$'; then
  mount /mount/point
fi

Se o possível ponto de montagem puder ser um link simbólico, veja se esse diretório está em um sistema de arquivos diferente de seu pai:

if df -P /mount/point/. /mount/point/.. | {
      read -r _; read -r dev1 _; read -r dev2 _
      [ "$dev1" = "$dev2" ]
    }; then
  mount /mount/point
fi

Uma abordagem alternativa é usar um automounter para montar automaticamente o diretório quando for acessado. Por exemplo, no Linux, você pode usar o autofs :

  • Remova o comentário da linha em /etc/auto.master que lê /misc /etc/auto.misc
  • Em /etc/auto.misc , adicione windows_stuff -fstype=ntfs :/dev/sdz99 (substitua sdz99 pela partição que você deseja montar)
  • Crie um link simbólico /home/user/folder/misc/windows_stuff
  • Execute /etc/init.d/autofs reload (ou o que for que diga autofs para recarregar sua configuração em sua distribuição).
por 21.05.2011 / 15:12
3

Use o comando mountpoint :

mountpoint -q $MOUNT_POINT || mount $DEVICE_WITH_NTFS_FILESYSTEM $MOUNT_POINT

A última parte (depois de || ) é executada apenas se a primeira parte for falsa (ou seja, o ponto de montagem não existir).

    
por 08.03.2012 / 07:22
2

Você pode verificar o que é montado emitindo um comando mount simples. Também informa o "dispositivo de origem" de cada ponto de montagem.

Se você usar os dispositivos em /dev/disk/by-id para montar seu volume NTFS, você terá um nome fixo em que você pode verificar em scripts, ao contrário dos nomes /dev/sd* que podem mudar entre reinicializações e eventos de conexão da unidade .

Então, algo assim pode verificar a presença de uma unidade montada em bash :

if mount | grep -q "/dev/disk/by-id/$DEVICE_WITH_NTFS_FILESYSTEM"; then
 # device is mounted
 ;; # do nothing
else
 # device is not mounted, let's mount it
 mount $DEVICE_WITH_NTFS_FILESYSTEM $MOUNT_POINT
 fi
    
por 21.05.2011 / 14:56