Esto es algo que siempre me pasa y nunca me acuerdo de cómo solucionarlo. Hoy he recibido una alerta de uno de mis servidores, MySQL se había parado y no podía reiniciarse. Al entrar a la máquina para hacerlo manualmente, en efecto, me decía que no podía, que los archivos eran de sólo lectura 😐 . Después de hacer alguna comprobación más me doy cuenta de que la unidad entera se había quedado en algún estado extraño de sólo lectura a pesar de que el mount indicaba lo contrario.
[osus@servidor ~]# mount /dev/hdb1 on /mnt/unidad type ext3 (rw)
Decido entonces desmontar la unidad y volver a montarla, pero…
[osus@servidor ~]# umount /mnt/unidad umount: /mnt/unidad: device is busy
Y aquí viene el problema. Había parado, en teoría, todos los servicios que utilizaban esa unidad, pero aún así me daba este error. Podría haber forzado el umount con:
umount -l /dev/hdX
Pero prefiero saber qué es lo que está ocupando la unidad antes de forzarlo, cuestión de precaución sólo. Necesitamos saber, entonces, qué procesos están haciendo uso de la unidad que queremos desmontar, y esto es lo importante de este artículo.
[osus@servidor ~]# fuser -vm /dev/hdb1 USER PID ACCESS COMMAND /dev/hdb1: named 456 ..c.. named mysql 587 F.c.. mysqld apache 1113 F.... httpd root 1925 ..c.. screen root 1926 ..c.. bash apache 8009 F.... httpd apache 9267 F.... httpd
Con este sencillo comando de fuser ya sabemos quién accede a la unidad en cuestión. En mi caso era un proceso bash de un screen que estaba abierto y un rsync. Los paré y ya pude desmontar la unidad correctamente. Al volver a montarla todo comenzó a funcionar correctamente.
¿La causa? Ni idea, no había nada raro en los logs, pero me da que el rsync había hecho algo extraño…
Al delicious que va 🙂 este mandato es muy útil pero como necesito usarlo pocas veces, nunca recuerdo cómo es 😀 . Me permito añadir que se puede usar para cualquier dispositivo, no sólo discos duros. Por ejemplo, en mi caso, alguna vez lo he usado para averiguar qué proceso estaba bloqueando el dispositivo de audio (normalmente /dev/dsp).
Hola Deigote,
Me pasa lo mismo que a ti, siempre que lo necesito no recuerdo como era el comando…
Por otro lado, creía que resultaba obvio que servía para cualquier dispositivo, por eso no lo puse, pero ya que lo comentas, así es 😛 .