123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- .SH
- Block Devices
- .PP
- The block device I/O system is like a
- protocol stack of filters.
- There are a set of pseudo-devices that call
- recursively to other pseudo-devices and real devices.
- The protocol stack is compiled from a configuration
- string that specifies the order of pseudo-devices and devices.
- Each pseudo-device and device has a set of entry points
- that corresponds to the operations that the file system
- requires of a device.
- The most notable operations are
- .CW read ,
- .CW write ,
- and
- .CW size .
- .PP
- The device stack can best be described by
- describing the syntax of the configuration string
- that specifies the stack.
- Configuration strings are used
- during the setup of the file system.
- For a description see
- .I fsconfig (8).
- In the following recursive definition,
- .I D
- represents a
- string that specifies a block device.
- .IP "\fID\fP = (\fIDD\fP...)"
- .br
- This is a set of devices that
- are concatenated to form a single device.
- The size of the catenated device is the
- sum of the sizes of each sub-device.
- .IP "\fID\fP = [\fIDD\fP...]"
- .br
- This is the interleaving of the
- individual devices.
- If there are N devices in the list,
- then the pseudo-device is the N-way block
- interleaving of the sub-devices.
- The size of the interleaved device is
- N times the size of the smallest sub-device.
- .IP "\fID\fP = {\fIDD\fP...}"
- .br
- This is a set of devices that
- constitute a `mirror' of the first sub-device, and form a single device.
- A write to the device is performed,
- at the same block address,
- on the sub-devices, in right-to-left order.
- A read from the device is performed on each sub-device,
- in left-to-right order, until a read succeeds without error,
- or the set is exhausted.
- One can think of this as a poor man's RAID 1.
- The size of the device is the size of the smallest sub-device.
- .IP "\fID\fP = \f(CWp\fP\fIDN1.N2\fP"
- .br
- This is a partition of a sub-device.
- The sub-device is partitioned into 100 equal pieces.
- If the size of the sub-device is not divisible by 100,
- then there will be some slop thrown away at the top.
- The pseudo-device starts at the N1-th piece and
- continues for N2 pieces. Thus
- .CW p\fID\fP67.33
- will be the
- last third of the device
- .I D .
- .IP "\fID\fP = \f(CWf\fP\fID\fP"
- .br
- This is a fake write-once-read-many device simulated by a
- second read-write device.
- This second device is partitioned
- into a set of block flags and a set of blocks.
- The flags are used to generate errors if a
- block is ever written twice or read without being written first.
- .IP "\fID\fP = \f(CWx\fP\fID\fP"
- .br
- This is a byte-swapped version of the file system on D.
- Since the file server currently writes integers in metadata to disk
- in native byte order, moving a file system to a machine of the other
- major byte order (e.g., MIPS to Pentium)
- requires the use of
- .CW x .
- It knows the sizes of the various integer fields in the file system metadata.
- Ideally, the file server would follow the Plan 9 religion and write a consistent
- byte order on disk, regardless of processor.
- In the mean time, it should be possible to automatically determine the need
- for byte-swapping by examining data in the super-block of each file system,
- though this has not been implemented yet.
- .IP "\fID\fP = \f(CWc\fP\fIDD\fP"
- .br
- This is the cache/WORM device made up of a cache (read-write)
- device and a WORM (write-once-read-many) device.
- More on this later.
- .IP "\fID\fP = \f(CWo\fP"
- .br
- This is the dump file system that is the
- two-level hierarchy of all dumps ever taken on a cache/WORM.
- The read-only root of the cache/WORM file system
- (on the dump taken Feb 18, 1995) can
- be referenced as
- .CW /1995/0218
- in this pseudo device.
- The second dump taken that day will be
- .CW /1995/02181 .
- .IP "\fID\fP = \f(CWw\fP\fIN1.N2.N3\fP"
- .br
- This is a SCSI disk on controller N1, target N2 and logical unit number N3.
- .IP "\fID\fP = \f(CWh\fP\fIN1.N2.0\fP"
- .br
- This is an (E)IDE or *ATA disk on controller N1, target N2
- (target 0 is the IDE master, 1 the slave device).
- These disks are currently run via programmed I/O, not DMA,
- so they tend to be slower to access than SCSI disks.
- .IP "\fID\fP = \f(CWr\fP\fIN1\fP"
- .br
- This is the same as
- .CW w ,
- but refers to a side of a WORM disc.
- See the
- .I j
- device.
- .IP "\fID\fP = \f(CWl\fP\fIN1\fP"
- .br
- This is the same as
- .CW r ,
- but one block from the SCSI disk is removed for labeling.
- .IP "\fID\fP = \f(CWj(\fP\fID\d\s-2\&1\s+2\u\fID\d\s-2\&2\s+2\u\f(CW*)\fID\d\s-2\&3\s+2\u\f1"
- .br
- .I D\d\s-2\&1\s+2\u
- is the juke box SCSI interface.
- The
- .I D\d\s-2\&2\s+2\u 's
- are the SCSI drives in the juke box
- and the
- .I D\d\s-2\&3\s+2\u 's
- are the demountable platters in the juke box.
- .I D\d\s-2\&1\s+2\u
- and
- .I D\d\s-2\&2\s+2\u
- must be
- .CW w .
- .I D\d\s-2\&3\s+2\u
- must be pseudo devices of
- .CW w ,
- .CW r ,
- or
- .CW l
- devices.
- .PP
- For
- .CW w ,
- .CW h ,
- .CW l ,
- and
- .CW r
- devices any of the configuration numbers
- can be replaced by an iterator of the form
- .CW <\fIN1-N2\fP> .
- N1 can be greater than N2, indicating a descending sequence.
- Thus
- .Ex
- [w0.<2-6>]
- .Ee
- is the interleaved SCSI disks on SCSI targets
- 2 through 6 of SCSI controller 0.
- The main file system on
- Emelie
- is defined by the configuration string
- .Ex
- c[w1.<0-5>.0]j(w6w5w4w3w2)(l<0-236>l<238-474>)
- .Ee
- This is a cache/WORM driver.
- The cache is three interleaved disks on SCSI controller 1
- targets 0, 1, 2, 3, 4, and 5.
- The WORM half of the cache/WORM
- is 474 jukebox disks.
- Another file server,
- .I choline ,
- has a main file system defined by
- .Ex
- c[w<1-3>]j(w1.<6-0>.0)(l<0-124>l<128-252>)
- .Ee
- The order of
- .CW w1.<6-0>.0
- matters here, since the optical jukebox's WORM drives's
- SCSI target ids,
- as delivered,
- run in descending order relative to the numbers of the drives
- in SCSI commands
- (e.g., the jukebox controller is SCSI target 6,
- drive #1 is SCSI target 5,
- and drive #6 is SCSI target 0).
|