sd(4)
NAME
sd, st, sg - SCSI hard disk / tape / generic
DESCRIPTION
The sd*, st*, sg* family of devices refer to the SCSI hard disk, tape and
generic driver using the Adaptec 154x series of controllers. This manual
page only describes the differences between the sd and hd devices, read
hd(4) first.
The devices numbers of the SCSI devices are statically mapped onto the
SCSI targets 0 to 7. This is done like the hd devices with sd[0-4]
referring to target 0, sd[5-9] to target 1, etc. The logical unit number
is always 0, because devices with more than one logical unit are
virtually extinct. The mapping may be changed from the boot environment
however (see boot(8)).
Tapes start at minor device 64, with nrst0 at minor 64, rst0 at 65, nrst1
at 66, etc. The mapping is again static to target (minor - 64) / 2. The
rst devices rewind the tape on close, the nrst devices do not. See
mt(1), and mtio(4) for a description of the commands that may be sent to
the tape, either from the command prompt or from a program.
Through the eight raw generic devices rsg[0-7] starting at minor 120, one
can send SCSI commands to any SCSI device from user mode. (Minix-vmd
only.)
The driver returns a drive geometry of 64 heads by 32 sectors per track
for small disks with the DIOCGETP ioctl. For large disks 255x63 is
returned. The size in sectors is usually larger than the largest
cylinder number indicates, because the disk is not likely to exactly
match that faked geometry. Note that DOS may not be able to access those
last few sectors.
Disk like devices.
Removable disks (floppies), CD-ROM's and WORM disks may also be accessed
through the sd devices. One is not allowed to write a WORM disk however,
because it is likely to be taken from an alien operating system, so it
seems safer to not allow Minix to stomp over it. One usually needs
special O.S. support to keep one from writing to the same block twice.
The DIOCEJECT ioctl ejects CD-ROMs, floppies, etc. (See eject(1).) A
fixed disk spins down if it supports the stop command.
SCSI Tapes
There are two types of SCSI tapes drives supported by the driver: fixed
or variable block size tape drives. Examples of the first kind are
cartridge tapes, with a fixed 512 bytes block size. An Exabyte tape
drive has a variable block size, with a minimum of 1 byte and a maximum
of 245760 bytes (see the documentation of such devices.) The maximum is
truncated to 32767 bytes for Minix-86 and 61440 bytes for Minix-vmd,
because the driver can't move more bytes in a single request.
A read or write to a fixed block size tape must be a precise multiple of
the block size, any other count gives results in an I/O error. A read
from a variable block sized tape must be large enough to accept the block
that is read, otherwise an I/O error will be returned. A write can be
any size above the minimum, creating a block of that size. If the write
count is larger than the maximum block size then more blocks are written
until the count becomes zero. The last block must be larger than the
minimum of course. (This minimum is often as small as 1 byte, as for the
Exabyte.)
The mt blksize command may be used to select a fixed block size for a
variable block sized tape. This will speed up I/O considerably for small
block sizes. (Some systems can only use fixed mode and will write an
Exabyte tape with 1024 byte blocks, which read very slow in variable
mode.)
A tape is a sequence of blocks and filemarks. A tape may be opened and
blocks may be read from it upto a filemark, after that all further reads
return 0. After the tape is closed and reopened one can read the blocks
following the filemark if using a non-rewinding device. This makes the
tape look like a sequence of files.
If a tape has been written to or opened in write-only mode, then a
filemark is written if the tape is closed or if a space command is
issued. No extra filemark is written if the drive is instructed to write
filemarks.
Raw Generic Devices
Under Minix-vmd one can use the generic SCSI devices to program a SCSI
device entirely from user mode. The disk and tape devices probe for
devices when opened, start disks and load tapes, but the generic devices
do nothing of this. Given an open file descriptor to any SCSI character
device (not just the generic devices) one can use the following ioctl:
ioctl(fd, SCIOCCMD, &scsicmd)
The structure whose address is passed as the third argument is defined in
<sys/scsi.h> as follows:
struct scsicmd {
void *cmd;
size_t cmdlen;
void *buf;
size_t buflen;
void *sense;
size_t senselen;
int dir;
};
Cmd and cmdlen hold the address and length of an object holding a Group 0
or Group 1 SCSI command. The next two fields describe a buffer of at
most 8 kilobytes used in the data in or out phase. Dir is 0 if data is
to be read from the device, 1 if data is written to the device. If the
ioctl succeeds then 0 is returned, otherwise -1 with errno set to EIO and
the request sense info returned in the buffer described by the sense and
senselen fields. If the sense key is zero on error then a host adapter
error occurred, this means that the device is most likely turned off or
not present.
FILES
/dev/sd[0-9], /dev/sd[1-46-9][a-d] Usual disk devices.
/dev/rst4, /dev/nrst4 Usual tape device.
/dev/rsg[0-7] Raw generic devices.
SEE ALSO
hd(4), mt(1), eject(1), mtio(4), dd(1).
AUTHOR
Kees J. Bot (kjb@cs.vu.nl)