I was really bored. Which normally results in some destructive thing happening
to something I am playing with. This time it was Some of the hard drives in my
FreeBSD box. Just a little back-story:
/dev/ad0 - 20 GB
/dev/ad1 - 40 GB
/dev/ad2 - 100 GB
/dev/ad3 - 60 GB
/dev/da0 - 8 GB
/dev/da1 - 8 GB
So, I had already made a gstripe(8) out of the two SCSI drives, da[1|2],
however I wanted to see if I could do the same with ad[1|2|3]. As I did not
want to resort to gvinum, which is rather heavy, and I was unable to figure out
how it worked. The entire point behind gstripe is that since it is striped, the
writes/reads are faster since it writes/reads to all the drives at the same
time. So first I tried:
gstripe label -v st1 /dev/ad1 /dev/ad2 /dev/ad3
That however complained that it would only use 40 GB's on all of the drives,
since the smallest drive in the collection was 40 GB. I then read up on
gconcat(8), which concatenates all the drives together to look like one big
drive, without the speed improvement of striping. So I figured, since FreeBSD's
gstripe is GEOM based, it should not care about what the underlying data sink
is, just that it is a device, so just maybe this could work:
gconcat label -v gb100 /dev/ad1 /dev/ad3
So now I had created a 100 GB "hd" at /dev/concat/gb100. I now did what I was
planning to do:
gstripe label -v st1 /dev/ad2 /dev/concat/gb100
No problem! :-D. I now had 180.48 GB, of which only about 166 GB was usable.
Which is still excellent. As it still came with a speed improvement. Followed
up with the standard advice from the
handbook I did the following:
bsdlabel -wB /dev/stripe/st1
newfs -U /dev/stripe/st1a
mount /dev/stripe/st1a /mnt
Which got me the following:
/dev/stripe/st1a 180G 5.5G 161G 3% /mnt
Full:
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 496M 63M 393M 14% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1e 496M 230K 456M 0% /tmp
/dev/ad0s1f 15G 2.2G 11G 17% /usr
/dev/ad0s1d 1.4G 115M 1.2G 9% /var
/dev/stripe/st0a 16G 4.0K 15G 0% /usr/scsi
/dev/stripe/st1a 180G 5.5G 161G 3% /mnt
w00tage. Next up I might actually add gdbe(8) or geli(8) even in front of the
stripe, so that I will have an encrypted stripe. Talk about stacking. Might
give gvinum a try sometime :P
All working:
keyhole# gconcat status
Name Status Components
concat/gb100 UP ad1
ad3
keyhole# gstripe status
Name Status Components
stripe/st0 UP da0
da1
stripe/st1 UP ad2
concat/gb100