El protocolo iSCSIes muy útil. Nos permite definir unidades virtuales de almacenamiento en una máquina, y adjuntarlas a una máquina remota diferente. Lo interesante de esto es que esas unidades remotas se ven en la máquina como si fueran unidades locales. Es decir, aunque están ubicadas en otro sitio, para el sistema operativo es como si fueran discos duros físicos que tuviese enchufados, y no se ven como unidades de red. Esto es estupendo porque permite hacer un acceso de bajo nivel a la unidad, usando los mismos comandos que usaría para acceder a un disco físico, y por lo tanto la unidad se puede formatear y escribir como cualquier otra. Al no tratarse como carpetas de red remotas no tiene las limitaciones de éstas, aunque sí tienen otras.
En iSCSI cada unidad virtual dispone de un identificador único denominado LUN, o Logical Unit Number. Éste sirve para identificarla de manera inequívoca en la red. Aunque técnicamente no es correcto, lo más habitual es que nos refiramos a las unidades virtuales directamente como LUNs. O sea, cuando dices "Voy a adjuntar a esta máquina esa LUN" todo el mundo entiende que dices "Voy a adjuntar a esta máquina la unidad de disco virtual cuya LUN es esa".
El rendimiento de iSCSI es muy bueno, y es una gran alternativa a las carpetas compartidas cuando no es necesario compartir el acceso a la unidad, ya que cada LUN solo puede estar adjuntada a un único equipo a la vez. Es decir, al contrario que una unidad de red compartida, las LUN solo pueden usarse desde un único equipo remoto si no queremos que se corrompan. El motivo es que al gestionarse con un acceso a bajo nivel al disco, los comandos enviados simultáneamente desde varios sitios pueden entrar en conflicto y corromper la información.
iSCSI es muy fácil de montar con una versión cualquiera de Windows Server, pero la mayor parte de los equipos de almacenamiento (NAS) que hay en el mercado ofrecen la posibilidad de crear LUNs y compartir mediante iSCSI, incluso los equipos destinados a pequeñas oficinas o PYMEs (los hay por poco más de 100€, sin discos, basados en Linux).
El problema de Windows Server 2012 con las LUN
Hace poco estaba trasteando con un servidor virtual nuevo con Windows 2012, y me ocurrió una cosa muy extraña: había adjuntado un par de LUN remotas de un NAS a la máquina, pero de repente, al día siguiente, habían desaparecido.
Esto es algo extraño porque tengo otro equipo con Windows Server 2008 R2 al que tengo adjuntadas también otras dos LUN y en las que jamás había pasado nada parecido.
Cuando me fui al administrador de discos para ver si estaban allí "físicamente", aunque no fuesen accesibles desde el explorador de archivos, en efecto allí se encontraban, pero mostraban un icono de información con el siguiente mensaje:
The disk "XXXX" is offline because of a policy set by an administrator
O lo que es lo mismo, en español:
El disco "XXXX" está offline debido a una política creada por un administrador
¡Qué raro! Yo soy el administrador y no he establecido ninguna política al respecto.
Abriendo una línea de comandos como administrador se puede comprobar el estado de las unidades de tipo SAN (Storage Attached Network), que son las que nos ocupan en este caso, entrando en la utilidad de gestión de discos (diskpart), y escribiendo el comando "san":
Si consultamos la documentación de esta política en TechNet, nos dice que este estado pone off-line todos los discos que estén en un bus compartido (o sea, SCSI o iSCSI, que es nuestro caso).
Esto quiere decir que aunque hayamos adjuntado las LUN adecuadamente, cuando el equipo se reinicie y descubra de nuevo las unidades de disco, todas las que estén en un bus compartido (como el iSCSI) se dejarán off-line y por lo tanto no serán accesibles por los programas. WTF??
En este caso lo que pasó es que se instalaron actualizaciones en el equipo por la noche y tuvo que reiniciarse. Al hacerlo se perdió el acceso a las unidades iSCSI.
Por lo visto, en algunas versiones de Windows Server la política por defecto para las unidades SAN se ha cambiado y ahora es esta. Anteriormente no era así y todas las unidades iSCSI se levantaban automáticamente al reiniciar la máquina. De hecho, buscando información encontré que este problema está afectando a mucha gente que virtualiza con VMWare porque todos los discos virtuales VMDK que se añaden a una máquina virtual con este software se hacen como si fueran unidades SAN. Esto provoca que de repente dejen de funcionar las máquinas porque todos los discos menos el del sistema se quedan offline al reiniciarlas.
¿Por qué habrá cambiado Microsoft este comportamiento? Ni idea, pero es así y al parecer está causando estragos en la comunidad de virtualización que usa sistemas Windows empresariales. Ya te vale Microsoft...
Nota: En Windows Server 2008 Standard la política de SAN es "Online All", así que no da problemas. Pero en las ediciones Enterprise y DataCenter de Windows Srver 2008 y Windows Server 2008 R2, la política es "Offline Shared", como en la figura, por lo que da problemas. En Windows Server 2012 R2 puedo asegurar que la política por defecto en todas las ediciones es ya esta (he probado con la edición Standard y la DataCenter). No sé cómo será en Windows Server 2012 porque no tengo ninguno instalado, pero apuesto a que es lo mismo. Imagino que tiene que haber una buena razón para el cambio, pero no se me ocurre cuál puede ser...
La solución
Evidentemente puedes volver a poner las unidades en orden de uso pulsando con el botón derecho en el nombre de la unidad desde el administrador de discos y escogiendo la opción "OnLine":
Sin embargo es una solución temporal, puesto que en cuanto la máquina se reinicie volveremos a tener el mismo problema.
Para solucionarlo hay que cambiar la política de la SAN y hacer que sea "Online All" como era anteriormente por defecto.
Para ello hay que abrir la línea de comandos como administrador y lanzar Diskpart de nuevo. Los comandos a seguir los he puesto en la siguiente captura de pantalla:
Básicamente lo que se hace es:
- Cambiar la política respecto a las SAN con el comando san policy=OnlineAll. Esto pondrá el sistema operativo en el modo correcto para próximos reinicios.
- Ahora listamos los discos que hay en la máquina con list disk. En mi caso tengo 4 discos, siendo los dos últimos (2 y 3) los correspondientes a las LUN. El 2 lo he levantado a mano desde el administrador de discos.
- Seleccionamos el disco que queremos levantar: select disk 3.
- Ahora le quitamos el atributo de solo lectura, ya que la política "Offline Shared" además de dejarlos off-line los pone en modo de solo lectura. Para ello empleamos el comando attributes disk clear readonly, que le borrará ese atributo de solo lectura.
- Verificamos que efectivamente se le ha quitado el atributo listándolos todos con el comando attributes disk.
- Finalmente levantamos el disco con el comando online disk, equivalente a usar el menú "Online" del administrador de discos.
¡Listo! Ahora los discos vuelven a estar en línea y la próxima vez que reiniciemos se montarán automáticamente.
¡Espero que te resulte de ayuda!