Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Absolute BSD - The Ultimate Guide To FreeBSD (2002).pdf
Скачиваний:
29
Добавлен:
17.08.2013
Размер:
8.15 Mб
Скачать

Finally you have RAID−10 (also known as RAID−0+1), which combines striping and mirroring. You want at least four disks for this, in multiples of two, divided into two sets. Each set of disks is striped together, and each set of stripes mirrors the other. If you can afford this setup, use it.

Given the choice, you should use hardware RAID because it simplifies maintenance and takes considerably less skill to run. Run RAID−10 if you have enough disks, and if not, RAID−5 or RAID−1, in that order. (I've used RAID−0 on my home system, but I don't recommend it for serious application.)

Software RAID

We'll focus on software RAID because it's much more complicated, much more annoying, and far more difficult to run than hardware RAID. Users under tight budgetary constraints frequently have to resort to software RAID, after all. If you're using hardware RAID, read this chapter for the concepts, but check your hardware manual to see which buttons to pick.

FreeBSD includes two software RAID managers: ccd and Vinum. Ccd is far older and only handles RAID−1. Vinum is newer, faster, stronger, handles RAID− 0, 1, 5, and 10, and is able to leap taller buildings in fewer bounds. We'll therefore discuss Vinum.

Note No operating system's software RAID is for the faint of heart or those who are not willing to dig into problems. This includes FreeBSD's.

Vinum Disk Components

Vinum divides disks into three separate pieces: volumes, drives, and subdisks.

Volumes

Vinum creates virtual disks, or volumes. One Vinum volume looks like a standard disk partition that you can read, write, format, and so on. Our users and programs will actually see this volume instead of a disk partition. You cannot mix Vinum data and standard filesystems on a single partition.

Drives

Partitions dedicated to Vinum are called drives. One Vinum volume can include as many drives as you like. (You could use just a single disk for Vinum, but you'd simply be absorbing the overhead of software RAID and not getting any benefits.)

You can dedicate entire disks to Vinum drives if you want, but you don't have to. I frequently use the outer section of a hard drive for swap space, and dedicate the remainder to a Vinum drive.

Subdisks

Vinum drives hold subdisks, which are simply spaces set aside for Vinum on a particular Vinum drive. (Remember, in Vinum a drive is just a partition; this is space set aside for Vinum data in a partition assigned to Vinum.) If you wanted, you could even create two subdisks on the same physical disk just by putting them in different partitions. (There isn't much use for this, other than to demonstrate just how badly software RAID performs if it's set up quite badly.)

To put it all together, a volume is made up of drives. Drives contain subdisks.

392

Vinum Plex Types

A plex is a single copy of the data in a volume. As long as you have one complete plex, all your data is available. Mirroring works by having more than one plex in a volume. Vinum supports up to eight plexes per volume, so you can make your data very redundant. The way you arrange your plexes determines the sort of RAID you're using.

Concatenated Plex

To make one big volume, create a concatenated plex, which is simply all the subdisks available, in order. This gives you only one plex, or one copy of your data.

A concatenated plex is the least efficient way to use disk resources. Oh, it's good enough if you have two IDE disks on one controller, but it's simply a waste of system resources if you use SCSI. And it isn't even RAID; it's just a big virtual disk. You can use two concatenated plexes to provide mirroring, however, and you can also easily expand volumes built from concatenated plexes by adding more disks.

Striped Plex

The striped plex provides RAID−0, where data is arranged across the disks in a manner to enhance performance. The subdisks in a striped plex must all be the same size, and you must have at least two of them.

With a single striped plex, you again have no redundancy of your data. You could build two striped plexes on four disks, however, and create a redundant RAID−0 setup. If you're considering this, you really ought to look at RAID−5 instead.

Mirrored Plex

The mirrored plex copies data across multiple plexes. Again, the subdisks in a mirrored plex must all be the same size. A mirror requires at least two plexes, however, so you do get actual data redundancy. This is RAID−1.

RAID−5 Plex

A RAID−5 plex stripes and mirrors data across multiple subdisks. This includes multiple copies of your data on multiple disks, and is quite redundant. You must have at least three subdisks of the same size to run RAID−5.

Note

We won't discuss Vinum RAID−5 in any depth. For examples and discussion

 

o f R A I D − 5 o r R A I D − 1 0 , c h e c k t h e V i n u m W e b s i t e a t

 

http://www.vinumvm.org/. You must understand the basics presented in this

 

section before even attempting either of these.

Preparing Vinum Drives

We're going to go through the steps of setting up a concatenated plex, a striped plex, and a mirrored plex on a sample system. In all cases, we will need to do the following:

393

Choose partitions to become drives.

Create subdisks on those drives.

Configure Vinum to create appropriate plexes for those drives.

We'll do everything on the same sample system, which starts off with the following disks and partitions:

...............................................................................................

# df

 

 

 

 

 

Filesystem 1K−blocks

Used

Avail Capacity Mounted on

/dev/ad4s1a

248111

73649

154614

32%

/

devfs

1

1

0

100%

/dev

/dev/ad4s1f

2032839

133492

1736720

7%

/test1

/dev/ad4s1g

2032839

1266476

603736

68%

/test2

/dev/ad4s1h 29497862

3975801

23162233

15%

/usr

/dev/ad4s1e

3048830

241823

2563101

9%

/var

procfs

4

4

0

100%

/proc

/dev/da0s1e

3525041

1

3243037

0%

/crud

/dev/da1s1e

3758456

1

3457779

0%

/crud2

#

 

 

 

 

 

...............................................................................................

Df(1) shows how much disk space you're using and where your partitions are mounted. As you can see from the preceding output, we have two empty partitions on SCSI disks, /crud and /crud2. (You can tell that they're SCSI disks because of the device names at the beginning of the lines, and you can tell that they're empty because the Capacity column reads 0% for both.) We're going to use those partitions for a striped virtual disk. I've already backed up all the data on those partitions, which is necessary, because the Vinum setup process completely overwrites the drive!

To prepare your Vinum drives, first unmount the partitions:

...............................................................................................

#umount /crud

#umount /crud2

...............................................................................................

Another check with df should show that the drives are no longer visible. Remove the entries for these partitions from /etc/fstab, so FreeBSD doesn't try to put them back on boot. Once you've done that, you're ready to go.

Dedicating Partitions to Vinum

Now that we have the partitions idle and unmounted, we have to tell the partitions that they are now dedicated to Vinum—we do this with disklabel(8). This will convert a standard partition to a Vinum drive. Disklabel reads and writes "labels" on the disk, giving basic information about where partitions start and end, how they're formatted, and their physical characteristics. Just running disklabel diskname will print out the existing disklabel. One of our Vinum disks is /dev/da1, so let's look at it:

394

...............................................................................................

#disklabel da1

#/dev/da1c: type: SCSI disk: da1s1

...

8 partitions:

#

 

size

offset

fstype

[fsize bsize bps/cpg]

 

 

 

 

 

b: 1048576

0

swap

 

 

 

# (Cyl. 0

65*)

 

c:

8803557

0

unused

0

0

 

# (Cyl.

0

547*)

 

e:

7754981 1048576

4.2BSD

1024

8192

22

# (Cyl.

65*− 547*)

#

 

 

 

 

 

 

 

 

 

 

 

...............................................................................................

Disklabel produces a lot of output, including information about many things you cannot change, such as disk speed, the number of cylinders, and so on. I'll trim out a lot of these things in these examples, but you might want to run disklabel on your disks to see exactly what information is available.

What we need to see right now is the information at the end of the disklabel, where the partitions are laid out.[2] Df showed us that /crud was actually /dev/da0s1e. The preceding disklabel is for da1s1. The "e" line in the partition table represents the partition we want to dedicate to Vinum:

...............................................................................................

e: 7754981 1048576 4.2BSD 1024 8192 22 # (Cyl. 65*− 547*)

...............................................................................................

Running disklabel −e will bring up a copy of the disklabel in a text editor. You want to change the fstype column in the entry for slice e from 4.2BSD to vinum. When you save and exit, the changed disklabel will be written to the disk. When you're finished, run disklabel da0 again to check your work. The partition table should look like this:

...............................................................................................

#

 

size

offset

fstype

[fsize bsize bps/cpg]

 

 

 

 

 

b: 1048576

0

swap

 

 

# (Cyl. 0

65*)

 

c:

8803557

0

unused

0

0

# (Cyl.

0

547*)

 

e:

7754981

1048576

vinum

 

 

# (Cyl.

65*− 547*)

...............................................................................................

Edit the disklabel of the Vinum partition on the other disk in the same way. The disk partitions are now dedicated to Vinum.

Configuring Vinum

Now that you have disk space to put Vinum on, you can configure it. Basic setup is simple if you use the built−in tools.

Vinum includes a program, vinum(8), for communicating with the Vinum kernel module. You control Vinum only through this program. If you type vinum at a command prompt, you drop into an interactive Vinum shell where you can adjust the configuration, view the setup, and perform any other Vinum operations. Alternatively, you can just give the proper command−line arguments and vinum will perform a single action and exit. We'll use both the command−line method and the

395