Suggerimenti necessari per udev, udisks, autofs, configurazione delle notifiche per una soluzione di montaggio automatico completa su Linux


9

Continuando su Automounting è stato inserito un dispositivo collegato a Linux , che ha lasciato le cose un po 'di base. Con Gentoo, sto montando automaticamente una combinazione di dispositivi locali e di rete sul mio laptop con autofs-5.0.4-r5. Fare autofs da solo mi dà un paio di lamentele:

  • Devo predefinire i nomi dei mountpoint per dispositivo, ma occasionalmente dopo aver riavviato il mio lettore di schede MMC cambia posizione con la mia chiavetta USB avviabile
  • Vorrei che comparissero i mountpoint automatici basati su LABEL, le autofs da sole AFAIK non possono farlo

Questo è ciò che udev e udisks sono sicuramente in grado di fare. Ma:

  • Non voglio che il filesystem venga montato automaticamente quando si collega il dispositivo, mi dia solo il punto di montaggio fantasma chiamato LABEL

Il montaggio effettivo del filesystem dovrebbe avvenire solo al primo accesso al mountpoint, proprio come funziona il ghosting di autofs. Ciò dovrebbe ridurre il rischio di sporcare i filesystem scollegando accidentalmente i dispositivi, garantendo comunque un'ottima accessibilità.

Inoltre, potrei usare sapendo sempre cosa sta succedendo, nel mio DE.

  • Esiste un'app della barra delle applicazioni in grado di indicare lo stato di tutti gli automount, ovvero verde = niente è montato, rosso = qualcosa è montato?
  • Esiste un modo indipendente dalla distribuzione per fornire notifiche sull'operazione di mount (disinstallazione) del filesystem, ad esempio mediante notifica-invio? Che dire di Gentoo specifico, che funziona anche per me. Lo scripting udev non aiuta con NFS e CIFS, giusto?

Questa combinazione dovrebbe essere la configurazione di automount definitiva o mi sto perdendo qualcosa?


Sono stato con Gnome negli ultimi anni, quindi il mio non è più così rilevante.
lkraav,

Risposte:


4

Questo è tutto fattibile con udev. Dai un'occhiata a UAM , che sembra risolvere la maggior parte dei problemi che hai menzionato, ma in realtà si monta automaticamente. Se lo desideri, puoi utilizzare le grandi capacità che offre, ma modificarlo in modo che i supporti non vengano montati automaticamente. Puoi anche contattare l'autore e suggerire il tuo approccio di montaggio non automatico come una nuova funzionalità. Nel frattempo, dai un'occhiata alle sue capacità:

  • Funziona sopra udev, rendendolo indipendente dalla DE e basato sugli eventi. (Suggerisce anche una soluzione alternativa per i supporti ottici che potrebbero non essere individuati daudev .)
  • Consente di definire MOUNTPOINT_TEMPLATESche può risolvere il problema di denominazione che hai citato in diversi modi personalizzati (vedi uam.conf ), potenzialmente anche usandoLABEL (come desiderato)
  • I meccanismi di notifica sono supportati, dovrai solo adattarli alle tue esigenze specifiche di DE.
  • Sembra avere un design chiaro, che consente di individuare facilmente dove, quando e come ogni azione viene attivata.

Oggi sono stato indirizzato a tinymount su #awesome, chi è interessato a questo argomento dovrebbe probabilmente dare un'occhiata
lkraav

Nel frattempo, ho continuato a utilizzare bashmount.
lkraav,

2

Ecco come l'ho fatto di recente e sono abbastanza contento di questo approccio ora. Questo è per Ubuntu 12.04 + gentoo, ma suppongo che qualsiasi distro, che consente di installare udev e autofs dovrebbe funzionare.

Prerequisiti: devi aver installato udev + autofs.

Passo 1)

Crea il seguente file "/etc/udev/rules.d/90-usbsd-auto.rules" (ovviamente puoi usare qualsiasi nome purché termini con ".rules"). :

# Add symlink /dev/usbdisks/<label> to /dev/sd[a-z][1-9] 
# if partition has a label
# Add symlink /media/usb/<label> to /media/autousb/<label>
# for automounter support
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660", \
    RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}", \
    RUN+="/bin/ln -sf /media/autousb/$env{ID_FS_LABEL_ENC} /media/usb/$env{ID_FS_LABEL_ENC}"

# Fallback: If partition has a NO label, use kernel name (sd[a-z][1-9])
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    SYMLINK+="usbdisks/%k", MODE:="0660", \
    RUN+="/bin/rm /media/usb/%k", \
    RUN+="/bin/ln -sf /media/autousb/%k /media/usb/%k"

# Some FileSystems emit a "change" event when they are unmounted.
# UDEV seems to delete the device symlink in this case :-(
# So we need to re-create it here
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660"

# Fallback: If partition has NO label, use kernel name
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    SYMLINK+="usbdisks/%k", MODE:="0660"


# When device is removed, also remove /media/usb/<label>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}"

# Fallback: If partition has no label, remove /media/usb/%k
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    RUN+="/bin/rm /media/usb/%k"

Cosa fa: Crea due collegamenti simbolici, uno per la partizione del dispositivo di archiviazione USB in "/ dev / usbdisks / <...>". Utilizzerà l'etichetta della partizione di archiviazione USB o il nome del kernel, se non è presente un'etichetta. Il secondo link simbolico si collegherà da "/ media / usb / <...>" a "/ media / autousb / <...>" per il supporto dell'automounter (vedere il passaggio 2).

Nota: originariamente non avevo usato le regole con le variabili ID_FS_LABEL_ENC, poiché secondo me è pericoloso. Cosa succede se si collegano due chiavette USB che utilizzano la stessa etichetta?

Ma il poster voleva specificamente utilizzare l'etichetta del disco USB, quindi ho modificato le regole di conseguenza.

Per assicurarti che udev legga queste regole usa

sudo udevadm control --reload-rules

Con questo file di regole udev tutto è configurato per montare automaticamente la partizione del dispositivo di archiviazione USB. Si noti che in questo momento, il dispositivo NON verrà montato automaticamente (intenzionalmente). Verrà montato automaticamente dopo averlo utilizzato

Passo 2)

Imposta autofs su automount / media / autousb / <...>: ho aggiunto la seguente riga al mio file "/etc/auto.master" (per Ubuntu 12.04):

/media/autousb /etc/auto.usb --timeout=60

Ciò significa che AutoFS smonterà il dispositivo dopo 60 secondi di inattività. Potresti voler usare meno o più, a seconda dei tuoi gusti.

Per Gentoo devi modificare "/etc/autofs/auto.master" in modo che abbia senso usarlo

/media/autousb /etc/autofs/auto.usb --timeout=60

Ora ho creato "auto.usb" con il seguente contenuto:

#!/bin/bash

key=${1}
fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${key})
if [ "${fstype}" = "vfat" ] ; then
  echo "-fstype=vfat,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ntfs" ] ; then
  echo "-fstype=fuse.ntfs-3g,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ext4" ] ; then
  echo "-fstype=ext4,sync,nocheck :/dev/usbdisks/${key}"
  exit 0
fi

exit 1

Questo auto.usb deve essere eseguibile, in modo che autofs lo usi come uno script (bash). Quindi per esempio

sudo chmod 0755 /etc/auto.usb

Cosa fa: Questo script dirà ad AutoFS (/ usr / sbin / automount) come montare la partizione del dispositivo di archiviazione USB.

Lo script utilizzerà prima "/ sbin / blkid" per scoprire quale tipo di file system è sulla partizione.

Lo script fornirà quindi le giuste opzioni di montaggio in base alla partizione del dispositivo.

Nota: ho incluso il codice di esempio per i file system "vfat" (probabilmente più comune per le chiavette USB), "ntfs" e "xfs". Naturalmente è abbastanza facile estenderlo per supportare più file system.

Passaggio 3) Opzionale ... Per "espellere" == smonta le tue chiavette USB (o partizioni sulla chiavetta USB), crea uno script sotto / sbin / usbeject:

#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount

Con questo script potresti usare "sudo usbeject" per smontare tutte le partizioni di dispositivi USB montate (dicendo a automount di smontarle).

Ovviamente puoi semplicemente assicurarti che la partizione non sia usata da nessuna parte; l'automounter smonterà quindi la partizione dopo il timeout di 60 secondi ...

Il vero trucco qui è usare i collegamenti simbolici da "/ media / usb" a "/ media / autousb":

  • I symlink "/ media / usb" saranno creati da udev, offrendo all'utente una semplice panoramica delle partizioni del dispositivo di archiviazione USB
  • AutoFS eseguirà il montaggio automatico della partizione su richiesta se la si utilizza tramite / media / usb
  • Con il file "auto.usb" con script potresti supportare qualsiasi tipo di file system e inoltre puoi supportare qualsiasi tipo di schema di denominazione.
  • Questo approccio supporta chiavette USB con più partizioni, anche se queste partizioni utilizzano tipi di file system diversi.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.