AVISO... Post con contenido teórico y práctico. Longitud media, no apto para vagos y carentes de interés por aprender
========================================================================
======================== INTRODUCCIÓN ================================
========================================================================
Hola a todos...
Me ha extrañado no ver ninguna referencia a esto a lo largo y ancho del foro. Quizá no haya buscado bien, pero aparentemente, según el buscador, no hay ninguna referencia ni a F2FS ni a YAFFS, JFFS ni a ningún otro sistema de archivo pensado para dispositivos Flash, así que me he animado a abrir este hilo.
La mayoría de las distros actuales tanto para Raspberry como para Orange o cualquier otra "Fruta Pi" están basadas en dos particiones, por un lado la BOOT en formato VFAT (para aligerar el sistema de arranque) y una segunda basada en EXT4.
El sistema de archivos EXT4 es muy versátil, bastante robusto frente a corrupción, y muy eficiente, pero para memorias flash tiene un problema, y es el gasto reiterativo de los mismos sectores físicos del disco, sobre todo cuando hablamos de dispositivos de acceso directo como son las NAND flash que solemos usar en las PI (generalmente SD, pero también pinchos de memoria USB). En lo que se traduce esto es en el deterioro prematuro de ciertas celdas de la SD.
En teoría, una vez deteriorada la celda, el propio sistema EXT4 intentaría reparar el archivo afectado removiéndolo a otro punto, pero muchas veces no es posible, e independientemente nuestra memoria ya estaría tocada físicamente.
Para evitar esta problemática aparecieron los sistemas operativos pensados para memorias NAND flash. La primera aparición fue con el JFFS, originalmente creado por Axis para sus dispositivos (routers y similares basados en linux). Fue sustituido por el JFSS2 de RedHat, muy habitual en el principio de los 2000 en routers Linksys, Cisco y similares.
Posteriormente salieron otros, como el UBIFS y mucho más recientemente el F2FS creado por Samsung, que es el que da título a este hilo.
Estos sistemas de archivos se basan, a groso modo, en un sistema de grabación circular, que evita el uso reiterado de los mismos sectores una y otra vez. Obviamente esto puede implicar un pequeño retardo en la escritura, sobre todo en escritura aleatoria, pero durante el tiempo que llevo probándolo no he notado, a simple vista, ningún tipo de impacto real sobre el rendimiento en nuestras RaspPi.
No obstante, descubrí un interesante banco de pruebas en esta página web, donde no sólo no aparece haber un gran impacto en el rendimiento, sino que incluso en ciertas circunstancias, este tipo de sistema de fichero resulta más eficiente que incluso el tan afamado y reciente BTRFS de Oracle.
Aquí tenéis el link de dicho banco, para que podáis verlo:
http://www.phoronix.com/scan.php?page=a ... arks&num=1
========================================================================
======================== DESARROLLO ================================
========================================================================
Convencido de las ventajas técnicas de estos sistemas de archivos, el siguiente paso era ponerlo en producción. El observar en los últimos días que en el grupo de telegram varios usuarios habían sufrido de fallos en sus SD's y en sus sistemas de archivos fue el empujón final para decidirme a probarlo.
Obviamente las conclusiones se tendrán que ver a lo largo de los meses, pero la teoría me indica que, en este sentido, el rendimiento y la robustez deberá ser mucho mayor que el EXT4 en este aspecto.
A lo largo y ancho de internet hay muchas y variadas formas de realizar el proceso. Una de ellas se basa en usar una llave USB y la propia PI para realizar dicho proceso.
https://movr0.com/2016/08/19/convert-ra ... 3-to-f2fs/
Por mi parte, como tenía el sistema en una tarjeta SD de 8Gb. y lo quería pasar a una de 32Gb., realicé un "todo en uno" y lo hice de la siguiente manera:
1º) En la nueva tarjeta SD de 32Gb. copié la imagen de raspbian que ya tenía, arranqué la PI con ella y efectué el primer proceso de arranque, donde raspbian amplía la partición de datos y deja la SD operativa con todo su tamaño y el sistema Raspbian operativo (aunque esto último nos da igual, porque nos lo vamos a cargar).
2º) Me descargué una live de Debian desde https://www.debian.org/CD/live/
3º) La monté sobre una llave USB
4º) En el ordenador arranqué la debian y, mediante dos lectores de tarjetas monté la SD de origen y la SD de destino
5º) Descargué en la debian las tools de F2FS (sudo apt-get install f2fs-tools)
5º) Me cargué el sistema de archivos EXT4 de la tarjeta de destino (sudo wipefs -a /dev/<particion 2 de SD de destino>
6º) y formateé en F2FS sudo mkfs.f2fs /dev/<particion 2 de SD de destino>
7º) Traspasé la partición root de la origen a la de destino. sudo rsync -axv /mnt/sdorigen /mnt/sddestino
8º) Edité el fichero fstab del /etc de la tarjeta de destino para cambiar el sistema de archivos de ext4 a f2fs y añadí la opción "discard" a dicha línea
9º) Edité el fichero cmdline.txt de la partición boot también de ext4 a f2fs
10º) Desmonté ambas SD's y apagué el sistema.
Tras estas operaciones tengo, la SD de origen tal y como estaba, y en la SD de destino el mismo contenido pero ya con el sistema de archivos en F2FS.
Hecho esto, encendí la pi con la nueva tarjeta y, a parte del aumento lógico de tamaño en la partición root, el resto funciona exactamente igual, no notando diferencia alguna en rendimiento...
Dentro de unos meses veremos si el sistema aguanta...
========================================================================
======================== CONCLUSIONES ================================
========================================================================
Como ya he comentado, aún es muy pronto para sacar conclusiones, pero la teoría me indica que notaré una longevidad en el sistema mucho mayor, y una robustez mucho más estable con este sistema de archivo. Me alivia también comprobar que no se nota ningún impacto aparente en rendimiento frente al sistema de archivos EXT4. Dentro de unos meses volveremos por aquí para continuar con el desarrollo de conclusiones...
:adios
F2FS, ¿el mejor sistema de archivos para las tarjetas SD?
- cpa
- Pi Beta
- Mensajes: 159
- Registrado: 10 Mar 2017, 23:18
- Agradecido: 0
- Agradecimiento recibido: 1 vez
Al hilo de todo esto, alguien me comentaba ayer que el sistema de archivos BTRFS estaba también pensado para SSD's, y que, por extensión, también lo estaría para SD's y similares...
Pues bien, si es cierto que BTRFS tiene en cuenta y conoce la "idiosincrasia" de los discos duros de tipo SSD, pero su conocimiento no se basa en la optimización del recurso en la extensión de su longevidad, sino en mejorar su rendimiento. Esto es así porque las propias controladoras integradas en los discos duros ya contienen un algoritmo de optimización de los recursos físicos del disco que no tienen ni las SD's ni las USB.
Cuando tu mandas guardar algo en un disco duro, lo haces a medio nivel, no a bajo nivel. Es la controladora la que se encarga de organizar y dirigir la grabación física de los datos en los sectores físicos reales, optimizando el mismo mediante un algoritmo pensado por el propio fabricante del hardware. Sin embargo, las tarjetas SD's o las memorias USB no es así; es el sistema de ficheros el que se encarga de organizar la grabación física de los datos, y por tanto es primordial que el sistema de archivo posea de un algoritmo pensado para este tipo de dispositivos de almacenamiento. Obviamente ni EXT4 ni BTRFS son sistemas de archivos óptimos para este tipo de almacenamientos NAND FLASH.
Pues bien, si es cierto que BTRFS tiene en cuenta y conoce la "idiosincrasia" de los discos duros de tipo SSD, pero su conocimiento no se basa en la optimización del recurso en la extensión de su longevidad, sino en mejorar su rendimiento. Esto es así porque las propias controladoras integradas en los discos duros ya contienen un algoritmo de optimización de los recursos físicos del disco que no tienen ni las SD's ni las USB.
Cuando tu mandas guardar algo en un disco duro, lo haces a medio nivel, no a bajo nivel. Es la controladora la que se encarga de organizar y dirigir la grabación física de los datos en los sectores físicos reales, optimizando el mismo mediante un algoritmo pensado por el propio fabricante del hardware. Sin embargo, las tarjetas SD's o las memorias USB no es así; es el sistema de ficheros el que se encarga de organizar la grabación física de los datos, y por tanto es primordial que el sistema de archivo posea de un algoritmo pensado para este tipo de dispositivos de almacenamiento. Obviamente ni EXT4 ni BTRFS son sistemas de archivos óptimos para este tipo de almacenamientos NAND FLASH.
- tatxen
- Pi Master
- Mensajes: 204
- Registrado: 03 Ene 2017, 13:08
- Agradecido: 0
- Agradecimiento recibido: 0
Yo lo pasé sin usar un lector de tarjetas, haciendo una imagen de la tarjeta con dd y a continuación también con dd grabé la imagen en una llave usb, formateé la tarjeta en f2fs y le pasé los datos con rsync desde la llave usb. Mas que nada por que no tengo lector de tarjetas USB jeje.
-
- Pi Alpha
- Mensajes: 19
- Registrado: 26 Ago 2016, 09:56
- Agradecido: 0
- Agradecimiento recibido: 0
Excelente artículo cpa. Ya había trasteado y visto una mejora en mi Nexus 7 con una ROM f2fs, pero no había pensado en usarlo para la pi. Gracias por la pista.
Solracinet
Solracinet
- Kike
- Administrador
- Mensajes: 2311
- Registrado: 13 May 2016, 18:53
- Ubicación: Islas Baleares - Menorca
- Agradecido: 47 veces
- Agradecimiento recibido: 175 veces
- Contactar:
Buenos días !! en su día no vi este articulo
la duda es , después de unos meses el sistema aguantó correctamente? Sinceramente no he probado F2FS en ninguno de mis sistemas, Muchas gracias crack!

Si lo puedes soñar, lo puedes hacer
- cpa
- Pi Beta
- Mensajes: 159
- Registrado: 10 Mar 2017, 23:18
- Agradecido: 0
- Agradecimiento recibido: 1 vez
Lo tengo en producción en tres pi sin problemas, y sin impacto ninguno en rendimiento. Un compañero del trabajo también lo tiene en la suya y también sin problemas....
Enviado desde mi X98 Plus mediante Tapatalk
Enviado desde mi X98 Plus mediante Tapatalk
-
- Pi Alpha
- Mensajes: 19
- Registrado: 14 Ago 2017, 17:02
- Agradecido: 0
- Agradecimiento recibido: 0
gracias por tanta informacion
-
- Pi Newbie
- Mensajes: 1
- Registrado: 16 Sep 2017, 20:17
- Agradecido: 0
- Agradecimiento recibido: 0
Dejo por aquí los pasos para realizar el proceso con una sola tarjeta. Aviso: no he probado esto, así que no puedo asegurar que salga correctamente. Así que hacedlo con cuidado y no me responsabilizo de posibles problemas, aunque intentaré ayudar si alguien la lía xD.
Necesitamos la tarjeta que queremos pasar a F2FS y linux, ya sea mediante un liveCD/USB o instalado.
1. En linux, con la tarjeta enchufada, creamos una imagen de la tarjeta usando dd: sudo dd if=/dev/mmcblk0 of=raspi_backup.img . Cambiad mmcblk0 por el nombre que tenga vuesta SD en /dev/. Podéis averiguar esto usando df -h y mirando el que tenga más sentido (cuidado de no elegir vuestro disco duro, ya que luego vais a escribir en este dispositivo, estad seguros de elegir la SD). A partir de ahora, cuando me refiera a mmcblk0, sustituidlo por lo que os haya salido a vosotros. También, es recomendable desmontar la tarjeta antes de hacer la copia, no recuerdo si da error si la está montada.
2. Hacemos una copia del backup. Backup del backup, sí, porque vamos a trabajar en uno de estos backups como si fuera la otra tarjeta (la original en el primer post). No debería modificarse nada, pero por si acaso, pues backup. Cómo, pues como queráis, con interfaz gráifca o si no, desde la terminal cp raspi_backup.img raspi_backup2_no_tocar.img .
3. Montamos la imagen como si fuera una tarjeta. Para ello os redirijo aquí, que viene explicado. Haced todo menos la parte del final de reducir el tamaño de la imagen. También montamos la tarjeta si la habíamos desmontado en el primer paso.
(A partir de aquí es casi igual que en el primer post)
4. Instalamos las tools de F2FS ( sudo apt-get install f2fs-tools o como sea en vuestra distro)
5. Nos cargamos sistema de archivos EXT4 de la tarjeta SD sudo wipefs -a /dev/mmcblk0p2 (Fijáos en que he añadido el p2 al final. Esto es porque sin p2 nos referimos a la tarjeta entera y p2 indica la segunda partición, que es la de datos).
6. Formateamos la partición en F2FS sudo mkfs.f2fs /dev/mmcblk0p2 .
7. Traspasamos la partición root de la origen a la de destino sudo rsync -axv /mnt/sdorigen /mnt/sddestino . Los directorios sdorigen y sddestino se corresponden a los directorios en los que están montados la tarjeta SD (sddestino) y donde habéis montado la imagen (sdorigen=/mnt/img/imagenRPi2 si habéis seguido el post del punto 3).
8. Editamos el fichero fstab del /etc de la tarjeta para cambiar el sistema de archivos de ext4 a f2fs y añadimos la opción "discard" a dicha línea. Algo así: UUID=/dev/mmcblkp2 / f2fs defaults,discard 0 1 Las opciones que vienen entre f2fs y 0, dejadlas como las tenéis añadiendo discard, que este ejemplo lo he cogido de internet y modificado de memoria.
9. Editamos el fichero cmdline.txt de la partición boot también de ext4 a f2fs.
10. Desmontamos la tarjeta y la imagen de la tarjeta. Si todo ha ido bien, podéis borrar las imagenes del ordenador (comprobadlo bien antes de borrarlas).
Vuelvo a recordar que aún no he probado esto, si alguien ve errores, que avise y edito. Intentaré probarlo cuanto antes para ver si funciona y corregir si hay algún fallo, pero no prometo nada, que ando algo liado y el finde no estoy en casa.
Necesitamos la tarjeta que queremos pasar a F2FS y linux, ya sea mediante un liveCD/USB o instalado.
1. En linux, con la tarjeta enchufada, creamos una imagen de la tarjeta usando dd: sudo dd if=/dev/mmcblk0 of=raspi_backup.img . Cambiad mmcblk0 por el nombre que tenga vuesta SD en /dev/. Podéis averiguar esto usando df -h y mirando el que tenga más sentido (cuidado de no elegir vuestro disco duro, ya que luego vais a escribir en este dispositivo, estad seguros de elegir la SD). A partir de ahora, cuando me refiera a mmcblk0, sustituidlo por lo que os haya salido a vosotros. También, es recomendable desmontar la tarjeta antes de hacer la copia, no recuerdo si da error si la está montada.
2. Hacemos una copia del backup. Backup del backup, sí, porque vamos a trabajar en uno de estos backups como si fuera la otra tarjeta (la original en el primer post). No debería modificarse nada, pero por si acaso, pues backup. Cómo, pues como queráis, con interfaz gráifca o si no, desde la terminal cp raspi_backup.img raspi_backup2_no_tocar.img .
3. Montamos la imagen como si fuera una tarjeta. Para ello os redirijo aquí, que viene explicado. Haced todo menos la parte del final de reducir el tamaño de la imagen. También montamos la tarjeta si la habíamos desmontado en el primer paso.
(A partir de aquí es casi igual que en el primer post)
4. Instalamos las tools de F2FS ( sudo apt-get install f2fs-tools o como sea en vuestra distro)
5. Nos cargamos sistema de archivos EXT4 de la tarjeta SD sudo wipefs -a /dev/mmcblk0p2 (Fijáos en que he añadido el p2 al final. Esto es porque sin p2 nos referimos a la tarjeta entera y p2 indica la segunda partición, que es la de datos).
6. Formateamos la partición en F2FS sudo mkfs.f2fs /dev/mmcblk0p2 .
7. Traspasamos la partición root de la origen a la de destino sudo rsync -axv /mnt/sdorigen /mnt/sddestino . Los directorios sdorigen y sddestino se corresponden a los directorios en los que están montados la tarjeta SD (sddestino) y donde habéis montado la imagen (sdorigen=/mnt/img/imagenRPi2 si habéis seguido el post del punto 3).
8. Editamos el fichero fstab del /etc de la tarjeta para cambiar el sistema de archivos de ext4 a f2fs y añadimos la opción "discard" a dicha línea. Algo así: UUID=/dev/mmcblkp2 / f2fs defaults,discard 0 1 Las opciones que vienen entre f2fs y 0, dejadlas como las tenéis añadiendo discard, que este ejemplo lo he cogido de internet y modificado de memoria.
9. Editamos el fichero cmdline.txt de la partición boot también de ext4 a f2fs.
10. Desmontamos la tarjeta y la imagen de la tarjeta. Si todo ha ido bien, podéis borrar las imagenes del ordenador (comprobadlo bien antes de borrarlas).
Vuelvo a recordar que aún no he probado esto, si alguien ve errores, que avise y edito. Intentaré probarlo cuanto antes para ver si funciona y corregir si hay algún fallo, pero no prometo nada, que ando algo liado y el finde no estoy en casa.