SD

Section: Devices and Network Interfaces (4)
Updated: June 30, 1989
Index Return to Main Contents
 

NAME

sd - SCSI disk device driver  

SYNOPSIS

device_name as sd[0-6] at sc0 target [0-6] lun [0-7]  

DESCRIPTION

This driver allows access to a number of disk drives with standard SCSI interfaces. The driver has both block and character oriented interfaces. The form of the block device is
/dev/sd<unit><partition>

where <unit> is a digit from 0 to 15, and <partition> is a letter from ``a'' to ``h,'' indicating the partition on the disk. For example, /dev/sd1b refers to unit 1, partition b. Similarly, a character device is accessed by
/dev/rsd<unit><partition>

Partition h of the character device is a special device called the ``live'' partition; for example, sd1h. I/O to and from the live partition is used to access disks that do not have a valid label, and to access portions of disks normally inaccessible to read(2) and write(2) calls --- for example, the front porch. (Reading and writing the other partitions of the character device, and all partitions of the block device, requires a valid label on the disk.) I/O using the live partition has the following restrictions:

*
Reads and writes must start on a sector boundary.
*
The length of reads and writes must be an integral multiple of the sector size.
 

Multiple Volume Support

The sd driver supports drives with removable media. In a manner similar to the fd(4) and od(4) drivers, the devices in /dev refer to volumes, not to drives. One physical drive can have multiple volumes associated with it at any given time. Each drive has associated with it one permanent volume at boot time --- drive 0 is associated with volume 0 (/dev/rsd0? and /dev/sd0?), drive 1 with volume 1, etc. Henceforth, additional volumes can be assigned to a drive if one of the following occurs:

*
A DKIOCEJECT ioctl is executed on a volume, but the device remains open. Then a new volume (removable disk) is inserted in the empty drive. This new disk will be assigned to the next available volume number, and will henceforth be associated with this drive.
*
An open() call is executed on a volume not currently assigned to a drive. (See the DKIOCFREEVOL ioctl, below.)

In both of these cases, the following occurs when an I/O is attempted on a volume not currently present in a drive:

1.
The volume currently present in the desired drive is ejected. (If any references still remain to this device, the volume will be ``remembered,'' and will not be reassigned; otherwise, the volume information is discarded, and the volume may be reassigned at a later time.)
2.
An alert panel is displayed asking for the desired volume (by name, if known).
3.
The user takes one of two actions:
*
The desired volume is inserted; the alert panel is then removed.
*
The user clicks on the ``Cancel'' button in the alert panel, causing the I/O to the missing volume to be aborted with a status of ENODEV.

Another feature of removable media support is automatic mounting of newly inserted volumes. If a disk is inserted in an empty drive, the disk will be mounted if it has a valid label and is in a consistent (``clean'') state. If it does not have a valid label, or has a file system in an inconsistent state, the user will be asked by the Workspace Manager (via an alert panel) if he/she wants to initialize it (or repair it, if ``unclean''). Answering in the affirmative results in the disk ultimately being mounted in the root directory.

The following operations are allowed by the SCSI disk driver:

open()
See open(2).
close()
See close(2).
read()
See read(2).
write()
See write(2).
strategy()
This is the standard block device entry point used by the UNIX file system. This is only valid for the block disk device.
ioctl()
The general form of an ioctl() call is
ioctl(int d, u_int request, char *argp)

The following ioctl requests are currently defined (see /NextDeveloper/Headers/bsd/dev/disk.h and /NextDeveloper/Headers/bsd/dev/scsireg.h):

DKIOCGLABEL
Get disk label; argp points to a pointer to a struct disk_label (see /NextDeveloper/Headers/bsd/dev/disk.h). Copy the label of the current disk into user address space.
DKIOCSLABEL
Write disk label; argp points to a pointer to a struct disk_label. (Must be superuser to execute this call.)
DKIOCINFO
Get drive info; argp points to a struct drive_info (see /NextDeveloper/Headers/bsd/dev/disk.h).
DKIOCSFORMAT
Set ``disk formatted'' flag; argp points to an int; if *argp is non-zero, the driver henceforth assumes the disk is formatted, else the driver marks the disk as unformatted.
DKIOCGFORMAT
Get "disk formatted" flag; argp points to an int, and *argp will be 1 if the disk is formatted, else *argp will be 0.
DKIOCEJECT
Eject the disk. Only valid for drives with removable media. See ``Multiple Volume Support.''
SDIOCGETCAP
Get disk capacity; argp points to a struct capacity_reply (see /NextDeveloper/Headers/bsd/dev/scsireg.h).
DKIOCGFREEVOL
Get the number of the next free volume; argp points to an int. This ioctl is normally executed on the SCSI Disk Controller device, /dev/sdc0. It is used when an application wants to determine the volume number not currently in use. If this ioctl returns a value of 3, for example, a subsequent open of /dev/rsd3a will result in an alert panel requesting a new disk for volume 3.
SDIOCSRQ
Execute an arbitrary SCSI command using the scsi_req mechanism. (Must be superuser to execute this call.)

For SDIOCSRQ, argp points to a struct scsi_req, defined in /NextDeveloper/Headers/bsd/dev/scsireg.h, as are all other constants used with this mechanism. This struct contains both the input to the sd driver required for execution of a command (SCSI CDB bytes, address at which DMA will occur, etc.) as well as the status block upon return. The following status is provided:

srp->sr_io_status
Indicates success, I/O timeout, SCSI check status, DMA overrun, etc.
srp->sr_scsi_status
The actual SCSI status byte returned by the target.
srp->sr_dma_xfr
Number of data bytes actually transferred to/from device.
srp->sr_exec_time
Command execution time, with microsecond resolution.
 

FILES

/NextDeveloper/Headers/bsd/dev/scsireg.h
/NextDeveloper/Headers/bsd/dev/disk.h
/dev/rsd?
/dev/sd??
/dev/sdc0
 

SEE ALSO

open(2), read(2), write(2), ioctl(2), close(2)


 

Index

NAME
SYNOPSIS
DESCRIPTION
Multiple Volume Support
FILES
SEE ALSO

This document was created by man2html, using the manual pages.
Time: 00:59:27 GMT, September 26, 2024