Forcer/différer le démontage d’un volume (CD, Clé, NFS, etc)

Qui n’a jamais été confronté à des problèmes de démontages de volumes encore accédés par un utilisateur ou un processus ? Dans ce cas nous nous retrouvons face à des messages du type :

mafalda 0 # umount /media/vd/0
umount: /media/vd/0: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

… ou sur du NFS :

mafalda mydir # umount /import/mydir
umount.nfs: /import/mydir: device is busy

Parmi les solutions potentielles, cet article propose le :

  • démontage « différé » : le volume apparaît comme démonté pour tous les nouveaux processus, mais reste accessible à ceux qui l’utilisent. Une fois libéré, le volume est démonté automatiquement ;
  • démontage « brutal » : tous les processus utilisant le volume sont tués afin que le démontage puisse être effectué.

Démontage différé

Le démontage différé (« lazy unmount »), obtenu via l’option « -l » d’umount, démonte le volume mais conserve un accès à tous les processus l’utilisant encore :

umount -l <point de montage>

Les nouveaux processus n’accèdent pas au volume et il n’apparaît plus dans mtab ou /proc/mounts. Tous les processus ouverts conservent cependant leurs accès tant qu’ils en ont besoins/qu’ils les utilisent.

mafalda ~ # mount /dev/cdrom /media/vd/0
mafalda ~ # cd /media/vd/0
mafalda 0 # ls -l
total 599
dr-xr-xr-x  2 root root   6144 Feb 18  2011 bin
...
mafalda 0 # mount | grep vd/0
/dev/sr0 on /media/vd/0 type iso9660 (ro,relatime)
mafalda 0 # cat /proc/mounts | grep vd/0
/dev/sr0 /media/vd/0 iso9660 ro,relatime 0 0
mafalda 0 # cat /etc/mtab | grep vd/0
/dev/sr0 /media/vd/0 iso9660 ro,relatime 0 0
 
mafalda 0 # umount /media/vd/0 # démontage impossible nous sommes sur le pt de montage...
umount: /media/vd/0: device is busy.
...
mafalda 0 # umount -l /media/vd/0/ # démontage différé
mafalda 0 # mount | grep vd/0 # rien
mafalda 0 # cat /proc/mounts | grep vd/0 # rien
mafalda 0 # cat /etc/mtab | grep vd/0 # rien
mafalda 0 # ls -l # mais le processus en cours accède toujours au volume :
total 599
dr-xr-xr-x  2 root root   6144 Feb 18  2011 bin
...

et depuis un autre terminal :

mafalda ~ # ls /media/vd/0/ # rien...

Le démontage est complété dès que le volume n’est plus accédé :

mafalda 0 # ls -l
total 599
dr-xr-xr-x  2 root root   6144 Feb 18  2011 bin
...
mafalda 0 # cd
mafalda ~ # ls /media/vd/0/ # rien

Note : Le point de montage est utilisable dès que « umount » rend la main :

mafalda ~ # mount /dev/cdrom /media/vd/0
mafalda ~ # cd /media/vd/0/
mafalda 0 # ls -l
total 599
...
mafalda 0 # umount -l /media/vd/0/
mafalda 0 # ls -l
total 599
...

et dans un autre terminal :

mafalda ~ # mount /dev/sdb1 /media/vd/0/
mafalda ~ # ls -l /media/vd/0/
total 16
...

Tuer les processus avant démontage

Dans le cas ou vous souhaitez forcer le démontage, « fuser » permet de tuer simplement tous les processus accédant au point de montage via l’option « -k » :

fuser -k <point de montage>

Sans l’option « -k », « fuser » retourne la liste des PIDs des processus accédant au volume (seconde colonne de « lsof | grep <point de montage> »).

mafalda ~ # mount /dev/cdrom /media/vd/0
mafalda ~ # cd /media/vd/0
mafalda 0 # ls -l
total 599
dr-xr-xr-x  2 root root   6144 Feb 18  2011 bin
...
mafalda 0 # fuser /media/vd/0/
/media/vd/0:           841c
mafalda 0 # echo $$
841
mafalda 0 #  # seul le bash courant utilise la ressource.

« kill » Des processus accédants à la ressources depuis un autre shell/terminal :

mafalda ~ # fuser -k /media/vd/0/
/media/vd/0:           841c

Le shell utilisant la ressource est tuée immédiatement ainsi que tous les processus accédants au montage. Le volume peut donc être démonté :

mafalda ~ # umount /media/vd/0/

Note : Dans le cas de montage « sshfs », seul l’utilisateur ayant monté le système de fichier pourra exécuter le « kill » des processus y accédant.

Références

man umount : http://linux.die.net/man/8/umount
man fuser : http://linux.die.net/man/1/fuser

Une réflexion au sujet de « Forcer/différer le démontage d’un volume (CD, Clé, NFS, etc) »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *