De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

F2FS ( Flash-Friendly File System ) es un sistema de archivos flash desarrollado inicialmente por Samsung Electronics para el kernel de Linux . [5]

El motivo de F2FS fue construir un sistema de archivos que, desde el principio, tenga en cuenta las características de los dispositivos de almacenamiento basados ​​en memoria flash NAND (como discos de estado sólido , eMMC y tarjetas SD ), que son ampliamente utilizados en computadoras. sistemas que van desde dispositivos móviles hasta servidores.

F2FS se diseñó sobre la base de un enfoque de sistema de archivos estructurado por registros , que se adapta a las nuevas formas de almacenamiento. Jaegeuk Kim, el autor principal de F2FS, ha declarado que soluciona algunos problemas conocidos [5] de los sistemas de archivos con estructura de registro más antiguos, como el efecto de bola de nieve de los árboles errantes y los altos gastos de limpieza. Además, dado que un dispositivo de almacenamiento basado en NAND muestra diferentes características de acuerdo con su geometría interna o esquema de administración de memoria flash (como la capa de traducción de Flash o FTL), admite varios parámetros no solo para configurar el diseño en disco, sino también para selección de algoritmos de asignación y limpieza.

Funciones [ editar ]

  • Registro de múltiples cabezales
  • Tabla hash de varios niveles para entradas de directorio
  • Separación estática / dinámica de datos calientes y fríos
  • Esquema de registro adaptativo
  • Unidades operativas configurables
  • Punto de control dual
  • Recuperación de retroceso y avance
  • Asignación de bloques de estilo montón
  • TRIM / FITRIM apoyo [6]
  • Desfragmentación fs en línea / desfragmentación de archivos [7]
  • Inline xattrs [8] / data [9] / dir [10]
  • Comprobación del sistema de archivos sin conexión (comprobar y corregir la incoherencia [11] )
  • Operaciones atómicas [12]
  • Cifrado a nivel de sistema de archivos [13]
  • Cambio de tamaño sin conexión (no se admite la reducción) [14]
  • Vaciado de datos interno periódicamente [15]
  • Extensión de caché [16]
  • Compresión de archivos transparente con LZO o LZ4 (con Linux 5.6), [3] o zstd (con Linux 5.7) [4]

Diseño [ editar ]

Diseño en disco [ editar ]

F2FS divide todo el volumen en varios segmentos, cada uno de los cuales se fija en 2 MB. Una sección se compone de segmentos consecutivos y una zona consta de un conjunto de secciones. De forma predeterminada, los tamaños de sección y zona se establecen en el mismo tamaño, pero los usuarios pueden modificar fácilmente el tamaño con mkfs.

F2FS divide todo el volumen en seis áreas, y todas, excepto el área del superbloque, constan de múltiples segmentos, como se describe a continuación.

Supermanzana (SB)
El SB se encuentra al comienzo de la partición. Hay dos copias para evitar la corrupción del sistema de archivos. Contiene información básica de la partición y algunos parámetros F2FS predeterminados.
Punto de control (CP)
El CP contiene información del sistema de archivos, mapas de bits para conjuntos NAT / SIT válidos, listas de inodos huérfanos y entradas resumidas de los segmentos activos actuales.
Tabla de información de segmento (SIT)
El SIT contiene el recuento de bloques válido y el mapa de bits de validez de todos los bloques del área principal.
Tabla de direcciones de nodo (NAT)
El NAT es una tabla de direcciones para los bloques de nodos del área principal.
Área de resumen de segmento (SSA)
La SSA contiene entradas que contienen la información del propietario de los datos del área principal y los bloques de nodos.
Área principal
El área principal contiene datos de archivos y directorios y sus índices.

Para evitar la desalineación entre el sistema de archivos y el almacenamiento flash, F2FS alinea la dirección del bloque de inicio del CP con el tamaño del segmento. También alinea la dirección del bloque de inicio del Área principal con el tamaño de la zona al reservar algunos segmentos en el área SSA.

Estructura de metadatos [ editar ]

F2FS usa el esquema de punto de control para mantener la integridad del sistema de archivos. En el momento del montaje, F2FS primero intenta encontrar los últimos datos válidos del punto de control escaneando el área CP. Para reducir el tiempo de escaneo, F2FS utiliza solo dos copias del CP. Uno de ellos siempre indica los últimos datos válidos, lo que se denomina mecanismo de instantáneas. Además del CP, NAT y SIT también utilizan el mecanismo de instantáneas. Para la coherencia del sistema de archivos, cada CP señala qué copias NAT y SIT son válidas.

Estructura del índice [ editar ]

La estructura de datos clave es el "nodo". Similar a las estructuras de archivos tradicionales, F2FS tiene tres tipos de nodos: inodo, nodo directo, nodo indirecto. F2FS asigna 4 KB a un bloque de inodo que contiene 923 índices de bloque de datos, dos punteros de nodo directo, dos punteros de nodo indirecto y un puntero de nodo indirecto doble como se describe a continuación. Un bloque de nodo directo contiene 1018 índices de bloque de datos y un bloque de nodo indirecto contiene 1018 índices de bloque de nodo. Por lo tanto, un bloque de inodo (es decir, un archivo) cubre:

4 KB × (923 + 2 × 1018 + 2 × 1018 2 + 1018 3 ) = 3.94 TB

Tenga en cuenta que todos los bloques de nodos son mapeados por NAT, lo que significa que la ubicación de cada nodo es traducida por NAT. Para mitigar el problema del árbol errante, F2FS puede cortar la propagación de actualizaciones de nodos causadas por escrituras de datos de hoja.

Estructura de directorio [ editar ]

Una entrada de directorio (dentry) ocupa 11 bytes, que consta de los siguientes atributos.

Un bloque dentry consta de 214 ranuras dentry y nombres de archivo. Se utiliza un mapa de bits para representar si cada dentry es válido o no. Un bloque dentry ocupa 4 KB y tiene la siguiente composición:

Bloque Dentry (4 K) = mapa de bits (27 bytes) + reservado (3 bytes) + dentries (11 * 214 bytes) + nombre de archivo (8 * 214 bytes)

F2FS implementa tablas hash de varios niveles para la estructura de directorios. Cada nivel tiene una tabla hash con un número dedicado de cubos hash, como se muestra a continuación. Tenga en cuenta que "A (2B)" significa que un depósito incluye 2 bloques de datos.

Término
A indica cubo
B indica bloque
N indica MAX_DIR_HASH_DEPTH
nivel # 0 A (2B)nivel # 1 A (2B) - A (2B)nivel # 2 A (2B) - A (2B) - A (2B) - A (2B) ...nivel # N / 2 A (2B) - A (2B) - A (2B) - A (2B) - A (2B) - ... - A (2B) ...nivel #NA (4B) - A (4B) - A (4B) - A (4B) - A (4B) - ... - A (4B)

Cuando F2FS encuentra un nombre de archivo en un directorio, primero se calcula un valor hash del nombre del archivo. Luego, F2FS escanea la tabla hash en el nivel # 0 para encontrar el dentry que consiste en el nombre del archivo y su número de inodo. Si no se encuentra, F2FS escanea la siguiente tabla hash en el nivel # 1. De esta manera, f2fs escanea tablas hash en cada nivel incremental de 1 a N . En cada nivel, F2FS necesita escanear solo un depósito determinado por la siguiente ecuación, que muestra la complejidad O (log (# de archivos)).

 número de depósito para escanear en el nivel #n = (valor hash)% (número de depósitos en el nivel #n)

En el caso de la creación de archivos, F2FS encuentra ranuras consecutivas vacías que cubren el nombre del archivo. F2FS busca las ranuras vacías en las tablas hash de niveles completos de 1 a N de la misma manera que la operación de búsqueda.

Asignación de bloque predeterminada [ editar ]

En tiempo de ejecución, F2FS administra seis registros activos dentro del "Área principal:" nodo Caliente / Tibio / Frío y datos calientes / Tibios / Fríos.

LFS tiene dos esquemas para la gestión del espacio libre: registro de subprocesos y copia y compactación. El esquema de copia y compactación, que se conoce como limpieza, es adecuado para dispositivos que muestran un rendimiento de escritura secuencial muy bueno, ya que los segmentos libres se sirven todo el tiempo para escribir nuevos datos. Sin embargo, sufre de gastos de limpieza durante una alta utilización. Por el contrario, el esquema de registro con subprocesos sufre escrituras aleatorias, pero no se necesita ningún proceso de limpieza. F2FS adopta un esquema híbrido en el que el esquema de copia y compactación se adopta de forma predeterminada, pero la política se cambia dinámicamente al esquema de registro de subprocesos de acuerdo con el estado del sistema de archivos.

Para alinear F2FS con el almacenamiento basado en flash subyacente, F2FS asigna un segmento en una unidad de una sección. F2FS espera que el tamaño de la sección sea el mismo que el tamaño de la unidad de recolección de basura en FTL. Con respecto a la granularidad del mapeo en FTL, F2FS asigna cada sección de los registros activos a tantas zonas diferentes como sea posible. FTL puede escribir los datos de registro activos en una unidad de asignación de acuerdo con su granularidad de mapeo.

Proceso de limpieza [ editar ]

F2FS realiza la limpieza tanto a pedido como en segundo plano. La limpieza bajo demanda se activa cuando no hay suficientes segmentos libres para atender llamadas VFS. El limpiador de fondo es ejecutado por un hilo del kernel y activa el trabajo de limpieza cuando el sistema está inactivo.

F2FS admite dos políticas de selección de víctimas: algoritmos codiciosos y de costo-beneficio. En el algoritmo codicioso, F2FS selecciona un segmento de víctima que tiene el menor número de bloques válidos. En el algoritmo de costo-beneficio, F2FS selecciona un segmento de víctima de acuerdo con la edad del segmento y el número de bloques válidos para abordar el problema de eliminación de bloques de registro presente en el algoritmo codicioso. F2FS usa el algoritmo codicioso para la limpieza a pedido, el limpiador de fondo usa el algoritmo de costo-beneficio.

Para identificar si los datos del segmento de la víctima son válidos o no, F2FS administra un mapa de bits. Cada bit representa la validez de un bloque y el mapa de bits está compuesto por un flujo de bits que cubre bloques completos en el área principal.

Adopción [ editar ]

Motorola Mobility ha usado F2FS en sus teléfonos Moto G / E / X y Droid desde 2012. Google usó F2FS por primera vez en su Nexus 9 en 2014. [17] Sin embargo, otros productos de Google no adoptaron F2FS hasta Pixel 3 cuando se actualizó F2FS con soporte de hardware criptográfico en línea. [18]

Huawei ha usado F2FS desde el Huawei P9 en 2016. [19] [20] OnePlus ha usado F2FS desde el OnePlus 3T en 2016. [21] ZTE ha usado F2FS desde el ZTE Axon 10 Pro en 2019. [22]

Por otro lado, SUSE , una distribución comercial de Linux orientada a los negocios , que apunta a servidores y estaciones de trabajo en lugar de dispositivos móviles, por defecto desactiva la carga de los módulos del kernel F2FS, citando posibles problemas de seguridad debido a un mantenimiento insuficiente. [23]

Ver también [ editar ]

  • Comparación de sistemas de archivos
  • Lista de sistemas de archivos flash

Referencias [ editar ]

  1. Michael Larabel ( 22 de diciembre de 2012 ). "El sistema de archivos F2FS se fusionó con el kernel de Linux 3.8" . Phoronix . Consultado el 25 de mayo de 2016 .
  2. Changman Lee (3 de abril de 2013). "f2fs: actualiza f2fs.txt relacionado con descartar en mkfs" . Consultado el 12 de febrero de 2020 .
  3. ↑ a b Michael Larabel (23 de diciembre de 2019). "Compresión de datos F2FS usando LZO / LZ4 + manejo selectivo de extensión de archivo para aterrizar en 2020" . Phoronix . Consultado el 7 de abril de 2020 .
  4. ↑ a b Michael Larabel (7 de abril de 2020). "F2FS presenta soporte de compresión Zstd con el kernel de Linux 5.7" . Phoronix . Consultado el 7 de abril de 2020 .
  5. ↑ a b Jaegeuk Kim (5 de octubre de 2012). "f2fs: introduce un sistema de archivos compatible con flash" . Consultado el 25 de mayo de 2016 .
  6. Jaegeuk Kim (22 de septiembre de 2014). "f2fs: introduce FITRIM en f2fs_ioctl" .
  7. Chao Yu (26 de octubre de 2015). "f2fs: desfragmentar archivos de apoyo" .
  8. Jaegeuk Kim (26 de agosto de 2013). "f2fs: agregar indicadores para xattrs en línea" .
  9. Huajun Li (10 de noviembre de 2013). "f2fs: Habilite el soporte de datos en línea de f2fs" .
  10. Chao Yu (24 de septiembre de 2014). "f2fs: admite directorio en línea" .
  11. Jaegeuk Kim (20 de septiembre de 2014). "f2fs-tools: versión 1.4.0" .
  12. Jaegeuk Kim (25 de septiembre de 2014). "f2fs: admite la función atomic_write para la base de datos" .
  13. Jaegeuk Kim (24 de junio de 2015). "Actualizaciones de f2fs para v4.2" .
  14. Jaegeuk Kim (25 de abril de 2016). "resize.f2fs: soporte para expandir el tamaño de la partición" .
  15. Chao Yu (17 de diciembre de 2015). "f2fs: descarga de datos de soporte en segundo plano" .
  16. Chao Yu (25 de enero de 2015). "f2fs: habilitar la caché de extensión de árbol rb" .
  17. ^ Smith, Joshua Ho, Ryan. "La revisión de Google Nexus 9" . www.anandtech.com . Consultado el 10 de mayo de 2019 .
  18. Frumusanu, Andrei (2 de noviembre de 2018). "La revisión de Google Pixel 3" . www.anandtech.com . Consultado el 11 de mayo de 2019 .
  19. Larabel, Michael (28 de diciembre de 2018). "F2FS obtiene más correcciones en Linux 4.21 con el sistema de archivos ahora compatible con Pixel de Google" . www.phoronix.com . Consultado el 10 de mayo de 2019 .
  20. Humrick, Matt (12 de mayo de 2017). "Huawei P10 y P10 Plus" . www.anandtech.com . Consultado el 11 de mayo de 2019 .
  21. ^ Chester, Brandon. "La revisión de OnePlus 3T" . www.anandtech.com . Consultado el 10 de mayo de 2019 .
  22. ^ "ZTE Axon 10 Pro oficialmente descubierto: el primero en usar F2FS" . Gizchina.com . 2019-05-06 . Consultado el 10 de mayo de 2019 .
  23. Wilck, Martin (30 de enero de 2019). "¿Deshabilitar los sistemas de archivos heredados de forma predeterminada?" . opensuse-factory (lista de correo). Archivado desde el original el 12 de noviembre de 2020.

Enlaces externos [ editar ]

  • FAST '15 - F2FS: un nuevo sistema de archivos para almacenamiento flash (2015-02-17)
  • QUÉ ES la documentación del sistema de archivos compatible con Flash (F2FS) para Linux
  • Sistema de archivos compatible con Flash (F2FS), Conferencia de Linux integrado (2013-02-22)
  • LWN.net: Un desmontaje de f2fs (2012-10-10)
  • Metodología de ajuste del sistema de archivos eMMC / SSD (2013-05-24)