montare hard disk esterno in sola lettura

Ho 3 hard disk esterni con collegamento usb al computer, che, solitamente, sono spenti, e che accendo solo quando mi servono. Per evitare il rischio che qualcuno faccia pasticci involontariamente, li voglio montare per default in sola lettura, montandoli da riga di comando in lettura e scrittura solo le poche volte che ne ho bisogno. Inoltre li monto in una cartella ben precisa, dove è attiva una condivisione samba con gli altri pc della rete.

Ovviamente, se lascio fare al demone (a proposito, come si chiama?) che monta automaticamente le partizioni degli hard disk usb quando vengono accesi, verrebbero montate in /media/*, e sarebbero in lettura-scrittura.

Fino a Fedora 14 non avevo trovato di meglio che inserire in /etc/fstab una riga del tipo

UUID=xxxxxxxxxxxxxxxx	/Windows/Film	ntfs-3g uid=500,ro,users 0 0

Da Fedora 15 in poi, se l’hard disk non è acceso in avvio, questo non genera più solo un messaggio di errore (mi sembra di ricordare che gli ultimi due zeri servissero appunto a questo), ma blocca l’avvio, mandandomi in console di emergenza, come se mancasse la partizione di root, e quindi ho dovuto modificare in

UUID=xxxxxxxxxxxxxxxx	/Windows/Film		ntfs-3g uid=500,noauto,ro,users 0 0

Continuo quindi, come prima, a montare e smontare da riga di comando le partizioni quando accendo o spengo gli hard disk esterni: però non mi dispiacerebbe se la cosa potesse avvenire in automatico. Quindi mi chiedo:

Si può configurare il demone che monta automaticamente gli hard disk esterni in modo che una o più partizioni vengano montate, se possibile, in una posizione diversa da /media, e soprattutto in sola lettura?

Ovviamente il tutto dovrebbe valere solo per alcune partizioni ben precise di UUID (o label) assegnato.

ti propongo una alternativa.
potrebbe andarti bene che se vuoi montare un disco esterno, ti chiede la password di root ?

[quote=virus]Ti propongo una alternativa.
Potrebbe andarti bene che se vuoi montare un disco esterno, ti chiede la password di root ?[/quote]

Anche adesso devo dare la password, perché l’opzione users non funziona. O meglio, non funziona del tutto, perché se, da utente, dò umount /Windows/Film funziona, mentre mount /Windows/Film non va (ovvero, non dà errori, ma non monta niente).

Quindi direi: non è l’optimum, ma sarebbe sempre meglio di adesso. Ma dovrebbe essere montata in sola lettura (e, possibilmente, dove dico io).

la cosa dovrebbe funzionare solo per quei dischi esterni, non per una qualsiasi pennetta che viene inserita, esatto ?

Esatto.

allora ti propongo una regola udev per quei tre dischi collegata ad uno script di montaggio.
in http://forum.fedoraonline.it/viewtopic.php?id=17326 ho aiutato Andi a creare una regola udev su di una pennetta da aggiornare automaticamente, lo script nel tuo caso invece di aggiornare la pennetta deve provvedere al montaggio in sola lettura su determinato punto di montaggio.

[quote=virus]allora ti propongo una regola udev per quei tre dischi collegata ad uno script di montaggio.
in http://forum.fedoraonline.it/viewtopic.php?id=17326 ho aiutato Andi a creare una regola udev su di una pennetta da aggiornare automaticamente, lo script nel tuo caso invece di aggiornare la pennetta deve provvedere al montaggio in sola lettura su determinato punto di montaggio.[/quote]

Dunque, io ho creato il file /etc/udev/rules.d/99-fantascienza.rules

SUBSYSTEM=="usb" , ACTION=="add" , ATTRS{idVendor}=="0781" , ATTRS{idProduct}=="5151" , RUN+="mount -o uid=500,ro UUID=C0A84BE8A84BDB92 /Windows/Film/Fantascienza"

Ho commentato la riga di /etc/fstab relativa aggiungendo ‘#’ all’inizio:

#UUID=C0A84BE8A84BDB92	/Windows/Film/Fantascienza ntfs-3g uid=500,noauto,ro,users 0 0

Non so se serviva, ma nel dubbio ho anche riavviato per far ricaricare le regole.

Ma ora, se clicco sull’icona che si crea in nautilus aprendo computer:///, l’hard disk viene montato in lettura-scrittura in /media/Fantascienza. Forse dipende dai parametri messi tra virgolette che non vengono passati dalla shell separatamente per le virgolette? O ho capito male qualcos’altro io?

non va bene.

gedit /etc/udev/rules.d/99-fantascienza.rules

inserisci:

SUBSYSTEM=="usb" , ACTION=="add" , ATTRS{idVendor}=="XXXX" , ATTRS{idProduct}=="YYYY" , RUN+="/home/utente/monta_fantascienza"
dove XXXX e YYYY sono gli identificativi della periferica desumibili da:

$ lsusb

e utente è il tuo utente

poi crei lo script:

$ gedit /home/utente/monta_fantascienza

dove inserisci nell’ordine:

  1. lo smontaggio del disco ( se lo ha già montato)
  2. rimontaggio in sola lettura del disco su punto a tua scelta

lo rendi eseguibile con:

$ chmod +x /home/utente/monta_fantascienza

Continua a non funzionare.

lsusb -v | grep -A10 SATALink | egrep "SATALink|idVendor|idProduct"
Bus 002 Device 004: ID 04fc:0c25 Sunplus Technology Co., Ltd SATALink SPIF225A
  idVendor           0x04fc Sunplus Technology Co., Ltd
  idProduct          0x0c25 SATALink SPIF225A
cat /etc/udev/rules.d/99-fantascienza.rules
SUBSYSTEM=="usb" , ACTION=="add" , ATTRS{idVendor}=="04fc" , ATTRS{idProduct}=="0c25" , RUN+="/home/marco/bin/fantascienza"
cat /home/marco/bin/fantascienza
umount /media/Fantascienza
mount -o uid=500,ro UUID=C0A84BE8A84BDB92 /Windows/Film/Fantascienza

Il seguente comando, da terminale, funziona:

su -c  /home/marco/bin/fantascienza

cosa non funziona ? lo rimonta in automatico?
se è così è ovvio, in quanto non abbiamo ancora inibito udisks su quelle periferiche.

[quote=virus]Cosa non funziona ? Lo rimonta in automatico?
Se è così è ovvio, in quanto non abbiamo ancora inibito udisks su quelle periferiche.[/quote]
Non funziona nulla. Lo monta sempre in lettura-scrittura in /media/Fantascienza.

Sembra ignorare la regola.

il disco è sempre attaccato alla macchina ?

nel senso lo stacchi e lo riattacchi oppure rimane lì sempre attaccato ?

[quote=virus]il disco è sempre attaccato alla macchina ?

nel senso lo stacchi e lo riattacchi oppure rimane lì sempre attaccato ?[/quote]

Di solito uso il pulsante presente sul box per spegnerlo o accenderlo.
Sì, è sempre attaccato alla macchina.

allora togli la direttiva:

ACTION=="add"

e sposta la regola in:

/lib/udev/rules.d/99-fantascienza.rules

vedi se ora funziona.
naturalmente lo monterà anche in /media, ma su questa cosa dobbiamo ancora intervenire.

[quote=virus]allora togli la direttiva:

ACTION=="add"

e sposta la regola in:

/lib/udev/rules.d/99-fantascienza.rules

vedi se ora funziona.[/quote]

Niente. Ma guardando nel file di log (/var/log/messages), prima che venga montato in /media/Fantascienza trovo:

Jan 18 20:41:23 localhost udevd[2443]: failed to execute '/home/marco/bin/fantascienza' '/home/marco/bin/fantascienza': Exec format error
Jan 18 20:41:23 localhost udevd[2445]: failed to execute '/home/marco/bin/fantascienza' '/home/marco/bin/fantascienza': Exec format error
[marco@localhost ~]$ cat /lib/udev/rules.d/99-fantascienza.rules
SUBSYSTEM=="usb" , ATTRS{idVendor}=="04fc" , ATTRS{idProduct}=="0c25" , RUN+="/home/marco/bin/fantascienza"
[marco@localhost ~]$ 
[marco@localhost ~]$ cat /etc/udev/rules.d/99-fantascienza.rules
SUBSYSTEM=="usb" , ACTION=="add" , ATTRS{idVendor}=="04fc" , ATTRS{idProduct}=="0c25" , RUN+="/home/marco/bin/fantascienza"
[marco@localhost ~]$ 
[marco@localhost ~]$ cat /home/marco/bin/fantascienza
/bin/umount /media/Fantascienza
/bin/mount -o uid=500,ro UUID=C0A84BE8A84BDB92 /Windows/Film/Fantascienza
[marco@localhost ~]$ 

aggiungi in testa al file/home/marco/bin/fantascienza la shabang

#!/bin/sh

esattamente come è scritta, “#” compreso.

[quote=virus]aggiungi in testa al file/home/marco/bin/fantascienza la shabang

#!/bin/sh

esattamente come è scritta, “#” compreso.[/quote]
Me ne sono accorto dopo l’ultimo messaggio, e avevo già corretto. Ora non ci sono più messaggi di errore nel log, ma viene sempre montato in lettura-scrittura in /media/Fantascienza.

Ma cosa dovrei aspettarmi, secondo te? Una maschera che chiede la password?

N.B. Non è che dovrei inserire la regola in /lib64, per caso?

Mi sono accorto ora che nella discussione che virus mi aveva suggerito non si usavano mount e umount, bensì udisks. Quindi ho cambiato lo script:

[marco@localhost ~]$ cat /home/marco/bin/fantascienza
#!/bin/sh
udisks --unmount /dev/disk/by-uuid/C0A84BE8A84BDB92
udisks --mount /dev/disk/by-uuid/C0A84BE8A84BDB92 --mount-options uid=500,ro --mount-fstype ntfs

Se dò il comando fantascienza da terminale, l’hd viene montato in sola lettura in /media/Fantascienza (senza neanche chiedermi la password).
Se invece mi limito ad accendere l’hard disk, viene montato in lettura-scrittura. Forse udisks, dopo aver eseguito il mio script, fa quello che faceva di solito, smontandolo e rimontandolo come dice lui? O non viene proprio eseguito (non credo, visto che la mancanza di #!/bin/sh veniva segnalata nel log senza che facessi nulla)?

lascia lo script con mount ed umount.

ora a parte che lo monta in /media
lo monta anche in /Windows/Film/Fantascienza ?

[quote=virus]lascia lo script con mount ed umount.

ora a parte che lo monta in /media
lo monta anche in /Windows/Film/Fantascienza?[/quote]
No.