aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man3/libdisk.3
blob: 09c522f73db8b1edfc44954a122684db185a0d80 (plain) (blame)
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
.\"
.\" Copyright (c) 1996 Joerg Wunsch
.\"
.\" All rights reserved.
.\"
.\" This program is free software.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %Id: libdisk.3,v 1.8 1998/12/31 02:35:43 jkh Exp %
.\" "
.\" $FreeBSD$
.Dd March 15, 1996
.Dt LIBDISK 3
.Os
.Sh 名称
.Nm Open_Disk ,
.Nm Clone_Disk ,
.Nm Free_Disk ,
.Nm Debug_Disk ,
.Nm Set_Bios_Geom ,
.Nm Delete_Chunk ,
.Nm Collapse_Disk ,
.Nm Collapse_Chunk ,
.Nm Create_Chunk ,
.Nm All_FreeBSD ,
.Nm CheckRules ,
.Nm Disk_Names ,
.Nm Set_Boot_Mgr ,
.Nm Set_Boot_Blocks ,
.Nm Write_Disk ,
.Nm Cyl_Aligned ,
.Nm Next_Cyl_Aligned ,
.Nm Prev_Cyl_Aligned ,
.Nm Track_Aligned ,
.Nm Next_Track_Aligned ,
.Nm Prev_Track_Aligned ,
.Nm Create_Chunk_DWIM ,
.Nm MakeDev ,
.Nm MakeDevDisk ,
.Nm ShowChunkFlags ,
.Nm ChunkCanBeRoot ,
.Nm chunk_n ,
.Nm slice_type_name
.Nd スライスおよびパーティションラベルに対するインタフェースライブラリ
.Sh 書式
.Fd #include <sys/types.h>
.Fd #include <libdisk.h>
.\"		What is the correct way to cause a single line break ???
.Bd -literal
.Dv extern const char *chunk_n[];
.Ed
.Ft const char *
.Fn slice_type_name "int type" "int subtype"
.Ft struct disk *
.Fn Open_Disk "const char *devname"
.Ft struct disk *
.Fn Clone_Disk "struct disk *disk"
.Ft void
.Fn Free_Disk "struct disk *disk"
.Ft void
.Fn Debug_Disk "struct disk *disk"
.Ft void
.Fn Set_Bios_Geom "struct disk *disk" "u_long cyl" "u_long heads" "u_long sects"
.Ft int
.Fn Delete_Chunk "struct disk *disk" "struct chunk *"
.Ft void
.Fn Collapse_Disk "struct disk *disk"
.Ft int
.Fn Collapse_Chunk "struct disk *disk" "struct chunk *chunk"
.Ft int
.Fn Create_Chunk "struct disk *disk" "u_long offset" "u_long size" "chunk_e type" "int subtype" "u_long flags"
.Ft void
.Fn All_FreeBSD "struct disk *d" "int force_all"
.Ft char *
.Fn CheckRules "struct disk *"
.Ft char **
.Fn Disk_Names "void"
.Ft void
.Fn Set_Boot_Mgr "struct disk *d" "const u_char *bootmgr"
.Ft void
.Fn Set_Boot_Blocks "struct disk *d" "const u_char *boot1" "const u_char *boot2"
.Ft int
.Fn Write_Disk "struct disk *d"
.Ft int
.Fn Cyl_Aligned "struct disk *d" "u_long offset"
.Ft u_long
.Fn Next_Cyl_Aligned "struct disk *d" "u_long offset"
.Ft u_long
.Fn Prev_Cyl_Aligned "struct disk *d" "u_long offset"
.Ft int
.Fn Track_Aligned "struct disk *d" "u_long offset"
.Ft u_long
.Fn Next_Track_Aligned "struct disk *d" "u_long offset"
.Ft u_long
.Fn Prev_Track_Aligned "struct disk *d" "u_long offset"
.Ft struct chunk *
.Fn Create_Chunk_DWIM "struct disk *d" "struct chunk *parent" "u_long size" "chunk_e type" "int subtype" "u_long flags"
.Ft int
.Fn MakeDev "struct chunk *c" "const char *path"
.Ft int
.Fn MakeDevDisk "struct disk *d" "const char *path"
.Ft char *
.Fn ShowChunkFlags "struct chunk *c"
.Ft char *
.Fn ChunkCanBeRoot "struct chunk *c"
.Sh 解説
.Nm libdisk
は、低レベルのディスクスライス
およびパーティションラベルに対するインタフェースを提供します。
ほとんどの関数は、
.Ql struct disk
または
.Ql struct chunk
という型の引数を取り動作します。
.Pp
どちらの型もプログラマにはわかりにくいので、完全を期すために
以下に内部構造を示します。
.Bd -literal -offset indent
struct disk {
	char		*name;
	u_long		flags;
	u_long		bios_cyl;
	u_long		bios_hd;
	u_long		bios_sect;
	u_char		*bootmgr;
	u_char		*boot1;
	u_char		*boot2;
	struct chunk	*chunks;
};
.Ed
関数によるフラグ値は
.Ql DISK_ON_TRACK
だけで、ディスクが On-Track ディスクマネージャによって
操作されていることを意味します。
.Pp
.Bd -literal -offset indent
struct chunk {
	struct chunk	*next;
	struct chunk	*part;
	struct disk	*disk;
	long		offset;
	u_long		size;
	u_long		end;
	char		*name;
	char		*oname;
	chunk_e		type;
	int		subtype;
	u_long		flags;
	void		(*private_free)(void*);
	void		*(*private_clone)(void*);
	void		*private_data;
};
.Ed
.Ql type
フィールドは
.Ql whole, unknown, fat, freebsd, extended, part, unused
のうち、どれか一つの値を取ります。
.Pp
以下は
.Ql struct chunk
において
.Ql flags
が取ることのできる値です。
.Bl -tag -offset indent -width CHUNK_BSD_COMPATXX
.It CHUNK_PAST_1024
シリンダ 1024 を越えているため、この領域からはブートできません。
.It CHUNK_BSD_COMPAT
この領域は、BSD 互換であり、
.Ql wd0s4f -> wd0f
のような短縮形も使用できます。
.It CHUNK_BAD144
この領域には bad144 マッピングがあります。
.It CHUNK_ALIGN
この領域は整合(align)していなければなりません。
.It CHUNK_IS_ROOT
この
.Ql part
は
rootfs
であり、パーティションを
.Ql a
に
割り振ります。
.It CHUNK_ACTIVE
MBR 内のアクティブスライスです。
.It CHUNK_FORCE_ALL
すべての BIOS によるジオメトリ解釈を無視し、与えられたディスク全体を
強制的に FreeBSD 用とします。
.El
.Pp
フィールド
.Ql private_data, `private_free', private_clone
は、
アプリケーション固有のデータ、およびその管理のためのものです。この
機能がなければ、記憶域の管理はできず、クローニングによりポインタが
複製されても解放できなくなります。
.Pp
.Fn Open_Disk
は、名前付ディスクを open し、一群 (populated) のツリーを
返します。
.Pp
.Fn Clone_Disk
は、ツリーの複製を作成します。
.Dq Undo
機能に便利です。
.Pp
.Fn Free_Disk
は、
.Fn Open_Disk
または
.Fn Clone_Disk
で作成されたツリーを解放します。
.Pp
.Fn Debug_Disk
は、標準出力 (stdout)
のツリーの内容を出力します。
.Pp
.Fn Set_Bios_Geom
は、
BIOS が使うジオメトリを設定します。
.Pp
.Fn Delete_Chunk
は、disk_space の領域を解放します。
.Pp
.Fn Collapse_Disk
および
.Fn Collapse_Chunk
は、まだ試験的なものなので使ってはいけません。
.Pp
.Fn Create_Chunk
は、指定されたパラメータを持つ領域を生成します。
.Pp
.Fn All_FreeBSD
は、ディスク全体を一つの FreeBSD の領域を作成します。
.Ql force_all
が設定されていると、BIOS によるジオメトリ解釈をすべて無視します。
.Pp
.Fn CheckRules
は、このディスクレイアウトの矛盾した区画規則についての警告を
文字列
.Ql char*
として返します。
.Pp
.Fn Disk_Names
は、
すべてのディスク名 (wd0, wd1 ...) を格納した文字列群
.Ql char**
を返します。
配列と同様、各ポインタを手動で解放しなければなりません。
.Pp
.Fn Set_Boot_Mgr
は、このブートマネージャをディスク上で使うように設定します。
.Fn Write_Disk
が呼び出されるときに書き込まれたものを取得します。
.Pp
.Fn Set_Boot_Blocks
は、ディスク上で使われるブートブロックを設定します。
.Fn Write_Disk
が呼び出されるときに書き込まれたものを取得します。
.Pp
.Fn Write_Disk
は、MBR 、ディスクラベル、ブートブロック、ブートマネージャ
すべてを書き込みます。
.Pp
.Fn Cyl_Aligned
は、BIOS ジオメトリに従って
.Ql offset
がシリンダ上に整合しているかどうかを調べます。
.Pp
.Fn Next_Cyl_Aligned
は、BIOS ジオメトリに従って
.Ql offset
を次のシリンダに切り上げて配置します。
.Pp
.Fn Prev_Cyl_Aligned
は、BIOS ジオメトリに従って
.Ql offset
を前のシリンダに切り下げて配置します。
.Pp
.Fn Track_Aligned
は、BIOS ジオメトリに従って
.Ql offset
がトラック上に配置されているかどうかを調べます。
.Pp
.Fn Next_Track_Aligned
は、BIOS ジオメトリに従って
.Ql offset
を次のトラックに切り上げて配置します。
.Pp
.Fn Prev_Track_Aligned
は、BIOS ジオメトリに従って
.Ql offset
がトラック上に配置されているかどうかを調べます。
.Pp
.Fn Create_Chunk_DWIM
は、指定された親領域内に指定サイズのパーティションを生成し、
そのポインタを返します。
最初に見つかった十分な大きさの未使用領域が使われます。
.Pp
.Fn MakeDev
は、この領域のデバイスノードを作成します。
.Pp
.Fn MakeDevDisk
は、ディスク上にあるすべての領域のデバイスノードを作成します。
.Pp
.Fn ShowChunkFlags
は、フラグを表示する文字列を返します。
.Pp
.Fn ChunkCanBeRoot
は、領域が
.Ql /
になれるならばヌルを返します。
.Pp
領域名を示す文字列は、外部配列変数
.Va chunk_n
を使って直接アクセスできます。
.Pp
.Fn slice_type_name
は、指定された
.Ql type .
.Ql subtype
に関連づけられた名前文字列を返します。
.Fn slice_type_name
がスライスに対して "unknown" を返すのは、
未知の場合、すなわち
.Ql /
です。
.Pp
.Sh 作者
.Nm libdisk
は、
.An Poul-Henning Kamp
が作成しました。
.Pp
このマニュアルページの執筆者は
.ie t J\(:org Wunsch
.el Joerg Wunsch
です。