<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>phaq &#187; HA</title>
	<atom:link href="http://phaq.phunsites.net/category/howtos/ha/feed/" rel="self" type="application/rss+xml" />
	<link>http://phaq.phunsites.net</link>
	<description>my daily IT madness</description>
	<lastBuildDate>Mon, 30 Jan 2012 10:07:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Is RAID1 possible on an USB stick?</title>
		<link>http://phaq.phunsites.net/2007/10/26/is-raid1-possible-on-an-usb-stick/</link>
		<comments>http://phaq.phunsites.net/2007/10/26/is-raid1-possible-on-an-usb-stick/#comments</comments>
		<pubDate>Fri, 26 Oct 2007 18:48:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://phaq.phunsites.net/2007/10/26/is-raid1-possible-on-an-usb-stick/</guid>
		<description><![CDATA[Last week we had a discussion at the office wether it would possible to span a RAID across USB sticks. That question came up as a joke while I was working on some RAID system for evaluation purposes. Well, my friend doubted it when I replied that it would definitely work out with a FreeBSD [...]]]></description>
			<content:encoded><![CDATA[<p>Last week we had a discussion at the office wether it would possible to span a RAID across USB sticks.<br />
That question came up as a joke while I was working on some RAID system for evaluation purposes.<br />
Well, my friend doubted it when I replied that it would definitely work out with a FreeBSD software RAID using gmirror (geom vinum as a matter of fact works, too).</p>
<p>Proof?<br />
<span id="more-109"></span><br />
Here it is, a &#8216;dmesg&#8217; from my Sony Vaio PCG-C1MGP bootet off two gmirrored 256 MB USB sticks:</p>
<pre>
Copyright (c) 1992-2007 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 6.2-RELEASE #0: Fri jan 12 10:40:27 UTC 2007
root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: Transmeta(tm) Crusoe(tm) Processor TM5800 (727.84-MHz 586-class CPU)
  Origin = "GenuineTmx86" Id = 0x543  Stepping = 3
  Features=0x80893f
real memory  = 251658240 (240 MB)
avail memory = 232452096 (221 MB)
kbd1 at kbdmux9
ath_hal: 0.9.17.2 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
acpi0:  on motherboard
Timecounter "ACPI-safe" frequency 3579545 Hz quality 1000
acpi_ec0:  port 0x62,0x66 on acpi0
acpi_timer0: &lt;32-bit timer at 3.579545MHz&gt; port 0x8008-0x800b on acpi0
acpi_lid0:  on acpi0
acpu_button0:
 on acpi0
[ output omitted ]
umass0: Sony USB Memory Stick Slot, rev 1.10/1.83 addr2
umass1: vendor 0x4146 USB Mass Storage Device, rev 2.00/1.00, addr 2
umass2: vendor 0x4146 USB Mass Storage Device, rev 2.00/1.00, addr 3
[ output omitted ]
da0 at umass-sim1 bus 1 target 0 lun 0
da0: &lt;-pretec 256 MB 1.10&gt; Removable Direct Access SCSO device
da0: 1.000MB/s transfers
da0: 242 MB (4964000 512 byte sectors: 64H 32S/T 242C)
da1 at umass-sim1 bus 2 target 0 lun 0
da1: &lt;-pretec 256 MB 1.10&gt; Removable Direct Access SCSO device
da1: 1.000MB/s transfers
da1: 242 MB (4964000 512 byte sectors: 64H 32S/T 242C)
GEOM_MIRROR: Device gm0 created (id=1986392903).
GEOM_MIRROR: Device gm0: provider da0 detected.
GEOM_MIRROR: Device gm0: provider da1 detected.
GEOM_MIRROR: Device gm0: provider da0 activated.
GEOM_MIRROR: Device gm0: provider da1 activated.
GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
Trying to mount root from ufs:/dev/mirror/gm0s1a
</pre>
<p>Of course it&#8217;s not incredibly fast, but it works afterall, that was the whole point about it <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Where could it be used? Possibly projects like <a href="http://www.freenas.org/" target="_blank">FreeNAS</a>, which support USB installs, could benefit from doing RAID1 on the sticks while also storing sensitive configuration data on them.<br />
I could also imagine to take backups this way, e.g. keep one working copy on the active stick on the computer, while swapping in spare sticks which then automatically rebuild the mirror.</p>
<p>I suppose this also works with linux &#8216;md&#8217; software raid, and netbsd&#8217;s RAIDframe, though I&#8217;ve not tested it.</p>
<p>What about Windows? Definitely not with stock functionality. However as there&#8217;s also a way to patch in software RAID1 functionality into Windows 2000/XP Professional, one never knows &#8230; <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://phaq.phunsites.net/2007/10/26/is-raid1-possible-on-an-usb-stick/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FreeBSD software RAID0: gvinum vs. gstripe</title>
		<link>http://phaq.phunsites.net/2007/06/07/freebsd-software-raid0-gvinum-vs-gstripe/</link>
		<comments>http://phaq.phunsites.net/2007/06/07/freebsd-software-raid0-gvinum-vs-gstripe/#comments</comments>
		<pubDate>Thu, 07 Jun 2007 21:45:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://phaq.phunsites.net/2007/06/07/freebsd-software-raid0-gvinum-vs-gstripe/</guid>
		<description><![CDATA[Back some time I announced reviewing FreeBSD&#8217;s geom software RAID implementations. Todays article compares geom stripe (gstripe) along with geom gvinum (gvinum) for disk striping (RAID0). All testing was done on the same hardware as before to get results comparable to previous tests. Benchmarks were taken using stripe sizes of 64k, 128k and 256k and [...]]]></description>
			<content:encoded><![CDATA[<p>Back some time I announced <a href="/2007/01/08/freebsd-software-raid-comparison-introduction/">reviewing FreeBSD&#8217;s geom software RAID</a> implementations.</p>
<p>Todays article compares geom stripe (gstripe) along with geom gvinum (gvinum) for disk striping (RAID0).</p>
<p>All testing was done on the same hardware as before to get results comparable to previous tests.</p>
<p>Benchmarks were taken using stripe sizes of 64k, 128k and 256k and measured using dd, bonnie++ and rawio as before.</p>
<p>As for the technology gstripe follows the same approach than gmirror <a href="/2007/03/17/freebsd-software-raid1-gvinum-vs-gmirror/">which I look at previously</a>.</p>
<p><strong># rawio benchmark results</strong></p>
<p>rawio was choosen to measure I/O speed during concurrent access. rawio was set to run all tests (random read, seq read, random write, seq write) with eight processes on the /dev/stripe/* and /dev/gvinum/* devices.</p>
<p>Results for the single disk are provided as well to compare performance not only between the different frameworks but also against the native disk performance.</p>
<p>Click the images to see the actual result values and a chart.</p>
<p>529</p>
<p>532</p>
<p><strong># dd benchmark results </strong></p>
<p>dd was choosen to measure raw block access to /dev/mirror/* and /dev/gvinum/* devices. dd was set to run sequential read and write tests using block sizes from 16k to 1024k.</p>
<p>Click the images to see the actual result values and a chart.</p>
<p>523</p>
<p>520</p>
<p><strong># bonnie++ benchmark results </strong></p>
<p>finally, bonnie++ was used get pure file system performance.</p>
<p>Click the images to see the actual result values and a chart.</p>
<p>517</p>
<p>513</p>
<p><strong># conclusion </strong></p>
<p>Looking at raw disk access I must conclude that none of the frameworks beats single disk performance in overall when it comes to blockwise input/output with dd.<br />
gvinum generally performs better than gstripe except when using 256k stripe sizes.</p>
<p>Now since â€˜ddâ€™ is very synthetic by itâ€™s nature, rawio is much better to see how the devices would perform under a more â€œreal-lifeâ€ situation.<br />
Although rawio benchmark results may look low, these numbers where achieved by running 8 processes at once. Theyâ€™ll reflect best what could be expected in a true multi-user environment with concurrent access.<br />
As from the results there is no absolute winner, as depending on the stripe sizes either of both implementations out-performs the other.</p>
<p>Finally for bonnie++ we see some interesting results. Performance is almost identical for all implementations.<br />
One notable exception was seen with gvinum (64k stripe size) which clearly outperformed its competitors..<br />
One must keep in mind that the first six tests performed by bonnie++ (rand delete/read/create, seq delete/read/create) are limited by I/O performance of both the system bus and the device itself. The hardware I used for testing was capable of about 160 &#8211; 170 I/Os per second. I admit that results could be different if the tests are re-run on decent hardware with a higher I/O throughput. Itâ€™s possible that modern hardware reveals an I/O barrier for abstracted devices which cannot be seen from my tests.</p>
<p>Personally I prefer using gstripe over gvinum because of itâ€™s more simplistic configuration approach. In terms of performance, gvinum seems to offer superiour performance when it comes to disk striping.</p>
<p>The next article will discuss gvinum and gstripe for RAID10.</p>
]]></content:encoded>
			<wfw:commentRss>http://phaq.phunsites.net/2007/06/07/freebsd-software-raid0-gvinum-vs-gstripe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Convert Single Disk to GEOM Mirror</title>
		<link>http://phaq.phunsites.net/2006/10/28/convert-single-disk-to-geom-mirror/</link>
		<comments>http://phaq.phunsites.net/2006/10/28/convert-single-disk-to-geom-mirror/#comments</comments>
		<pubDate>Sat, 28 Oct 2006 01:15:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://www.phunsites.net/wp/2006/10/28/convert-single-disk-to-geom-mirror/</guid>
		<description><![CDATA[This article should have been published already last month, unfortunately the draft was left forgotten for a while in my mailbox. As some may remember I published two articles on how to setup GEOM disk mirroring on alpha and sparc earlier this year. These articles were originally based upon Ralf Engelschalls disk mirroring howto. I [...]]]></description>
			<content:encoded><![CDATA[<p>This article should have been published already last month, unfortunately the draft was left forgotten for a while in my mailbox.</p>
<p>As some may remember I published two articles on how to setup GEOM disk mirroring on alpha and sparc earlier this year. These articles were originally based upon Ralf Engelschalls <a target="_blank" href="http://people.freebsd.org/~rse/mirror/">disk mirroring howto</a>.</p>
<p>I had installed GEOM disk mirrors on various occasions since then, though I always felt that converting to a GEOM mirror like that involved too much work.</p>
<p>So I went on to find a better and faster way to achieve the task and I found one.<br />
<span id="more-61"></span><br />
But be warned first: it is faster after all, even less error prone IMHO, but still dangerous if you are not very careful. Foremost you must consider that this procedure involves single user mode so local access (serial terminal for doing this remotely) is a must!</p>
<p>The instructions assume that you have two hard disks identical in size which are /dev/ad0 and /dev/ad1. Apply the instructions to fit your own system.</p>
<p><strong>#1 Reboot into Single User Mode</strong></p>
<p><strong>#2 fsck and mount / fs read/write<br />
</strong></p>
<p>First run an fsck on your root filesystem:</p>
<p>#fsck -p /</p>
<p>Then mount it with read/write access:</p>
<p>#mount -w /</p>
<p><strong>#3 Edit /etc/fstab</strong></p>
<p>First change your /etc/fstab. Replace all your single disk slices by the geom provider. The example shows a disk with a single root and swap slices.</p>
<pre># Device	Mountpoint	FStype	Options	Dump	Pass#
/dev/ad0s1b	none		swap	sw	0	0
/dev/ad0s1a	/		   ufs	    rw	     1       1</pre>
<p>Change it to look similar to this:</p>
<pre># Device	Mountpoint	FStype	Options	Dump	Pass#
/dev/mirror/gm0s1b	none		swap	sw	0	0
/dev/mirror/gm0s1a	/		   ufs      rw	     1	     1</pre>
<p><strong>#4 Enable GEOM MIRROR kernel module</strong></p>
<p>Edit your /boot/loader.conf and add the following line:</p>
<pre>geom_mirror_load="YES"</pre>
<p><strong>#5 Enable Crash Dumps (optional, but recommended)</strong></p>
<p>If you want to enable crash dumps to your GEOM provider you should add this line to your /etc/rc.early:</p>
<pre>gmirror configure -b prefer gm0</pre>
<p>And this should go to your /etc/rc.local:</p>
<pre>gmirror configure -b split gm0</pre>
<p>Have a look at gmirror(8) to understand what this means exactly.</p>
<p><strong>#6 mount / fs read-only</strong></p>
<p>Sync and mount your root file system read-only. This is very important to complete successfully. This is also why you must do this in single user mode.</p>
<p>#sync &amp;&amp; sync<br />
#mount -r /</p>
<p><strong>#7 Initialize GEOM provider</strong></p>
<p>First you must raise the GEOM debug flags:</p>
<p>#sysctl kern.geom.debugflags=16</p>
<p>This will allow to initialize a GEOM provider even if it is locked by the kernel.</p>
<p>#gmirror label -v -b split gm0 ad0</p>
<p><strong>#8 Reset</strong></p>
<p>Now it&#8217;s best to press the reset button (yes, you heard right!). This is absolutely safe as long as your root fs is in read-only mode.</p>
<p>Do not try to invoke reboot / shutdown as this will lead to a kernel panic. By labelling the GEOM provider you have taken away the underlaying device from the kernel.</p>
<p>Doing so will cause the machine to reboot after the panic, the reset button may be the better choice however.</p>
<p><strong>#9 Boot</strong></p>
<p>Your system should now boot from the GEOM consumer gm0 with your /dev/ad0 as the first provider.</p>
<p>It does not actually matter if you boot into multi-user or single-user mode. In either case you must add the second hard drisk to the GEOM mirror.</p>
<p>#gmirror insert gm0 ad1</p>
<p>This will cause your /dev/ad1 to be synced against /dev/ad0. Your dmesg should print something like this when starting:</p>
<p>Aug 19 11:26:37 localhost kernel: GEOM_MIRROR: Device gm0: rebuilding provider ad1</p>
<p>And something like this when finished:</p>
<p>Aug 19 12:34:17 localhost kernel: GEOM_MIRROR: Device gm0: rebuilding provider ad1 finished.</p>
<p>Congratulations: your GEOM mirror is now up and running!</p>
<p>These instructions were originally put together when trying to upgrade my PC-BSD to a GEOM mirror. They have been verified at least a dozen times since then in the lab.</p>
]]></content:encoded>
			<wfw:commentRss>http://phaq.phunsites.net/2006/10/28/convert-single-disk-to-geom-mirror/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Realtime File System Replication On FreeBSD</title>
		<link>http://phaq.phunsites.net/2006/08/11/realtime-file-system-replication-on-freebsd/</link>
		<comments>http://phaq.phunsites.net/2006/08/11/realtime-file-system-replication-on-freebsd/#comments</comments>
		<pubDate>Fri, 11 Aug 2006 09:22:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://www.phunsites.net/wp/2006/08/11/realtime-file-system-replication-on-freebsd/</guid>
		<description><![CDATA[This article describes a concept on how to implement realtime file system replication on a dual-node FreeBSD cluster to provide real HA services. Maybe you are familiar with DRBD (distributed replicated block device) from the Linux world already, which basically does something we could call network-RAID1. Since DRBD does not run on FreeBSD one might [...]]]></description>
			<content:encoded><![CDATA[<p>This article describes a concept on how to implement realtime file system replication on a dual-node FreeBSD cluster to provide real HA services.<br />
Maybe you are familiar with <a href="http://www.drbd.org" target="_blank">DRBD</a> (distributed replicated block device) from the Linux world already, which basically does something we could call network-RAID1.<br />
<span id="more-50"></span><br />
Since DRBD does not run on FreeBSD one might be tempted to believe that realtime file system replication would not be possible at all. This is not true however. FreeBSD provides you with two valuable geom classes which will allow you to implement a very similar setup: ggate and gmirror.</p>
<p><strong>Requirements</strong></p>
<p>The absolute minimum requirements for this setup are as follows:</p>
<ul>
<li>two hardware nodes running FreeBSD</li>
<li>ethernet connection between both nodes</li>
<li>a free (as in &#8220;unused&#8221;) disk slice on each node</li>
</ul>
<p>All right, this is just good enough to get it going.<br />
If you are serious in useing it you may want to stick to something better than that:</p>
<ul>
<li>use FreeBSD 6.x whenever possible, 5.x has some serious locking issues</li>
<li>Don&#8217;t use the same ethernet connection for public access AND replication, use a dedicated interface instead, preferrably over Gigabit ethernet. We&#8217;re talking about data replication over a LAN here, so latency and network load is a concern after all.</li>
<li>Fore the same reasons as above you should not do any geographic separation, especially not over slow links or VPN. Stay within the same network segment.</li>
<li>Use identical hardware for both nodes.</li>
<li>Use identical disk partition and slice setup on both nodes.</li>
<li>Use fast disks and fast disk controllers with good IO performance.</li>
<li>Refrein from useing geom/ataraid or other software RAID on partitions/slices mirrored to the second node. Use a real hardware RAID controller instead. If you don&#8217;t, deadlocks may occur.</li>
<li>Keep the partitions to be mirrored as small as possible. The reason for this is the fact that a complete resync is required if the mirror brakes. While a 20 GB partition might synchronize within ~30 minutes across a 100 Mbit network, a 500 GB partition will take over 11 hours.</li>
<li>You should propably not export more than one disk slice to a remote node. Every request (especially with lots and lots of write transactions) will be sent over your network. This causes load and latency on both nodes.</li>
</ul>
<p><strong>Pros</strong></p>
<ul>
<li>Build a two-node HA cluster useing FreeBSD</li>
<li>Implement realtime file system replication for mission critical failover scenarios</li>
<li>Use commodity hardware, no need for special shared storage like SAN or iSCSI</li>
<li>Do not rely on snapshot-based synchronisation (like rsync for example)</li>
<li>Do not rely on NFS or other file servers which could impose a single point of failure on their own</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>Yet experimental, not tested under heavy-load, possibly unstable</li>
<li>No support, if it brakes you&#8217;re on your own</li>
<li>Implementation not as mature as DRBD</li>
<li>Yet, a lot of hand work involved</li>
</ul>
<p><strong>#1 General System Setup</strong></p>
<p>I have already pointed out some recommendations about the system setup previously. So if you stick with these you may save yourself from trouble.</p>
<p>When you install FreeBSD make sure you take a current 6.x series release. The 5.x series might work too though happened to be a bit flacky at my site due to locking issues. YMMV.</p>
<p>There are no special considerations except for the partition layout: reserve a partition which shall contain the data to be replicated to the remote-host. Don&#8217;t make it to big as the whole thing has to be synchronized over the network.</p>
<p>Choose the size according to your actual disk space requirement, the network speed and latency and also the IO performance of your system. A 500 GB partition may be too big, even when running over Gigabit ethernet. A size anywhere from 100 megs to 20 gigs may be ok though.<br />
Since you would hopefully have two identical nodes, make the partition tables/disk slices match each other. This will help greatly to reduce any issues because of different device names.<br />
You should also refrain from useing any geom/ataraid software RAID on the disks/slices to be exported. Remember that you will do a software RAID1 over the network already. Placeing another software RAID onto the underlying device will lead to deadlocks in most cases. Also your system will have twice the load as the data has to be written out four times actually.<br />
If you really want the additional safety of local disk RAID do yourself a favor and use a real hardware RAID controller instead. This will even help you in getting good IO performance. Of course fask disks are a must then.</p>
<p>My setup consisted of two machines with Intel P-III 800 MHz CPU, 1 GB RAM, two 100 mbit network interfaces (one public, one private) and a RAID1 array with 20 GB SCSI disks (I used an ICP Vortex controllers).</p>
<p>This is what my disk slices look like:</p>
<p>/dev/da0s1a / 8 GB<br />
/dev/da0s1b swap 2 GB<br />
/dev/da0s1d [unused] 10 GB</p>
<p><strong>#2 Enable Kernel Modules<br />
</strong></p>
<p>Now make sure both nodes support the GEOM mirroring module. Enable it by adding the following line to your /boot/loader.conf:</p>
<p>geom_mirror_load=&#8221;YES&#8221;</p>
<p>Do the same for the GEOM gate module:</p>
<p>geom_gate_load=&#8221;YES&#8221;</p>
<p>If your secure level allows to load kernel modules at runtime you may omit these steps.<br />
Check it like this:<br />
#sysctl kern.securelevel</p>
<p>Any return value other than 0 or -1 denote that kernel modules may not be loaded at runtime. In this case a reboot is required to load the modules. But check out step #3 first.</p>
<p><strong>#3 Configure Network Interfaces </strong></p>
<p>Make sure your network interfaces are configured properly.</p>
<p>Since I have two of them I would use one as public interface and the other as private.</p>
<p>The latter one will be useing private IP addresses according to RFC1918 and is connected to the remote host useing a crossover cable.</p>
<p>On both hosts fxp0 is the public interface (which later on use the address 172.16.100.1 for the master node and 172.16.100.2 for the failover node).</p>
<p>On the master node the additional public IP address 172.16.100.12 is bound as an alias and used to provide public services. It will be monitored by freevrrpd and conditionally move over to the failover node.</p>
<p>fxp1 is the private interface used for data replication (192.168.100.1 for the master node and 192.168.100.2 for the failover node).</p>
<p>Restart networking or reboot the machine (if required by step #2), whatever applies to you.</p>
<p><strong>#4 Install Failover Software</strong></p>
<p>On FreeBSD freevrrpd may be used for IP takeovers and optional script execution. Install it from the ports (/usr/ports/net/freevrrpd/) or as a binary package (pkg_add -r freevrrpd).</p>
<p>The configuration of the failover setup is fairly easy and well documented in the freevrrpd man page. An example might look like this:</p>
<p>#<br />
# config for usual master server<br />
#<br />
[VRID]<br />
serverid = 1<br />
interface = fxp0<br />
priority = 255 # denotes priority = master<br />
addr = 172.16.100.12/32 # denotes failover IP<br />
password = anyoneulike<br />
masterscript = /usr/local/bin/become_master<br />
backupscript = /usr/local/bin/become_standby</p>
<p>And this would be an example for a standby node:</p>
<p>#<br />
# config for usual standby server<br />
#<br />
[VRID]<br />
serverid = 1<br />
interface = fxp0<br />
priority = 240 # denotes priority = failover<br />
addr = 172.16.100.12/32 # denotes failover IP<br />
password = anyoneulike<br />
masterscript = /usr/local/bin/become_master<br />
backupscript = /usr/local/bin/become_standby<br />
Now I&#8217;d stronly recommend to read the man page and change the config file according to your needs. You will also need to write the master and backup scripts which do the actions required for the failover to work properly.</p>
<p>I leave this up to you as this is beyond the scope of this howto.</p>
<p><strong>#5 Export Disk Slices<br />
</strong></p>
<p>Now export the slices which shall be used for replication (/dev/da0s1d in my case). You do this by creating a file called /etc/gg.exports on the master server:</p>
<p>192.168.0.2 RW /dev/da0s1d</p>
<p>And the same on the standby server:</p>
<p>192.168.0.1 RW /dev/da0s1d</p>
<p>You&#8217;ll find more on this in the ggated man page. Basically you&#8217;re just exporting the underlying device to the given IP address in read/write mode.</p>
<p>Now since ggated does not support any password protection or encryption at all it is best to use a dedicated network for this anyway. This will also lower the load you place on the public network segment.<br />
For optimum performance Gigabit ethernet is recommended.</p>
<p>When you&#8217;re set with the config files, ggated must be started on the failover node (yes: the failover node, not on the master!). You do this by running:</p>
<p>#ggated -v</p>
<p>This will place ggated in verbose mode and run in foreground, which is useful for debugging purposes. Later on, when everything works fine, this can be omitted.</p>
<p>Please note that you should not export the partion on both nodes at the same time. Run ggated only on the host which is the current failover node. Use the freevrrpd master/backup scripts to start/stop the service as required.</p>
<p><strong>#6 Import Disk Slices<br />
</strong></p>
<p>Looking at the primary node, the remote disk slices must no be imported.</p>
<p>This is done through ggatec, the client component of ggated. Run it as follows:</p>
<p>#ggatec create 192.168.100.2 /dev/da0s1d</p>
<p>This command will return the device node name. If it is the first one created usally &#8216;ggate0&#8242;.</p>
<p>Consider that you should run ggatec only on the designated primary node. Use the freevrrpd master/backup script facilities to create/delete the ggate device node according to it&#8217;s state.</p>
<p>Do not create the device node on the failover node as long as it is not in primary state. Do not delete the device node as long as the host is in master state (except for recovery purpose, but this will be covered later).</p>
<p><strong>#7 Setup Replication</strong></p>
<p>Now it&#8217;s actually time to bring up replication. This is where gmirror kernel module enabled previously comes in handy.</p>
<p>Make sure you&#8217;re on the primary node, then initialize a new GEOM mirror:</p>
<p>#gmirror label -v -n -b prefer gm0 /dev/ggate0</p>
<p>Then insert the local disk slice:</p>
<p>#gmirror insert -p 100 gm0 /dev/ad0s1e</p>
<p>Rebuild the mirror:</p>
<p>#gmirror rebuild rm0 ggate0</p>
<p>If you want to use the geom mirror auto synchronisation features, you can enable these as follows:</p>
<p>#gmirror configure -a gm0</p>
<p>This will cause the disk slices to be synchronized, actually the data from the local ad0s1e will be copied over to the ggate0 remote device.</p>
<p>This will surely take some time, depending on the size of your partition and the speed of your network. When finished, a message like this will appear in the dmesg log of your primary node:</p>
<p>GEOM_MIRROR: Device gm0: rebuilding provider ggate0 finished.<br />
GEOM_MIRROR: Device gm0: provider ggate0 activated.</p>
<p>You may have noticed the &#8220;prefer&#8221; balance algorithm. This setting actually means that read requests shall only be directed to the geom provider with the highest priority.</p>
<p>By adding the /dev/ad0s1e (which is always the local disk) with a priority of 100 (actually any priority highter then the one of ggate0 according to &#8220;gmirror list gm0&#8243; output is fine) you force all read requests to be directed to this device only.</p>
<p>You could actually use the &#8220;round-robin&#8221; balance algorithm as well, however this requires fast network connection with low latency, otherwise your read performance will drop significantly.</p>
<p>You may now &#8220;newfs&#8221; your gm0 device, mount and use it as you would with any other data partition.</p>
<p>In the first place you should now test the setup. Monitor the system performance on both hosts by using &#8220;vmstat&#8221; or a similar tool. Keep an eye on network interface and IO statistics.</p>
<p>If you experience lags, timeouts or slowisch behaviour during usual actions like copying files and directories then the above will certainly help you. In most cases it&#8217;s related to network bandwidth or limits in disk IO.</p>
<p><strong>#8 Failing-Over To The Standby Node<br />
</strong></p>
<p>Now that your replication is up and running it&#8217;s time to test a failover scenario. We do it by hand so you can see what you actually need to put in freevrrpd master/backup scripts for this purpose.</p>
<p>So go and unplug your current master node (yes, really do it. If you don&#8217;t do it now you&#8217;ll never do it and it is likely to never work properly).</p>
<p>So you unplugged it? Fine, that&#8217;s what we want.<br />
Now connect to your failover node and stop the ggated service.</p>
<p>This should cause geom mirror to pick up the gm0 device with provider /dev/da0s1e automatically.</p>
<p>GEOM_MIRROR: Device gm0 created (id=2381431211).<br />
GEOM_MIRROR: Device gm0: provider ad0s1e detected.<br />
GEOM_MIRROR: Force device gm0 start due to timeout.<br />
GEOM_MIRROR: Device gm0: provider ad0s1e activated.<br />
GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.</p>
<p>It may take a few moments for the device to become ready.</p>
<p>Now you must run fsck to ensure filesystem integrity (you really must do this as the filesystem will always be dirty):</p>
<p>#fsck -t ufs /dev/mirror/gm0</p>
<p>Then you can mount the device:</p>
<p>#mount /dev/mirror/gm0 /mnt</p>
<p>Step #9 will explain how the mirror may be rebuilt if the previous master node becomes available again.</p>
<p><strong>#9 Recovering</strong></p>
<p>To bring back the master host into the active combound you will need to make sure that the gm0 device is actually shut down on the failed host.</p>
<p>You remember that we enabled permanent loading of the geom mirror module previously?<br />
This is required to circumvent some problematic situations when kernel secure level is in effect. But it also means that geom mirror will automatically pick up the gm0 device. This will however prevent you from exporting the underlying device through geom gate so the gm0 must disabled first. You can do it like this:<br />
#gmirror stop gm0</p>
<p>As soon as it is stopped you may then run ggated to export the partiton (we&#8217;re doing it in debug mode):</p>
<p>#ggated -v</p>
<p>If you get an error stating failure to open the /dev/da0s1e device it may still be locked by the geom mirror class. Just look at &#8220;gmirror list&#8221; output and stop the device as required.<br />
If ggated is running after all, turn to your failover host and turn off auto configuration on the geom mirror:</p>
<p>#gmirror configure -n gm0</p>
<p>Then make the ggate device available to your node:</p>
<p>#ggatec create 192.168.100.2 /dev/da0s1e</p>
<p>Reinsert the ggate device to the geom mirror using a low priority of &#8217;0&#8242;<br />
#gmirror insert -p 0 gm0 /dev/ggate</p>
<p>and re-enable auto-configuration on the mirror</p>
<p>#gmirror cinfigure -a gm0</p>
<p>I&#8217;d recommend to always rebuild the mirror unless your absolutely sure that no new data has been added to the gm0 device in the meantime.</p>
<p>#gmirror rebuild gm0 ggate0</p>
<p>Make sure you give the ggate0 device as last argument which makes it the &#8220;sync target&#8221;. If you happen to do &#8220;gmirror rebuild gm0 da0s1e&#8221; accidentally this will sync the other way round leaving you most likely with corrupt or lost data.</p>
<p>The rebuild will take some time depending on the partitition size and network speed. After finishing you will see a message like this in your kernel log:</p>
<p>GEOM_MIRROR: Device gm0: rebuilding provider ggate0 finished.<br />
GEOM_MIRROR: Device gm0: provider ggate0 activated.</p>
<p>Now you will have to remove the local /dev/ad0s1d device from the mirror and reinsert it using a high priority:</p>
<p>#gmirror remove gm0 /dev/ad0s1d<br />
#gmirror insert -p 100 gm0 /dev/ad0s1d</p>
<p>The geom mirror will automatically rebuild the provider if required.</p>
<p>This is actually required to fix the read priority I previously talked about, although only required if you want the previous failover node to become your new master node.</p>
<p>If you do not intend switching designated roles and make your failed primary the active node again, have a look at the next sections.</p>
<p><strong>#10 What If The Failover Node Fails?<br />
</strong></p>
<p>Imagine you need to reboot your Failover Node, let&#8217;s say to install some updates. Or even more worse: It has rebooted due to some kernel panic, power loss or other real-life situations.<br />
In any case you should put the geom mirror on the master host into degraded mode by forcibly removing the ggate0 device:</p>
<p>When you&#8217;re on the master, just make sure the ggate0 is disconnected from the mirror:</p>
<p>#ggatec destroy -f -u 0</p>
<p>This will result in this kernel message:</p>
<p>GEOM_GATE: Device ggate0 destroyed.<br />
GEOM_MIRROR: Device gm0: provider ggate0 disconnected.</p>
<p>The gm0 is now running in degraded state until you re-insert your fail-over node to the configuration.</p>
<p>There is no problem in doing it this way anyway as you have to do a full resync in either case afer the failover node is up again.</p>
<p>The reason to remove the ggate0 device is to prevent IO locking on the geom mirror device.</p>
<p><strong>#11 How To Recover Replication</strong></p>
<p>To bring back the fail-over host into the active combound you will need to make sure that the gm0 device is actually shut down on the failed host.</p>
<p>#gmirror stop gm0</p>
<p>As soon as it is stopped you may then run ggated to export the partiton (we&#8217;re doing it in debug mode):</p>
<p>#ggated -v</p>
<p>If you get an error stating failure to open the /dev/da0s1e device it may still be locked by the geom mirror class. Just look at &#8220;gmirror list&#8221; output and stop the device as required.<br />
If ggated is running after all, make the remote disk slice available on the other host:</p>
<p>#ggatec create 192.168.100.2 /dev/da0s1e</p>
<p>This will have the ggate0 device created and added automatically to your gm0 device.</p>
<p>GEOM_MIRROR: Device gm0: provider ggate0 detected.<br />
GEOM_MIRROR: Device gm0: provider ggate0 activated.</p>
<p>I&#8217;d recommend to always rebuild the mirror unless your absolutely sure that no new data has been added to the gm0 device in the meantime.</p>
<p>#gmirror rebuild gm0 ggate0</p>
<p>Make sure you give the ggate0 device as last argument which makes it the &#8220;sync target&#8221;. If you happen to do &#8220;gmirror rebuild gm0 da0s1e&#8221; accidentally this will sync the other way round leaving you most likely with corrupt or lost data.</p>
<p>The rebuild will take some time depending on the partitition size and network speed. After finishing you will see a message like this in your kernel log:</p>
<p>GEOM_MIRROR: Device gm0: rebuilding provider ggate0 finished.<br />
GEOM_MIRROR: Device gm0: provider ggate0 activated.</p>
<p><strong>#12 Data Integrity Considerations</strong></p>
<p>Some special considerations must be taken to ensure data integrity:</p>
<ul>
<li>ggated cannot export a slice if it is in use by geom mirror</li>
<li>don&#8217;t try any fancy primary-primary replication stuff, it is not possible</li>
<li>never (as in never) mount the filesystem (the underlying partition to be exact), on the failover node</li>
<li>to access the data mount the geom mirror device, hence it&#8217;s only possible on the master node. Don&#8217;t ever do it on the failover node unless you have taken proper recovery action as described above</li>
<li>always run fsck on the geom mirror after failover</li>
<li>it&#8217;s better not to mount the geom mirror through fstab automatically. Use some freevrrpd recovery magic instead</li>
<li>Always take backups. This solution is to allow realtime replication for HA services. It is no substitute for proper backups at any time.</li>
</ul>
<p><strong>#13 Security Considerations</strong></p>
<p>As you may have noticed ggated doesn&#8217;t support any security or encryption mechanism by default. &#8220;Security&#8221; is only implemented upon IP based access restrictions combined with read/write or read/only flags.</p>
<p>To enhance security a bit you should always use a dedicated network interface for data replication, preferrably a private one which is not connected to the internet. Crossover host-to-host cabling is fine.</p>
<p>If you need to go over the (insecure) public network please use additonal firewall rules to block port access to authorized hosts.</p>
<p>Both ggated and ggatec also allow useing a port different from their default so it would be possible to setup a redirect through stunnel. This may however pose another performance impact onto your hosts, especially if your network connection is laggy or slow.</p>
<p><strong>#14 Observations</strong></p>
<p>It may look a bit complicated at a first glance, but it is basically nothing else than spanning a software RAID1 accross networked hosts.</p>
<p>In theory its possible to apply any RAID configuration supported by geom accross networked hosts, but there is no practical reason in doing so.</p>
<p>The possibilites offered by this setup are huge if implemented properly. You can easily apply HA conditions to services which do not support such on their own.</p>
<p>If you happen to implement a live environment upon this technology some time, just let me know how it worked out.</p>
]]></content:encoded>
			<wfw:commentRss>http://phaq.phunsites.net/2006/08/11/realtime-file-system-replication-on-freebsd/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Using NetBSD&#8217;s RaidFrame On Alpha</title>
		<link>http://phaq.phunsites.net/2006/06/21/using-netbsds-raidframe-on-alpha/</link>
		<comments>http://phaq.phunsites.net/2006/06/21/using-netbsds-raidframe-on-alpha/#comments</comments>
		<pubDate>Wed, 21 Jun 2006 21:39:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://phaq.phunsites.net/2006/06/21/using-netbsds-raidframe-on-alpha/</guid>
		<description><![CDATA[Yet another software RAID howto, I seem to be growing these in a hurry after all This time I will cover NetBSD&#8217;s RaidFrame and how to setup RAID1 disk mirroring on a Digital Alpha PWS433au. While the basic outline retains pretty much the concept given in the NetBSD Guide, I thought to write down my [...]]]></description>
			<content:encoded><![CDATA[<p>Yet another software RAID howto, I seem to be growing these in a hurry after all <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>This time I will cover NetBSD&#8217;s RaidFrame and how to setup RAID1 disk mirroring on a Digital Alpha PWS433au.<br />
<span id="more-35"></span><br />
While the basic outline retains pretty much the concept given in the <a href="http://www.netbsd.org/guide/en/chap-rf.html">NetBSD Guide</a>, I thought to write down my personal experience on this matter.<br />
The main reason for this is actually the fact that there is so much discrepancy in the information available. Some of the (partially misleading) facts I came along:</p>
<ul>
<li>RaidFrame does not support RootFS booting on Alpha</li>
<li>RaidFrame requires fiddling around with &#8216;sector offsets&#8217; on Alpha</li>
<li>RaidFrame does not work at all on Alpha</li>
<li>etc.</li>
</ul>
<p>It is incredible how much information exists which does not go along with the official manual, the manpages or simply is not accurate enough for whatever reason. Most of it is acutally *very* outdated, does not even reflect the newest developments whatsoever.</p>
<p>After reading the docs, scanning the newsgroups and trying things out on my own, I uncovered these myths:</p>
<ul>
<li>RaidFrame does support booting RootFS on Alpha</li>
<li>RaidFrame does *not* require any sector offset magic on Alpha</li>
<li>RaidFrame works in general on Alpha</li>
</ul>
<p>Although the NetBSD Guide covers only RaidFrame on x86 and sparc64, it will work out on Alpha for the most relevant parts. The differences will be outlined below using the original headlines as used in the NetBSD Guide.</p>
<p><strong>15.3.4 Preparing Disk1</strong></p>
<p>Wipe out the disk first (note: on Alpha partition &#8216;c&#8217; covers the whole disk, not partition &#8216;d&#8217; as on x86):</p>
<p>#dd if=/dev/zero of=/dev/rsd1c bs=8k count=1</p>
<p>Then recreate the partition table:</p>
<p>#disklabel -r -e -I sd1<br />
type: unknown<br />
disk: Disk1<br />
label:<br />
flags:<br />
bytes/sector: 512<br />
sectors/track: 63<br />
tracks/cylinder: 16<br />
sectors/cylinder: 1008<br />
cylinders: 19386<br />
total sectors: 19541088<br />
[...snip...]<br />
8 partitions:<br />
#        size    offset     fstype [fsize bsize cpg/sgs]<br />
a:  19541088         0       RAID                     # (Cyl.      0 &#8211;  19385)<br />
c:  19541088         0     unused      0     0        # (Cyl.      0 &#8211;  19385)</p>
<p>Just make the RAID partition &#8216;a&#8217; start at offset &#8217;0&#8242; and everything will be fine. You do not (and should not) add any additional sector offset to the partition as SRM requires all bootable partitions to be located at sector 0.</p>
<p><strong>15.3.7. Setting up kernel dumps</strong></p>
<p>This is basically the same as outlined in the manual though you may omit the first offset. The numbers are taken from the original manual, so change them according to your own disklabel output.</p>
<p>#dc</p>
<p>64                   # RF_PROTECTED_SECTORS<br />
+<br />
19015680        # offset of raid0b<br />
+p<br />
19015744        # offset of swap within sd1<br />
q</p>
<p><strong>15.3.8. Migrating System to RAID</strong></p>
<p>Most of this part is identical. The difference comes in only when installing the boot loader. This command will do the trick:</p>
<p>#installboot -v /dev/rsd1c /usr/mdec/bootxx_ffs</p>
<p>The boot loader will need to be installed onto the second disk later on step 15.3.10. Use the same command as required.</p>
<p><strong>15.3.11. Testing Boot Blocks</strong></p>
<p>If the boot loader is properly installed, your RaidFrame array should boot without any problems from both disks. This can be easily tested by issueing &#8216;boot dkc100&#8242; or &#8216;boot dkc200&#8242;. The actual device names of your hard drives can be seen by running &#8216;show device&#8217; on the SRM console.</p>
<p>To let SRM automatically try multiple devices for system boot you will need to alter your SRM environment.</p>
<p>#set bootdef_dev dkc100,dkc200</p>
<p>Now SRM should always boot from dkc100 and use dkc200 in case of a failure of the first disk.</p>
]]></content:encoded>
			<wfw:commentRss>http://phaq.phunsites.net/2006/06/21/using-netbsds-raidframe-on-alpha/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FreeBSD gvinum RAID5 on Sparc64</title>
		<link>http://phaq.phunsites.net/2006/05/27/freebsd-gvinum-raid5-on-sparc64/</link>
		<comments>http://phaq.phunsites.net/2006/05/27/freebsd-gvinum-raid5-on-sparc64/#comments</comments>
		<pubDate>Fri, 26 May 2006 23:13:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://phaq.phunsites.net/2006/05/27/freebsd-gvinum-raid5-on-sparc64/</guid>
		<description><![CDATA[Not long ago a friend of mine generously donated me a Sun E450 server for use with my current networking projects. The machine came along with four IBM DDRS34560 hard drives. Since a capacity of 4 GB per drive is not that overwhelming by today&#8217;s standards I was looking forward to incorporate them into a [...]]]></description>
			<content:encoded><![CDATA[<p>Not long ago a friend of mine generously donated me a Sun E450 server for use with my current networking projects.</p>
<p>The machine came along with four IBM DDRS34560 hard drives. Since a capacity of 4 GB per drive is not that overwhelming by today&#8217;s standards I was looking forward to incorporate them into a RAID5 array.<br />
<span id="more-28"></span><br />
The operating system of choice to achieve this was FreeBSD/sparc64 6.1-RELEASE (custom-built kernel, <a href="http://www.phunsites.net/wp/2006/05/27/freebsd-gvinum-raid5-on-sparc64/sun-e450-smp-kernel-config/" id="p29" rel="attachment" title="Sun E450 SMP Kernel Config"></a><a href="http://phaq.phunsites.net/files/2006/05/e450_smp.txt" title="Sun E450 SMP Kernel Config">Sun E450 SMP Kernel Config</a>).</p>
<p>This howto will not go into too much details. If you want to learn more about this stuff check out the man pages of gvinum, geom and have a look at the <a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/vinum-vinum.html" target="_blank">FreeBSD handbook, Chapter #19</a>.</p>
<p><strong>#1 Get Some Good Hard Drives</strong></p>
<p>First of all you need to have at least three hard drives to build up a RAID5 plex (this is the term used for arrays in gvinum). It does however not make very much sense to build a RAID5 from three disks, making it a RAID1 with hotspare is a better approach then.<br />
I would use at least four disks (better five) but not more than seven. RAID5 makes heavy parity calculations, so the more disks you have, the longer it will take to spread the parity (don&#8217;t do a RAID5 over 14 disks, it is much slower than a RAID0 spanned accross two RAID5&#8242;s of seven disks).<br />
Although it&#8217;s possible to use hard drives of any size and even make them member of multiple plexes of any kind, I would not recommend to do so. It makes things a bit more complicated.<br />
This is why I choose to always dedicate a single disk to a single plex only, making it (at least to look) similar to what ordinary hardware RAID controllers do.</p>
<p>To get a balanced weight of I/O performance I would also recommend that you always span a plesk accross identical disks. Using multiple disks of different kind could lead to a very unbalanced behaviour.<br />
Imagine what happens if you span a RAID5 accross one 5400 rpm SCSI-1 and two 15k rpm U360 hard drives&#8230;</p>
<p>In my case I had four IBM DDRS34560 hard drives to get along.</p>
<p><strong>#2 Hard Drive Partitions</strong></p>
<p>When you have your hard drives ready you should setup the partitions (or disk labels to be correct).</p>
<p>Due to platform specific differences FreeBSD/sparc64 neither has an fdisk nor a bsdlabel command you could work with. The utility of choice to manage the disk label is called &#8216;sunlabel&#8217;.</p>
<p>First of all initialize all drives with a new disk label (replace DEVICE by your appropriate device name):</p>
<p>sunlabel -w DEVICE auto</p>
<p>Then you should edit the disk label (again, replace DEVICE by your appropriate device name):</p>
<p>sunlabel -e DEVICE</p>
<p>You will certainly notice a difference compared with a disklabel on the i386 platform. Create a new a: partition and start it at offset 1 (the offset is required to allow gvinum meta data to be store on disk). Since sunlabel will only allow to use sector offsets, this will waste more space than what&#8217;s actually needed for the meta data though this should not be a concern. Don&#8217;t make the mistake to start at offset 0 though, it won&#8217;t work out properly.</p>
<p>To set partition a: size take the partition c: size and reduce it by the amount you see in the &#8216;sectors/cylinder&#8217; header.</p>
<p># /dev/da2:<br />
text: SUN4.2G cyl 3880 alt 2 hd 16 sec 135<br />
bytes/sector: 512<br />
sectors/cylinder: 2160<br />
sectors/unit: 8380800</p>
<p>8 partitions:<br />
#<br />
# Size is in sectors.<br />
# Offset is in cylinders.<br />
#    size       offset      tag         flag<br />
#    &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-  &#8212;&#8212;&#8212;-  &#8212;-<br />
a:    8378640          1  unassigned    wm<br />
c:    8380800          0      backup    wm</p>
<p>Repeat these steps for all future member disks of the RAID5 plex.</p>
<p>If you have all identical disks, you could safely dump the disk label of your first device to a prototype file like this:</p>
<p>sunlabel DEVICE &gt; sunlabel.DEVICE</p>
<p>Then restore the label to your other devices like this:</p>
<p>sunlabel -R NEW_DEVICE sunlabel.DEVICE</p>
<p><strong>#3 Create gvinum RAID5 volume</strong></p>
<p>Next you should create a sample configuration file (eg. /tmp/raid5.conf) for initialization. Consider that the chunk size (261k in the example) should not be a power of 2, otherwise you filesystem super blocks might end up on the same physical disk.</p>
<p>drive vol1_disk1 device /dev/da2a<br />
drive vol1_disk2 device /dev/da3a<br />
drive vol1_disk3 device /dev/da4a<br />
drive vol1_disk4 device /dev/da5a</p>
<p>volume raid5_vol1<br />
plex org raid5 261k<br />
sd drive vol1_disk1<br />
sd drive vol1_disk2<br />
sd drive vol1_disk3<br />
sd drive vol1_disk4</p>
<p>If you may also choose to build your array with a designated hotspare drive, which might then look like this:</p>
<p>drive vol1_disk1 device /dev/da2a<br />
drive vol1_disk2 device /dev/da3a<br />
drive vol1_disk3 device /dev/da4a<br />
drive vol1_disk4 device /dev/da5a hotspare<br />
volume raid5_vol1<br />
plex org raid5 261k<br />
sd drive vol1_disk1<br />
sd drive vol1_disk2<br />
sd drive vol1_disk3</p>
<p>Now invoke gvinum to create the RAID5 volume:</p>
<p>gvinum create /tmp/raid5.conf</p>
<p>This should print a status listing after initialization (the sample shows an array without hotspare drive):</p>
<p>4 drives:<br />
D vol1_disk4            State: up       /dev/da5a       A: 0/4091 MB (0%)<br />
D vol1_disk3            State: up       /dev/da4a       A: 0/4091 MB (0%)<br />
D vol1_disk2            State: up       /dev/da3a       A: 0/4091 MB (0%)<br />
D vol1_disk1            State: up       /dev/da2a       A: 0/4091 MB (0%)</p>
<p>1 volume:<br />
V raid5_vol1            State: up       Plexes:       1 Size:         11 GB</p>
<p>1 plex:<br />
P raid5_vol1.p0      R5 State: up       Subdisks:     4 Size:         11 GB</p>
<p>4 subdisks:<br />
S raid5_vol1.p0.s3      State: up       D: vol1_disk4   Size:       4091 MB<br />
S raid5_vol1.p0.s2      State: up       D: vol1_disk3   Size:       4091 MB<br />
S raid5_vol1.p0.s1      State: up       D: vol1_disk2   Size:       4091 MB<br />
S raid5_vol1.p0.s0      State: up       D: vol1_disk1   Size:       4091 MB</p>
<p>Additional status information should be visible in your dmesg output.</p>
<p>The status can be reviewed by invoking &#8216;gvinum list&#8217; at any time.</p>
<p>Make sure that the configuration gets saved by running:</p>
<p>gvinum saveconfig</p>
<p><strong>#4 Format And Mount gvinum RAID5 volume</strong></p>
<p>Now you are ready to format and mount the RAID5 volume.</p>
<p>newfs /dev/gvinum/raid5_vol1<br />
mount /dev/gvinum_raid5_vol1 /mnt</p>
<p>Add the device to your fstab to automatically mount it during startup. For this to work you should also instruct the boot loader to enable gvinum. Add this line to /boot/loader.conf:</p>
<p>geom_vinum_load=&#8221;YES&#8221;</p>
<p>This step can be omitted if you have included geom_vinum with your kernel. This is however not recommended according to the FreeBSD manual.</p>
<p><strong>#5 What Else Must Be Done?</strong></p>
<p>Your RAID5 volume should be up an running by now.</p>
<p>The man pages of gvinum and geom will cover advanced topics, amongst them mirroring, concatenation and combinations thereof.</p>
<p>Special attention must be given to optimization, eg. how the chunk or stripe size and the filesystem block size affect read/write performance.</p>
]]></content:encoded>
			<wfw:commentRss>http://phaq.phunsites.net/2006/05/27/freebsd-gvinum-raid5-on-sparc64/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sun OpenBoot: Fail-Over Booting A FreeBSD GEOM Mirror</title>
		<link>http://phaq.phunsites.net/2006/03/26/sun-openboot-fail-over-booting-a-freebsd-geom-mirror/</link>
		<comments>http://phaq.phunsites.net/2006/03/26/sun-openboot-fail-over-booting-a-freebsd-geom-mirror/#comments</comments>
		<pubDate>Sun, 26 Mar 2006 15:26:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://phaq.phunsites.net/2006/03/26/sun-openboot-fail-over-booting-a-freebsd-geom-mirror/</guid>
		<description><![CDATA[This is howto instruct Sun OpenBoot firmware to fail-over boot from a degraded GEOM disk mirror if the first disk failed.]]></description>
			<content:encoded><![CDATA[<p>After my recent article about <a href="/2006/03/07/freebsd-geom-mirror-on-sparc64/">FreeBSD GEOM mirroring on Sparc64</a> I was asked how to boot from a degraded array if the primary hard disk had failed.<br />
The point was how to prevent the admin to interact with OpenBoot in that case.<br />
I&#8217;m sure this will only apply to people not very familiar with Sun&#8217;s OpenBoot, as most other people will surely know about this.<br />
<span id="more-16"></span><br />
While I&#8217;m pointing you at the solution, please have also a look at the <a href="http://docs.sun.com/app/docs/doc/806-1377-10?q=openboot" target="_blank">OpenBoot Command Reference Manual</a>.</p>
<p>#1  Get GEOM mirror device names</p>
<p>First make sure you know which devices you used for building the mirror. The command<br />
&#8216;gmirror list&#8217; will show it to you. Get the consumer names for your GEOM provider. The following output has been shortened a bit.</p>
<p>Geom name: gm0<br />
State: COMPLETE<br />
Components: 2<br />
Balance: round-robin<br />
Consumers:<br />
1. Name: da0<br />
2. Name: da1</p>
<p>#2  Check where devices are connected to</p>
<p>Now you should grep through message to find where your GEOM consumers are connected to. I have shortened the output again for the relevant parts.</p>
<p># dmesg | grep &#8220;da[0|1]&#8221;<br />
da0 at sym0 bus 0 target 0 lun 0<br />
da0:  Fixed Direct Access SCSI-2 device<br />
da1 at sym0 bus 0 target 1 lun 0<br />
da1:  Fixed Direct Access SCSI-2 device</p>
<p>#3  Enter OpenBoot firmware console</p>
<p>Shutdown your operating system to enter OpenBoot firmware console. You can even &#8216;STOP-A&#8217; the machine, though I wouldn&#8217;t recommend that. If you just turned on your box and it is about to do the usual memory checks at all, it&#8217;s safe to issue &#8216;STOP-A&#8217;.</p>
<p>#4  Probe your scsi devices</p>
<p>If you know how the controllers and devices are attached and how they are enumerated in OpenBoot, you can skip to step 5. Otherwise issue a &#8216;probe-scsi-all&#8217; command, which should give something like that:</p>
<p>/pci@1f,4000/scsi@2<br />
Target 5<br />
Unit 0   Removable Tape     HP      C1537A          L706<br />
Target 6<br />
Unit 0   Removable Read Only device    TOSHIBA XM5701TASUN12XCD2395</p>
<p>/pci@1f,4000/scsi@3<br />
Target 0<br />
Unit 0   Disk     FUJITSU MAG3182L SUN18G 1111<br />
Target 1<br />
Unit 0   Disk     FUJITSU MAG3182L SUN18G 1111</p>
<p>Look at the devices which match your output from step 2. In my example it&#8217;s the devices on scsi bus 3, target 0 and target 1.</p>
<p>#5  Enumerate your device aliases</p>
<p>Run the command &#8216;devalias&#8217; to list your device aliases. Usually there should be matching device aliases for your hard disks. In my case this was (output shortened):</p>
<p>disk0                    /pci@1f,4000/scsi@3/disk@0,0<br />
disk1                    /pci@1f,4000/scsi@3/disk@1,0</p>
<p>You may or may not have additional device aliases matching scsi bus 3. You may even have a device alias call simply &#8216;disk&#8217; which reads the same as &#8216;disk1&#8242;. This depends on your configuration setup. Refer to the OpenBoot manual if you want to learn morn about it.</p>
<p>If the device aliases wouldn&#8217;t exist for some obscure reason, you should create them:</p>
<p>devalias disk0 /pci@1f,4000/scsi@3/disk@0,0<br />
devalias disk1 /pci@1f,4000/scsi@3/disk@1,0</p>
<p>Make sure you don&#8217;t accidentally overwrite other device alias names, especially if you are unsure about wether you need them or not.</p>
<p>You could easily use other names beside &#8216;disk0&#8242; or &#8216;disk1&#8242;. They should only be simple enough to be used in the next stept.</p>
<p>#6 Set your boot device priority</p>
<p>Now you should instruct OpenBoot about your boot device priority. Check it out first using &#8216;printenv boot-device&#8217;, which should return something like:</p>
<p>boot-device =         disk net</p>
<p>Set it to your GEOM consumers which match to the device aliases you found in the previous steps, eg:</p>
<p>{1} ok setenv boot-device disk0 disk1 net<br />
boot-device =         disk0 disk1 net</p>
<p>Now whenever booting up your box, it should boot from the &#8216;disk0&#8242; GEOM consumer (which is /dev/da0 in FreeBSD) and fail-over to &#8216;disk1&#8242; (which is /dev/da1) if &#8216;disk0&#8242; failed. It would even try to boot from the network when the &#8216;net&#8217; device is also given as in my example.</p>
<p>Consider that you can set boot-device using real device names (eg. /pci@1f,4000/scsi@3/disk@0,0) though I wouldn&#8217;t recommend it at all. Use device aliases whenever possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://phaq.phunsites.net/2006/03/26/sun-openboot-fail-over-booting-a-freebsd-geom-mirror/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBSD GEOM mirror on Alpha</title>
		<link>http://phaq.phunsites.net/2006/03/08/freebsd-geom-mirror-on-alpha/</link>
		<comments>http://phaq.phunsites.net/2006/03/08/freebsd-geom-mirror-on-alpha/#comments</comments>
		<pubDate>Wed, 08 Mar 2006 13:08:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://phaq.phunsites.net/2006/03/08/freebsd-geom-mirror-on-alpha/</guid>
		<description><![CDATA[Actually my experience in GEOM disk mirroring on Alpha dates back to FreeBSD 5.3, though it seems to work out perfectly after upgrading to FreeBSD 6.0. Again, the concept is similar to setting up a mirror on intel boxes, though &#8211; again &#8211; there are some minor differences which may cause some headaches! I&#8217;m referring [...]]]></description>
			<content:encoded><![CDATA[<p>Actually my experience in GEOM disk mirroring on Alpha dates back to FreeBSD 5.3, though it seems to work out perfectly after upgrading to FreeBSD 6.0.</p>
<p>Again, the concept is similar to setting up a mirror on intel boxes, though &#8211; again &#8211; there are some minor differences which may cause some headaches!<br />
<span id="more-10"></span><br />
I&#8217;m referring once more to Ralf S. Engelschalls GEOM mirroring approach using whole disks.<br />
As with the Sun platform there is no concept of disk slices on Alpha. Alpha is also limited to primary partitions also and lacks the absence of the &#8220;PC MBR&#8221;.</p>
<p>So his second method using disk slices may be adapted to primary partitions, though I did never try this on my own. For the sake of simplicity I prefer doing mirroring on whole disks pretty much the same way as physical controllers implement it.</p>
<p>So here is my step by step tutorial on creating a GEOM mirror on Alpha:</p>
<pre># assuming the following:
# first (ie. non-raid) scsi disk    : /dev/da0
# second (ie. future raid) scsi disk: /dev/da1
# geom mirror device (whole disk)   : /dev/mirror/gm0

# make sure the second disk is treated as a really fresh one
# (not really necessary, but makes procedure more deterministically <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />
dd if=/dev/zero of=/dev/da1 bs=512 count=79

# forget the whole PC MBR fdisk stuff, it simply doesn't exist on alpha <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> 

# place a GEOM mirror label onto the second disk
gmirror label -v -n -b round-robin gm0 /dev/da1

# activate GEOM mirror kernel layer
# (makes the /dev/mirror/gm0 device available)
gmirror load

# place a BSD disklabel onto /dev/mirror/gm0
# (ATTENTION: consider the need to provide the full device path, eg. /dev/da1, etc
#  on some releases of FreeBSD -- there seems to be an inconsistency on how different
#  releases on different platforms handle this!)
# (NOTICE: figure out what partitions you want with "bsdlabel /dev/da0" before)
# (NOTICE: *no* partition offset is requiered at all for "a" partition!)
bsdlabel -w -B /dev/mirror/gm0           # initialize
bsdlabel -e /dev/mirror/gm0              # create custom partitions

# manually copy filesystem data from first to to second disk
# (same procedure for partitions "g", etc)
# (NOTICE: in my sample a have a single partition containing the / fs,
#  just extend as needed if you have/need more partitions for /usr, etc)
newfs -U /dev/mirror/gm0a
mount /dev/mirror/gm0a /mnt
dump -L -0 -f- / | (cd /mnt; restore -r -v -f-)

# adjust new system configuration for GEOM mirror based setup
cp -p /mnt/etc/fstab /mnt/etc/fstab.orig
sed -e 's/dev/da0/dev/mirror/gm0/g' /mnt/etc/fstab
echo 'swapoff="YES"' &gt;&gt;/mnt/etc/rc.conf # for 5.3-RELEASE only
echo 'geom_mirror_load="YES"' &gt;&gt;/mnt/boot/loader.conf

# instruct boot stage 2 loader on first disk to boot
# with the boot stage 3 loader from the second disk
# (mainly because BIOS might not allow easy booting from second disk
# or at least requires manual intervention on the console)
echo "1:da(1,a)/boot/loader" &gt;/boot.config

# reboot system
# (for running system with GEOM mirror on second disk)
shutdown -r now

# make sure the first disk is treated as a really fresh one
# (also not really necessary, but makes procedure more deterministically <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />
dd if=/dev/zero of=/dev/da0 bs=512 count=79

# forget the whole PC MBR fdisk stuff, it simply doesn't exist on sparc <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> 

# switch GEOM mirror to auto-synchronization and add first disk
# (first disk is now immediately synchronized with the second disk content)
gmirror configure -a gm0
gmirror insert gm0 /dev/da0

# wait for the GEOM mirror synchronization to complete
sh -c 'while [ ".`gmirror list | grep SYNCHRONIZING`" != . ]; do sleep 1; done'

# reboot into the final two-disk GEOM mirror setup
# (now actually boots with the MBR and boot stages on first disk
# as it was synchronized from second disk)
shutdown -r now</pre>
<p>The equipment used in this article is a AlphaStation 500/266 with an Alpha 266 Mhz CPU, 128 Megs of RAM and two IBM DDYS-T36950N S96H 36 GB SCSI drives.<br />
No computers have been harmed whatsoever during my experiments.</p>
]]></content:encoded>
			<wfw:commentRss>http://phaq.phunsites.net/2006/03/08/freebsd-geom-mirror-on-alpha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBSD GEOM mirror on Sparc64</title>
		<link>http://phaq.phunsites.net/2006/03/07/freebsd-geom-mirror-on-sparc64/</link>
		<comments>http://phaq.phunsites.net/2006/03/07/freebsd-geom-mirror-on-sparc64/#comments</comments>
		<pubDate>Tue, 07 Mar 2006 18:19:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://phaq.phunsites.net/2006/03/07/freebsd-geom-mirror-on-sparc64/</guid>
		<description><![CDATA[As I promised earlier I will have a look at setting up a GEOM mirror on Sparc64 using FreeBSD 6. Though it is quiet similar to the Intel world, there are some minor differences which I&#8217;m going to show you. I&#8217;m referring myself to Ralf S. Engelschalls GEOM mirroring approach 1 using a whole disk. [...]]]></description>
			<content:encoded><![CDATA[<p>As I promised earlier I will have a look at setting up a GEOM mirror on Sparc64 using FreeBSD 6.</p>
<p>Though it is quiet similar to the Intel world, there are some minor differences which I&#8217;m going to show you.<br />
<span id="more-9"></span><br />
I&#8217;m referring myself to Ralf S. Engelschalls GEOM mirroring approach 1 using a whole disk.<br />
His second method using disk slices won&#8217;t work out on Sparc64 since the concept of disk slices does not exist on this plattform. Sparc64 allows only primary partitions, hence there is a maximum of eight instead of four as known from the intel world.<br />
Considering this it should be possible however to do disk mirroring on single partitions according to his second concept.</p>
<p>Personally, I prefer to do mirroring using whole disks as I find it easier to setup and maintain and follows the concept of how ordinary hardware controllers implement it.</p>
<p>So here is my step by step tutorial on creating a GEOM mirror on Sparc64:</p>
<pre># assuming the following:
# first (ie. non-raid) scsi disk    : /dev/da0
# second (ie. future raid) scsi disk: /dev/da1
# geom mirror device (whole disk)   : /dev/mirror/gm0

# make sure the second disk is treated as a really fresh one
# (not really necessary, but makes procedure more deterministically <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />
dd if=/dev/zero of=/dev/da1 bs=512 count=79

# forget the whole PC MBR fdisk stuff, it simply doesn't exist on sparc <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> 

# place a GEOM mirror label onto the second disk
gmirror label -v -n -b round-robin gm0 /dev/da1

# activate GEOM mirror kernel layer
# (makes the /dev/mirror/gm0 device available)
gmirror load

# place a BSD disklabel onto /dev/mirror/gm0
# (ATTENTION: in FreeBSD 6-current as of march 7 2006
# /dev/mirror/gm0 device has to be specified as just "mirror/gm0"!)
# (NOTICE: figure out what partitions you want with "sunlabel da0" before)
# (NOTICE: *no* partition offset is requiered at all for "a" partition!)
sunlabel -w -B mirror/gm0 auto      # initialize
sunlabel -e mirror/gm0              # create custom partitions

# manually copy filesystem data from first to to second disk
# (same procedure for partitions "g", etc)
# (NOTICE: in my sample a have a single partition containing the / fs,
#  just extend as needed if you have/need more partitions for /usr, etc)
newfs -U /dev/mirror/gm0a
mount /dev/mirror/gm0a /mnt
dump -L -0 -f- / | (cd /mnt; restore -r -v -f-)

# adjust new system configuration for GEOM mirror based setup
cp -p /mnt/etc/fstab /mnt/etc/fstab.orig
sed -e 's/dev/da0/dev/mirror/gm0/g' /mnt/etc/fstab
echo 'swapoff="YES"' &gt;&gt;/mnt/etc/rc.conf # for 5.3-RELEASE only
echo 'geom_mirror_load="YES"' &gt;&gt;/mnt/boot/loader.conf

# **** ATTENTION ****
# You may try this step at your own risk. However there is a chance
# that it wont work with you either!
#
# As of my understanding, this step is only possible on the intel
# plattform, where a special boot loader is stored inside the MBR.
# This boot loader does not exist on Sparc64, as Sun OpenBoot will
# call the boot loader directly from the primary partition at offset 0.
# I could only get this working by instructing OpenBoot manually to
# boot from the second disk.
#
# So after shutdown make sure to enter OpenBoot and start manually
# from the second disk.
# **** ATTENTION ****
#
# instruct boot stage 2 loader on first disk to boot
# with the boot stage 3 loader from the second disk
# (mainly because BIOS might not allow easy booting from second ATA disk
# or at least requires manual intervention on the console)
# echo "1:da(1,a)/boot/loader" &gt;/boot.config

# reboot system
# (for running system with GEOM mirror on second disk)
shutdown -r now

# make sure the first disk is treated as a really fresh one
# (also not really necessary, but makes procedure more deterministically <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />
dd if=/dev/zero of=/dev/da0 bs=512 count=79

# forget the whole PC MBR fdisk stuff, it simply doesn't exist on sparc <img src='http://phaq.phunsites.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> 

# switch GEOM mirror to auto-synchronization and add first disk
# (first disk is now immediately synchronized with the second disk content)
gmirror configure -a gm0
gmirror insert gm0 /dev/da0

# wait for the GEOM mirror synchronization to complete
sh -c 'while [ ".`gmirror list | grep SYNCHRONIZING`" != . ]; do sleep 1; done'

# reboot into the final two-disk GEOM mirror setup
# (now actually boots with the MBR and boot stages on first disk
# as it was synchronized from second disk)
shutdown -r now</pre>
<p>The equipment used in this article is a Sun Netra T1 with an UltraSparc-IIi (440 MHz), 512 Megs of RAM and two IBM DDYST1835SUN18G 18 GB SCSI drives.<br />
No computers have been harmed whatsoever during my experiments.</p>
<p>My next article will cover the creation of a GEOM disk mirror on the alpha architecture.</p>
]]></content:encoded>
			<wfw:commentRss>http://phaq.phunsites.net/2006/03/07/freebsd-geom-mirror-on-sparc64/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Considerations on FreeBSD System Disk Mirroring with GEOM</title>
		<link>http://phaq.phunsites.net/2006/03/06/considerations-on-freebsd-system-disk-mirroring-with-geom/</link>
		<comments>http://phaq.phunsites.net/2006/03/06/considerations-on-freebsd-system-disk-mirroring-with-geom/#comments</comments>
		<pubDate>Mon, 06 Mar 2006 19:48:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://phaq.phunsites.net/2006/03/06/considerations-on-freebsd-system-disk-mirroring-with-geom/</guid>
		<description><![CDATA[It was already the 5.x branch of FreeBSD which included the GEOM driver for creating RAID arrays of any kind. As Ralf S. Engelschall pointed out in his famous howto, GEOM was eventually to replace ATA, CCD and good old vinum. It may not always make sense to put a full-featured RAID controller into a [...]]]></description>
			<content:encoded><![CDATA[<p>It was already the 5.x branch of FreeBSD which included the GEOM driver for creating RAID arrays of any kind.</p>
<p>As Ralf S. Engelschall pointed out in his <a target="_blank" href="http://people.freebsd.org/~rse/mirror">famous howto</a>, GEOM was eventually to replace ATA, CCD and good old vinum.</p>
<p>It may not always make sense to put a full-featured RAID controller into a box when it serves only some &#8220;minor&#8221; purpose or performance is not an issue (costs may also be a consideration), so a software RAID solution may sometimes be good enough.<br />
<span id="more-8"></span><br />
I used to use ATA software RAID on some Intel-based FreeBSD boxes in &#8220;raw mode&#8221; (without an additional ATA controller card), though this approach led sometime to obscure behaviour and system faults including freezes. Furthermore, there are usually no ATA controllers in other platforms such as alpha or sparc in favour to SCSI controllers, which puts the use of ATA to an end.</p>
<p>So with the upcoming 5.x release of FreeBSD I tried the new GEOM driver as it promised more flexibility.<br />
Initially I had only two intel boxes using GEOM mirroring at the office, though this number has grown to about 15 by today.</p>
<p>During my research I came along Ralf&#8217;s previously mentioned howto, which was serving me as a base for a script to automate GEOM mirror creation during jumpstart installation.</p>
<p>Since for myself I do personally own some sparc and alpha boxes which are &#8211; besides testing &#8211; also in production use, I thought to eventually replace the omnipresent single-disk installs by GEOM mirrors. During my experiments I found some (besides other things also architectural) differences which I&#8217;d like to point out to you.<br />
Please have a look at my forthcoming follow-up topics.</p>
]]></content:encoded>
			<wfw:commentRss>http://phaq.phunsites.net/2006/03/06/considerations-on-freebsd-system-disk-mirroring-with-geom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

