#include "mdctl.h"
+#if ! defined(__BIG_ENDIAN) && ! defined(__LITTLE_ENDIAN)
+#error no endian defined
+#endif
#include "md_u.h"
#include "md_p.h"
int Examine(char *dev)
* utime, state etc
*
*/
- int fd = open(dev, O_RDONLY, 0);
+ int fd = open(dev, O_RDONLY);
time_t atime;
mdp_super_t super;
int d;
+ char *c;
int rv;
if (fd < 0) {
- fprintf(stderr,"mdctl: cannot open %s: %s\n",
+ fprintf(stderr,Name ": cannot open %s: %s\n",
dev, strerror(errno));
return 1;
}
close(fd);
switch(rv) {
case 1:
- fprintf(stderr, "mdctl: cannot find device size for %s: %s\n",
+ fprintf(stderr, Name ": cannot find device size for %s: %s\n",
dev, strerror(errno));
return 1;
case 2:
-/* fprintf(stderr, "mdctl: %s is too small for md: size is %ld sectors\n",
+/* fprintf(stderr, Name ": %s is too small for md: size is %ld sectors\n",
dev, size);
*/
- fprintf(stderr, "mdctl: %s is too small for md\n",
+ fprintf(stderr, Name ": %s is too small for md\n",
dev);
return 1;
case 3:
- fprintf(stderr, "mdctl: Cannot seek to superblock on %s: %s\n",
+ fprintf(stderr, Name ": Cannot seek to superblock on %s: %s\n",
dev, strerror(errno));
return 1;
case 4:
- fprintf(stderr, "mdctl: Cannot read superblock on %s\n",
+ fprintf(stderr, Name ": Cannot read superblock on %s\n",
dev);
return 1;
case 5:
- fprintf(stderr, "mdctl: No super block found on %s (Expected magic %08x, got %08x)\n",
+ fprintf(stderr, Name ": No super block found on %s (Expected magic %08x, got %08x)\n",
dev, MD_SB_MAGIC, super.md_magic);
return 1;
case 6:
- fprintf(stderr, "mdctl: Cannot interpret superblock on %s - version is %d\n",
+ fprintf(stderr, Name ": Cannot interpret superblock on %s - version is %d\n",
dev, super.major_version);
return 1;
}
atime = super.ctime;
printf(" Creation Time : %.24s\n", ctime(&atime));
- printf(" Raid Level : %d\n", super.level);
+ c=map_num(pers, super.level);
+ printf(" Raid Level : %s\n", c?c:"-unknown-");
printf(" Size : %d\n", super.size);
printf(" Raid Disks : %d\n", super.raid_disks);
printf(" Total Disks : %d\n", super.nr_disks);
printf(" Working Drives : %d\n", super.working_disks);
printf(" Failed Drives : %d\n", super.failed_disks);
printf(" Spare Drives : %d\n", super.spare_disks);
- printf(" - checksum not checked yet - \n");
+ if (calc_sb_csum(&super) == super.sb_csum)
+ printf(" Checksum : %x - correct\n", super.sb_csum);
+ else
+ printf(" Checksum : %x - expected %x\n", super.sb_csum, calc_sb_csum(&super));
printf(" Events : %d.%d\n", super.events_hi, super.events_lo);
printf("\n");
- printf(" Layout : %d\n", super.layout);
- printf(" Chunk Size : %dK\n", super.chunk_size/1024);
+ if (super.level == 5) {
+ c = map_num(r5layout, super.layout);
+ printf(" Layout : %s\n", c?c:"-unknown-");
+ }
+ switch(super.level) {
+ case 0:
+ case 4:
+ case 5:
+ printf(" Chunk Size : %dK\n", super.chunk_size/1024);
+ break;
+ case -1:
+ printf(" Rounding : %dK\n", super.chunk_size/1024);
+ break;
+ default: break;
+ }
printf("\n");
printf(" Number Major Minor RaidDisk State\n");
for (d= -1; d<(signed int)super.nr_disks; d++) {
mdp_disk_t *dp;
+ char *dv;
char nb[5];
if (d>=0) dp = &super.disks[d];
else dp = &super.this_disk;
if (dp->state & (1<<MD_DISK_ACTIVE)) printf(" active");
if (dp->state & (1<<MD_DISK_SYNC)) printf(" sync");
if (dp->state & (1<<MD_DISK_REMOVED)) printf(" removed");
+ if ((dv=map_dev(dp->major, dp->minor)))
+ printf(" %s", dv);
printf("\n");
}
return 0;