En esta tercera entrega de la serie sobre personalización del WD My Cloud Gen 2 con My Cloud OS5, explicaré cómo recuperar una función que Western Digital mantiene oculta en la interfaz administrativa: el botón Shutdown para apagar el dispositivo.
El procedimiento fue probado en un WD My Cloud Gen 2 con firmware OS5 5.33.102.
Lo interesante es que no necesitamos desarrollar una nueva función de apagado ni modificar el firmware. Descubrimos que el botón y su funcionalidad ya existen: solamente están ocultos mediante JavaScript.
1. El problema: desapareció el botón Shutdown
En la sección Device Maintenance de la interfaz administrativa aparece normalmente el botón Reboot, que permite reiniciar el NAS.
Sin embargo, en este modelo no se muestra un botón equivalente para apagarlo.
Esto resulta inconveniente cuando necesitamos apagar correctamente el dispositivo para realizar mantenimiento, transportarlo o desconectarlo de la alimentación eléctrica.
Aunque existen comandos de apagado mediante SSH, resulta más práctico recuperar el control desde la interfaz web.
2. Localizar el archivo de la interfaz
El firmware contiene los archivos de la interfaz administrativa en:
/usr/local/modules/web/pages
La página correspondiente a las opciones de mantenimiento del dispositivo se encuentra en:
/usr/local/modules/web/pages/setting/diagnostics.html
Para confirmar que existe, ejecutamos por SSH:
ls -l /usr/local/modules/web/pages/setting/diagnostics.html
Este archivo contiene el código HTML y JavaScript que controla distintas funciones de mantenimiento.
3. Descubrir el botón Shutdown oculto
Para buscar las referencias relacionadas con el apagado del dispositivo utilizamos:
grep -nEi 'shutdown|reboot' \
/usr/local/modules/web/pages/setting/diagnostics.html
Encontramos que el archivo contiene un botón con el identificador:
settings_utilitiesShutdown_button
Su estructura HTML es:
<td class="tdfield_padding" id="id_shutdown_td">
<button type="button"
id="settings_utilitiesShutdown_button">
<span class="_text"
lang="_utilities"
datafld="shutdown"></span>
</button>
</td>
Esto demuestra que el botón ya está incorporado en el código original del firmware.
3.1. El formulario de apagado también existe
La misma página contiene el formulario:
<form method="post"
action="/cgi-bin/system_mgr.cgi"
name="form_shutdown"
id="form_shutdown">
<input type="hidden"
name="cmd"
value="cgi_shutdown">
</form>
Por tanto, la interfaz ya dispone de un mecanismo para solicitar el apagado del dispositivo.
El problema no era la ausencia del botón, sino que el código JavaScript impedía mostrarlo.
4. La instrucción que oculta Shutdown
Dentro de la función page_load()
encontramos el siguiente código:
if (SHUTDOWN_FUNCTION == 0 )
{
$("#tip_dev").attr('title',_T('_tip','dev1'));
$("#id_shutdown_td").hide();
}
else
$("#tip_dev").attr('title',_T('_tip','dev'));
La instrucción responsable es:
$("#id_shutdown_td").hide();
Esta instrucción utiliza jQuery para ocultar
el elemento HTML cuyo identificador es
id_shutdown_td.
Curiosamente, la variable
SHUTDOWN_FUNCTION
tiene el valor 0
en la configuración estándar de nuestro modelo.
Esto significa que la condición se cumple y el botón se oculta deliberadamente.
5. La solución: cambiar hide() por show()
La modificación necesaria es mínima.
Código original:
$("#id_shutdown_td").hide();
Código modificado:
$("#id_shutdown_td").show();
Con este cambio, cuando se carga la página, JavaScript muestra el botón Shutdown en lugar de ocultarlo.
No es necesario modificar el mecanismo de apagado ni alterar otros elementos de la interfaz.
6. El problema de SquashFS
Como explicamos en el primer capítulo, el firmware OS5 está almacenado en una imagen comprimida SquashFS.
Esta imagen se encuentra montada en modo de solo lectura:
/usr/local/modules
Por tanto, no podemos modificar
directamente diagnostics.html
mediante una edición convencional.
La solución consiste en crear una copia
personalizada en una partición persistente
y utilizar mount --bind
para presentarla en la ubicación
del archivo original.
7. Crear una copia persistente del HTML
Primero creamos un directorio para nuestras personalizaciones:
mkdir -p /usr/local/config/web-overrides
Después copiamos el archivo original:
cp /usr/local/modules/web/pages/setting/diagnostics.html \
/usr/local/config/web-overrides/diagnostics.html
Importante: este comando debe ejecutarse antes de activar el montaje personalizado. Si el montaje ya está activo, la ruta original mostrará el archivo modificado y no el contenido original de SquashFS.
El archivo personalizado queda almacenado en:
/usr/local/config/web-overrides/diagnostics.html
Esta ubicación corresponde a la partición persistente
/dev/sda7.
8. Modificar el archivo personalizado
Podemos utilizar sed
para sustituir exclusivamente la instrucción
que oculta el botón.
sed -i 's/$("#id_shutdown_td").hide();/$("#id_shutdown_td").show();/' \
/usr/local/config/web-overrides/diagnostics.html
Después comprobamos el resultado:
grep -n 'id_shutdown_td' \
/usr/local/config/web-overrides/diagnostics.html
La instrucción JavaScript debe aparecer ahora
con .show().
9. Aplicar la modificación mediante mount --bind
Linux permite montar un archivo
sobre otra ubicación mediante
mount --bind.
Esto permite presentar nuestro archivo personalizado en la ubicación original sin modificar SquashFS.
Ejecutamos:
mount --bind \
/usr/local/config/web-overrides/diagnostics.html \
/usr/local/modules/web/pages/setting/diagnostics.html
Con esta operación:
- El firmware original permanece intacto.
- La interfaz utiliza nuestro archivo personalizado.
- El botón Shutdown aparece en la página.
- La modificación puede revertirse desmontando el archivo.
10. Verificar el montaje
Para confirmar que el archivo personalizado está montado correctamente:
grep diagnostics.html /proc/mounts
En nuestro dispositivo obtuvimos:
/dev/sda7 /usr/local/modules/web/pages/setting/diagnostics.html ext4 rw,relatime,stripe=128,data=ordered 0 0
Esto confirma que el archivo personalizado de la partición persistente está montado sobre la ubicación original.
Después de actualizar la página Device Maintenance, el botón Shutdown apareció junto a Reboot.
11. Crear un script de restauración
El montaje realizado mediante
mount --bind
no permanece activo después de reiniciar.
Por ello creamos un pequeño script que permite restaurarlo automáticamente.
El archivo se guarda en:
/usr/local/config/web-overrides/ensure-hibernate-button.sh
Aunque el nombre contiene la palabra
hibernate, su función real
es restaurar el botón Shutdown.
Contenido:
#!/bin/sh
SRC="/usr/local/config/web-overrides/diagnostics.html"
DST="/usr/local/modules/web/pages/setting/diagnostics.html"
[ -f "$SRC" ] || exit 1
[ -f "$DST" ] || exit 1
if grep -q " $DST " /proc/mounts; then
exit 0
fi
mount --bind "$SRC" "$DST"
El script comprueba que ambos archivos existen y verifica si el montaje ya está activo.
Si encuentra el montaje, termina sin repetirlo.
Si no existe, ejecuta mount --bind.
Para asignarle permisos de ejecución:
chmod +x \
/usr/local/config/web-overrides/ensure-hibernate-button.sh
12. Comprobar el funcionamiento
Podemos ejecutar manualmente el script:
/usr/local/config/web-overrides/ensure-hibernate-button.sh
Y verificar el montaje:
grep diagnostics.html /proc/mounts
Después abrimos la interfaz administrativa y comprobamos que aparecen los botones:
- Shutdown: apagar el dispositivo.
- Reboot: reiniciar el dispositivo.
Durante nuestras pruebas comprobamos que el botón de apagado quedaba visible después de aplicar la modificación.
No es necesario ejecutar un apagado real para verificar únicamente la visibilidad del botón.
13. Cómo revertir la modificación
Si queremos recuperar la página original del firmware, podemos desmontar el archivo personalizado.
Primero comprobamos si el montaje existe:
grep diagnostics.html /proc/mounts
Después ejecutamos:
umount /usr/local/modules/web/pages/setting/diagnostics.html
Esto retira la superposición y vuelve a dejar visible el archivo original de SquashFS.
La copia personalizada permanece almacenada
en /usr/local/config/web-overrides.
Si configuramos posteriormente una automatización que restaura el montaje durante el arranque, también debemos deshabilitarla para evitar que la modificación reaparezca después de reiniciar.
14. Limitaciones de esta solución
Aunque la recuperación del botón funciona, debemos considerar algunas limitaciones.
14.1. El montaje no sobrevive al reinicio
El comando mount --bind
modifica la vista del sistema de archivos
durante la sesión actual.
Después de reiniciar, es necesario ejecutarlo nuevamente.
14.2. El firmware puede cambiar
Una actualización de OS5 podría modificar
el archivo original diagnostics.html.
En ese caso, conviene comparar nuevamente los archivos antes de reutilizar una copia personalizada creada con una versión anterior.
14.3. La modificación requiere privilegios administrativos
El montaje de archivos sobre ubicaciones del firmware requiere permisos elevados.
Por tanto, estos procedimientos deben ejecutarse únicamente desde una sesión administrativa confiable.
15. Resultado obtenido
En nuestro WD My Cloud Gen 2 con OS5 5.33.102 conseguimos recuperar el botón Shutdown modificando una sola línea de JavaScript.
El procedimiento no requirió modificar la imagen SquashFS ni desarrollar una nueva función de apagado.
La modificación quedó almacenada
en una partición persistente
y se aplicó mediante mount --bind.
Posteriormente comprobamos que era posible restaurarla automáticamente después de reiniciar utilizando una aplicación llamada Boot Scripts.
16. Conclusiones
La recuperación del botón Shutdown demuestra que algunas funciones aparentemente eliminadas del WD My Cloud OS5 continúan presentes en el código original del firmware.
En este caso, Western Digital no eliminó el botón ni su formulario de apagado: solamente ocultó el elemento mediante JavaScript.
La modificación necesaria fue:
$("#id_shutdown_td").show();
El uso de una copia persistente
y de mount --bind
permitió aplicar el cambio sin alterar
directamente la imagen original del firmware.
La principal limitación es que el montaje debe restaurarse después de cada reinicio.
En el siguiente capítulo veremos cómo resolvimos ese problema de manera permanente.
Próximo capítulo
Capítulo 4. Boot Scripts: cómo ejecutar scripts personalizados automáticamente después de reiniciar el WD My Cloud OS5.
Explicaremos cómo instalar Boot Scripts 1.0.0, configurar un script persistente y verificar que el botón Shutdown se restaure automáticamente después del arranque.
Documentación basada en pruebas realizadas sobre WD My Cloud Gen 2 con firmware My Cloud OS5 5.33.102 en octubre de 2026.
Comentarios
Publicar un comentario