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…