FS(3)FS(3)NAMEfs - file system devices
bind -b #k /dev
The fs driver builds complex disk files out of simpler disk files.
Inspired by the Plan 9 file server kernel's configuration strings, it
provides device mirroring, partitioning, interleaving, and catenation
for disk-based services like fossil(4) or venti(8).
The device is intended to be bound at /dev and initially contains a
directory named fs, which in turn contains a ctl file and one file per
Most control messages introduce a new device, here named new. The file
arguments are interpreted in the name space of the writing process.
The device name new may be a single filename component (containing no
slashes); in this case, the device is created under #k/fs. If new
instead has the format dir/file, the device is made available at
#k/dir/file. The directory dir goes away when the last device on it is
removed with the del control message, but #k/fs will never be removed.
cat new files...
The device new corresponds to the catenation of files.
inter new files...
The device new corresponds to the block interleaving of files;
an 8192-byte block size is assumed.
mirror new files...
The device new corresponds to a RAID-1-like mirroring of files.
Writes to new are handled by sequentially writing the same data
to the files from right to left (the reverse of the order in the
control message). A failed write causes an eventual error
return but does not prevent the rest of the writes to the other
devices of the mirror set. Reads from new are handled by
sequentially reading from the files from left to right until one
succeeds. The length of the mirror device is the minimum of the
lengths of the files.
part new file offset length
part new offset end
In the first form, the device new corresponds to the length
units starting at offset in file. If offset+length reaches past
the end of file, length is silently reduced to fit. Units are
bytes. In the second form, a previous disk request must have
defined the source file for further requests and the end of the
device is determined by the end offset in the source file, and
not by the device length. Units are as defined in the previous
disk request. This form is accepted for compatibility with fdisk
(in prep(8)) and sd(3) devices.
Removes the device named old. The device will still be seen
while in use. Further I/O attempts will fail with an error
indication stating that the device is gone. When old is dir/*,
all devices under dir are removed.
disk dir [ n file ]
makes dir implicit in new device names (i.e., it makes new mean
dir/new by default). Optional argument n specifies the default
unit (sector) size in bytes and the default source file for fur‐
ther partition devices. Default values are restored when the
control file is closed.
clear Discard all fs device definitions.
If the variable fsconfig is set in plan9.ini(8), fs will read its con‐
figuration from the file $fsconfig on the first attach. This is useful
when the machine boots from a local file server that uses fs.
Use a previously partitioned disk, /dev/sdC0, making partition files
available under /dev/sdC0parts:
echo disk sdC0parts 512 /dev/sdC0/data
disk/fdisk -p /dev/sdC0/data
# now create plan 9 partitions
echo disk sdC0parts 512 /dev/sdC0parts/plan9
disk/prep -p /dev/sdC0parts/plan9
} > /dev/fs/ctl
Mirror the two disks /dev/sdC0/data and /dev/sdD0/data as /dev/fs/m0;
similarly, mirror /dev/sdC1/data and /dev/sdD1/data as /dev/fs/m1:
echo mirror m0 /dev/sdC0/data /dev/sdD0/data >/dev/fs/ctl
echo mirror m1 /dev/sdC1/data /dev/sdD1/data >/dev/fs/ctl
Interleave the two mirrored disks to create /dev/fs/data:
echo inter data /dev/fs/m0 /dev/fs/m1 >/dev/fs/ctl
Run kfs(4) on the interleaved device:
disk/kfs -f /dev/fs/data
Save the configuration:
cp /dev/fs/ctl /dev/fd0disk
To load the configuration automatically at boot time, add this to
read in cat(1), dd(1), sd(3), fossil(4), fs(8), plan9.ini(8), prep(8),
Mirrors are RAID-like but not RAID. There is no fancy recovery mecha‐
nism and no automatic initial copying from a master drive to its mirror
Each write system call on ctl may transmit at most one command.