597cdb8f1473458e835185ff6d22162ac8bd518e
[thirdparty/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         { "raid6", 6},
50         { "6", 6},
51         { "raid10", 10},
52         { "10", 10},
53         { NULL, 0}
54 };
55
56 #ifndef MDASSEMBLE_AUTO
57 /* from mdadm.c */
58 int open_mddev(char *dev, int autof/*unused */)
59 {
60         int mdfd = open(dev, O_RDWR, 0);
61         if (mdfd < 0)
62                 fprintf(stderr, Name ": error opening %s: %s\n",
63                         dev, strerror(errno));
64         else if (md_get_version(mdfd) <= 0) {
65                 fprintf(stderr, Name ": %s does not appear to be an md device\n",
66                         dev);
67                 close(mdfd);
68                 mdfd = -1;
69         }
70         return mdfd;
71 }
72 #endif
73
74 char *configfile = NULL;
75 int rv;
76 int mdfd = -1;
77 int runstop = 0;
78 int readonly = 0;
79 int verbose = 0;
80 int force = 0;
81
82 int main() {
83         mddev_ident_t array_list =  conf_get_ident(configfile, NULL);
84         if (!array_list) {
85                 fprintf(stderr, Name ": No arrays found in config file\n");
86                 rv = 1;
87         } else
88                 for (; array_list; array_list = array_list->next) {
89                         mdu_array_info_t array;
90                         mdfd = open_mddev(array_list->devname, array_list->autof);
91                         if (mdfd < 0) {
92                                 rv |= 1;
93                                 continue;
94                         }
95                         if (ioctl(mdfd, GET_ARRAY_INFO, &array)>=0)
96                                 /* already assembled, skip */
97                                 continue;
98                         rv |= Assemble(array_list->st, array_list->devname, mdfd,
99                                            array_list, configfile,
100                                            NULL,
101                                            readonly, runstop, NULL, verbose, force);
102                 }
103 }