psdf(4) psdf(4)
NAME
psdf - Plattenformat
SYNTAX
#include <sys/dkondisk.h>
BESCHREIBUNG
PSDF (Pyramid Standard Disk Format) steht für eine Reihe von Daten-
strukturen, mit denen Konfigurationsinformationen auf Plattengeräten
gespeichert werden können. Da dafür gesonderte Bereiche der Platte
benutzt werden und von den Informationen redundante Kopien erstellt
und aufbewahrt werden, wird man dadurch gegen die meisten Plattende-
fekte abgesichert.
PSDF besteht aus einem Positions-Index mit Zeigern auf die Platten-
Positionen mit den verschiedenen Konfigurations-Datenstrukturen sowie
auf die Konfigurations-Datenstrukturen selbst. Das Verweissystem für
eine bestimmte Platte ist vom jeweiligen Gerätetreiber abhängig.
Der Positions-Index enthält Zeiger auf die redundanten Kopien der Aus-
weichsektortabelle (Tabelle der fehlerhaften Blöcke), die Gerätetyp-
Struktur (struct dktype), die Plattenbereichs-Struktur (struct dkpart)
sowie die Platten-Tuning-Struktur (struct dktune). Jede dieser Struk-
turen ist auf der Platte in eine Sektorpuffer-Struktur eingebettet,
die eine Versionsnummer sowie eine Dateiformatkennung (magic number)
enthält. Bei den Puffer-Strukturen handelt es sich um die nachfolgend
gezeigten struct xxxondisk-Strukturen. Die auf einer bestimmten
Platte enthaltene Struktur wird in die Version umgewandelt, die im
aktuellen System benutzt wird; dies wird durch den Systemkern erle-
digt, wenn die Struktur von der Platte gelesen wird. Die Strukturen
werden auf jeden Fall in der Version geschrieben, die aktuell vom
System benutzt wird.
Diese Strukturen können mit den folgenden ioctl-Funktionsaufrufen
gelesen und geschrieben werden:
struct dkindex
DKIOCGETINDEX und DKIOCSETINDEX
struct dktype
DKIOCGETTYPE und DKIOCSETTYPE
struct dkpart
DKIOCGETPART und DKIOCSETPART
struct dktune
DKIOCGETTUNE und DKIOCSETTUNE
Außerdem kann der ioctl-Funktionsaufruf DKIOCSETMODE im DKMODENOPSDF-
Modus benutzt werden, um dem Treiber mitzuteilen, daß die Platte das
PSDF nicht unterstützt und die oben aufgeführten ioctl-
Funktionsaufrufe DKIOCSET... daher nicht zu der Datenstruktur führen
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
psdf(4) psdf(4)
sollten, die gerade auf die Platte geschrieben wird.
/*
* "@(#)dkondisk.h Revision: 1.8 3/11/91 19:26:17"
*/
/* Pyramid Technology - Apr 1990 */
#ifndef dkondiskh
#define dkondiskh
#ident "@(#)dkondisk.h PTrev: 1.8 3/11/91 19:26:17"
#ifdef KERNEL
#include "sys/dkio.h"
#else
#include <sys/dkio.h>
#endif
/*
* Die Konfigurationsstrukturen auf der Platte
*/
#define DKMAGIC 0xf1e2d3c4L /* Dateiformatkennung für alle Strukturen */
#define DKXMAGIC 0xc4d3e2f1L /* Dateiformatkennung für Indexstrukturen */
#define DKNINDEX 4 /* Anzahl der Indizes pro Platte */
#define DKNCOPIES 8 /* Maximale Anzahl der Datenstruktur-Kopien */
#define DKSTRUCTSIZE 2048 /* Mindestgröße der Strukturen auf der Platte*/
#define DKMAXSECTOR 4096 /* Unterstützte maximale Sektorgröße
Auch kleinere Sektoren sind zulässig */
#define DKIDLEN 64 /* Maximale Länge der Kennungs-Zeichenkette */
/*
* Die Indexstruktur ist auf der Platte an einer bekannten Position enthalten
* und enthält Zeiger auf die übrigen Informationen, die auf der Platte
* enthalten sind.
*/
struct dkindexondisk
{
long dkversion;
long dkmagic;
union
{
struct dkindexv1
{
char dkxid[DKIDLEN]; /* Eindeutige gerätespezifische
Kennungs-Zeichenkette */
struct dkaddr
{
long cylinder;
long head;
long sector;
} dkxasm[DKNCOPIES], /* Ausweichsektortabelle */
dkxtype[DKNCOPIES], /* struct dktype */
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
psdf(4) psdf(4)
dkxpart[DKNCOPIES], /* struct dkpart */
dkxtune[DKNCOPIES], /* struct dktune */
dkxmisc[DKNCOPIES]; /* reserviert */
} dkxv1;
char fill[DKSTRUCTSIZE - 2*sizeof(long)];
} U;
};
typedef struct dkindexv1 dkindext; /* Die aktuellste Version */
struct dktypeondisk
{
long dkversion;
long dkmagic;
union
{
struct dktype dktv1;
char fill[DKSTRUCTSIZE - 2*sizeof(long)];
} U;
};
typedef struct dktype dktypet; /* Die aktuellste Version */
struct dkpartondisk
{
long dkversion;
long dkmagic;
union
{
struct dkpart dkpv1;
char fill[DKSTRUCTSIZE - 2*sizeof(long)];
} U;
};
typedef struct dkpart dkpartt; /* Die aktuellste Version */
struct dktuneondisk
{
long dkversion;
long dkmagic;
union
{
struct dktune dkuv1;
/* Groß lassen, damit sie einfach zu erweitern ist */
char fill[DKMAXSECTOR - 2*sizeof(long)];
} U;
};
typedef struct dktune dktunet; /* Die aktuellste Version */
#endif /* dkondiskh */
SIEHE AUCH
dksetup(8), dkindex(8), dkpsdfinit(8).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98