LOGFS(3) LOGFS(3)
NAME
logfs - log-structured file system for flash devices
SYNOPSIS
bind -b '#ʟ' /dev
/dev/logfsctl
/dev/logfsusers
/dev/logfsname
/dev/logfsnameboot
echo fsys name config flash-device > /dev/logfsctl
echo fsys name format boot-area-size > /dev/logfsctl
echo fsys name open > /dev/logfsctl
mount -Ac /dev/logfsname dir
DESCRIPTION
Logfs is a driver level implementation of the Inferno log
structured filesystem, a file system designed with modern
flash devices (such as NAND flash) in mind. Logfs is itself
hardware independent, requiring other devices to provide the
physical medium. Currently only flash(3) devices are sup-
ported.
The file system maintains two storage regions on the same
medium: a log-structured hierarchical file system that
implements all the functionality communicable by the 9P pro-
tocol (see intro(5)), and a boot partition that offers a
fixed amount of flat storage suitable for holding such
things as a kernel boot image, boot parameters etc. The
boot partition can be accessed and updated without under-
standing all but the simplest facts about the hierarchical
file system, making it easy to implement boot loaders with
small footprints.
The physical layout of the file system varies from medium to
medium, so that the specialised features of the medium can
be accounted for.
The user table is maintained in memory; there is one table,
shared between all file systems supported by this driver.
There is no distinction between users and groups: a user is
a group with one member. The user table records a mapping
between uids and unames, as well as recording the leader and
members of each group. A uid is a string naming a user or
group that is stored in the file system. A uname is the
string naming a user or group that is used in file system
protocol messages (see intro(5)). There is a distinction so
that unames can be safely reused, even though uids cannot.
Page 1 Plan 9 (printed 10/29/25)
LOGFS(3) LOGFS(3)
Configuration and control of the file systems is by writing
commands to /dev/logfsctl:
fsys name
Sets the current file system to name, which must be
configured. Subsequent commands, not prefixed with
fsysname, will by applied to the name file system.
[fsys name] config flash-device
Configures file system name to be written to flash(3)
device flash-device. This does not initialise or format
the filesystem, but simply bind name to flash-device.
For each configured name, two files appear in the
device name space, /dev/logfsname and
/dev/logfsnameboot. The former serves the 9P protocol
giving access to the hierarchical file system; the lat-
ter is a fixed size file that represents the boot par-
tition.
[fsys name] format bootsize
Formats the underlying medium as a logfs format file
system. Sufficent storage is set aside to create a boot
partition of at least bootsize bytes. Some medium
implementations (eg, for NAND flash) store file system
parameters (eg, location, size and boot partition size)
to enable automatic location of file systems and
improve bad block detection. These must be part of the
boot partition so that they are easily accessible to
boot loaders, so such medium implementations may also
enforce a minimum size for the boot partition.
[fsys name] open [-P] [-W]
Initialises the specified file system, and makes it
available for use. The file system structure is veri-
fied, bad blocks are repaired and, in the case of the
log structured file system, and the log replayed to
regenerate the directory structure. The -W option
reduces the permission control on wstat(5) requests.
Specifically it allows the uid, gid, mtime, and perm to
be changed by anyone. The -P option removes all file
access controls, allowing anyone to open any file in
any mode.
[fsys name] sweep
Forces the log to be swept, if it has been written to
since last being swept. The log is normally swept
automatically when space is low.
[fsys name] sync
Flush any buffered log or data to the underlying
device. Use before shutting down the system if the
device is not unmounted. (See notes below.)
Page 2 Plan 9 (printed 10/29/25)
LOGFS(3) LOGFS(3)
[fsys name] trace [level]
If level is non-zero, internal diagnostics for the log
file system are enabled at the given level. If level is
zero, or missing, tracing is disabled.
[fsys name] unconfig
removes the configuration. The file system must not be
mounted, or the boot partition open, before doing this.
uname uname uid
uname uname :uid
adds the user with uname uname and uid uid to the in-
memory table
uname uname %newname
renames uname to newname, throughout the user table
uname uname =leader
sets the group leader to the uname leader
uname uname =
removes the group leader; then all members are leaders
uname uname +member
add the uname member to the group
uname uname -member
removes the uname member from the group
Notes
The file system log may be subject to a small amount of
buffering for efficiency purposes; therefore, it is neces-
sary to unmount the file system before disconnecting the
power to avoid losing recent updates. Failure to do this
does not result in inconsistencies in the file system, but
some recent changes will be lost. Equivalently, a wstat(5)
of any file or directory, with all fields set to no change
(also known as a wstat flush) will cause the log to be writ-
ten to disk. Note that during a dismount, and also a wstat
flush, a wstat flush is also applied to the underlying
flash(3) device. Furthermore, since some buffering is used
on the log, needless use of wstat flush will consume log
space more rapidly than normal, although it will be recov-
ered during the next sweep.
The log is automatically swept when space is low, so there
is not normally any need to use the sweep command.
SOURCE
/liblogfs
/libnandfs
Page 3 Plan 9 (printed 10/29/25)
LOGFS(3) LOGFS(3)
/emu/port/devlogfs.c
/os/port/devlogfs.c
SEE ALSO
flash(3), ftl(3), kfs(4)
BUGS
The only medium currently supported is NAND flash. This is
detected by recognising the manufacturer and device ids sup-
plied by the status file of the flash(3) device.
Page 4 Plan 9 (printed 10/29/25)