jueves, 29 de abril de 2010

Cómo leer y escribir en particiones NTFS

Si instalaste Ubuntu u otra distro de Linux pensando que inmediatamente podrías escribir sobre tus particiones NTFS (de Windows), te tengo malas noticias: de que se puede, se puede, pero no lo lograrás con sólo un click.

La culpa, en todo caso, no es nuestra.

Resulta que Microsoft nunca liberó las especificaciones de cómo funciona internamente este sistema de archivos, a diferencia de lo que hizo con FAT. Esto significa que para FAT sí hay soporte nativo en Linux, mientras que para NTFS no, al menos no para escritura. Esto, obviamente, ha llevado a varios programadores a lograr el desafío, desarrollando todo en ingeniería inversa, de adelante hacia atrás.

Hoy, después de mucho ensayo y error, se puede hacer sin problemas (un aplauso para los desarrolladores!).

¿Cómo lograrlo? Aquí va el Resumen Resumido™.

La primera, Captive NTFS

Ésta fue el primer proyecto que permitió leer y escribir en las particiones NTFS, y eso lo hace el proyecto más maduro de todos. Sin embargo, la compatibilidad la logran usando Wine y algunos archivos originales de Windows, lo que dificulta la instalación ya que no es absolutamente “limpia”. De hecho, para poder funcionar Captive te pide que “le consigas” ntfs.sys, ntoskrnl.exe y otros archivos más, ya que por un tema de licencias éstos no pueden venir incluídos en el paquete de Captive.

Por todo esto no recomiendo usar este método, pero si te interesa probarlo, así se usa:

Primero, obviamente bajarlo e instalarlo. Después correr captive-install-acquire para obtener los archivos necesarios (puedes sacarlos de tu instalación de Windows, o bien bajarlos desde el sitio de Microsoft). Ahora, para montar una partición (digamos que la quieres montar en /media/win):

$ sudo mkdir /media/win
$ sudo mount -t captive-ntfs /dev/hda1 /media/win

Y para que quede montada automáticamente cuando bootees, agrega esta línea a /etc/fstab:

/dev/hda1 /media/win captive-ntfs rw,umask=002,nls=utf8

Dependiendo de dónde esté tu partición NTFS tendrás que cambiar hda1 por lo que necesites. Si se trata de la tercera partición del segundo disco, por ejemplo, debería ser hdb3 (la fórmula es hd + orden del disco + número de partición).

Otro dato: éstos últimos comandos son genéricos, es decir también funcionan con los otros drivers, sólo tienes que cambiar ‘captive-ntfs’ por ‘ntfs’ o ‘ntfs-3g’. Pero ya llegaremos a eso.
La segunda, con el driver de linux-ntfs

Este método es el más fácil, aunque no el ideal. El driver viene incluído en la mayoría de las distribuciones y ya es prácticamente un estándar, básicamente porque es bien seguro. La razón de esto es que, si bien permite leer archivos y sobreescribir en los existentes, no permite crear nuevos archivos ni borrar los antiguos. Personalmente uso este método sólo cuando necesito leer algún archivo de la partición donde está Windows instalado (por ejemplo para acceder al escritorio, que está en Documents&Settings).

Demás está decir que no tienes que instalar nada.

Bueno, para montar la partición, usa los mismos comandos de arriba, pero reemplazando captive-ntfs por sólo ntfs. Es decir:

$ sudo mount -t ntfs /dev/hda1 /media/win

Y para que quede montada automáticamente cuando bootees, en /etc/fstab agregar:

/dev/hda1 /media/win ntfs rw,umask=002,nls=utf8

Y la tercera, con el nuevo ntfs-3g

Esta es la última versión del driver linux-ntfs, y en mi opinión es el método ideal. Primero, porque es completamente abierto (a diferencia de Captive que usar partes propietarias de Windows), segundo porque puedes hacer absolutamente todo (copiar, borrar, editar, etcétera), y por último: es rápido. Bien rápido. Al menos así dicen las primeras pruebas que se hiceron con el driver, que incluso lo situaron por sobre ext3, el sistema de archivos estándar de Linux (Reiser ganó por lejos).

Este driver eventualmente llegará a ser parte del kernel (por lo que tendremos soporte nativo después de todo), pero por ahora hay que instalarlo a mano para echarlo a andar.

Todo lo que tienes que hacer es instalar fuse y después ntfs-3g. Por ahora no hay paquetes .DEB para hacerlo vía Synaptic, pero puedes hacerlo compilándolo vía consola. No te asustes, son sólo un par de comandos simples. Yo ya lo hice y he ha funcionado perfecto.

UPDATE: Ya tenemos paquetes para Ubuntu, así que no te costará nada hacerlo funcionar.

Primero, agrega los siguientes repositorios a /etc/apt/sources.list:

deb http://flomertens.keo.in/ubuntu/ dapper main
deb-src http://flomertens.keo.in/ubuntu/ dapper main

Ahora instala el paquete ntfs-3g, después de actualizar el listado con Synaptic. Y para montar la partición:

$ sudo mount -t ntfs-3g /dev/hda1 /media/win

Por último, si quieres que quede montada automáticamente cuando bootees, en /etc/fstab agrega:

/dev/hda1 /media/win ntfs-3g rw,umask=002,nls=utf8

OPCIONAL: Si quieres instalar ntfs-3g compilándolo:

Sólo asegurate que (si tienes Ubuntu) tengas el paquete build-essentials instalado. Ahí viene todo lo necesario para compilar un programa. Puede que también necesites el kernel-headers o quizás el pkgbuild, dependiendo de tu distribución.

¿Listo? Después de bajar y descomprimir ambos paquetes (fuse y ntfs-3g, en ése orden), haz ésto:

$ ./configure
$ make
$ sudo make install

¿Ves que no es nada difícil? El primer comando verifica que todo esté en orden y configura las rutas de acceso para compilar el módulo. El segundo efectivamente lo compila (lo “hace”, por “make”); y el tercero lo instala. Si nunca antes habías compilado un programa, bueno, ahora lo acabas de hacer. :)

Ahora, para montar las particiones, usa el mismo método de arriba pero reemplaza “ntfs” por “ntfs-3g”. Todo listo.

No hay comentarios:

Publicar un comentario