Entendendo a montagem automatizada do USB Thumbdrive e fazendo isso sozinho

0

Eu posso dividir isso em dois subcomponentes:

  1. Por que / como esse procedimento de montagem automatizado cria (e destrói) seu próprio ponto de montagem?

  2. Por que preciso criar manualmente meu próprio ponto de montagem ao fazer isso sozinho (ou como posso avançar na maneira automatizada de fazê-lo)?

Não estou claro sobre o processo exato que está ocorrendo quando insiro uma chave USB no sistema. Eu vejo que há muita coisa acontecendo ...

por exemplo, inserindo um stick USB de 1 GB antigo:

[76187.152010] usb 3-6: new high-speed USB device number 18 using ehci-pci
[76187.285314] usb 3-6: New USB device found, idVendor=1221, idProduct=3234
[76187.285317] usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[76187.285319] usb 3-6: Product: Flash Disk
[76187.285321] usb 3-6: Manufacturer: USB2.0
[76187.285323] usb 3-6: SerialNumber: 100000000000099E
[76187.285627] usb-storage 3-6:1.0: USB Mass Storage device detected
[76187.285704] scsi host27: usb-storage 3-6:1.0
[76188.285460] scsi 27:0:0:0: Direct-Access     USB2.0   Flash Disk       2.60 PQ: 0 ANSI: 2
[76188.285731] sd 27:0:0:0: Attached scsi generic sg11 type 0
[76188.286201] sd 27:0:0:0: [sdk] 2048000 512-byte logical blocks: (1.04 GB/1000 MiB)
[76188.291250] sd 27:0:0:0: [sdk] Write Protect is off
[76188.291255] sd 27:0:0:0: [sdk] Mode Sense: 0b 00 00 08
[76188.292333] sd 27:0:0:0: [sdk] No Caching mode page found
[76188.292337] sd 27:0:0:0: [sdk] Assuming drive cache: write through
[76188.296951]  sdk: sdk1
[76188.300321] sd 27:0:0:0: [sdk] Attached SCSI removable disk

e que ele é montado assim:

/dev/sdk1 on /media/madivad/5859-77E7 type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)

É algo no processo de montagem automática que cria (e depois destrói) um diretório para o processo de montagem?

Sou capaz de identificar algo na linha de comando mount para criar isso diretamente como parte do processo e depois removê-lo em umount ?

Isso é algo que você normalmente automatizaria em um script para primeiro criar e mount something e, posteriormente, umount e remover o diretório?

Suponho que uma parte do processo que me incomoda é que acabo deixando diretórios que me esqueço de remover, especialmente quando estou testando coisas.

Eu gostaria disso (por exemplo) quando eu montar algo:

sudo mount /dev/sdk1 /mnt/usbkey1g

se o ponto de montagem já estiver criado e / ou em uso, recebo um aviso, mas, mais importante, se NÃO estiver lá, crie-o imediatamente. Da mesma forma, removê-lo quando eu umount a chave.

Eu tenho o Ubuntu 14.04 LTS instalado nos sabores Desktop e Server.

Eu fiz a pergunta aqui, em oposição a AU principalmente porque eu estou pedindo isso independente do sistema operacional real e com referência ao Linux em geral, mas como se aplica a mim. Sinta-se à vontade para migrar para a AU, caso seja mais apropriado.

Felicidades.

    
por Madivad 23.01.2016 / 02:33

1 resposta

0

Em suma, o que acontece no Ubuntu é que udisksctl é chamado pelas regras do udev, que então monta o devide na mídia como usuário na pasta /media/$USER/diskname .

Para todos os efeitos práticos, é suficiente que você faça manualmente     udisksctl mount -b / dev / sdb1

Lembre-se de substituir seu dispositivo pelo nome real

Como na sua pergunta você também pediu uma solução de distribuição cruzada, sua melhor solução é o comando mount , no entanto, abaixo está um script onde eu basicamente emulei o comando udisksctl . Ele criará o diretório onde ele é montado e deve funcionar em qualquer distribuição, desde que haja blkid , mount e awk disponíveis.

Salve o código-fonte em mountStuff.sh , torne-o executável com chmod +x /path/to/mountStuff.sh . Para evitar a execução constante do script a partir do caminho completo, é aconselhável armazená-lo em um diretório que faça parte de sua variável $PATH

Executar como assim:

skolodya@ubuntu:$ sudo ./mountStuff.sh /dev/sdb5                               
[sudo] password for xieerqi: 
Mounted /dev/sdb5 at /media/xieerqi/0ca7543a-5463-4a07-8bbe-233a7b0bd625
#!/usr/bin/env bash
# Author: Serg Kolo
# Date: January 23, 2016
# Script Description: Helper script that
# emulates behavior of udisksctl; reads blkid
# and creates a directory where to mount, based
# on disk label or uuid
#
#
# Copyright Sergiy Kolodyazhnyy 2016
#
# Permission to use, copy, modify, and distribute this software is hereby granted 
# without fee, provided that  the copyright notice above and this permission statement
# appear in all copies.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL 
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
# DEALINGS IN THE SOFTWARE.
if [ "$(id -u)" -ne 0  ];then
   printf ">>> ERR:Must be root"
   exit 1 
fi

if [ -z "$1"  ]; then
     printf ">>> ERR: Must have a parameter, e.g. /dev/sdb1"
     exit 1
fi

if [ "${1%/*}" != "/dev"   ];then
   printf ">>> ERR: Wrong parameter; Must be a device file"
   exit 1
fi

# split output of blkid into array;
# Element 0 is device, element 1 is LABEL or UUID, element 2 is filesystem 
  ARRAY=($( blkid | awk -v DEV="$1"  '$0~DEV{ gsub(/\"/,"");gsub(/\=/," "); print $1,$3,$NF  }'  ))
# the username who ran script as sudo given in $SUDO_USER
if [ ! -d "/media/$SUDO_USER/${ARRAY[1]}" ];
then
  mkdir "/media/$SUDO_USER/${ARRAY[1]}"
fi

mount -t "${ARRAY[2]}" -o rw,user "$1" "/media/$SUDO_USER/${ARRAY[1]}"

if [ "$?" -eq  "0"  ]; then
   printf "Mounted %s at %s" "$1" "/media/$SUDO_USER/${ARRAY[1]}"
fi

skolodya@ubuntu:$ sudo ./mountStuff.sh /dev/sdb5                               
[sudo] password for xieerqi: 
Mounted /dev/sdb5 at /media/xieerqi/0ca7543a-5463-4a07-8bbe-233a7b0bd625
    
por 23.01.2016 / 03:04