SangJaOppa RAID Disks
As a workstation, it'd be normal for an A4000 to have plenty of space, with external disks, and for these disks to have some fault tolerance. RAID is exactly made for that! Below I explain RAID, the different possible options on the Amiga, some comparison tests, and my particular config.
About RAID
RAID stands for "redundant array of inexpensive disks" in which an "array" is a set of disks linked together with different "levels". The idea is to store the data on multiple, coordinated disks, rather than on single, unique disks. If a single disk fails, all the data is lost. If a disk in an array fails, depending on the RAID level, no data is lost. Also, multiple disks are seen as one by the computer, rather than a set of unique disks. Finally, read speed can improve by having the data stored on different disks "served" in parallel from these multiple disks.
There are 7 different "standard" levels:
- RAID 0, which is striping without mirroring or parity. Several disks are linked together as one, and the data is striped among them. It may increase read/write speed because these actions are spread across different disks. It doesn't provide any fault tolerance.
- RAID 1, which is mirroring, without striping or parity. Several disks are seen as one, but are really mirrors of one another. It may increase read speed, but write speed will be the slowest of all the disks. It provides fault tolerance as long as one disk is working.
- RAID 2, which is not used anymore.
- RAID 3, which is also not used anymore.
- RAID 4, which is block-level striping with dedicated parity.
- RAID 5, which is block-level striping with distributed parity. Because parity is distributed among the disks, such an array requires at least three disks, but tolerates the failure of one disk.
- RAID 6, which is block-level striping with double distributed parity. Because parity is distributed twice among the disks, such an array requires at least four disks, but tolerates the failure of two disks.
RAID implementation can be purely in software (like the solutions that I tried below) or in some drivers or entirely in the controller. It seems that some SCSI controllers usable on the Amiga implemented some RAID levels. No Amiga file system offers RAID by default, but the clever use of devices allows the integration of RAID levels in the Workbench without hiccups.
On the Amiga
I could find two software solutions on the Amiga to enable some levels of RAID: URD (available here) and SoftRaid. They both have strengths and weaknesses, but are generally very cool 
SoftRaid provides the softraid.device, an example mountlist, a beta version of the SFS file system, DevInfo to get info. about devices, and some program/scripts to manipulate blocks. It works at the partition level, so that even with one physical disk, you can use it with two or more partitions. It has no user interface, but the readme provides enough information to create DOS drivers or mountlists.
The one thing that wasn't clear to me was the value to put for HighCyl, i.e., the size of the "disk" to be mounted. After much reading and experimenting, I found that this value depends on the chosen configuration and the info. obtained from the partitions using DevInfo. For example, for a RAID (striping), the ENVARC:RAID0 file would contain: RAID128:128,dkbscsi.device,3,4520,4187780,dkbscsi.device,3,4192300,4187780 so the HighCyl should be 4 187 780 / 236 (BlocksPerTrack) - 1 = 17 743 (blocks). As another example, for a MIRROR (mirroring), the ENVARC:RAID1 file would be: MIRROR,dkbscsi.device,4,5220,8352000,dkbscsi.device,5,5220,8352000 and the HighCyl should be 8 352 000 / 236 - 1 = 35 388.
URD, the universal RAID device, provides the urd.device and a MUI-based tool to configure your arrays. It works at the disk level (not partition). It can handle up to 16 arrays, each containing any number of disks. It also provides encryption and different access modes (Direct SCSI or TD64) to handle disks greater than 4Gb. The UI is very neat and explains the possible URD options very well: RAID 0 (striping), RAID 1 (mirroring), and a non-standard (É) RAID 0+1 (striping + mirroring). (I had to delete the images, else the UI would crash while it works fine without them.)
I had the chance to get help from its creator, Rupert Hausberger (naTmeg), to configure and test different arrays. I managed to create and run a mirror between two disks. However, I had difficulty with the file system. I couldn't make URD and PFS3 work together. No matter the size of the disk that I would give, PFS3 would complain that it cannot read some block, with messages similar to TD32 and Direct SCSI access mode failed! Can't read block NNN (<4G) urd.device:0. So, I could only test URD with FFS and SFS. Regarding SFS, I could only make URD work with the version provided in its archive (v0.85) and not with the latest (v1.279), which may have skewed the speed results below.
Comparisons
I made several comparisons to find the best combination of device and file system while keeping in mind fault tolerance. I used DiskSpeed v4.2 in the same conditions to have fair comparisons. All the original data and a detailed spreadsheet are available here.
Baseline
The baseline is a partition on the CF card connected to the internal IDE bus on the A4000. It performs at 900+ Kb/sec.
| |
IDE |
SCSI |
| SanDisk SDCFH2-004G |
Compaq BD00411933 |
Seagate ST15320W SUN4.2G |
Seagate ST15320W SUN4.2G |
| Essais: |
SCSIHD0_1: |
SCSIHD1_1: |
SCSIHD2_1: |
| PFS3AIO |
PFS3AIO |
PFS3AIO |
PFS3AIO |
| Speed in bytes/sec |
CPU Availability |
Speed in bytes/sec |
CPU Availability |
Speed in bytes/sec |
CPU Availability |
Speed in bytes/sec |
CPU Availability |
| Averages |
Create file |
773,209.13 |
8% |
640,515.13 |
1% |
621,005.88 |
3% |
619,962.75 |
3% |
| Write to file |
952,422.71 |
8% |
764,779.04 |
1% |
713,526.21 |
3% |
710,130.67 |
4% |
| Read from file |
1,062,214.13 |
1% |
915,598.33 |
1% |
689,856.67 |
36% |
684,459.88 |
36% |
| Total |
929,281.99 |
6% |
773,630.83 |
1% |
674,796.25 |
14% |
671,517.76 |
15% |
SoftRaid vs. URD using FFS and SFS
This comparison shows the speed of each device using its RAID configuration, which is really RAID 0 (striping). Unfortunately, it's not conclusive because, with FFS, URD is faster than SoftRaid, but with SFS, SoftRaid is faster than URD .
| SoftRaid RAID |
URD RAID |
| Seagate ST15320W SUN4.2G x 2 |
Seagate ST15320W SUN4.2G x 2 |
| Storage: |
Storage: |
| FFS |
FFS |
| Speed in bytes/sec |
CPU Availability |
Speed in bytes/sec |
CPU Availability |
| 163,314.38 |
8% |
179,973.08 |
3% |
| 182,019.04 |
34% |
273,860.29 |
4% |
| 240,314.46 |
41% |
341,905.79 |
24% |
| 195,215.96 |
28% |
265,246.39 |
10% |
| SoftRaid RAID |
URD RAID |
| Seagate ST15320W SUN4.2G x 2 |
Seagate ST15320W SUN4.2G x 2 |
| Storage: |
Storage: |
| SFS v0.85 |
SFS 1.279 |
| Speed in bytes/sec |
CPU Availability |
Speed in bytes/sec |
CPU Availability |
| 290,513.79 |
8% |
184,406.71 |
4% |
| 352,991.04 |
11% |
268,450.46 |
4% |
| 519,599.04 |
17% |
352,139.08 |
22% |
| 387,701.29 |
12% |
268,332.08 |
10% |
SoftRaid RAID vs. MIRROR
This comparison shows the speed of striping and mirroring using SoftRaid and PFS3. It shows that mirroring is less than twice as slow as striping (618,545.43 / 346,636.63 = 1.78) and almost twice as slow as the original disk (671,517.76 / 346,636.63 = 1.94).
| SoftRaid RAID |
SoftRaid MIRROR |
| Compaq BD00411933 |
Seagate ST15320W SUN4.2G x 2 |
Seagate ST15320W SUN4.2G x 2 |
| Storage0: |
Storage1: |
Storage1: |
| PFS3AIO |
PFS3AIO |
PFS3AIO |
| Speed in bytes/sec |
CPU Availability |
Speed in bytes/sec |
CPU Availability |
Speed in bytes/sec |
CPU Availability |
| 589,772.17 |
2% |
504,954.88 |
4% |
336,634.88 |
3% |
| 661,916.92 |
2% |
582,467.17 |
4% |
374,220.79 |
3% |
| 768,698.33 |
6% |
768,214.25 |
21% |
329,054.21 |
30% |
| 673,462.47 |
3% |
618,545.43 |
10% |
346,636.63 |
12% |
Conclusion: Striping and Mirroring
In the end, I chose SoftRaid because it works at the partition level, rather than URD, which works at the disk level. I use striping on two 2Gb partitions of one (newer) 4Gb disk (Storage0:) and mirroring on two 4Gb partitions of two (older) 4Gb disks (Storage1:).
I chose striping with the newer disk because I care less about fault-tolerance (it should be good for the next 10 years!), but I wanted to test its speed (and that of SoftRaid).
I chose mirroring with the older disks because I don't really trust them and wanted to test fault tolerance. SoftRaid comes with a program called dd, which is similar to dd on Linux. With it, it's possible to copy blocks, sectors, or bytes from one disk/partition to another, from any position to any other position. (Of course, using dd indiscriminately could destroy the data on partitions! )
It's very useful to copy data from one sector of one disk to the same sector of the other disk whenever PFSDoctor finds a read error on one of the disks! For example, when running PFSDoctor, SoftRaid sometimes reports a read error like:

which is easy to solve using dd by copying the 64 sectors starting at sector 7140 from the dkbscsi.device unit 5 to unit 4.
Super cool: I feel like I have a sturdy solution to store data! 
The last three changes:Tygre - 2026-08-04 14:32:05 | Tygre - 2026-08-04 14:30:46 | Tygre - 2026-08-04 14:26:39
|