2
* mdadm - manage Linux "md" devices aka RAID arrays.
4
* Copyright (C) 2001-2002 Neil Brown <neilb@cse.unsw.edu.au>
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 2 of the License, or
10
* (at your option) any later version.
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
17
* You should have received a copy of the GNU General Public License
18
* along with this program; if not, write to the Free Software
19
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
* Email: <neilb@cse.unsw.edu.au>
24
* School of Computer Science and Engineering
25
* The University of New South Wales
30
#define __USE_LARGEFILE64
33
extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
36
#include <sys/types.h>
45
#ifdef __dietlibc__NONO
46
int strncmp(const char *s1, const char *s2, size_t n) __THROW __pure__;
47
char *strncpy(char *dest, const char *src, size_t n) __THROW;
52
#include <linux/kdev_t.h>
53
/*#include <linux/fs.h> */
54
#include <sys/mount.h>
55
#include <asm/types.h>
56
#include <sys/ioctl.h>
58
#define MdpMinorShift 6
61
#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */
80
extern char short_options[];
81
extern struct option long_options[];
82
extern char Version[], Usage[], Help[], OptionHelp[],
83
Help_create[], Help_build[], Help_assemble[], Help_grow[],
84
Help_manage[], Help_misc[], Help_monitor[], Help_config[];
86
/* structures read from config file */
87
/* List of mddevice names and identifiers
90
* super-minor=decimal-minor-number-from-superblock
91
* devices=comma,separated,list,of,device,names,with,wildcards
93
* If multiple fields are present, the intersection of all matching
94
* devices is considered
96
#define UnSet (0xfffe)
97
typedef struct mddev_ident_s {
103
unsigned int super_minor;
105
char *devices; /* comma separated list of device
106
* names with wild cards
109
unsigned int raid_disks;
110
unsigned int spare_disks;
111
int autof; /* 1 for normal, 2 for partitioned */
114
struct mddev_ident_s *next;
117
/* List of device names - wildcards expanded */
118
typedef struct mddev_dev_s {
120
char disposition; /* 'a' for add, 'r' for remove, 'f' for fail.
121
* Not set for names read from .config
123
struct mddev_dev_s *next;
126
typedef struct mapping {
137
char *pattern; /* U or up, _ for down */
138
int percent; /* -1 if no resync */
139
int resync; /* 1 if resync, 0 if recovery */
140
struct mdstat_ent *next;
143
extern struct mdstat_ent *mdstat_read(int);
144
extern void free_mdstat(struct mdstat_ent *ms);
145
extern void mdstat_wait(int seconds);
148
#define Sendmail "/usr/lib/sendmail -t"
151
extern char *map_num(mapping_t *map, int num);
152
extern int map_name(mapping_t *map, char *name);
153
extern mapping_t r5layout[], pers[], modes[], faultylayout[];
155
extern char *map_dev(int major, int minor);
161
# define __USE_XOPEN_EXTENDED
168
extern int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s);
171
extern int Manage_ro(char *devname, int fd, int readonly);
172
extern int Manage_runstop(char *devname, int fd, int runstop, int quiet);
173
extern int Manage_resize(char *devname, int fd, long long size, int raid_disks);
174
extern int Manage_reconfig(char *devname, int fd, int layout);
175
extern int Manage_subdevs(char *devname, int fd,
176
mddev_dev_t devlist);
177
extern int Grow_Add_device(char *devname, int fd, char *newdev);
180
extern int Assemble(char *mddev, int mdfd,
184
int readonly, int runstop,
186
int verbose, int force);
188
extern int Build(char *mddev, int mdfd, int chunk, int level, int layout,
190
mddev_dev_t devlist, int assume_clean);
193
extern int Create(char *mddev, int mdfd,
194
int chunk, int level, int layout, unsigned long size, int raiddisks, int sparedisks,
195
int subdevs, mddev_dev_t devlist,
196
int runstop, int verbose, int force);
198
extern int Detail(char *dev, int brief, int test);
199
extern int Query(char *dev);
200
extern int Examine(mddev_dev_t devlist, int brief, int scan, int SparcAdjust);
201
extern int Monitor(mddev_dev_t devlist,
202
char *mailaddr, char *alert_cmd,
203
int period, int daemonise, int scan, int oneshot,
204
char *config, int test, char *pidfile);
206
extern int Kill(char *dev, int force);
208
extern int md_get_version(int fd);
209
extern int get_linux_version(void);
210
extern int parse_uuid(char *str, int uuid[4]);
211
extern int check_ext2(int fd, char *name);
212
extern int check_reiser(int fd, char *name);
213
extern int check_raid(int fd, char *name);
215
extern int get_mdp_major(void);
216
extern int is_standard(char *dev, int *nump);
219
extern mddev_ident_t conf_get_ident(char *conffile, char *dev);
220
extern mddev_dev_t conf_get_devs(char *conffile);
221
extern char *conf_get_mailaddr(char *conffile);
222
extern char *conf_get_program(char *conffile);
223
extern char *conf_line(FILE *file);
224
extern char *conf_word(FILE *file, int allow_key);
225
extern void free_line(char *line);
226
extern int match_oneof(char *devices, char *devname);
227
extern int load_super(int fd, mdp_super_t *super);
228
extern void uuid_from_super(int uuid[4], mdp_super_t *super);
229
extern int same_uuid(int a[4], int b[4]);
230
extern int compare_super(mdp_super_t *first, mdp_super_t *second);
231
extern unsigned long calc_sb_csum(mdp_super_t *super);
232
extern int store_super(int fd, mdp_super_t *super);
233
extern int enough(int level, int raid_disks, int avail_disks);
234
extern int ask(char *mesg);
237
extern char *human_size(long long bytes);
238
char *human_size_brief(long long bytes);
240
extern void put_md_name(char *name);
241
extern char *get_md_name(int dev);
243
extern char DefaultConfFile[];
245
extern int open_mddev(char *dev, int autof);
248
#define LEVEL_MULTIPATH (-4)
249
#define LEVEL_LINEAR (-1)
250
#define LEVEL_FAULTY (-5)
255
#define WriteTransient 0
256
#define ReadTransient 1
257
#define WritePersistent 2
258
#define ReadPersistent 3
259
#define WriteAll 4 /* doesn't go to device */
260
#define ReadFixable 5
263
#define ClearErrors 31
264
#define ClearFaults 30
266
#define AllPersist 100 /* internal use only */
267
#define NoPersist 101
269
#define ModeMask 0x1f
277
#define minor(x) ((x)&0xff)
278
#define major(x) (((x)>>8)&0xff)
279
#define makedev(M,m) (((M)<<8) | (m))