Como montar automaticamente a partir da linha de comando?

15

Como posso acionar uma montagem automática a partir da linha de comando? Por "automount", não quero dizer montagem totalmente automática, mas obtendo uma lista de dispositivos disponíveis e, em seguida, selecionando um e tendo-o como /media/{user}/{diskid} . Esta funcionalidade é fornecida pelo Nautilus ou Thunar, por exemplo, mas não consigo encontrar uma ferramenta de linha de comando para acionar esse tipo de montagem semi-automática.

pmount é o mais próximo que encontrei, mas parece funcionar por mecanismos completamente diferentes e faz com que os dispositivos apareçam como /media/sdf ou algo parecido com isso.

    
por Grumbel 06.09.2013 / 15:44

4 respostas

9

gvfs-mount

A listagem de dispositivos disponíveis pode ser feita com:

gvfs-mount --list

A montagem deles pode ser feita com:

gvfs-mount -d /dev/sdf

A desmontagem é possível via:

gvfs-mount --unmount /media/user/01234567890

Um problema remanescente é que não tenho ideia de como usar a saída gvfs-mount --list em um comando de montagem, pois --list não mostrará nomes de dispositivo de bloco e tentar usar os nomes de dispositivo que ele imprime em uma montagem resultará em:

Error mounting location: volume doesn't implement mount

udisksctl

Listando dispositivos disponíveis:

udisksctl status

A montagem é feita via:

udisksctl mount -b /dev/sdf

ou

udisksctl mount -p block_devices/sdf

A desmontagem é feita por:

udisksctl unmount -b /dev/sdf

ou

udisksctl unmount -p block_devices/sdf

O object-path pode ser encontrado ao fazer:

udisksctl dump

O objeto do tipo org.freedesktop.UDisks2.Block parece ser válido como object-patch , o prefixo /org/freedesktop/UDisks2/ precisa ser cortado do caminho para que o udisksctl os aceite.

Conclusão

Embora gvfs-mount e udisksctl funcionem para as tarefas, sua interface é impraticável, pois não fornecem o status legível dos discos disponíveis, apenas um despejo de informações excessivamente detalhado.

UPDATE

O gvfs agora está listado como obsoleto (2018) e você é aconselhado a usar o 'gio' que é o Gnome In Out e parte do Glib. Veja Wikipedia: link

Por exemplo, para montar automaticamente uma segunda partição de unidade; crie um script bash com permissão executável para ser executado na inicialização com o seguinte comando:

gio mount -d /dev/sda2

Se você for o proprietário da partição (veja chown), não precisará de sudo.

    
por Grumbel 06.09.2013 / 16:48
22

Você pode usar:

udisks --mount device_name

ou

udisksctl mount -b device_name

em que device_name é o nome de um dispositivo de armazenamento e deve ser parecido com /dev/sdb1 .

Usando o comando sudo fdisk -l , você pode descobrir todos os dispositivos de armazenamento conectados ao seu sistema.

    
por Radu Rădeanu 06.09.2013 / 15:52
5

Uma solução simples que funciona conforme necessário (é montada em / media / {user} / {diskid}), exceto pelo fato de não poder listar dispositivos, mas precisa receber o rótulo de volume exato e sensível a maiúsculas como argumento $ 1

Para montar :

DEVICE=$(findfs LABEL=) && udisksctl mount -b $DEVICE

Para desmontar :

DEVICE=$(findfs LABEL=) && udisksctl unmount -b $DEVICE
    
por zvuk 21.06.2014 / 11:09
0

Eu escrevi este script Bash para contornar este problema, mas esteja ciente de que sou um novato em script. Todas as sugestões são bem vindas! Uso e descrição seguem abaixo do script.

#!/bin/bash
# umanage.sh
# 2014-05-05

BASEPATH="/media/$(whoami)/"
RESULTS=$(udisksctl dump | grep IdLabel | grep -c -i "")

case "$RESULTS" in

0 )     echo "Nothing found."
        ;;

1 )     DEVICELABEL=$(udisksctl dump | grep IdLabel | grep -i "" | cut -d ":" -f 2 | sed 's/^[ \t]*//')
        DEVICE=$(udisksctl dump | grep -i "IdLabel: \+$DEVICELABEL" -B 12 | grep " Device:" | cut -d ":" -f 2 | sed 's/^[ \t]*//')
        DEVICEPATH="$BASEPATH""$DEVICELABEL"

        if [[ -z $(mount | grep "$DEVICE") ]]
        then
                echo "Found unmounted $DEVICE partition."
                echo "Do you want to mount it in $DEVICEPATH?"
                select yn in "Mount" "Ignore"
                do
                        case $yn in
                        Mount )         udisksctl mount -b "$DEVICE"
                                        break
                                        ;;
                        Ignore )        exit
                                        ;;
                        esac
                done
        else
                echo "Found $DEVICE partition, currently mounted in $DEVICEPATH."
                echo "Do you want to unmount it?"
                select yn in "Unmount" "Ignore"
                do
                        case $yn in
                        Unmount )       udisksctl unmount -b "$DEVICE"
                                        break
                                        ;;
                        Ignore )        exit
                                        ;;
                        esac
                done
        fi
        ;;

* )     if [ $# -eq 0 ]
        then
                echo "No argument supplied"
        else
                echo "$RESULTS possible results. You may be looking for:"
                echo
                udisksctl dump | grep IdLabel | grep -i "" | cut -d ":" -f 2 | sed 's/^[ \t]*//' | sed '/^$/d'
                echo
                echo "Please refine your search."
        fi
        ;;

esac

Uso:

  • salve o script como umanage.sh
  • torne-o executável: chmod + x umanage.sh
  • execute: ./umanage.sh YourDeviceLabel

O script aceita como argumento o rótulo da partição que você deseja montar e procura no dump udisksctl para as entradas correspondentes.

Se uma partição for encontrada e não estiver montada, o nome e o caminho do dispositivo serão mostrados e você será oferecido para montar a partição. O script também procura rótulos parciais e não se preocupa com maiúsculas ou minúsculas (útil quando você não se lembra do rótulo exato).

./umanage.sh PASSPORT
Found unmounted /dev/sdf1 partition.
Do you want to mount it in /media/pixel/My Passport?
1) Mount
2) Ignore
#? 

Se uma partição for encontrada e já estiver montada, você será convidado a desmontá-la:

./umanage.sh passp
Found /dev/sdf1 partition, currently mounted in /media/open/My Passport.
Do you want to unmount it?
1) Unmount
2) Ignore
#?

Se o seu argumento corresponder a mais do que um resultado, o script mostrará os marcadores de partição correspondentes e solicitará que você refine a pesquisa:

./umanage.sh SS
2 possible results. You may be looking for:

SSD-9GB
My Passport

Please refine your search.
    
por pixel 01.05.2014 / 17:41