Lo hice y lo entendí

El blog de Vicente Navarro
28 oct

Unidades montadas y enlaces simbólicos en Windows

Supongamos que tenemos el típico sistema UNIX en el que hay varios sistemas de ficheros,el de /, uno para /usr, otro para /var, otro para /home, etc. ¿Qué haríamos si necesitáramos más espacio en alguno de ellos?

Lo más típico sería tratar de extender el sistema de ficheros, especialmente si estamos usando LVM, ya que sólo necesitaríamos algo de sitio libre en el VG. En Linux, si estamos usando particiones de toda la vida, también podríamos extender el sistema de ficheros con aplicaciones como GParted.

Otra opción bastante típica es la de montar un nuevo sistema de ficheros allí donde necesitemos espacio. Por ejemplo, si necesitamos más sitio en /opt/applicacionX porque ahí vamos a instalar una aplicación que necesita mucho espacio, podemos montar ahí un nuevo sistema de ficheros con todo el espacio necesario.

Si no tenemos espacio disponible en los discos, pero sí en otros sistemas de ficheros, siempre podemos hacer la típica chapucilla de crear un enlace simbólico del sistema de ficheros sin sitio a algún directorio del sistema de ficheros con suficiente espacio libre.

Hace unos días me encontré con una situación similar, pero en Windows. Me quedé sin espacio en C: y lo necesitaba para que cierta aplicación pudiera funcionar bien. Explorando las opciones que tenía, resulta que todas estas cosas que típicamente hacemos en sistemas UNIX también las podemos hacer en Windows.

Podemos, siempre que se cumplan determinadas condiciones, extender sistemas de ficheros NTFS usando diskpart: How to extend a data volume in Windows Server 2003, in Windows XP, in Windows 2000, and in Windows Server 2008. El GParted de Linux también se puede usar con particiones NTFS (How to resize a partition / What happens with NTFS file systems).

También podemos montar un volumen bajo un directorio vacío: How to create and use NTFS mounted drives in Windows XP and in Windows Server 2003. Por ejemplo, imaginemos un sistema que vemos así en el administrador de discos (ejecutamos diskmgmt.msc o dentro del administrador de equipos del Panel de Control, Herramientas Administrativas (compmgmt.msc)):

Supongamos que C: está casi lleno y necesitamos instalar algo en C:\Aplicacion. El segundo disco que está vacío y sin usar lo podemos montar bajo dicho directorio fácilmente. Simplemente creamos el directorio C:\Aplicacion:

y en el gestor de discos hacemos clic con el botón derecho sobre el disco libre y elegimos montarlo en C:\Aplicacion:

y el Explorer nos mostrará el directorio con un icono especial:

Finalmente, también podemos crear enlaces simbólicos. En Windows hay 3 tipos de enlaces simbólicos:

  • Los “shortcuts” o “accesos directos”, que se pueden crear fácilmente con el explorador de Windows desde la época de Windows 95. El problema con ellos es que en principio sólo los sabe usar el explorador de Windows. Para otras aplicaciones son simplemente un fichero con extensión .lnk. Es decir, no es algo implementado a bajo nivel, sino que la aplicación tiene que saber y querer utilizarlos.

  • Los NTFS Junction Points son un tipo de enlaces simbólicos introducido en Windows 2000 bastante oscuros y con una implementación bastante “fea” comparado con los enlaces simbólicos de UNIX. Por ejemplo, si borras un “Junction Point” con el explorador o con el comando del, el fichero destino se borra, en contra de lo que esperaríamos de que sólo se borrara el enlace. Además, las herramientas necesarias para crearlos y manipularlos ni siquiera vienen por defecto con el sistema operativo: How to create and manipulate NTFS junction points.

  • En Windows Vista, 7 y 2008, Microsoft introdujo finalmente los enlaces simbólicos en NTFS a la imagen y semejanza de los de UNIX de la mano del comando mklink

Centrémonos un poco en el mklink:

C:\>mklink
Creates a symbolic link.

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is a file
                symbolic link.
        /H      Creates a hard link instead of a symbolic link.
        /J      Creates a Directory Junction.
        Link    specifies the new symbolic link name.
        Target  specifies the path (relative or absolute) that the new link
                refers to.

Lo primero que podría llamarnos la atención es que es necesario especificar si vamos a hacer un enlace a un directorio o a un fichero, cuando en UNIX esto es transparente. También tenemos que fijarnos en que el orden es contrario al de UNIX; en Windows es link target y en UNIX target link. Pero aparte de eso, se comporta más o menos como esperaríamos. Imaginemos que tenemos espacio en D:\Espacio\ y que queremos usarlo desde C:\Aplicacion. Sólo tendríamos que hacer:

C:\>mklink /D C:\Aplicacion D:\Espacio
symbolic link created for C:\Aplicacion <<===>> D:\Espacio

para crear el enlace y en un sencillo dir veríamos el enlace:

C:\>dir
 Volume in drive C is DiscoC
 Volume Serial Number is 3D17-7E9E

 Directory of C:\

28/10/2010  01:01    <SYMLINKD>     Aplicacion [D:\Espacio]
25/10/2010  22:57    <DIR>          Program Files
17/10/2010  11:40    <DIR>          Program Files (x86)
26/10/2010  15:10    <DIR>          Temp
07/10/2010  13:20    <DIR>          Users
28/10/2010  00:28    <DIR>          Windows

A diferencia de los shortcuts o accesos directos, estos enlaces simbólicos sí que están implementados a bajo nivel y, por tanto, son transparentes para las aplicaciones. Igual que lo serían en UNIX. Por supuesto, si borramos el enlace simbólico (con rmdir por ser un enlace de directorio, para un enlace de fichero usaríamos del, ya que no siempre se usa el equivalente a rm como hacemos en UNIX) se borra sólo el enlace, no el destino.

En el explorador de Windows, estos enlaces simbólicos tienen el aspecto de un acceso directo, pero no podemos editar sus propiedades.

:wq

Entradas relacionadas

8 Comentarios a “Unidades montadas y enlaces simbólicos en Windows”

  • Danielgd dice:

    ¿Y en Vista? No sé si es intencionado, pero leyendo esto parece que Vista nunca existió.
    Sin embargo, en la página de mklink vemos que también está ahí.

  • Manuel dice:

    ¡¡Buenísimo!!… pues no habré echado de menos veces los enlaces simbólicos en Windows.

    Esta entrada me la guardo en favoritos, me va a venir realmente bien.

    un saludo.

  • Duxpas dice:

    Como siempre se nota tu altísimo nivel en los artículos.
    Gracias, simplemente genial. :)

  • finidine dice:

    Enhorabuena por la entrada en el blog.

    Desde hace tiempo utilizo la técnica de “montar” una partición en Windows para separar los datos de usuario de la partición de sistema. Básicamente es hacer un enlace a “c:\Documents and Settings” de una partición. Lamentablemente esto sólo se puede hacer de forma sencilla si el sistema no está en ejecución… por lo que utilizo el “Mini Windows XP” del Hirens Boot CD para hacer los enlaces.

  • zizou dice:

    Esta muy bueno este blog pana! espero los sigas manteniendo, Saludos desde Venezuela…

  • Jvare dice:

    Realmente interesante la información, porque aunque usemos linux en casa, muchas veces tenemos que solucionar problemas en equipos con windows.

  • Jordi Ver dice:

    Muy buena entrada! Lo de la unidades montadas lo conocia, pero lo de los enlaces simbólicos no.

Tema LHYLE09, creado por Vicente Navarro