FS(3)FS(3)
NAME
fs – file system devices
SYNOPSIS
bind -b #k /dev
unhandled troff command .sp
/dev/fs
/dev/fs/ctl
/dev/fs/...
/dev/new
DESCRIPTION
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
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 configured device.
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.
del old
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 further partition devices.
Default values are restored when the control file is closed.
crypt new file key
The device
new
corresponds to a AES-encrypted partition
file
encrypted with
key (see
cryptsetup(8)).
clear
Discard all
fs
device definitions.
If the variable
fsconfig
is set in
plan9.ini(8),
fs
will read its configuration from the file
$fsconfig
on the first attach.
This is useful when the machine boots from a local file server that uses
fs.
EXAMPLES
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
hjfs(4)
on the interleaved device:
hjfs -f /dev/fs/data
Save the configuration:
cp /dev/fs/ctl /dev/fd0disk
To load the configuration automatically at boot time,
add this to
plan9.ini:
fsconfig=/dev/fd0disk
SEE ALSO
read
in
cat(1),
dd(1),
sd(3),
fs(8),
plan9.ini(8),
prep(8),
venti(8)
SOURCE
/sys/src/9/port/devfs.c
BUGS
Mirrors are RAID-like but not RAID.
There is no fancy recovery mechanism and
no automatic initial copying from a master drive to its mirror drives.
Each
write
system call on
ctl
may transmit at most one command.