1 puntos por GN⁺ 2024-12-01 | 1 comentarios | Compartir por WhatsApp
  • Ntfs2btrfs es una herramienta que convierte en el lugar el sistema de archivos Microsoft NTFS al sistema de archivos de código abierto Btrfs, y funciona de forma similar a btrfs-convert para ext2
  • Antes de la conversión, la imagen original se guarda como una copia reflink en image/ntfs.img, y si se desea conservar el resultado de la conversión, se puede borrar esa imagen para liberar espacio
  • En Windows se ejecuta desde un símbolo del sistema con privilegios de administrador con ntfs2btrfs.exe D:\, y en Linux se ejecuta como root con ntfs2btrfs /dev/sda1
  • No funciona en la unidad de arranque ni en una unidad que tenga un pagefile actualmente en uso, y si se usa WinBtrfs, para poder borrar el subvolumen image hay que quitarle primero el flag de solo lectura
  • El soporte incluye archivos, directorios, enlaces simbólicos, descriptores de seguridad, flujos de datos alternativos, rollback de NTFS y preservación de metadatos LXSS, pero no admite archivos cifrados ni tamaños de clúster inusuales

Qué hace Ntfs2btrfs

  • Ntfs2btrfs es una herramienta para convertir en el lugar un sistema de archivos NTFS a Btrfs
  • La imagen original se guarda como una copia reflink en image/ntfs.img
    • Si se desea conservar el resultado de la conversión, se puede borrar este archivo para liberar espacio
  • Se indica que la herramienta es estable, pero también incluye la advertencia de que el autor no se hace responsable si ocurre algún problema
  • También se enlaza como proyecto relacionado el controlador de sistema de archivos Btrfs para Windows WinBtrfs
  • Se usa código de ntfs-3g-system-compression de Eric Biggers, quien hizo ingeniería inversa a “WOF compressed data” de Windows 10

Uso y restricciones

  • En Windows se ejecuta desde un símbolo del sistema con privilegios de administrador
    • ntfs2btrfs.exe D:\
  • En Linux se especifica el dispositivo de bloques con privilegios de root
    • ntfs2btrfs /dev/sda1
  • En Windows no se pueden convertir los siguientes destinos
    • Unidad de arranque

      • Unidad que tenga un pagefile actualmente en uso
      • Si se usa WinBtrfs, para borrar el subvolumen image primero hay que quitar el flag de solo lectura

Ruta de instalación

  • En Windows se puede descargar el archivo Zip más reciente desde la página de Releases o usar Scoop
  • Se ofrecen paquetes para distintas distribuciones de Linux
  • En otras distribuciones o sistemas operativos hay que compilarlo manualmente

Compilación y dependencias

  • En Windows se abre el directorio del código fuente con una versión reciente de MSVC y se ejecuta Compile desde CMakeLists.txt
  • En Linux se compila con cmake y make
    • mkdir build
    • cd build
    • cmake ..
    • make
  • Para la compilación se requiere libfmt, que puede instalarse con el gestor de paquetes
  • Para el soporte de compresión se requieren zlib, lzo, zstd
    • Con las opciones de CMake WITH_ZLIB, WITH_LZO, WITH_ZSTD se puede desactivar ese soporte

Funciones compatibles

  • Se pueden convertir o preservar los siguientes elementos
    • Archivos

    • Directorios

      • Enlaces simbólicos
      • Otros reparse points
      • Descriptores de seguridad
      • Flujos de datos alternativos
      • Atributos DOS
      • hidden, system, etc.
      • Rollback a la imagen NTFS original
      • Preservación de metadatos LXSS

Elementos no compatibles

  • Los atributos extendidos antiguos de Windows no son compatibles
  • Los flujos de datos alternativos grandes de más de 16 KB no son compatibles
  • No se admite la preservación del flag de case-sensitivity
  • No se admiten tamaños de clúster inusuales que no sean de 4 KB
  • Los archivos cifrados no son compatibles

Cambios principales visibles en el historial

  • La versión del 2025-06-16 corrige un problema de compilación con GCC 15
  • La versión del 2024-01-15 corrige un problema de compilación causado porque en GCC 14 -Werror=incompatible-pointer-types pasó a estar activado por defecto
  • La versión del 2023-05-01 corrige un problema con el orden de inline extent item y otro con el valor de nivel de metadata item
    • Se indica que ambos problemas no son diagnosticados por btrfs check
    • También se cambió el comportamiento para omitir ADS con nombres excesivamente largos
  • La versión del 2022-08-12 incluye la opción --no-datasum, preservación de metadatos LXSS/WSL, corrección en el reconocimiento de letras de unidad en minúscula y corrección de corrupción al ubicar archivos en la última región de 1 MB
  • La versión del 2021-09-23 agrega soporte para compresión Btrfs y rollback
    • La compresión soporta zlib, lzo, zstd
    • El algoritmo hash agrega soporte para xxhash, sha256, blake2
    • También admite descriptores de seguridad estilo NT4
    • Mejora la velocidad de conversión en volúmenes con muchos inodes
    • También corrige un bug de corrupción del sistema de archivos que btrfs check no podía detectar
  • La versión del 2021-01-05 incluye correcciones relacionadas con compresión NTFS, “WOF compressed data” y sparse file

En caso de arrancar Windows desde Btrfs

  • Se indica que arrancar Windows desde un Btrfs convertido con esta herramienta es posible si se cumplen las condiciones
  • Como proyecto relacionado se enlaza Quibble

1 comentarios

 
GN⁺ 2024-12-01
Opiniones en Hacker News
  • El enlace a Quibble, que hizo ingeniería inversa del bootloader del kernel de Windows de forma abierta y extensible, me pareció mucho más interesante: https://github.com/maharmstone/quibble

  • Si hiciera esto en ZFS, probablemente agregaría una capa que lea otros formatos de sistemas de archivos y sintetice punteros de bloque de ZFS
    Así ZFS podría leer otros sistemas de archivos y, durante las escrituras, reescribir todo lentamente. Si ZFS tuviera una función para reescribir punteros de bloque, podría hacer que se reescriba todo y terminar la conversión, pero antes expliqué que, como ZFS no es realmente un sistema de archivos de almacenamiento direccionado por contenido (CAS), no tiene esa función y tampoco puede tenerla

  • ¿Alguien aquí que use BTRFS puede contar cómo anda de estabilidad hoy en día? Antes veía muchas historias de terror

    • Como es el valor predeterminado de openSUSE, lo uso desde hace años en mi PC principal y en mi laptop, y descubrí que las instantáneas eran una función que no sabía que quería
      Nunca tuve problemas, pero sí es molesto que el espacio libre que BTRFS cree tener no siempre coincide con el que cree tener el resto del sistema operativo. Aun así, rara vez me ha causado un problema real
    • Llevo más de 10 años usando solo BTRFS en mi laptop personal, servidores y dispositivos embebidos, y jamás tuve un problema
      Salvo por cargas de trabajo de bases de datos, lo considero el sistema de archivos emblemático de Linux, al punto de que no entiendo por qué alguien usaría otro
    • Lo uso desde hace años en equipos personales y para copias de seguridad con btrbk, sin problemas
    • Me explotó en Tumbleweed cuando el disco se llenó, antes de cumplir un año
      Intenté acceder a la partición dañada desde una instalación paralela para arreglarla, pero no sirvió
    • Btrfs está corrompiendo mis datos poco a poco. Archivos pequeños o algunos sectores de archivos grandes se convierten aleatoriamente por completo en valores nulos
  • Necesitaba esto hace 2 meses. Tuve que formatear desde NTFS un disco duro con más de 10 TB de datos
    Es un proyecto genial

  • Me sorprendería bastante si incluso soporta archivos con compresión LZX
    Es algo distinto a la compresión de archivos de la época de Windows 2000, y es una función que hay que activar con compact.exe /C /EXE:LZX (filename)

  • Lo probé hace tiempo y el resultado fue un disco de solo lectura. Espero que haya mejorado desde entonces

  • El nivel de temeridad que se ve aquí se sale de la escala

    • No es tan riesgoso como parece
      La forma estándar es reservar en el sistema de archivos antiguo un archivo grande para los metadatos del nuevo sistema de archivos, y luego recorrer todos los archivos del sistema antiguo creando nuevos extents que apunten a los datos existentes mediante fiemap(). Las escrituras solo se hacen en el espacio reservado
      El superbloque se sobrescribe recién al final, y antes de eso se puede verificar que el contenido del sistema de archivos antiguo y el nuevo sea el mismo
    • Hace unos años era más parecido a hacer malabares con motosierras: https://github.com/maharmstone/ntfs2btrfs/issues/9
      En ese entonces, mientras tocaba esto, rastreé varios bugs bastante desagradables; espero que ahora sea más estable
    • Apple también hizo algo parecido al pasar de HFS+ a APFS en miles de millones de instalaciones reales de OS X/iOS
      Como dicen otros, se puede hacer de forma sistemática y a escala, pero por supuesto requiere cuidado
    • Esto no es el btrfs de Linux
      “WinBtrfs es un driver para Windows del sistema de archivos de nueva generación de Linux, Btrfs. Es una reimplementación desde cero, no contiene código del kernel de Linux y debería funcionar en cualquier versión desde Windows XP en adelante. También se incluye como parte del sistema operativo libre ReactOS.”
      Esto viene de la página del mantenedor de ntfs2btrfs
      https://github.com/maharmstone/btrfs
    • Después de haber visto a Windows romperse dos veces con actualizaciones in situ, yo simplemente compraría un disco o una computadora nueva y empezaría de cero
      Sé que este es otro caso, pero el tiempo invertido en esos datos vale mucho más que un disco nuevo. Personalmente no me parece un riesgo que valga la pena. Si los datos no son importantes, o tienes buenos backups y quieres contribuir a encontrar bugs, entonces podrías probarlo
  • Es realmente genial, pero probablemente la mayoría se va a enterar de esto al menos una semana después de haber terminado de formatear un disco NTFS que venían posponiendo desde hace 2 años