Monta automaticamente vari file system su chiavetta USB su Jessie Lite


18

Voglio essere in grado di montare automaticamente le chiavette USB fat32 e ntfs formattate al volo, come hot plug senza riavviare il mio Raspberry Pi 2. Ho installato ntfs-3g su jessie-lite .

Inserire l'UUID fstabnon è un'opzione perché dovrei trovare l'UUID di ogni dispositivo. Voglio essere in grado di collegare diversi dispositivi USB con diversi formati di file e montarli automaticamente. È possibile?

Inoltre una volta ho quasi capito che funziona con il usbmountprogramma. Potrei accedere al mio disco per un secondo prima di ottenere l'errore transport endpoint is not connected. Ho reinstallato il programma, ma poi non sono nemmeno più arrivato a quel punto, nemmeno con l'errore.

Risposte:


15

Dopo molte ricerche ho potuto risolvere il mio problema con usbmount:

Aggiunta di ntfs a usbmount

  1. Installa usbmount con sudo apt-get install usbmount.
  2. Installare il pacchetto di driver NTFS ntfs-3g con sudo apt-get install ntfs-3g.

  3. Configurare usbmount per montare i filesystem specificati aprendo il file usbmount con sudo nano /etc/usbmount/usbmount.conf.

Qui c'è una linea chiamata FILESYSTEMS="". Solo i filesystem specificati in questa linea sono montati tramite usbmount, quindi lo cambiamo in:FILESYSTEMS="vfat ntfs fuseblk ext2 ext3 ext4 hfsplus"

Se vuoi che usbmount monti i filesystem NTFS, assicurati di aggiungere ntfs e fuseblk alla linea. I dispositivi NTFS sono talvolta elencati come fusblk dal pacchetto ntfs-3g, quindi questi due sono gli stessi. Non so davvero perché.

Inoltre, se non si aggiunge fuseblk nella configurazione, i dispositivi NTFS scollegati non verranno automaticamente smontati. Rimarranno montati e manterranno la cartella in cui sono montati fino a quando il dispositivo non verrà smontato manualmente con unmount /dev/sda1 -> dove sda1 potrebbe essere un'altra variabile .

La prossima linea importante è FS_MOUNTOPTIONS="". Qui si specifica quali filesystem devono essere montati e come devono essere montati.

Lo cambiamo in: FS_MOUNTOPTIONS="-fstype=ntfs-3g,nls=utf8,umask=007,gid=46 -fstype=fuseblk,nls=utf8,umask=007,gid=46 -fstype=vfat,gid=1000,uid=1000,umask=007"

Con questo vengono montati i filesystem vfat (fat32) ntfs-3g (NTFS) e fuseblk (di nuovo NTFS). Penso che la maggior parte dei parametri possa rimanere invariata. Ancora una volta qui basta aggiungere ntfs-3g ( aggiungere ntfs-3g non ntfs ) e fuseblk per poter montare tutti i file NTFS. Per più filesystem aggiungi più righe a partire da -fstype=.

Mantieni NTFS montato fino a quando il dispositivo non è scollegato

Ecco una soluzione al problema, quando l'unità NTFS montata è accessibile solo per pochi secondi. Questa correzione viene da Christian Weinberger .

  1. Creare il file usbmount.rules in /etc/udev/rules.d/ con sudo nano /etc/udev/rules.d/usbmount.rules.

Questo è il contenuto:

KERNEL=="sd*", DRIVERS=="sbp2",         ACTION=="add",  PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="sd*", SUBSYSTEMS=="usb",       ACTION=="add",  PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="ub*", SUBSYSTEMS=="usb",       ACTION=="add",  PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="sd*",                          ACTION=="remove",       RUN+="/usr/share/usbmount/usbmount remove"
KERNEL=="ub*",                          ACTION=="remove",       RUN+="/usr/share/usbmount/usbmount remove"
  1. Creare il file usbmount @ .service in / etc / systemd / system / con sudo nano /etc/systemd/system/usbmount@.service.

Questo è il contenuto:

[Unit]
BindTo=%i.device
After=%i.device

[Service]
Type=oneshot
TimeoutStartSec=0
Environment=DEVNAME=%I
ExecStart=/usr/share/usbmount/usbmount add
RemainAfterExit=yes

Ora riavvia e verifica con cat /etc/mtabquale cartella sono montati i dispositivi USB. Di default sono mountet su / media / usbstick0 .

Fonte:

I cristiani riparano

Perché fusblk?


Questa soluzione richiede un altro paio di passaggi, vedi la mia risposta.
AbiusX,

2

La risposta di Untermoser è corretta, ma interromperà alcune funzionalità di USBmount.

Poiché utilizza le unità Systemd per generare processi da montare (per abilitare NTFS), la variabile di ambiente $DEVPATHnon viene più inviata al usbmount addcomando, con conseguente errore nella creazione del collegamento simbolico.

Per risolvere il problema, eseguire quanto segue:

sed -i '/# Determine vendor/,/if/ s/\(.*vendor=\)/if [ -z "$DEVPATH" ]; then DEVPATH="$(udevadm info --query=path --name=\/$DEVNAME)"; fi\n\1/g' /usr/share/usbmount/usbmount

Il comando sopra ricrea $DEVPATHse non è disponibile.

C'è anche un altro bug in usbmount, rispetto a usbmount remove. Passa sopra i mountpoint e quello che è definito nella configurazione di Usmount è smontato. Tuttavia, se viene trovata una corrispondenza ma non è in tale elenco, rimuovere le interruzioni e non fa nulla. Ciò è particolarmente cruciale se si creano più mountpoint per un USB, poiché usbmount vede il primo e non fa nulla.

Per risolvere, è necessaria la seguente modifica:

sed -i '/umount.d ||/,/break/ s/break.*//; /umount.d ||/,/done/ s/:/:\n\t\tbreak 2/' /usr/share/usbmount/usbmount

Questo sposterà l'interruzione all'interno del circuito interno (dove il successo è garantito e interromperà 2 passi).


1

Per coloro che stanno cercando di ottenere lo stesso funzionamento sul nuovo Stretch (Lite) e stanno scoprendo che le risposte di Untermoser e AlbiusX non smontano le unità vfat, dovrai seguire questi passaggi aggiuntivi oltre alle risposte fornite :

Eseguire il comando seguente nel terminale:

sudo mkdir -p /etc/systemd/system/systemd-udevd.service.d/

Ciò creerà le cartelle necessarie necessarie. Quindi, crea un file conf qui, ad esempio:

sudo nano /etc/systemd/system/systemd-udevd.service.d/shared-mount-ns.conf

All'interno di questo file aggiungi le seguenti righe:

[Service] MountFlags=shared

Questo cambierà il comportamento predefinito di systemd-udevd degli spazi dei nomi del filesystem privato per usare quelli condivisi, il che equivale al comportamento di udev in jessie.

(Fonte da /unix/330094/udev-rule-to-mount-disk-does-not-work/330156#330156 )


Quindi questo è stato il problema da sempre: stavo guardando documenti obsoleti. Sto correndo Linux raspberrypi 4.14.79-v7+sul Pi, per riferimento
ctietze
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.