How to setup an msa1000 using the serial console

For RHEL and SLES, HP supplies a utility for configuring and setting up the msa1500/msa1000, delivered as an RPM. While it may be possible to convert this RPM using alien and run it (it seemed to run, I didn't risk trying to use it) the software installs a big managability daemon/stack that isn't really necessary for just setting things up. They also provide Debian packages, but upon examination they are just alien'd rpms with some by hand breakage. Fortunately there is a serial command-line interface that can be used from any OS. I read the "msa1500/msa1000 Command Line Interface User Guide" and figured out how to do the stuff I needed, maybe this will be of some use to others. Here is what I did:

Connecting

Gathering Info

Once you are connected there are a few useful command you can use to gather info

Planning

OK you have a bunch of disks, probably across multiple SCSI busses, and multiple fiber channel connections. You have to figure out:

In a lot of cases you can only guess at answers to the above and just try it and see how well each works.

Create the LUNs

My msa1000 has 14 disks on the internal two busses and a dual-bus msa30 with another 14 disks. So I have four busses of 7 disks each. I decided that performance was more important than space, and that most of my LUNs needed to be pretty isolated from each other. But I still wanted good redundancy, so I used RAID0+1 which meant my LUNs needed at least 4 disks each. Here is how I allocated the disks:
           BUS
        1  2  3  4
     1: 6, 0, 0, 0
   L 2: 0, 6, 0, 0
   U 3: 0, 0, 6, 0
   N 4: 0, 0, 0, 6
     5: 1, 1, 1, 1
In the serial console I ran:
   add unit 1 data="DISK101-DISK106" raid_level=1
   add unit 2 data="DISK108-DISK113" raid_level=1
   add unit 3 data="DISK201-DISK206" raid_level=1
   add unit 4 data="DISK208-DISK213" raid_level=1
   add unit 5 data="DISK107 DISK114 DISK207 DISK214" raid_level=1
For RAID0+1 you just specify "raid_level=1" and if the array has the right number of disks it does the right thing. In cases where you want to control how the redundancy and striping are done across the disk I don't know if the specified order is the way to do that or if it always does the same thing. (if anyone tests this and determines the result, let me know)

Setup the connections

You need to add a connection for each host. On my system this looked like:

   add connection sneezy wwpn=500110a0-001a13c0 profile=Linux
   add connection grumpy wwpn=500110a0-0019ef78 profile=Linux
   add connection happy wwpn=500110a0-001a0a24 profile=Linux
   add connection dopey wwpn=50060b00-006a7e38 profile=Linux
   add connection sleepy wwpn=50060b00-006a8e50 profile=Linux
   add connection doc wwpn=10000000-c95686fa profile=Linux

Setup the ACLs

You can use Access Control Lists to limit what hosts can access which LUNs. Even if you don't think you need this for security reasons, it's a good idea for safety reasons so you don't accidentially use the wrong disk and overwrite data. On my setup it looked like this:

   add acl connection=sneezy unit=1
   add acl connection=grumpy unit=2
   add acl connection=happy unit=3
   add acl connection=dopey unit=4
   add acl connection=sleepy unit=5

Controllers

My msa1000 has two controllers and I am running the active/active firmware. I decided to make different LUNs prefer different controllers, I did:

   set preferred_path this_controller 1 2 3
   set preferred_path other_controller 4 5

Setup the SAN switch

On my setup I have a SAN switch in the blade chassis I am using that is an HP rebranded Brocade switch. I setup "zones" to connect each host to the msa. Here's a short list of what I did:


I also figured out how to update the msa1000/1500 firmware using the serial console, so you can do it on OSes they don't provide tools for (like Debian, the BSDs, etc).
Matt Taggart <matt@lackof.org>
2007-10-24