| ================= |
| Union File System |
| ================= |
| |
| Overview |
| ======== |
| |
| This directory contains the NuttX Union File System. The Union file |
| system is provides a mechanism to overlay two different, mounted file |
| systems so that they appear as one. In general this works like this: |
| |
| 1) Mount file system 1 at some location, say ``/mnt/file1`` |
| 2) Mount file system 2 at some location, say ``/mnt/file2`` |
| 3) Call ``mount()`` to combine and overly ``/mnt/file1`` and ``mnt/file2`` |
| as a new mount point, say ``/mnt/unionfs``. |
| |
| ``/mnt/file1`` and ``/mnt/file2`` will disappear and be replaced by the single |
| mountpoint ``/mnt/unionfs``. The previous contents under ``/mnt/file1`` and |
| ``/mnt/file2`` will appear merged under ``/mnt/unionfs``. Files at the same |
| relative path in file system1 will take presence. If another file of the |
| same name and same relative location exists in file system 2, it will |
| not be visible because it will be occluded by the file in file system1. |
| |
| See ``include/nutts/unionfs.h`` for additional information. |
| |
| The Union File System is enabled by selecting the ``CONFIG_FS_UNIONFS`` option |
| in the NuttX configuration file. |
| |
| Disclaimer: This Union File System was certainly inspired by UnionFS |
| (http://en.wikipedia.org/wiki/UnionFS) and the similarity in naming is |
| unavoidable. However, other than that, the NuttX Union File System |
| has no relationship with the UnioinFS project in specification, usage, |
| design, or implementation. |
| |
| Uses of the Union File System |
| ============================== |
| |
| The original motivation for this file was for the use of the built-in |
| function file system (BINFS) with a web server. In that case, the built |
| in functions provide CGI programs. But the BINFS file system cannot hold |
| content. Fixed content would need to be retained in a more standard file |
| system such as ROMFS. With this Union File System, you can overly the |
| BINFS mountpoint on the ROMFS mountpoint, providing a single directory |
| that appears to contain the executables from the BINFS file system along |
| with the web content from the ROMFS file system. |
| |
| Another possible use for the Union File System could be to augment or |
| replace files in a FLASH file system. For example, suppose that you have |
| a product that ships with content in a ROMFS file system provided by the |
| on-board FLASH. Later, you overlay that ROMFS file system with additional |
| files from an SD card by using the Union File System to overlay, and |
| perhaps replace, the ROMFS files. |
| |
| Another use case might be to overlay a read-only file system like ROMFS |
| with a writable file system (like a RAM disk). This should then give |
| to a readable/write-able file system with some fixed content. |
| |
| Prefixes |
| ======== |
| |
| And optional prefix may be provided with each of the file systems |
| combined in by the Union File System. For example, suppose that: |
| |
| * File system 1 is a ROMFS file system with prefix == NULL, |
| * File system 2 is a BINFS file system with prefix == "cgin-bin", and |
| * The union file system is mounted at ``/mnt/www``. |
| |
| Then the content in the in the ROMFS file system would appear at |
| ``/mnt/www`` and the content of the BINFS file system would appear at |
| ``/mnt/www/cgi-gin``. |
| |
| Example Configurations |
| ====================== |
| |
| * ``boards/sim/sim/sim/unionfs`` - This is a simulator configuration that |
| uses the Union File System test at apps/examples/unionfs. That test |
| overlays two small ROMFS file systems with many conflicts in |
| directories and file names. This is a good platform for testing the |
| Union file System and apps/examples/unionfs is a good example of how to |
| configure the Union File System. |
| |
| * ``boards/arm/lpc17xx_40xx/lincoln60/thttpd-binfs`` - This is an example |
| using the THTTPD web server. It server up content from a Union File |
| System with fixed content provided by a ROMFS file system and CGI |
| content provided by a BINFS file system. |
| |
| You can see how the Union File System content directory is configured |
| by logic in apps/example/thttpd/. |
| |
| * ``boards/arm/lpc17xx_40xx/olimex-lpc1766stk/thttpd-binfs`` - This is |
| essentially the same as the lincoln60 configuration. It does not work, |
| however, because the LPC1766 has insufficient RAM to support the THTTPD |
| application in this configuration. |
| |
| See the documentation pages for each of these board for additional |
| information about these configurations. |