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>
60
#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */
78
extern char short_options[];
79
extern struct option long_options[];
80
extern char Version[], Usage[], Help[], OptionHelp[],
81
Help_create[], Help_build[], Help_assemble[],
82
Help_manage[], Help_misc[], Help_monitor[], Help_config[];
84
/* structures read from config file */
85
/* List of mddevice names and identifiers
88
* super-minor=decimal-minor-number-from-superblock
89
* devices=comma,separated,list,of,device,names,with,wildcards
91
* If multiple fields are present, the intersection of all matching
92
* devices is considered
94
#define UnSet (0xfffe)
95
typedef struct mddev_ident_s {
101
unsigned int super_minor;
103
char *devices; /* comma separated list of device
104
* names with wild cards
107
unsigned int raid_disks;
108
unsigned int spare_disks;
110
struct mddev_ident_s *next;
113
/* List of device names - wildcards expanded */
114
typedef struct mddev_dev_s {
116
char disposition; /* 'a' for add, 'r' for remove, 'f' for fail.
117
* Not set for names read from .config
119
struct mddev_dev_s *next;
122
typedef struct mapping {
133
char *pattern; /* U or up, _ for down */
134
int percent; /* -1 if no resync */
135
struct mdstat_ent *next;
138
extern struct mdstat_ent *mdstat_read(void);
139
extern void free_mdstat(struct mdstat_ent *ms);
142
#define Sendmail "/usr/lib/sendmail -t"
145
extern char *map_num(mapping_t *map, int num);
146
extern int map_name(mapping_t *map, char *name);
147
extern mapping_t r5layout[], pers[], modes[];
149
extern char *map_dev(int major, int minor);
152
extern int Manage_ro(char *devname, int fd, int readonly);
153
extern int Manage_runstop(char *devname, int fd, int runstop);
154
extern int Manage_subdevs(char *devname, int fd,
155
mddev_dev_t devlist);
158
extern int Assemble(char *mddev, int mdfd,
162
int readonly, int runstop,
164
int verbose, int force);
166
extern int Build(char *mddev, int mdfd, int chunk, int level,
168
mddev_dev_t devlist);
171
extern int Create(char *mddev, int mdfd,
172
int chunk, int level, int layout, unsigned long size, int raiddisks, int sparedisks,
173
int subdevs, mddev_dev_t devlist,
174
int runstop, int verbose, int force);
176
extern int Detail(char *dev, int brief, int test);
177
extern int Query(char *dev);
178
extern int Examine(mddev_dev_t devlist, int brief, int scan, int SparcAdjust);
179
extern int Monitor(mddev_dev_t devlist,
180
char *mailaddr, char *alert_cmd,
181
int period, int daemonise, int scan, int oneshot,
182
char *config, int test);
184
extern int Kill(char *dev, int force);
186
extern int md_get_version(int fd);
187
extern int get_linux_version(void);
188
extern int parse_uuid(char *str, int uuid[4]);
189
extern int check_ext2(int fd, char *name);
190
extern int check_reiser(int fd, char *name);
191
extern int check_raid(int fd, char *name);
193
extern mddev_ident_t conf_get_ident(char *conffile, char *dev);
194
extern mddev_dev_t conf_get_devs(char *conffile);
195
extern char *conf_get_mailaddr(char *conffile);
196
extern char *conf_get_program(char *conffile);
197
extern char *conf_line(FILE *file);
198
extern char *conf_word(FILE *file, int allow_key);
199
extern void free_line(char *line);
200
extern int match_oneof(char *devices, char *devname);
201
extern int load_super(int fd, mdp_super_t *super);
202
extern void uuid_from_super(int uuid[4], mdp_super_t *super);
203
extern int same_uuid(int a[4], int b[4]);
204
extern int compare_super(mdp_super_t *first, mdp_super_t *second);
205
extern unsigned long calc_sb_csum(mdp_super_t *super);
206
extern int store_super(int fd, mdp_super_t *super);
207
extern int enough(int level, int raid_disks, int avail_disks);
208
extern int ask(char *mesg);
211
extern char *human_size(long long bytes);
212
char *human_size_brief(long long bytes);
214
extern void put_md_name(char *name);
215
extern char *get_md_name(int dev);
217
extern char DefaultConfFile[];