UFS2Tool es un gestor de sistemas de archivos FreeBSD UFS1/UFS2, con versiones para Windows, macOS y Linux.
Una implementación completa de los comandos de FreeBSD newfs(8), makefs(8), tunefs(8), growfs(8), fsck_ufs(8) y chmod para crear, gestionar y comprobar sistemas de archivos UFS1 y UFS2, orientada tanto a archivos de imagen como a dispositivos de disco sin formato (Windows).
Las operaciones con archivos de imagen funcionan en cualquier plataforma compatible con .NET 8.0.
Principales características:
- Crear sistemas de archivos UFS1 y UFS2 en archivos de imagen o dispositivos de Windows sin formato
- Compatibilidad total con newfs(8): admite todos los indicadores estándar de newfs de FreeBSD (excepto -T, -k, -r)
- Poblar desde directorio: permite crear imágenes a partir del contenido de un directorio con dimensionamiento automático (-D)
- Comando makefs: interfaz compatible con makefs(8) de FreeBSD para crear imágenes de sistemas de archivos a partir de árboles de directorios
- Comando growfs: interfaz compatible con growfs(8) de FreeBSD para expandir imágenes de sistemas de archivos existentes
- Comando fsck_ufs: comprobador de consistencia de sistemas de archivos compatible con fsck_ffs(8)/fsck_ufs(8) de FreeBSD
- Extraer archivos de imágenes de sistemas de archivos UFS1/UFS2 existentes
- Reemplazar archivos en imágenes de sistemas de archivos UFS1/UFS2 existentes (archivo individual o árbol de directorios)
- Añadir archivos a imágenes de sistemas de archivos UFS1/UFS2 existentes (archivo individual o árbol de directorios, recursivo)
- Eliminar archivos de imágenes de sistemas de archivos UFS1/UFS2 existentes (archivo individual o árbol de directorios, recursivo)
- Montar imágenes UFS como unidades de Windows con soporte de lectura y escritura a través de Dokan
- Leer e inspeccionar imágenes de sistemas de archivos UFS1/UFS2 existentes
- Listar contenidos de directorios de imágenes UFS1/UFS2
- E/S de dispositivo: escritura directa en unidades físicas y volúmenes en Windows
Inicio rápido para PS5
Utilice este comando para crear rápidamente una imagen UFS2 compatible para ser montada en la PS5 con ShadowMount:
UFS2Tool.exe newfs -D <carpeta> <PPSAxxxx.ffpkg>
Alternativamente, puede utilizar este comando para crear rápidamente una imagen UFS2 con opciones FFS compatibles con FreeBSD que se pueda montar en la PS5 con ShadowMount:
UFS2Tool.exe makefs -S 4096 -t ffs -o version=2,minfree=0,softupdates=0,optimization=space <PPSAxxxx.ffpkg> <carpeta>
Aplicación con interfaz gráfica (GUI)
El proyecto incluye una interfaz gráfica moderna y multiplataforma construida con Avalonia UI en el directorio UFS2Tool.GUI. La interfaz gráfica proporciona acceso a todas las operaciones principales de UFS2Tool:
- Crear sistema de archivos: crear imágenes UFS1/UFS2 con parámetros configurables
- Operaciones del sistema de archivos: listar, extraer, añadir, eliminar, reemplazar archivos y cambiar permisos
- Mantenimiento: operaciones TuneFS, GrowFS y FsckUFS
- Montaje de dispositivos: montar/desmontar imágenes UFS como unidades de Windows (solo en Windows, requiere Dokan)
- Creación rápida para PS5: plantillas preestablecidas para la creación de sistemas de archivos compatibles con PS5
- Ajustes: selección de idioma (admite 11 idiomas)
Notas
- Las operaciones de dispositivo (newfs en unidades físicas, devinfo, mount_udf) requieren privilegios de administrador en Windows.
- La herramienta está orientada a net8.0 y utiliza funciones específicas de Windows de forma condicional para la E/S de dispositivos y el montaje con Dokan.
- Las operaciones de archivos de imagen (crear, inspeccionar, extraer, añadir, eliminar, reemplazar, chmod, growfs, tunefs, fsck) funcionan en cualquier plataforma compatible con .NET 8.0.
- Las imágenes de sistemas de archivos creadas con esta herramienta son compatibles con mount y fsck_ffs de FreeBSD.
- Al crear imágenes con makefs, las actualizaciones suaves (soft updates) están desactivadas por defecto (softupdates=0), coincidiendo con el comportamiento de makefs(8) de FreeBSD. Utilice -o softupdates=1 para activarlas explícitamente.
UFS2Tool es un proyecto encabezado por SvenGDK.
Que novedades incluye la versión 4.0
Released
Nuevas funciones de la interfaz gráfica de usuario
-
Explorador de contenidos de imagen UFS: Se ha añadido un explorador de contenidos con vista de árbol para inspeccionar y manipular el contenido de imágenes UFS, incluyendo la función de arrastrar y soltar para añadir archivos.
-
Opciones de gestión: Se han incorporado opciones para actualizar, extraer, añadir archivos, añadir carpetas y eliminar.
-
Escritura de sistema de archivos: Se ha implementado la escritura de imágenes UFS en unidades USB/HDD/SSD en Windows, Linux y macOS.
-
Procesamiento por lotes de PS5: Se ha añadido la conversión de múltiples carpetas a imágenes UFS en una sola operación.
-
Detección automática de idioma: Se ha habilitado la aplicación automática del idioma según la configuración regional del sistema operativo al iniciar la aplicación.
Nuevos comandos de imagen UFS
-
du: Muestra el uso de disco de archivos y directorios en una imagen de sistema de archivos UFS1/UFS2, de forma similar al comando
du(1)de FreeBSD. -
find: Realiza búsquedas recursivas de archivos y directorios que coincidan con un patrón de nombre dentro de una imagen de sistema de archivos UFS1/UFS2. Similar al comando
find(1)de Unix con coincidencia por nombre (-name). -
stat: Muestra información detallada del inodo para un archivo, directorio o enlace simbólico dentro de una imagen de sistema de archivos UFS1/UFS2. Similar al comando
stat(1)de Unix.
Nuevos idiomas
- Bahasa Indonesia
- Húngaro (Magyar)
- Neerlandés (Nederlands)
- Portugués de Brasil (Português Brasil)
- Chino tradicional (中文 繁體)
Correcciones
Correcciones del núcleo
-
Campo
_writerque admite valores nulos (Ufs2Image.cs): Se ha corregido la declaración del campo_writer, que producía advertencias CS8618 al estar marcado como no nulo pero inicializarse solo cuandoreadOnly=false. -
Fuga de recursos en el constructor (Ufs2Image.cs): Se ha solucionado un error por el cual, si
ReadSuperblock()lanzaba una excepción (imagen no válida), los flujosFileStream,BinaryReaderoBinaryWriterya abiertos no se liberaban. -
Error en el reporte de espacio libre en
GetDiskFreeSpace: Se ha corregido el cálculo que utilizabaFreeBlocks * FSize. Dado queFreeBlocksrepresenta bloques libres y no fragmentos, se informaba de un espacio inferior al real (normalmente 8 veces menos). -
El comando
lsignoraba el argumento[path]: Se ha corregido el fallo por el cual siempre se ejecutabaListRoot(); ahora el comando resuelve y enumera el directorio especificado por el usuario. -
Lectura excesiva del búfer en
Ufs2DirectoryEntry.ReadFrom: Se han corregido los desbordamientos de índice que ocurrían en entradas corruptas dondeNameLengthera mayor quenameAreaSize. -
ReadInode()/WriteInode(): Se ha cambiado la comprobación de límites detotalInodesde multiplicaciónintalongpara evitar desbordamientos que eludían la validación. -
FsckUfs(): Se ha aplicado la misma corrección de desbordamiento entotalInodespara el tamaño de las matrices de seguimiento por inodo, añadiendo una protección explícita ya que las matrices requieren una longitud de tipoint. -
AllocateInode()/FsckUfs()Fase 5: Se ha corregido el desbordamiento en el cálculoglobalIno = cgIndex * inodesPerGroup + i.
Interfaz gráfica
-
Mensaje de éxito falso con entradas no válidas: Se ha corregido un error en el procesamiento del modo (conversión octal) que se ejecutaba dentro de una expresión lambda de
Task.Run. Ante excepciones de formato o desbordamiento, el método asíncrono externo seguía registrando que los permisos se habían cambiado correctamente. -
Directorios inaccesibles tras
chmodrecursivo: Se ha solucionado el problema por el cualimage.ChmodAll(mode, mode)aplicaba el mismo modo a archivos y directorios. Al establecer644de forma recursiva, se eliminaban los bits de ejecución de los directorios, impidiendo su acceso. Se ha añadido el asistenteAddExecuteBitspara derivar correctamente el modo del directorio.
Fiabilidad
-
Gestión de lecturas parciales en
Stream.Read: Se ha añadido el asistenteReadFullyque realiza un bucle hasta completar la lectura de todos los bytes y lanza una excepciónEndOfStreamExceptionsi los datos están truncados. -
Validación de límites en
ReadInode/WriteInode: Se ha implementado la validación del número de inodo frente al recuento total y del desplazamiento calculado frente a la longitud del flujo antes de realizar operaciones de entrada/salida. -
Eliminación de
new BinaryReader(_stream)redundantes: Se ha optimizado el código enReadIndirectBlock,ReadDoubleIndirectBlockyReadTripleIndirectBlockpara reutilizar el campo_readerexistente.
Gestión de errores en montajes Dokan
-
SetEndOfFile: Ahora se rechazan longitudes negativas o superiores a
int.MaxValuedevolviendoInvalidParameter. -
WriteFile: Se rechazan desplazamientos negativos y se devuelve
InvalidParameteren caso de desbordamiento cuandonewSize > int.MaxValue. -
Seguridad de tipos: Se han añadido conversiones explícitas a
(int)en valoreslongpreviamente validados para garantizar la seguridad de tipos.
