Problema

Al conectar un disco duro con particiones NTFS a una distribución Linux reciente, el sistema lo monta automáticamente en modo read‑only. El usuario no puede crear ni modificar archivos y el propietario de los directorios aparece como root. El síntoma típico es:

The disk contains an unclean file system (0, 0). Metadata kept in Windows cache, refused to mount.
Falling back to read-only mount because the NTFS partition is in an unsafe state.

Este comportamiento no es exclusivo de una instalación específica; ocurre en cualquier entorno donde un disco NTFS haya sido usado previamente bajo Windows con Fast Startup, hibernación o un apagado abrupto. El kernel de Linux, al detectar un estado “unclean”, protege el sistema montando la partición como solo‑lectura para evitar corrupción.

Causa

  1. Fast Startup / Hibernación
    Windows 8 y posteriores habilitan por defecto “Fast Startup”, que guarda el estado del sistema de archivos en una caché antes de apagar. Esa caché deja el volumen NTFS en estado “dirty”. Linux interpreta el flag y rechaza el acceso de escritura.

  2. Apagado inesperado o error de hardware
    Si el equipo se apaga sin pasar por el proceso de cierre de Windows, el journal de NTFS queda sin cerrar. El flag de “unclean” persiste.

  3. Montaje automático sin opciones de escritura
    Algunos entornos de escritorio montan discos externos con la opción ro por precaución, especialmente si el disco está etiquetado como “removable”.

  4. Falta de utilidades NTFS
    Sin el paquete ntfs-3g (o su reemplazo en algunas distros) Linux no tiene un driver de escritura completo y recurre a montar en modo solo‑lectura.

Solución

La estrategia se divide en tres pasos: limpiar el estado NTFS, instalar el driver adecuado y configurar el montaje.

1. Limpiar el estado del volumen

  • Desde Windows
    Arranca el equipo con Windows, desactiva Fast Startup (Panel de control → Opciones de energía → Elegir lo que hace el botón de encendido → Desactivar inicio rápido) y apaga normalmente. Esto garantiza que Windows cierre el journal y marque el volumen como limpio.

  • Desde Linux
    Si no tienes acceso a Windows, instala ntfs-3g y ntfsprogs (en muchas distros ntfs-3g incluye ntfsfix). Luego ejecuta:

sudo ntfsfix -b -d /dev/sdX1

ntfsfix repara el flag de “unclean”, fuerza un desmontaje limpio y actualiza el journal. No es un reemplazo completo de chkdsk, pero es suficiente para permitir escritura.

2. Asegurar que el driver de escritura está presente

En la mayoría de distribuciones modernas el paquete se llama ntfs-3g. Instálalo si no está:

sudo apt-get install ntfs-3g   # Debian/Ubuntu
sudo dnf install ntfs-3g       # Fedora
sudo pacman -S ntfs-3g         # Arch

Con ntfs-3g el montaje por defecto será rw siempre que el volumen esté limpio.

3. Configurar el montaje permanente

Para evitar que el gestor de archivos lo monte como ro, crea una entrada en /etc/fstab. Identifica el UUID del dispositivo:

blkid /dev/sdX1

Ejemplo de línea fstab:

UUID=1234ABCD-56EF-78GH-90IJ-KLMNOPQRSTU /mnt/ntfs_hdd ntfs-3g defaults,windows_names,locale=en_US.utf8 0 0
  • defaults incluye rw.
  • windows_names evita nombres de archivo incompatibles.
  • locale asegura la codificación correcta.

Si prefieres montar bajo demanda, usa el comando mount con la opción -o rw:

sudo mount -t ntfs-3g -o rw,uid=$(id -u),gid=$(id -g) /dev/sdX1 /mnt/ntfs_hdd

uid y gid asignan la propiedad al usuario actual, eliminando la necesidad de cambiar permisos después del montaje.

Cuándo aplicar esta solución

  • Síntomas: al intentar crear un directorio o archivo el mensaje indica “read‑only file system”, o mount muestra ro.
  • Entorno: disco NTFS usado previamente bajo Windows, especialmente con Fast Startup habilitado.
  • No aplica: si el disco está formateado en ext4, btrfs u otro sistema nativo de Linux; o si el hardware presenta fallas físicas (SMART errors) que impiden montar en modo escritura.

Código

# 1. Instalar driver y herramientas
sudo apt-get install -y ntfs-3g ntfsprogs

# 2. Reparar flag de “unclean”
sudo ntfsfix -b -d /dev/sdb1

# 3. Obtener UUID
blkid /dev/sdb1

# 4. Añadir entrada a /etc/fstab (reemplazar UUID)
# UUID=XXXX-XXXX  /mnt/ntfs_hdd  ntfs-3g  defaults,windows_names,locale=en_US.utf8  0  0

# 5. Montar manualmente (opcional)
sudo mount -t ntfs-3g -o rw,uid=$(id -u),gid=$(id -g) /dev/sdb1 /mnt/ntfs_hdd

Verificación

  1. Comprobar estado del montaje

    mount | grep /mnt/ntfs_hdd
    

    La salida debe contener rw, y no ro,.

  2. Crear un archivo de prueba

    touch /mnt/ntfs_hdd/.test_write
    ls -l /mnt/ntfs_hdd/.test_write
    

    Si el archivo aparece con tu UID/GID, la solución funciona.

  3. Reiniciar y validar fstab

    sudo reboot
    mount | grep /mnt/ntfs_hdd
    

    El punto de montaje debe seguir siendo rw.

Notas adicionales

  • Desactivar Fast Startup es la medida preventiva más fiable. Incluso si solo usas Linux, Windows puede volver a tocar el disco (actualizaciones, reparación automática) y volver a marcarlo como sucio.
  • ntfsfix no reemplaza chkdsk. Si el disco muestra errores recurrentes, conéctalo a Windows y ejecuta chkdsk /f /r.
  • SMART: antes de formatear, verifica la salud del disco con smartctl -a /dev/sdb. Un disco con sectores reasignados puede montar en ro por razones de integridad.
  • Permisos: si prefieres que todos los usuarios tengan acceso, agrega la opción umask=000 a fstab. Usa con cautela en entornos multi‑usuario.
  • Backups: siempre mantén una copia de los datos críticos antes de ejecutar reparaciones de bajo nivel. Un fallo de hardware durante ntfsfix puede empeorar la situación.