]> git.neil.brown.name Git - mdadm.git/blob - mdassemble.c
mdadm-1.5.0
[mdadm.git] / mdassemble.c
1 /*
2  * mdassemble - assemble Linux "md" devices aka RAID arrays.
3  *
4  * Copyright (C) 2001-2002 Neil Brown <neilb@cse.unsw.edu.au>
5  * Copyright (C) 2003 Luca Berra <bluca@vodka.it>
6  *
7  *
8  *    This program is free software; you can redistribute it and/or modify
9  *    it under the terms of the GNU General Public License as published by
10  *    the Free Software Foundation; either version 2 of the License, or
11  *    (at your option) any later version.
12  *
13  *    This program is distributed in the hope that it will be useful,
14  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *    GNU General Public License for more details.
17  *
18  *    You should have received a copy of the GNU General Public License
19  *    along with this program; if not, write to the Free Software
20  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  *    Author: Neil Brown
23  *    Email: <neilb@cse.unsw.edu.au>
24  *    Paper: Neil Brown
25  *           School of Computer Science and Engineering
26  *           The University of New South Wales
27  *           Sydney, 2052
28  *           Australia
29  */
30
31 #include "mdadm.h"
32 #include "md_p.h"
33
34 /* from readme.c */
35 mapping_t pers[] = {
36         { "linear", -1},
37         { "raid0", 0},
38         { "0", 0},
39         { "stripe", 0},
40         { "raid1", 1},
41         { "1", 1},
42         { "mirror", 1},
43         { "raid4", 4},
44         { "4", 4},
45         { "raid5", 5},
46         { "5", 5},
47         { "multipath", -4},
48         { "mp", -4},
49         { NULL, 0}
50 };
51
52 /* from mdadm.c */
53 int open_mddev(char *dev)
54 {
55         int mdfd = open(dev, O_RDWR, 0);
56         if (mdfd < 0)
57                 fprintf(stderr, Name ": error opening %s: %s\n",
58                         dev, strerror(errno));
59         else if (md_get_version(mdfd) <= 0) {
60                 fprintf(stderr, Name ": %s does not appear to be an md device\n",
61                         dev);
62                 close(mdfd);
63                 mdfd = -1;
64         }
65         return mdfd;
66 }
67
68 char *configfile = NULL;
69 int rv;
70 int mdfd = -1;
71 int runstop = 0;
72 int readonly = 0;
73 int verbose = 0;
74 int force = 0;
75
76 int main() {
77         mddev_ident_t array_list =  conf_get_ident(configfile, NULL);
78         if (!array_list) {
79                 fprintf(stderr, Name ": No arrays found in config file\n");
80                 rv = 1;
81         } else
82                 for (; array_list; array_list = array_list->next) {
83                         mdu_array_info_t array;
84                         mdfd = open_mddev(array_list->devname);
85                         if (mdfd < 0) {
86                                 rv |= 1;
87                                 continue;
88                         }
89                         if (ioctl(mdfd, GET_ARRAY_INFO, &array)>=0)
90                                 /* already assembled, skip */
91                                 continue;
92                         rv |= Assemble(array_list->devname, mdfd,
93                                            array_list, configfile,
94                                            NULL,
95                                            readonly, runstop, NULL, verbose, force);
96                 }
97 }