On Wed, Nov 06, 2002 at 01:27:10PM -0700, John-David Childs wrote:
> On Sun, 2002-11-03 at 04:01, Bernd Walter wrote:
> > 
> > 1T disks and bigger are not supported under -stable.
> 
> Perhaps that should be > 1TB disks are not supported under stable...I
> have a 1TB RAID Array (Qlogic 2200 FC Copper, Chaparrel RAID
> Controller)...although I have to admit that losing 200G of it sucks hard
> 
> /dev/da0c   1011G   834G    96G    90%    /ftp
> 
> tunefs: soft updates:  (-n)                                disabled
> tunefs: maximum contiguous block count: (-a)               3
> tunefs: rotational delay between contiguous blocks: (-d)   0 ms
> tunefs: maximum blocks per file in a cylinder group: (-e)  8192
> tunefs: average file size: (-f)                            16384
> tunefs: average number of files in a directory: (-s)       64
> tunefs: minimum percentage of free space: (-m)             8%
> tunefs: optimization preference: (-o)                      time
> 
> Performance also isn't up to par...I'm only able to get ~ 14MB/sec.

With some minor modifications to disklabel, you can label a 2 Tb disk.
We've done it with a 1.4Tb disk:

Filesystem                     Size   Used  Avail Capacity  Mounted on
/dev/da20a                     669G   246G   370G    40%    /rapraid0
/dev/da20e                     669G   499G   117G    81%    /rapraid1

Patch attached (Don't mind the code, it's a quick hack)

Zlo
--- /usr/src/sbin/disklabel/disklabel.c Mon Aug 26 21:43:04 2002
+++ /usr/src/sbin/disklabel/disklabel.c Wed Oct 23 11:37:25 2002
@@ -927,6 +927,32 @@
        return (NULL);
 }
 
+unsigned int
+atoui(const char *cp, char **end_p)
+{
+       unsigned int res, prev;
+
+       res = 0;
+       prev = 0;
+       while (*cp)
+       {
+               if (!isdigit(*cp))
+               {
+                       if (end_p)
+                               *end_p = cp;
+                       return res;
+               }
+               res = (res * 10) + (*cp - '0');
+               if (res < prev)
+                       return 0;
+               prev = res;
+               cp++;
+       }
+       if (end_p)
+               *end_p = cp;
+       return res;
+}
+
 /*
  * Read an ascii label in from fd f,
  * in the same format as that put out by display(),
@@ -1074,13 +1100,14 @@
                        continue;
                }
                if (streq(cp, "sectors/unit")) {
-                       v = atoi(tp);
-                       if (v <= 0) {
+                       unsigned int uv;
+                       uv = atoui(tp, NULL);
+                       if (uv <= 0) {
                                fprintf(stderr, "line %d: %s: bad %s\n",
                                    lineno, tp, cp);
                                errors++;
                        } else
-                               lp->d_secperunit = v;
+                               lp->d_secperunit = uv;
                        continue;
                }
                if (streq(cp, "rpm")) {
@@ -1178,7 +1205,7 @@
                return (1); \
        } else { \
                cp = tp, tp = word(cp); \
-               (n) = atoi(cp); \
+               (n) = atoui(cp, NULL); \
        } \
 } while (0)
 
@@ -1190,7 +1217,7 @@
        } else { \
                char *tmp; \
                cp = tp, tp = word(cp); \
-               (n) = strtol(cp,&tmp,10); \
+               (n) = atoui(cp,&tmp); \
                if (tmp) (w) = *tmp; \
        } \
 } while (0)
@@ -1205,7 +1232,7 @@
        struct partition *pp;
        char *cp;
        char **cpp;
-       int v;
+       unsigned int v;
 
        pp = &lp->d_partitions[part];
        cp = NULL;

Reply via email to