* Clarify / Remove first person exposition and personal anecdotes.
PR: docs/50664
This commit is contained in:
parent
90ff2cb926
commit
771e009df1
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=16777
1 changed files with 137 additions and 116 deletions
|
@ -345,57 +345,57 @@
|
|||
<author>
|
||||
<firstname>Christopher</firstname>
|
||||
<surname>Shumway</surname>
|
||||
<contrib>Written by </contrib>
|
||||
<contrib>Original work by </contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Valentino</firstname>
|
||||
<surname>Vaschetto</surname>
|
||||
<contrib>Marked up by </contrib>
|
||||
<contrib>Original markup by </contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Jim</firstname>
|
||||
<surname>Brown</surname>
|
||||
<contrib>Revised by </contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
</sect3info>
|
||||
|
||||
<title>ccd (Concatenated Disk Configuration)</title>
|
||||
<title>Concatenated Disk Driver (CCD) Configuration</title>
|
||||
<para>When choosing a mass storage solution the most important
|
||||
factors to consider are speed, reliability, and cost. It is very
|
||||
rare to have all three in favor; normally a fast, reliable mass
|
||||
factors to consider are speed, reliability, and cost. It is
|
||||
rare to have all three in balance; normally a fast, reliable mass
|
||||
storage device is expensive, and to cut back on cost either speed
|
||||
or reliability must be sacrificed. In designing my system, I
|
||||
ranked the requirements by most favorable to least favorable. In
|
||||
this situation, cost was the biggest factor. I needed a lot of
|
||||
storage for a reasonable price. The next factor, speed, is not
|
||||
quite as important, since most of the usage would be over a one
|
||||
hundred megabit switched Ethernet, and that would most likely be
|
||||
the bottleneck. The ability to spread the file input/output
|
||||
operations out over several disks would be more than enough speed
|
||||
for this network. Finally, the consideration of reliability was
|
||||
an easy one to answer. All of the data being put on this mass
|
||||
storage device was already backed up on CD-R's. This drive was
|
||||
primarily here for online live storage for easy access, so if a
|
||||
drive went bad, I could just replace it, rebuild the file system,
|
||||
and copy back the data from CD-R's.</para>
|
||||
or reliability must be sacrificed.</para>
|
||||
|
||||
<para>In designing the system described below, cost was chosen
|
||||
as the most important factor, followed by speed, then reliability.
|
||||
Data transfer speed for this system is ulitmately
|
||||
constrained by the network. And while reliability is very important,
|
||||
the CCD drive described below serves online data that is already
|
||||
fully backed up on CD-R's and can easily be replaced.</para>
|
||||
|
||||
<para>Defining your own requirements is the first step
|
||||
in choosing a mass storage solution. If your requirements prefer
|
||||
speed or reliability over cost, your solution will differ from
|
||||
the system described in this section.</para>
|
||||
|
||||
<para>To sum it up, I need something that will give me the most
|
||||
amount of storage space for my money. The cost of large IDE disks
|
||||
are cheap these days. I found a place that was selling Western
|
||||
Digital 30.7GB 5400 RPM IDE disks for about one-hundred and thirty
|
||||
US dollars. I bought three of them, giving me approximately
|
||||
ninety gigabytes of online storage.</para>
|
||||
|
||||
<sect4 id="ccd-installhw">
|
||||
<title>Installing the Hardware</title>
|
||||
|
||||
<para>I installed the hard drives in a system that already
|
||||
had one IDE disk in as the system disk. The ideal solution
|
||||
would be for each IDE disk to have its own IDE controller
|
||||
and cable, but without fronting more costs to acquire a dual
|
||||
IDE controller this would not be a possibility. So, I
|
||||
jumpered two disks as slaves, and one as master. One went
|
||||
on the first IDE controller as a slave to the system disk,
|
||||
and the other two where slave/master on the secondary IDE
|
||||
controller.</para>
|
||||
<para>In addition to the IDE system disk, three Western
|
||||
Digital 30GB, 5400 RPM IDE disks form the core
|
||||
of the CCD disk described below providing approximately
|
||||
90GB of online storage. Ideally,
|
||||
each IDE disk would have its own IDE controller
|
||||
and cable, but to minimize cost, additional
|
||||
IDE controllers were not used. Instead the disks were
|
||||
configured with jumpers so that each IDE controller has
|
||||
one master, and one slave.</para>
|
||||
|
||||
<para>Upon reboot, the system BIOS was configured to
|
||||
automatically detect the disks attached. More importantly,
|
||||
|
@ -406,74 +406,75 @@ ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33
|
|||
ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33
|
||||
ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33</programlisting>
|
||||
|
||||
<para>At this point, if FreeBSD does not detect the disks, be
|
||||
sure that you have jumpered them correctly. I have heard
|
||||
numerous reports with problems using cable select instead of
|
||||
true slave/master configuration.</para>
|
||||
|
||||
<para>The next consideration was how to attach them as part of
|
||||
the file system. I did a little research on &man.vinum.8;
|
||||
(<xref linkend="vinum-vinum">) and
|
||||
&man.ccd.4;. In this particular configuration, &man.ccd.4;
|
||||
appeared to be a better choice mainly because it has fewer
|
||||
parts. Less parts tends to indicate less chance of breakage.
|
||||
Vinum appears to be a bit of an overkill for my needs.</para>
|
||||
<note><para>If FreeBSD does not detect all the disks, ensure
|
||||
that you have jumpered them correctly. Most IDE drives
|
||||
also have a <quote>Cable Select</quote> jumper. This is
|
||||
<emphasis>not</emphasis> the jumper for the master/slave
|
||||
relationship. Consult the drive documentation for help in
|
||||
identifying the correct jumper.</para></note>
|
||||
|
||||
<para>Next, consider how to attach them as part of the file
|
||||
system. You should research both &man.vinum.8; (<xref
|
||||
linkend="vinum-vinum">) and &man.ccd.4;. In this
|
||||
particular configuration, &man.ccd.4; was chosen.</para>
|
||||
</sect4>
|
||||
|
||||
<sect4 id="ccd-setup">
|
||||
<title>Setting up the CCD</title>
|
||||
|
||||
<para><application>CCD</application> allows me to take
|
||||
several identical disks and concatenate them into one
|
||||
logical file system. In order to use
|
||||
<application>ccd</application>, I need a kernel with
|
||||
<application>ccd</application> support built into it. I
|
||||
added this line to my kernel configuration file and rebuilt
|
||||
the kernel:</para>
|
||||
<para><application>CCD</application> allows you to take
|
||||
several identical disks and concatenate them into one
|
||||
logical file system. In order to use
|
||||
<application>ccd</application>, you need a kernel with
|
||||
<application>ccd</application> support built in.
|
||||
Add this line to your kernel configuration file, rebuild, and
|
||||
reinstall the kernel:</para>
|
||||
|
||||
<programlisting>pseudo-device ccd 4</programlisting>
|
||||
|
||||
<note><para>In FreeBSD 5.0, it is not necessary to specify
|
||||
a number of ccd devices, as the ccd device driver is now
|
||||
cloning -- new device instances will automatically be
|
||||
self-cloning -- new device instances will automatically be
|
||||
created on demand.</para></note>
|
||||
|
||||
<para><application>ccd</application> support can also be
|
||||
loaded as a kernel loadable module in FreeBSD 4.0 or
|
||||
loaded as a kernel loadable module in FreeBSD 3.0 or
|
||||
later.</para>
|
||||
|
||||
<para>To set up <application>ccd</application>, first I need
|
||||
to disklabel the disks. Here is how I disklabeled
|
||||
them:</para>
|
||||
<para>To set up <application>ccd</application>, you must first use
|
||||
&man.disklabel.8 to label the disks:</para>
|
||||
|
||||
<programlisting>disklabel -r -w ad1 auto
|
||||
disklabel -r -w ad2 auto
|
||||
disklabel -r -w ad3 auto</programlisting>
|
||||
|
||||
<para>This created a disklabel ad1c, ad2c and ad3c that
|
||||
spans the entire disk.</para>
|
||||
<para>This creates a disklabel for ad1c, ad2c and ad3c that
|
||||
spans the entire disk.</para>
|
||||
|
||||
<para>The next step is to change the disklabel type. To do
|
||||
that I had to edit the disklabel:</para>
|
||||
<para>The next step is to change the disklabel type. You
|
||||
can use <application>disklabel</application> to edit the
|
||||
disks:</para>
|
||||
|
||||
<programlisting>disklabel -e ad1
|
||||
disklabel -e ad2
|
||||
disklabel -e ad3</programlisting>
|
||||
|
||||
<para>This opened up the current disklabel on each disk
|
||||
respectively in whatever editor the <envar>EDITOR</envar>
|
||||
environment variable was set to, in my case, &man.vi.1;.
|
||||
Inside the editor I had a section like this:</para>
|
||||
<para>This opens up the current disklabel on each disk with
|
||||
the editor specified by the <envar>EDITOR</envar>
|
||||
environment variable, typically &man.vi.1;.</para>
|
||||
|
||||
<para>An unmodified disklabel will look something like
|
||||
this:</para>
|
||||
|
||||
<programlisting>8 partitions:
|
||||
# size offset fstype [fsize bsize bps/cpg]
|
||||
c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)</programlisting>
|
||||
|
||||
<para>I needed to add a new "e" partition for &man.ccd.4; to
|
||||
use. This usually can be copied of the "c" partition, but
|
||||
the <option>fstype</option> must be <userinput>4.2BSD</userinput>.
|
||||
Once I was done,
|
||||
my disklabel should look like this:</para>
|
||||
<para>Add a new "e" partition for &man.ccd.4; to use. This
|
||||
can usually be copied from the <quote>c</quote> partition,
|
||||
but the <option>fstype</option> <emphasis>must</emphasis>
|
||||
be <userinput>4.2BSD</userinput>. The disklabel should
|
||||
now look something like this:</para>
|
||||
|
||||
<programlisting>8 partitions:
|
||||
# size offset fstype [fsize bsize bps/cpg]
|
||||
|
@ -485,12 +486,7 @@ disklabel -e ad3</programlisting>
|
|||
<sect4 id="ccd-buildingfs">
|
||||
<title>Building the File System</title>
|
||||
|
||||
<para>Now that I have all of the disks labeled, I needed to
|
||||
build the <application>ccd</application>. To do that, I
|
||||
used a utility called &man.ccdconfig.8;.
|
||||
<command>ccdconfig</command> takes several arguments, the
|
||||
first argument being the device to configure, in this case,
|
||||
<devicename>/dev/ccd0c</devicename>. The device node for
|
||||
<para>The device node for
|
||||
<devicename>ccd0c</devicename> may not exist yet, so to
|
||||
create it, perform the following commands:</para>
|
||||
|
||||
|
@ -501,58 +497,79 @@ sh MAKEDEV ccd0</programlisting>
|
|||
manage device nodes in <filename>/dev</filename>, so use of
|
||||
<command>MAKEDEV</command> is not necessary.</para></note>
|
||||
|
||||
<para>The next argument <command>ccdconfig</command> expects
|
||||
is the interleave for the file system. The interleave
|
||||
defines the size of a stripe in disk blocks, normally five
|
||||
hundred and twelve bytes. So, an interleave of thirty-two
|
||||
would be sixteen thousand three hundred and eighty-four
|
||||
bytes.</para>
|
||||
<para>Now that you have all of the disks labeled, you must
|
||||
build the <application>ccd</application>. To do that,
|
||||
use &man.ccdconfig.8;, with options similar to the following:
|
||||
|
||||
<para>After the interleave comes the flags for
|
||||
<command>ccdconfig</command>. If you want to enable drive
|
||||
mirroring, you can specify a flag here. In this
|
||||
configuration, I am not mirroring the
|
||||
<application>ccd</application>, so I left it as zero.</para>
|
||||
<programlisting>ccdconfig ccd0<co id="co-ccd-dev"> 32<co id="co-ccd-interleave"> 0<co id="co-ccd-flags"> /dev/ad1e<co id="co-ccd-devs"> /dev/ad2e /dev/ad3e</programlisting>
|
||||
|
||||
<para>The final arguments to <command>ccdconfig</command>
|
||||
are the devices to place into the array. Putting it all
|
||||
together I get this command:</para>
|
||||
The use and meaning of each option is shown below:</para>
|
||||
|
||||
<programlisting>ccdconfig ccd0 32 0 /dev/ad1e /dev/ad2e /dev/ad3e</programlisting>
|
||||
<calloutlist>
|
||||
<callout arearefs="co-ccd-dev">
|
||||
<para>The first argument is the device to configure, in this case,
|
||||
<devicename>/dev/ccd0c</devicename>. The <filename>/dev/</filename>
|
||||
portion is optional.</para>
|
||||
</callout>
|
||||
|
||||
<para>This configures the <application>ccd</application>.
|
||||
I can now &man.newfs.8; the file system.</para>
|
||||
<callout arearefs="co-ccd-interleave">
|
||||
|
||||
<para>The interleave for the file system. The interleave
|
||||
defines the size of a stripe in disk blocks, each normally 512 bytes.
|
||||
So, an interleave of 32 would be 16,384 bytes.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-ccd-flags">
|
||||
<para>Flags for <command>ccdconfig</command>. If you want to enable drive
|
||||
mirroring, you can specify a flag here. This
|
||||
configuration does not provide mirroring for
|
||||
<application>ccd</application>, so it is set at 0 (zero).</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-ccd-devs">
|
||||
<para>The final arguments to <command>ccdconfig</command>
|
||||
are the devices to place into the array. Use the complete pathname
|
||||
for each device.</para>
|
||||
</callout>
|
||||
</calloutlist>
|
||||
|
||||
|
||||
<para>After running <command>ccdconfig</command> the <application>ccd</application>
|
||||
is configured. A file system can be installed. Refer to &man.newfs.8;
|
||||
for options, or simply run: </para>
|
||||
|
||||
<programlisting>newfs /dev/ccd0c</programlisting>
|
||||
|
||||
|
||||
</sect4>
|
||||
|
||||
<sect4 id="ccd-auto">
|
||||
<title>Making it all Automatic</title>
|
||||
|
||||
<para>Finally, if I want to be able to mount the
|
||||
<application>ccd</application>, I need to
|
||||
configure it first. I write out my current configuration to
|
||||
<para>Generally, you will want to mount the
|
||||
<application>ccd</application> upon each reboot. To do this, you must
|
||||
configure it first. Write out your current configuration to
|
||||
<filename>/etc/ccd.conf</filename> using the following command:</para>
|
||||
|
||||
<programlisting>ccdconfig -g > /etc/ccd.conf</programlisting>
|
||||
|
||||
<para>When I reboot, the script <command>/etc/rc</command>
|
||||
runs <command>ccdconfig -C</command> if /etc/ccd.conf
|
||||
<para>During reboot, the script <command>/etc/rc</command>
|
||||
runs <command>ccdconfig -C</command> if <filename>/etc/ccd.conf</filename>
|
||||
exists. This automatically configures the
|
||||
<application>ccd</application> so it can be mounted.</para>
|
||||
|
||||
<para>If you are booting into single user mode, before you can
|
||||
<note><para>If you are booting into single user mode, before you can
|
||||
<command>mount</command> the <application>ccd</application>, you
|
||||
need to issue the following command to configure the
|
||||
array:</para>
|
||||
|
||||
<programlisting>ccdconfig -C</programlisting>
|
||||
</note>
|
||||
|
||||
<para>Then, we need an entry for the
|
||||
<application>ccd</application> in
|
||||
<para>To automatically mount the <application>ccd</application>,
|
||||
place an entry for the <application>ccd</application> in
|
||||
<filename>/etc/fstab</filename> so it will be mounted at
|
||||
boot time.</para>
|
||||
boot time:</para>
|
||||
|
||||
<programlisting>/dev/ccd0c /media ufs rw 2 2</programlisting>
|
||||
</sect4>
|
||||
|
@ -569,7 +586,7 @@ sh MAKEDEV ccd0</programlisting>
|
|||
storage. &man.vinum.8; implements the RAID-0, RAID-1 and
|
||||
RAID-5 models, both individually and in combination.</para>
|
||||
|
||||
<para>See the <xref linkend="vinum-vinum"> for more
|
||||
<para>See <xref linkend="vinum-vinum"> for more
|
||||
information about &man.vinum.8;.</para>
|
||||
</sect3>
|
||||
</sect2>
|
||||
|
@ -581,16 +598,19 @@ sh MAKEDEV ccd0</programlisting>
|
|||
<primary>RAID</primary>
|
||||
<secondary>Hardware</secondary>
|
||||
</indexterm>
|
||||
|
||||
<para>FreeBSD also supports a variety of hardware <acronym>RAID</acronym>
|
||||
controllers. In which case the actual <acronym>RAID</acronym> system
|
||||
is built and controlled by the card itself. Using an on-card
|
||||
<acronym>BIOS</acronym>, the card will control most of the disk operations
|
||||
itself. The following is a brief setup using a Promise <acronym>IDE RAID</acronym>
|
||||
controller. When this card is installed and the system started up, it will
|
||||
display a prompt requesting information. Follow the on screen instructions
|
||||
to enter the cards setup screen. From here a user should have the ability to
|
||||
combine all the attached drives. When doing this, the disk(s) will look like
|
||||
a single drive to FreeBSD. Other <acronym>RAID</acronym> levels can be setup
|
||||
controllers. These devices control a <acronym>RAID</acronym> subsystem
|
||||
without the need for FreeBSD specific software to manage the
|
||||
array.</para>
|
||||
|
||||
<para>Using an on-card <acronym>BIOS</acronym>, the card controls most of the disk operations
|
||||
itself. The following is a brief setup description using a <acronym>Promise IDE RAID</acronym>
|
||||
controller. When this card is installed and the system is started up, it
|
||||
displays a prompt requesting information. Follow the instructions
|
||||
to enter the card's setup screen. From here, you have the ability to
|
||||
combine all the attached drives. After doing so, the disk(s) will look like
|
||||
a single drive to FreeBSD. Other <acronym>RAID</acronym> levels can be set up
|
||||
accordingly.
|
||||
</para>
|
||||
</sect2>
|
||||
|
@ -611,7 +631,7 @@ ata3: resetting devices .. done
|
|||
ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11) status=59 error=40
|
||||
ar0: WARNING - mirror lost</programlisting>
|
||||
|
||||
<para>Using &man.atacontrol.8;, check to see how things look:</para>
|
||||
<para>Using &man.atacontrol.8;, check for further information:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>atacontrol list</userinput>
|
||||
ATA channel 0:
|
||||
|
@ -659,8 +679,9 @@ Slave: no device present</screen>
|
|||
</step>
|
||||
|
||||
<step>
|
||||
<para>The rebuild command hangs until complete, its possible to open another
|
||||
terminal and check on the progress by issuing the following command:</para>
|
||||
<para>The rebuild command hangs until complete. However, it is possible to open another
|
||||
terminal (using <keycombo action="simul"><keycap>Alt</keycap> <keycap>F<replaceable>n</replaceable></keycap></keycombo>)
|
||||
and check on the progress by issuing the following command:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>dmesg | tail -10</userinput>
|
||||
[output removed]
|
||||
|
|
Loading…
Reference in a new issue