glenda.party
term% ls -F
term% pwd
$home/manuals/9front/3/fs
term% cat index.txt
FS(3)                      Library Functions Manual                      FS(3)

NAME
       fs - file system devices

SYNOPSIS
       bind -b #k /dev
       /dev/fs
       /dev/fs/ctl
       /dev/fs/...
       /dev/new

DESCRIPTION
       The fs driver builds complex disk files out of simpler disk files.  In‐
       spired  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 di‐
       rectory  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 in‐
       stead 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  re‐
              turn  but  does  not prevent the rest of the writes to the other
              devices of the mirror set.  Reads from new are  handled  by  se‐
              quentially  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 in‐
              dication 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.

       crypt new file key
              The device new corresponds to a AES-encrypted partition file en‐
              crypted 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  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.

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 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
       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  mecha‐
       nism 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.

                                                                         FS(3)