Wikio

Entries tagged “bash”

Updfstab

written by ccomb, on Dec 21, 2005 1:00:00 PM.

Ce script a été rendu obsolète par l'amélioration de hal, fam, udev, gnome-volume-manager, etc... ; je ne l'utilise plus mais il peut encore servir.


Gestion automatique des périphériques de stockage USB

(clic here for english version)

1) Contexte et objectif

Ceci s'applique aux périphériques pris en charge par le module usb_storage, c'est-à-dire les clefs USB, les disques durs USB, et de nombreux appareils photo numériques. Votre noyau doit être en version 2.6.x et vos périphériques doivent être gérés par Udev (pas DevFS, ni un /dev statique).

Lors du branchement d'un tel périphérique, le but est de :

  • créer un point de montage avec un nom explicite correspondant au périphérique (/media/IntelligentStick). Pour ça les infos sont récupérées dans le label de la partition, ou sinon dans /sys (modèle ou fabricant)
  • ajouter la ligne correspondante dans /etc/fstab

Lors du débranchement, on retire simplement la ligne de /etc/fstab et le point de montage.

De cette façon, sous Gnome, en ayant FAM ou GAMIN installé et actif, le périphérique apparaît automatiquement dans la liste des périphériques montables (clic droit sur le bureau -> volumes, ou dans le poste de travail sous gnome >=2.6). On peut ainsi le monter ou le démonter à la souris très simplement.

2) Le script

La dernière version est updfstab-17 Les autres versions sont ici : http://ccomb.gorfou.fr/static/usbstorage/

Merci à toutes les personnes qui m'ont aidé à améliorer ce script (Stefan Illner, Thomas Jahns, Elia Yehuda, Iain Mac Donald, Jan Schulz, Peter Kolloch, Christian Perrier, Eric Freyens, Yth., Florian Iragne, Gurvan huiban, Benoit-Pierre Demaine, Emmanuel Bouthenot, Christophe Jenaux, gpe92, Yannick Torres, Christophe Thiesset)

Je n'ai pour l'instant par assez de temps pour maintenir ce script, je place ci-dessous les versions ultérieures et contributions :

Voici une préversion 18rc (amélioration de détection de l'utilisateur, gestion de l'icône KDE, correction pour les lecteurs Zip USB) updfstab-18rc

Voici un port vers perl 5.6, fait par Thomas Jahns, et qui crée une autofs map au lieu de modifier le fstab : hotplug-mount.pl, et son README

Voici une version 17+ modifiée par Christophe Thiesset avec gestion de l'icône KDE, message d'avertissement en cas de débranchement sans démontage, et autres modifications : updfstab-17.chthiesset.dev (et daemon associé : updfstab-sync.chthiesset.c)

Voici un paquet Debian de la version modifiée (déc 2005), contenant le script et le daemon, et qui a été déployée à l'INSA Toulouse pour les salles de cours et les postes utilisateurs. Les améliorations apportées sont les messages d'avertissement pour l'utilisateurs, l'ouverture de konqueror sur le contenu du péripherique automatisée et le démontage à chaud possible sans (trop) de perte de données. Le point négatif étant une baisse du taux de transfert (le démon synchronise toutes les 10 secondes).

Voici une autre version 17+ par Yannick Torres avec gestion de l'icône KDE : updfstab-17.yannick

Christian Gatzemeier suggère de modifier les options de montage. Voir en bas de page.

3) Prérequis

Vous devez avoir installé :

  • un noyau 2.6
  • Udev
  • hotplug
  • fam ou Gamin
  • hal (si vous utilisez un lecteur de cartes flash CF, SD, MS, etc.)
  • facultatif pour gnome : gnome-volume-manager et hal permettent de faire de l'automontage et d'ouvrir automatiquement nautilus lors de l'insertion du périphérique. (il faut l'activer dans le gnome-volume-properties).

4) Installation

Le script doit être simplement copié comme /etc/dev.d/default/updfstab.dev, et rendu exécutable :

  • Ouvrez un terminal et devenez root en tapant su <Enter>, puis votre mot de passe root.
  • Collez la ligne suivante dans votre terminal :
of=/etc/dev.d/default/updfstab.dev; wget ccomb.gorfou.fr/static/usbstorage/updfstab-latest -O $of; chmod 755 $of

5) Désinstallation

  • Ouvrez un terminal et devenez root en tapant su <Enter>, puis votre mot de passe root.
  • Effacez simplement le script en tapant : rm -f /etc/dev.d/default/updfstab*

6) Historique des modifications

  • updfstab-17 (23-Jan-2005) - gestion des périphériques sans partition (formattés tels quels) - modification du choix pour le nom du point de montage. (label->model->vendor->"usb-disk") - utilisation de ext2, ext3 et xfs à la place de auto pour le montage de ces systèmes de fichiers
  • updfstab-2.6-16 (14-Jan-2005) - améliorations et corrections mineures - prise en charge du noyau 2.6.10 - suppression de la dépendance avec procmail (/usr/bin/lockfile) - meilleur comportement avec plusieurs périphériques - utilisation de "vfat" au lieu de "auto" pour les périphériques FAT - automontage à l'insertion (désactivé par défaut. Voir la fin du script)
  • updfstab-2.6-15 (13-Déc-2004) - correction d'un bogue pour le cas du débranchement d'un périphérique monté. - autres modification mineure
  • updfstab-2.6-14 (24-Nov-2004) - prise en charge d'udev 0.46 qui ne semble plus fournir DEVNAME au débranchement
  • updfstab-2.6-13 (02-Nov-2004) - retrait de l'option "sync", qui divisait par 10 les taux de transfert. Il faudrait trouver un moyen d'activer "sync" tout en pouvant spécifier le blocksize au montage (l'option -o blocksize n'a aucun effet).
  • updfstab-2.6-12 (11-Oct-2004) - gestion du label des partitions EXT2/3 (via e2label) - ajout de l'option de montage "noatime" pour éviter d'écrire lors d'une simple lecture
  • updfstab-2.6-11 (27-Aug-2004) - gestion du label des partitions XFS (via xfs_admin) - protection du script entier par lockfile (pour éviter les accès conrurrents au périphérique) - les partitions étendues ne sont plus prises en compte (car non montables) - le numéro de partition n'est plus ajouté au nom du point de montage
  • updfstab-2.6-10 (08-Jul-2004) - arrêt immédiat si /usr/bin n'est pas disponible (sinon erreurs pendant le démarrage si /usr est une partition séparée.) - utilisation d'un lockfile pour protéger les accès à /etc/fstab - utilisation du syslog
  • updfstab-2.6-9 (03-Jul-2004) - utilisation de iocharset=utf-8 seulement pour FAT et NTFS - si on débranche un périphérique monté, les processus y accédant sont tués et le périphérique est démonté. (accessoirement on redémarre famd s'il était lancé et s'il a été tué, parce qu'il bloque souvent le démontage à cause de nautilus)
  • updfstab-2.6-8 (03-Jul-2004) - ajout d'une option de debug (décommenter DEBUG=1) - correction d'un bug qui empêchait le retrait de la ligne fstab et du point de montage - suppression des erreurs non fatale (option -q à modprobe et ajout de >/dev/null à ls) - effacement de la ligne fstab et du point de montage avant ajout s'ils existent au branchement (pour purger) - autres corrections de bug
  • updfstab-2.6-7 (06-Jun-2004) - Réécriture complète du script - Le script utilise maintenant les variables passées par udevd (ACTION, DEVNAME, DEVPATH) - Le point de montage est aussi retiré au débranchement - Ca devrait fonctionner quelles que soient les règles de udev (avec /dev/scsi ou /dev/sda) - le /dev n'est pas écrit en dur, donc ça doit marcher aussi avec /udev - remplacement de modprobe par /sbin/modprobe au cas où /sbin n'est pas dans le PATH. - protection contre l'execution pour des périphériques non usb (erreurs au boot)
  • updfstab-2.6-6 (05-Jun-2004) - Le point de montage est maintenant /media au lieu de /mnt (recommandation du standard FHS)
  • updfstab-2.6-5 (05-Jun-2004) - si le point de montage choisi est déjà utilisé dans fstab, un nombre est collé à la fin. (ex: usb-disk => usb-disk-2) - l'utilisation du serial number est retirée. (aucune utilité)
  • updfstab-2.6-4 (05-Jun-2004) - modification du choix pour le nom du point de montage. (label->product->manufacturer->"usb-disk")
  • updfstab-2.6-3 (05-Jun-2004) - modification du choix pour le nom du point de montage. (product->manufacturer->"usb-disk")
  • updfstab-2.6-2 (19-Apr-2004) - modification du choix pour le nom du point de montage. (manufacturer->product->"usb-disk")
  • updfstab-2.6 (18-Mar-2004) - réécriture de la version pour noyau 2.4

7)Version pour noyau 2.4 et ""DevFS""

J'avais commencé ce script avec le noyau 2.4 et devfs. Le script que j'avais écrit est ici : http://ccomb.gorfou.fr/static/usbstorage/updfstab-2.4 Il doit simplement être copié en tant que /usr/sbin/updfstab, et être rendu exécutable. C'est hotplug qui s'occupe de l'appeler automatiquement. (En fait il remplace le script updfstab normalement installé par le paquet kudzu.) Il est expérimental, et peut ne pas fonctionner dans de nombreux cas. Étant donné que j'ai migré définitivement vers le noyau 2.6 et que j'ai remplacé devfs par udev, je ne m'occupe plus de ce script.

Ce script a été modifié ou recréé par d'autres personnes : http://ccomb.gorfou.fr/static/usbstorage/updfstab.florian http://ccomb.gorfou.fr/static/usbstorage/updfstab.gurvan_huiban


Commentaires :

proposition de Christian Gatzemeier :

Pour une meilleure integration avec vfat pour les systèmes qui utilisent un umask 002, vous pouvez ajouter à la ligne 225 : ",quiet,shortname=mixed,dmask=0002,fmask=0113" aux options de montage. Utilisez ",quiet,shortname=mixed,dmask=0022,fmask=0133" pour les systèmes avec umask 022. Les systèmes non-anglais peuvent bénéficier de l'option ",codepage=850".

",iocharset=utf8" devrait être ajouté par le script uniquement pour les systèmes en UTF8. J'ai donc remplacé ",iocharset=utf8" à la ligne 225 par les options ci-dessus. Je ne sais pas comment pourrait être déterminé le umask par défaut. Il pourrait être réglé différemment pour root, et donc pour le script en cours d'execution.


Quelques problèmes rencontrés lors du passage à udev :

  • J'ai perdu les terminaux texte (les VT, accessibles avec Alt-Ctrl-F1, ...-F2, etc.)

-> Remplacer compat.rules par compat-full.rules dans /etc/udev/rules.d/ :

cd /etc/udev/rules.d; rm -f compat.rules; ln -s ../compat-full.rules

-> ou mieux : ne garder que compat.rules dans /etc/udev/rules.d

cd /etc/udev/rules.d; rm -f *; ln -s ../compat.rules
  • J'ai perdu le son (alsa ne trouve plus de carte son) ...

MW: Pourquoi ne pas utiliser autofs ? J'ai écrit un script (en perl) pour hotplug qui reconnait ce qui est inséré dans le port USB, lui trouve un nom intelligent, et ajoute une ligne dans la config d'autofs et crée un lien symbolique vers le futur point de montage. Ainsi, lorsqu'on lit le lien symbolique, autofs crée le point de montage et monte la partition idoine. Avec un timeout de 3 secondes dans autofs, la parition est démontée automatiquement lorsqu'on cesse d'utiliser le répertoire pendant plus de 3 secondes. J'utilise ca sur une machine qui met sert de magnétoscope, et où je ne peux pas facilement monter et démonter une partition.


Pourquoi ne pas créer automatiquement le lien vers la clé USB sur un bureau KDE ? Les liens de type "périphériques" sous KDE ne sont que de simples fichiers textes. Il est à mon avis très facile de réaliser ça pour avoir un comportement vaguement ressemblant au gnome-volume-manager.

ccomb: parce que c'est déjà fait dans KDE. Il suffit de lui dire d'afficher les icônes de disques durs non montés.

  • j ai des disque Firewire ou Ilink ... et ca marche pas :(

remplacer les lignes :

if [ "$WE_ARE" = "PARTITION" ]; then
  device1="`cd -P /sys${DEVPATH}/../device/../../../../ 2> $DEV/null ; /bin/ls 2> /dev/null | grep ':' | head -n 1`"
  device2="`cd -P /sys${DEVPATH}/../device/../../../ 2> $DEV/null ; /bin/ls 2> /dev/null | grep ':' | head -n 1`"
else if [ "$WE_ARE" = "DEVICE" ]; then
[...]
if [ -z "$device1" -o ! -e /sys/bus/usb/drivers/usb-storage/$device1 ]; then
    if [ -z "$device2" -o ! -e /sys/bus/usb/drivers/usb-storage/$device2 ]; then
              exit
      fi; fi;

par :

if [ "$WE_ARE" = "PARTITION" ]; then
  device1="`cd -P /sys${DEVPATH}/../device/../../../../ 2> $DEV/null ; /bin/ls 2> /dev/null | grep ':' | head -n 1`"
  device2="`cd -P /sys${DEVPATH}/../device/../../../ 2> $DEV/null ; /bin/ls 2> /dev/null | grep ':' | head -n 1`"
  device3="`cd -P /sys${DEVPATH}/../device/../../../../ 2> $DEV/null ; /bin/ls 2> /dev/null | grep '-' | head -n 1`"
  device4="`cd -P /sys${DEVPATH}/../device/../../../ 2> $DEV/null ; /bin/ls 2> /dev/null | grep '-' | head -n 1`"
else if [ "$WE_ARE" = "DEVICE" ]; then
[...]
if [ -z "$device1" -o ! -e /sys/bus/usb/drivers/usb-storage/$device1 ]; then
    if [ -z "$device2" -o ! -e /sys/bus/usb/drivers/usb-storage/$device2 ]; then
        if [ -z "$device3" -o ! -e /sys/bus/ieee1394/drivers/sbp2/$device3 ]; then
            if [ -z "$device4" -o ! -e /sys/bus/ieee1394/drivers/sbp2/$device4 ]; then
              exit
      fi; fi; fi; fi;

-- doublehp

  • J ai changé le nom decrivant ma cle USB sous Windows, et updatefstab la mount sous un autre nom.

Il semble que Windows n ecrive pas toujours le nom descripteur a l interieur du peripherique; pour le changer sous Linux, vous pouvez utiliser mlabel du package mtools; il faut au prealable ajouter une ligne du genre:

drive m: file="/dev/sda1"

à /etc/mtools.conf

puis executer:

mlabel m:PLOP

sachez que le script se base si possible sur le résultat de :

file -s /dev/sda1

(sinon il invente un nom comme il peut)

-- doublehp

Bugs :

  • ne fonctionne pas bien avec les lecteurs usb de cartes flash : il faut débrancher et rebrancher le lecteur pour que le périphérique apparaisse.
  • le parametre iocharset=utf8 empeche mes disques d'etre montés (testé avec un Archos et un apn)

--> je n'ai pas compilé le support de l'utf8 comme chartset dans le kernel :

Nov 21 16:02:01 [kernel] Unable to load NLS charset utf8

--> De plus j'ai cette erreur la, et donc ca me fait dire que peut etre on ne devrait pas mettre cette option :

Nov 21 16:02:01 [kernel] FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!

  • Si le device du peripherique est different de la fois precedente ou il a ete monté (car le nom device depend de l'ordre des branchement lorsqu'il y a plusieurs peripheriques) alors la ligne n'est pas retiré du fstab.

À faire :

  • interface graphique de configuration pour :
    • choisir d'activer ou non le montage automatique
    • modifier les points de montage (soit un mapping sur le nom déduit, ou modification directe du label)
  • étudier la possibilité de gestion des partitions de disques durs (autres que celles déjà connues du fstab)

Autres projets similaires

usbmount

Updfstab (english)

written by ccomb, on Dec 16, 2005 12:52:00 PM.

This script has been obsoleted by all the improvements of Hal. I don't use it any more, but it can still be useful.


Automatic handling of USB storage devices

(cliquez ici pour la version en français.)

1) Context and goal

This applies to devices managed by the usb_storage driver, i.e. usb keys, usb hard drives, and many digital cams. Your kernel must be in the 2.6.x series and your devices must be handled by Udev (not DevFS, nor a static /dev).

When plugging such a device, the purpose is to:

  • create a mount point with an explicit name corresponding to the real device (""/media/IntelligentStick""). Information is retrieved from the partition label, otherwise from /sys (model or vendor)
  • add the corresponding line in /etc/fstab

When unplugging, we remove the line in fstab, and the mount point.

So, under Gnome, with FAM or GAMIN installed and enabled, the device automatically appears in the mountable devices list (right-clic on the desktop -> Volumes, or in Computer for gnome >= 2.6), and it makes it possible to mount and unmount it very easily with a mouse click.

2) The script

The latest version is updfstab-17 The other versions are here : http://ccomb.gorfou.fr/static/usbstorage/

Thanks to all those who helped me improving this script (Stefan Illner, Thomas Jahns, Elia Yehuda, Iain Mac Donald, Jan Schulz, Peter Kolloch, Christian Perrier, Eric Freyens, Yth., Florian Iragne, Gurvan huiban, Benoit-Pierre Demaine, Emmanuel Bouthenot, Christophe Jenaux, gpe92)

Here is a port to perl 5.6 of the script, made by Thomas Jahns, and that create an autofs map instead of modifying the fstab: hotplug-mount.pl, and its README

Here is a modified 17+ version by Christophe Thiesset with KDE icon management, warning message at unplugging without unmounting, and other changes : updfstab-17.chthiesset.dev (and associated daemon : updfstab-sync.chthiesset.c)

Here is a Debian package of the modified version (dec 2005), which contains both the script and the daemon, and which was deployed at the INSA Toulouse (a french engineering college) for courses rooms and user workstations. The improvements are warning messages for users, automatic opening of konqueror and hot unplugging without much loss. The bad point is a small drop in the transfer rate (the daemon synchronizes every 10 seconds).

Here is another 17+ version by Yannick Torres with KDE icon management: updfstab-17.yannick

Christian Gatzemeier suggests to modify the mount options in the script. Please see at the bottom of the page.

3) Prerequisites

You must have installed:

  • optional for gnome : gnome-volume-manager and hal allow to automount and to automatically open nautilus when plugging the device. (it must be enabled in gnome-volume-properties).

4) Installation

the script must be copied as /etc/dev.d/default/updfstab.dev, and set executable:

  • Open a terminal and become root by typing su <Enter>, then your root password.
  • Paste the following line in your terminal:

of=/etc/dev.d/default/updfstab.dev; wget ccomb.gorfou.fr/static/usbstorage/updfstab-latest -O $of; chmod 755 $of

5) Uninstallation

  • Open a terminal and become root by typing su <Enter>, then your root password.
  • Just delete the script by typing: rm -f /etc/dev.d/default/updfstab*

6) Changelog

  • updfstab-17 (23-Jan-2005) - support devices without a partition (formatted as is) - changed the choice for mount point name. (label->model->vendor->"usb-disk") - use "ext2", "ext3" and "xfs" instead of "auto" to mount these filesystems
  • updfstab-2.6-16 (14-Jan-2005) - minor improvements and fixes - support for kernel 2.6.10 - removed dependency with procmail (/usr/bin/lockfile) - better behaviour with several devices - use "vfat" instead of "auto" for FAT devices - automounting (disabled by default. See the end of the script)
  • updfstab-2.6-15 (13-Dec-2004) - fixed a bug in case a mounted device is unplugged. - other minor modification
  • updfstab-2.6-14 (24-Nov-2004) - support for udev 0.46 that does not seem to provide DEVNAME anymore at removal
  • updfstab-2.6-13 (02-Nov-2004) - removed the "sync" option which divided par 10 the transfer rates. Something has to be found to enable the "sync" option __and__ to specify the blocksize at mount (the -o blocksize option has no effect).
  • updfstab-2.6-12 (11-Oct-2004) - now manages EXT2/3 partition label (with e2label) - add "noatime" mount option to avoid unnecessary write while reading
  • updfstab-2.6-11 (27-Aug-2004) - now manages XFS partition label (with xfs_admin) - the full script is protected by the lockfile (to avoid simultaneous access to the device) - extended partitions are skipped (they are not mountable) - partition number is no more appended to the mountpoint name
  • updfstab-2.6-10 (08-Jul-2004) - exit immediately if /usr/bin/ is not yet available (during boot if /usr is a separate partition) - use a lockfile instead of a sleep to protect /etc/fstab access - use syslog
  • updfstab-2.6-9 (03-Jul-2004) - using iocharset=utf-8 only for FAT and NTFS - if a mounted device is unplugged, kill the process accessing it and unmount the device. (optionnally, restart famd if it was running, because it often blocks unmounting because of nautilus)
  • updfstab-2.6-8 (03-Jul-2004) - add a debug option (comment in DEBUG=1) - fix a bug preventing fstab line and mountpoint removal - remove non fatal errors from stdout (-q option to modprobe add add >/dev/null to ls) - delete the fstab line and mountpoint if they exist at plugging (to clean) - other bug fixes
  • updfstab-2.6-7 (06-Jun-2004) - Complete rewriting of the script - The script now use variables provided by udevd (ACTION, DEVNAME, DEVPATH) - The mountpoint is now also removed at unplugging - Should now work with any udev rules (with /dev/scsi or /dev/sda) - /dev is no more hardcoded, so it should also work now with /udev instead of /dev - replace modprobe with /sbin/modprobe in case /sbin is not in the PATH. - protect against execution for non usb devices (errors at boot)
  • updfstab-2.6-6 (05-Jun-2004) - The mount point is now /media instead of /mnt (recommandation of FHS standard)
  • updfstab-2.6-5 (05-Jun-2004) - if the chosen mount point is already used, a number is appended (ex: usb-disk => usb-disk-2) - serial number is no more used
  • updfstab-2.6-4 (05-Jun-2004) - changed the choice for mount point name. (label->product->manufacturer->"usb-disk")
  • updfstab-2.6-3 (05-Jun-2004) - changed the choice order for mount point name. (product->manufacturer->"usb-disk")
  • updfstab-2.6-2 (19-Apr-2004) - changed the choice order for mount point name. (manufacturer->product->"usb-disk")
  • updfstab-2.6 (18-Mar-2004) - rewriting for 2.6 kernels

7)Version for kernel 2.4 and DevFS

I had begun this script with a 2.4 kernel and devfs. The script I wrote is here : http://ccomb.gorfou.fr/static/usbstorage/updfstab-2.4 It must be copied as /usr/sbin/updfstab, and set executable. hotplug is in charge of running it automatically. (it replaces the updfstab script usually installed by kudzu.) It is experimental, and may not work in many cases. Since I definitely migrated to 2.6 and udev, I don't maintain anymore this script.

This script has been modified by some other people: http://ccomb.gorfou.fr/static/usbstorage/updfstab.florian http://ccomb.gorfou.fr/static/usbstorage/updfstab.gurvan_huiban

Comments :

__Christian Gatzemeier proposal:__ For better vfat integration for systems that use umask 002, in line 225 you can add ",quiet,shortname=mixed,dmask=0002,fmask=0113" to the mount options. Use ",quiet,shortname=mixed,dmask=0022,fmask=0133" for systems with umask 022. Non-english systems could benefit refering to multilingual ",codepage=850".

I think ",iocharset=utf8" should only be added in your script on UTF8 enabled systems. So what I did was replacing ",iocharset=utf8" in line 225 with the options above. I don't know how one could probe for the default umask. It might be set diferently for root, and thus for the running script.


Problems when migrating to udev:

  • I lost the text mode terminals (The VTs, reachable with Alt-Ctrl-F1, ...-F2, etc.)

-> Replace compat.rules with compat-full.rules in /etc/udev/rules.d/ :

cd /etc/udev/rules.d; rm -f compat.rules; ln -s ../compat-full.rules

-> or better : onlt keep compat.rules in /etc/udev/rules.d

cd /etc/udev/rules.d; rm -f *; ln -s ../compat.rules

Works great! Thanks!

~ {emeitner} AT [ f2o DOT org ]

...

Todo list

  • configuration GUI to :
  • choose to enable automatic mounting
  • modify mountpoints (either a mapping on mountpoint name, or a direct modification of the label)
  • why not also manage HD partitions ? (other than those already known by the FSTAB)

Bugs :

(feel free to modify this wiki page by adding new bugs below)

  • doesn't work well with flash card usb readers : the reader has to be unplugged/replugged for the device to appear.

Other similar projects

[[http://usbmount.alioth.debian.org/ usbmount]]