|
| md - user configurable pseudo device
driver |
|
md is
a user configurable pseudo device driver that provides disk concatenation,
striping, mirroring, RAID5 metadevices, trans metadevices, and hot spare utilities.
The block devices access the disk using the system's normal buffering
mechanism and are read and written without regard to physical disk records.
There is also a ``raw'' device which provides for direct transmission between
the disk and the user's read or write buffer. A single read or write call
usually results in one I/O operation; raw I/O is therefore considerably more
efficient when many bytes are transmitted. The names of the block devices
are found in /dev/md/dsk; the names of the raw devices
are found in /dev/md/rdsk. Metadevices have the appearance
of whole disks; there are no slices (partitions).
I/O requests (such as lseek (2)) to the metadevices
must have an offset that is a multiple of 512 bytes (DEV_BSIZE), or the driver
returns an EINVAL error. If the transfer length is not a multiple of 512
bytes, the tranfer count is rounded up by the driver.
The md pseudo device drivers support all disk devices
on all Solaris 2.4 or later Solaris systems.
|
|
This section provides a list of the ioctls supported by the metadisk
driver.
The following ioctls are valid when issued to the raw metadevice, such
as /dev/md/rdsk/d0. See dkio(7)
for additional information.
-
DKIOCGGEOM
- This
ioctl is used to get the disk geometry. The metadisk driver fills in the dkg_nhead, dkg_nsect, dkg_rpm, dkg_write_reinstruct and dkg_read_reinstruct
from the first component of the metadevice (at metainit
time). dkg_ncyl is calculated using the size of the metadevice
(reported by metastat) divided by (dkg_nhead * dkg_nsect).
The total size is always a multiple of (dkg_nhead * dkg_nsect). If the first
component of a metadevice does not start on cylinder
number 0, then the dkg_ncyl is increased by one cylinder; because DKIOCGVTOC
reports the metadevice as starting on cylinder 1. The side effect here is
that it looks like cylinder 0 is not being used, but all the arithmetic works
out correctly. If the metadevice is not set up, then ENXIO is returned.
-
DKIOCINFO
- When
issued to the administrative device or metadevice, this ioctl sets dki_unit to the unit number of the metadevice, dki_ctype to a value of DKC_MD, and dki_partition to
0, because there are no slices.
-
DKIOCGVTOC
- This
ioctl returns the current vtoc. If one has not been written, then a default
vtoc is returned. v_nparts is always 1. v_part[0].p_start is 0 if the first component of the metadevice starts on cylinder
0. Otherwise, the p_start field is the starting sector
of cylinder 1. v_part[0].p_size is the same as the total
size reported by metastat.
-
DKIOCSVTOC
- This
ioctl stores the vtoc in the metadevice state database so it is persistent
across reboots.
|
|
Notice Log Messages
|
The informative log messages include:
|
md: dnum: Hotspared device dev with dev
|
The first device name listed has been hot spare replaced with the second
device name listed.
|
md: dnum: Hotspared device dev(num,num) with dev(num,num)
|
The first device number listed has been hot spare replaced with the
second device number listed.
|
md: Could not load misc /dev
|
The named misc module is not loadable. It is possibly
missing, or something else has been copied over it.
|
md: dnum: no mem for property dev
|
Memory could not be allocated in the prop_op entry
point.
|
md: db: Parsing error on 'dev'
|
Set command in /etc/system for the mddb.bootlist <number> is not in the correct
format. metadb -p can be run to put the
correct set commands into the /etc/system file.
|
md: dnum: dev(num,num) needs maintenance
md: dnum: dev needs maintenance
|
An I/O or open error has occurred on a device within a mirror causing
a component in the mirror to change to the Maintenance state.
md: dnum: dev(num,num) last erred md: dnum: dev last erred
An I/O or open error has occurred on a device within a mirror and the
data is not replicated elsewhere in the mirror. This is causing the component
in the mirror to change to the Last Erred state.
|
Warning Log Messages
|
The warning log messages include:
|
md: dnum: not configurable, check /kernel/drv/md.conf
|
This error occurs when the number of metadevices as specified by the nmd parameter in the /kernel/drv/md.conf file
is lower than the number of configured metadevices on the system. It can also
occur if the md_nsets parameter for disksets is lower than
the number of configured disksets on the system. To fix this problem, examine
the md.conf file and increase the value of either nmd or md_nsets as needed.
|
md: State database is stale
|
This error message comes when there are not enough usable replicas for
the state database to be able to update records in the database. All accesses
to the metadevice driver will fail. To fix this problem, more replicas need
to be added or inaccessible replicas need to be deleted.
|
md: dnum: read error on devmd: dnum: write error on dev
|
A read or write error has occurred on the specified submirror, at the
specified device name. This happens if any read or write errors occur on a
submirror.
|
md: dnum: read error on dev(num,num)md: dnum: write error on dev(num,num)
|
A read or write error has occurred on the specified submirror, at the
specified device number. This happens if any read or write errors occur on
a submirror.
|
md: State database commit failed
md: State database delete failed
|
These messages occur when there have been device errors on components
where the state database replicas reside. These errors only occur when more
than half of the replicas have had device errors returned to them. For instance,
if you have three components with state database replicas and two of the components
report errors, then these errors may occur. The state database commit or delete
is retried periodically. If a replica is added, then the commit or delete
will finish and the system will be operational. Otherwise the system will
timeout and panic.
|
md: dnum: Cannot load dev driver
|
Underlying named driver module is not loadable (for example, sd, id, xy, or a third-party
driver). This could indicate that the driver module has been removed.
|
md: Open error of hotspare devmd: Open error of hotspare dev(num,num)
|
Named hotspare is not openable, or underlying driver is not loadable.
|
Panic Log Messages
|
The panic log messages include:
|
md: dnum: Unknown close typemd: dnum: Unknown open type
|
Metadevice is being opened/closed with an unknown open type (OTYP).
|
md: State database problem
|
Failed metadevice state database commit or delete has been retried the
default 100 times.
|
|
|
-
/dev/md/dsk/dn
- block device (where n is the device number)
-
/dev/md/rdsk/dn
- raw device (where n is the device number)
-
/dev/md/setname/dsk/dn
- block device (where setname is the name of the
diskset and n is the device number)
-
/dev/md/setname/rdsk/dn
- raw device (where setname is the name of the diskset
and n is the device number)
-
/dev/md/admin
- administrative device
-
/kernel/drv/md
- driver module
-
/kernel/drv/md.conf
- driver configuration file
-
/kernel/misc/md_stripe
- stripe driver misc module
-
/kernel/misc/md_mirror
- mirror driver misc module
-
/kernel/misc/md_hotspares
- hotspares driver misc module
-
/kernel/misc/md_trans
- metatrans driver for UFS logging
-
/kernel/misc/md_raid
- RAID5 driver misc module
|
|
metaclear(1M), metadb(1M), metadetach(1M), metahs(1M), metainit(1M), metaoffline(1M), metaonline(1M), metaparam(1M), metareplace(1M), metaroot(1M), metastat(1M), metasync(1M), metattach(1M), dkio(7I), md.tab(4), md.cf(4), mddb.cf(4)
Solaris Volume Manager Administration Guide
|
SunOS 5.9 | Go To Top | Last Changed 20 September 2000 |
| |