Montaggio automatico dei dischi USB (come funziona)


12

Sfondo: sto cercando di montare un disco USB in sola lettura ma la mia installazione di Ubuntu lo sta montando rw quando collego il disco.

Posso smontare manualmente il disco e rimontarlo manualmente in sola lettura con i comandi umount e mount, ma non è divertente. Qualcuno potrebbe darmi una rapida spiegazione su come vengono eseguiti esattamente i montaggi USB su un tipico sistema linux (udev? Anche lo sfondo storico è bello) e forse come posso modificare questo processo facendomi leggere il disco ro?

Grazie.

Modifica: sto usando gnome se questo aiuta a tutti.
Edit2: Nella mia fretta ho dimenticato di fornire un po 'più di informazioni. Ecco come appare il disco dall'output di 'mount'.

/dev/sdb1 on /media/LaCie type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)

Edit3: Anche questo può essere relavent a modo suo. Nell'output mount ho anche i seguenti:

gvfs-fuse-daemon on /home/fletcher/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=fletcher)  

Pensavo che ciò potesse essere correlato al precedente innesto fuseblk, ma quello che ho scoperto è stato questo.

Gvfs è il file system virtuale di Gnome. È un filesystem virtuale basato sul kernel vfs già esistente. gvfs utilizza la libreria GIO (che è un'API VFS) per accedere a file, dispositivi, posizioni di rete remote, ecc. In questo caso sopra ('gvfs-fuse-daemon') gvfs sta usando FUSE per montare file / posizioni / dispositivi. Questo è essenzialmente ciò che accade quando si monta una connessione di rete remota in Nautilus. Utilizzerà FUSE per montare la posizione (all'interno?) Della directory .gvfs, quindi comunicherà con il livello del file system virtuale di gnome per comunicare con il nuovo mount.

Fondamentalmente questa struttura consente all'utente di montare dinamicamente nuove posizioni e interagire con esse tramite nautilus.

Solo per riferimento: FUSE è un filesystem di userspace, ovvero consente all'utente di eseguire mount anche quando l'utente non è root

Così dove che mi lascia? Bene, il disco LaCie viene montato con il tipo fuseblk. Questo è solo un dispositivo a blocchi montato con fusibile. Quindi alcuni demoni hanno rilevato automaticamente l'unità quando è stata collegata, quindi sono andati avanti e hanno eseguito la miccia per montare il mio dispositivo a blocchi. Quindi, quale demone è questo e come è configurato (suppongo sia qualcosa di gnomo interno) è la domanda più importante. Una domanda secondaria è come il sistema ha rilevato automaticamente un disco USB appena inserito, ma penso che sia un po 'un livello a parte e molto più basso qui (leggi: udev?).

link:


c'è una voce fstab per il file system / media / LaCie e / o il dispositivo / dev / sdb1? / Dev / sdb1 è comunque etichettato (e2label / dev / sdb1)?
Tok

No, non c'è alcuna voce fstab. Credo che sia etichettato come viene montato su / media / LaCie. Avrei sicuramente bisogno di installare ntfslabel per scoprirlo, ma sto per lasciare il lavoro. Viene anche visualizzato sul mio desktop come LaCie.
pensare il

Risposte:


3

Ho provato a farlo sul mio computer ed è funzionante :)

Per prima cosa ottengo un nome per il mio dispositivo:

ls -l /proc/disk/by-id/

Nel mio caso è / proc / disk / by-id / usb-09a6_8001

Ho aggiunto questa riga in / etc / fstab:

/dev/disk/by-id/usb-09a6_8001   /media/macle ext2 ro,users 0 2

E funziona, quando collego la mia chiavetta USB, è montata su ro e di proprietà del mio utente.


Grazie profy :) Ma la principale spinta della mia domanda è quella di alleviare l'estrema frustrazione che provo ogni volta che sono costretto a capire come funzionano i dispositivi automount e usb. Sono qui per decifrare la magia che sta dietro questi sistemi complessi. Inoltre, usare i dispositivi fstab e usb è un po 'complicato perché non è sempre garantito che siano collegati all'avvio!
pensare il

1
Non so come funzioni, ma sono abbastanza sicuro che i nuovi dispositivi vengano rilevati dalle regole udev, dai un'occhiata a /etc/udev/rules.d/ e /lib/udev/rules.d/.
profy

2

Al giorno d'oggi le soluzioni predefinite sono quelle che conosco udiskun demone che fornisce un API Dbus e un'interfaccia a riga di comando . Sono inoltre disponibili più wrapper e automounter udisks.

In genere non ti configuri udiskcome fa solo quello che gli viene detto, quindi devi guardare in Gnome. Forse l'utility Gnome Disk ti consente di modificare / cambiare i flag di mount stessi.


2

Come ha detto Ulrich Dangel, oggi gli udisk dovrebbero essere il riferimento. Devo ancora vedere come viene notificato (udev-> dbus-> udisks?), Ma manualmente può essere utilizzato per montare un dispositivo con le opzioni necessarie.

Udisks parla con polkit per vedere cosa può fare un utente con i volumi. Sto indovinando qui, ma se potessimo trovare un posto per impostare le proprietà per un disco / dispositivo denominato dovrebbe funzionare.

Usando udisksctl, il tuo utente dovrebbe essere in grado di montare il dispositivo con le opzioni di cui hai bisogno, qualcosa del genere:

udisksctl mount -b / dev / sdxy -o ro / mountpoint

Eppure non so dove posizionare le opzioni.

AGGIORNAMENTO: Seguendo i suggerimenti di Ulrich, sono andato all'utilità del disco di Gnome e ho ottenuto ciò di cui hai bisogno ma non sono sicuro che sia la soluzione più elegante o meno. Sto usando Kororaa 17 (basato su Fedora 17) con Cinnamon + Gnome3, sono andato all'utilità "Dischi" e ho modificato le opzioni di montaggio per la mia unità USB, aggiunto "ro" e salvato.

Aggiunge una voce a fstab (è lì che non la vedo come una soluzione elegante, penso che dovrebbe rimanere come una configurazione utente non a livello di sistema), collego l'unità e si monta automaticamente sul punto di montaggio selezionato con opzioni Ho salvato l'utilità dei dischi di Gnome.


Che cosa vuoi dire con te per vedere come viene notificato? Quale passo manca?
Ulrich Dangel,

E non lo è udev→dbus→udiskmaudev/uevent→udisk→dbus
Ulrich Dangel il

Volevo dire che non ero molto sicuro e volevo verificarlo, ma ora vedo che non ho sbagliato al 100%.
triplicato il

[strike] Per favore, mostra la linea che è stata aggiunta in fstab. Vorrei confermare quello che penso. [/ Strike] Quindi la linea fstab corrisponde a quella della risposta di @ profy? cioè con l' roopzione.
inverti il

-1

Sull'argomento di come il kernel rileva l'hardware, ecco un bell'articolo che succede .

In sintesi:

  • il kernel esegue costantemente la scansione dei bus del PC e mappa i dispositivi sul file system virtuale, in genere sotto /sys/.
  • il kernel invia un messaggio che il nuovo hardware è disponibile per udev, che:
    • elaborare le regole udev sul dispositivo
    • collegamento simbolico al dispositivo in /dev/
    • caricare i driver di dispositivo
    • avvisare lo spazio utente del dispositivo tramite dbus

A questo punto il dispositivo è pronto per essere utilizzato da userspace. Gvfs e FUSE sono entrambi filesystem degli spazi utenti.


No, in udevgenere non notifica le applicazioni tramite dbusquesto viene fatto da applicazioni di terze parti. Se usi qdbus --systemnon vedrai nessun nome udev. In genere le applicazioni si iscrivono ueventso inviano le proprie regole
Ulrich Dangel

Grazie per averlo segnalato @ulrich. Il mio riepilogo fornisce una struttura di base che esclude molti passaggi intermedi. Vedi l'articolo collegato per dettagli grintosi.
inverti il

2
l'articolo è anche falso in quanto normalmente non è previsto alcun sondaggio per monitorare gli autobus
Ulrich Dangel
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.