summaryrefslogtreecommitdiff
path: root/man/3/ds
blob: 6d766698066c72369241e36edb74f155dedf94db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
.TH DS 3
.SH NAME
ds \- compound device subsystems
.SH SYNOPSIS
.nf
.B bind -b #k /dev

.B /dev/ds
.B /dev/ds/ctl
.B /dev/ds/...
.fi
.SH DESCRIPTION
.I Ds
builds complex block storage subsystems out of simpler ones.
Inspired by the Plan 9 file server kernel's configuration strings,
it provides device mirroring, partitioning, interleaving, and catenation
for block-oriented file systems.
.PP
It serves a two-level directory.
The top level contains a single directory
.BR ds ,
which contains a control file
.B ctl
and one file per configured device.
.PP
The control messages each introduce a new device, here named
.IR new .
The
.I file
arguments are interpreted in the name space of the writer.
.TP
.BI mirror " new files" \fR...
The device
.I new
corresponds to a RAID 1 mirroring of
.IR files .
Writes to
.BI new
are handled by sequentially writing to the
.I files
from right to left (the reverse of
of the order in the control message).
If any write fails, the write is aborted.
Reads from
.BI new
are handled by sequentially reading from the
.I files
from left to right until one succeeds.
The length of the mirror device is the minimum of the lengths of the
.IR files .
.TP
.BI part " new file offset length"
The device
.I new
corresponds to the
.I length
bytes starting at
.I offset
in
.IR file .
If
.IR offset + length
reaches past the end of
.IR file ,
.I length
is silently reduced to fit.
.TP
.BI inter " new files" \fR...
The device
.I new
corresponds to the block interleaving of
.IR files ;
an 8192-byte block size is assumed.
.TP
.BI cat " name files" \fR...
The device
.I new
corresponds to the catenation of
.IR files .
.PD
.LP
If the variable
.B fsconfig
is set in
.IR plan9.ini (8)
then
.I ds
will read its configuration from the file
.B $fsconfig
on the first attach.
This is useful when the machine boots
from a local file server that uses
.IR fs .
.SH EXAMPLE
Mirror the two disks
.B /dev/sdC0/data
and
.B /dev/sdD0/data
as
.BR /dev/ds/m0 ;
similarly, mirror
.B /dev/sdC1/data
and
.B /dev/sdD1/data
as
.BR /dev/ds/m1 :
.IP
.EX
echo mirror m0 /dev/sdC0/data /dev/sdD0/data >/dev/ds/ctl
echo mirror m1 /dev/sdC1/data /dev/sdD1/data >/dev/ds/ctl
.EE
.LP
Interleave the two mirrored disks to create
.BR /dev/ds/data :
.IP
.EX
echo inter data /dev/ds/m0 /dev/ds/m1 >/dev/ds/ctl
.EE
.LP
Run
.IR kfs (4)
on the interleaved device:
.IP
.EX
disk/kfs -f /dev/ds/data
.EE
.LP
Save the configuration:
.IP
.EX
cp /dev/ds/ctl /dev/fd0disk
.EE
To load the configuration automatically at boot time,
add this to
.IR plan9.ini :
.IP
.EX
fsconfig=/dev/fd0disk
.EE
.SH "SEE ALSO"
.IR dossrv (4)
.SH SOURCE
.B /os/port/devds.c
.SH BUGS
Should be able to select block size for interleaved devices.