The Lanyard File System (LanyFS)

My Master’s Thesis topic was a new filesystem for mass storage devices. I kind of invented a very simple filesystem that solves the issues I had with other filesystems. The name of the filesystem is LanyFS, feel free to develop the idea further in academia or even in the real world :)

LanyFS logo

Lanyard Filesystem (LanyFS) is designed for removable storage devices, particularly those small gadgets one would carry around using a lanyard.

Research and Academia

LanyFS is and probably will remain a academia playground. If you want to research in the area of file systems or want your students to learn about them, then LanyFS is a great entry point. Someone worked (and later stopped doing so) on a FreeBSD driver for LanyFS, but other operating systems are still unstaffed, especially for Windows somebody who knows the internals might help. Maybe coding a FUSE module is a good start, too?

Press, Media and Talks

Installation

Warning! The LanyFS Linux kernel driver is experimental software! It may harm your storage devices or your computer seriously and should not be run on production systems. Please consider the use of a virtual machine to create a safe environment for testing.

To get source code of LanyFS we simply clone the official repository and compile our own LanyFS-enabled kernel. We open a terminal and start using git for cloning.

[danrl@lanycompile src]$ git clone --branch lanyfs git://github.com/danrl/lanyfs-linux.git
Cloning into 'lanyfs-linux'...
remote: Counting objects: 2613435, done.
remote: Compressing objects: 100% (761595/761595), done.
remote: Total 2613435 (delta 2155123), reused 2275780 (delta 1826179)
Receiving objects: 100% (2613435/2613435), 842.02 MiB | 1.72 MiB/s, done.
Resolving deltas: 100% (2155123/2155123), done.

Before compiling the kernel we have to enable LanyFS in the kernel config. The easiest way is to invoke make menuconfig and navigating to File systems → Miscellaneous filesystems.

.config - Linux/x86_64 3.5.0 Kernel Configuration
 ──────────────────────────────────────────────────────────────────────────────
  ┌─────────────────────── Miscellaneous filesystems ───────────────────────┐
  │  Arrow keys navigate the menu.  <Enter> selects submenus --->.          │
  │  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, │
  │  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> │
  │  for Search.  Legend: [*] built-in  [ ] excluded  <M> module  < >       │
  │ ┌────-(-)─────────────────────────────────────────────────────────────┐ │
  │ │    < >   BeOS file system (BeFS) support (read only) (EXPERIMENTAL) │ │
  │ │    < >   BFS file system support (EXPERIMENTAL)                     │ │
  │ │    < >   EFS file system support (read only) (EXPERIMENTAL)         │ │
  │ │    <M>   Lanyard file system (LanyFS) (EXPERIMENTAL) (NEW)          │ │
  │ │    [*]     LanyFS debugging support                                 │ │
  │ │    < >   LogFS file system (EXPERIMENTAL)                           │ │
  │ │    < >   Compressed ROM file system support (cramfs)                │ │
  │ │    < >   SquashFS 4.0 - Squashed file system support                │ │
  │ │    < >   FreeVxFS file system support (VERITAS VxFS(TM) compatible) │ │
  │ │    < >   Minix file system support                                  │ │
  │ └────.(+)─────────────────────────────────────────────────────────────┘ │
  ├─────────────────────────────────────────────────────────────────────────┤
  │                    <Select>    < Exit >    < Help >                     │
  └─────────────────────────────────────────────────────────────────────────┘

We chose to compile LanyFS as a module by selecting . If we want to examine what the driver does behind the scene, we also enable debugging.

[danrl@lanycompile linux]$ make
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf --silentoldconfig Kconfig
[...]
  CC [M]  fs/lanyfs/msg.o
  CC [M]  fs/lanyfs/misc.o
  CC [M]  fs/lanyfs/icache.o
  CC [M]  fs/lanyfs/inode.o
  CC [M]  fs/lanyfs/btree.o
  CC [M]  fs/lanyfs/dir.o
  CC [M]  fs/lanyfs/extender.o
  CC [M]  fs/lanyfs/file.o
  CC [M]  fs/lanyfs/chain.o
  CC [M]  fs/lanyfs/super.o
  CC [M]  fs/lanyfs/lanyfs_km.o
  LD [M]  fs/lanyfs/lanyfs.o
[...]
Kernel: arch/x86/boot/bzImage is ready

We install the freshly compiled modules and copy the kernel to our boot environment.

[root@lanycompile linux]# make modules_install
  INSTALL arch/x86/crypto/aes-x86_64.ko
  INSTALL arch/x86/crypto/crc32c-intel.ko
[...]
  INSTALL fs/lanyfs/lanyfs.ko
[...]
  DEPMOD  3.5.0+
[root@lanycompile linux]#$ cp arch/x86/boot/bzImage /boot/kernel.img

Note: This process may vary from distribution to distribution. Just install the kernel as you usually do, or if you haven’t done so yet, lookup how your distribution wants it to be served.

After rebooting with the new kernel selected we are running a bleeding edge Linux kernel with LanyFS support.

Repositories

LanyFS files are currently hosted on GitHub.

Specification

The specification is available as fancy text file.