TUTORIAL: Extend SERVERware Mirror/Cluster storage
Adding storage capacity is an essential step to meet the growing needs of your data and ensure business continuity. In this guide, we will explore the process of expanding storage by adding two identical disks, while preserving redundancy to ensure system reliability.
Carefully follow each step to optimize and maintain the performance of your SERVERware infrastructure.
Let's begin with the hardware side. You need to insert "2" identical storage devices into the empty bay of the storage host (1 in each server). To maintain storage redundancy, adding 2 identical devices is always preferred, thereby extending the storage as a redundant network.
In the event of active hardware RAID on the storage host, adding new devices to RAID “0” must be done via remote management (iLO, iDRAC, IPMI) or directly on the hardware, if physical access is available.
Let's now move on to the software part:
Use the following command to view the current configuration of the storage pool: zpool status.
zpool status pool: NETSTOR state: ONLINE scan: resilvered 728M in 0h0m with 0 errors on Tue Dec 6 16:13:09 2016 config: NAME STATE READ WRITE CKSUM NETSTOR ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 SW3-NETSTOR-SRV1-1 ONLINE 0 0 0 SW3-NETSTOR-SRV2-1 ONLINE 0 0 0 errors: No known data errors In the system example, we currently have "2" storage units in the NETSTOR pool, configured as a mirror under the name mirror-0.
Once we have gathered information about the existing storage devices, we can proceed with formatting and partitioning the new disks.
It is essential to create a partition table on these new storage devices, which will then be combined into mirror-1 within the same NETSTOR pool…
In order to find out the block name assigned by the system to the new storage device, please use the following command ls.
Notice line 11; in our example, this is the name of the new block:
ls -lah /dev/disk/by-id drwxr-xr-x 2 root root 400 Srp 24 13:42 . drwxr-xr-x 8 root root 160 Srp 24 13:28 .. lrwxrwxrwx 1 root root 9 Srp 24 13:30 ata-INTEL_SSDSC2BB080G4_BTWL3405084Y080KGN -> ../../sda lrwxrwxrwx 1 root root 10 Srp 24 13:30 ata-INTEL_SSDSC2BB080G4_BTWL3405084Y080KGN-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 Srp 24 13:30 ata-INTEL_SSDSC2BB080G4_BTWL3405084Y080KGN-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 Srp 24 13:30 ata-INTEL_SSDSC2BB080G4_BTWL3405084Y080KGN-part9 -> ../../sda9 lrwxrwxrwx 1 root root 9 Srp 24 13:30 ata-ST31000520AS_5VX0BZPV -> ../../sdb lrwxrwxrwx 1 root root 10 Srp 24 13:30 ata-ST31000520AS_5VX0BZPV-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 9 Srp 24 13:42 ata-WDC_WD10JFCX-68N6GN0_WD-WXK1E6458WKX -> ../../sdd lrwxrwxrwx 1 root root 9 Srp 24 13:30 scsi-360000000000000000e00000000010001 -> ../../sdc lrwxrwxrwx 1 root root 10 Srp 24 13:30 scsi-360000000000000000e00000000010001-part1 -> ../../sdc1 lrwxrwxrwx 1 root root 9 Srp 24 13:42 wwn-0x11769037186453098497x -> ../../sdd lrwxrwxrwx 1 root root 9 Srp 24 13:30 wwn-0x3623791645033518541x -> ../../sda lrwxrwxrwx 1 root root 10 Srp 24 13:30 wwn-0x3623791645033518541x-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 Srp 24 13:30 wwn-0x3623791645033518541x-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 Srp 24 13:30 wwn-0x3623791645033518541x-part9 -> ../../sda9 lrwxrwxrwx 1 root root 9 Srp 24 13:30 wwn-0x60000000000000000e00000000010001 -> ../../sdc lrwxrwxrwx 1 root root 10 Srp 24 13:30 wwn-0x60000000000000000e00000000010001-part1 -> ../../sdc1 lrwxrwxrwx 1 root root 9 Srp 24 13:30 wwn-0x9104338722358317056x -> ../../sdb lrwxrwxrwx 1 root root 10 Srp 24 13:30 wwn-0x9104338722358317056x-part1 -> ../../sdb1 Now that we have the block name, we can create a table, a partition, and prepare the disk for use.
NOTE:
In the example above, we displayed storage devices without hardware RAID enabled and when this is the case, it is easy to determine the new hardware by the device identifier "68N6GN0_WD-WXK1E6458WKX".
Furthermore, “zpool status -L NETSTOR” will display the pool with the devices in blocks instead of the partition label.
- The other option is to read the serial number from the server's KVM console, which also contains information about the bay used for the device.
- Assuming you know the SERIAL of the new storage device, you can use this command to obtain the serial numbers of the block devices and compare them, from the console: udevadm info –query=all –name=/dev/sdx | grep ID_SERIAL
- The SERVERware installation wizard has information about the matrix that includes the serial numbers of the storage devices already used in the pool.
We are now going to create a partition table and a label:
Use parted to create a partition table for a new logical drive:
parted /dev/ --script -- mktable gpt Now create a new label.
IMPORTANT: the label must be named in the following format: SW3-NETSTOR-SRVx-y.
Where “SRVx” corresponds to the server number and “-y” to the disk number.
Thus, in our example (SW3-NETSTOR-SRV1-2):
- SW3-NETSTOR-SRV1 – this is the virtual disk on SERVER 1
- -2 is the disk number (disk 2)
Now add a label to the new disk.
In our example:
parted /dev/ --script -- mkpart "SW3-NETSTOR-SRV1-2" 1 -1 Now update the SERVERware configuration file to determine which block device to use.
Edit the configuration file to add the location of the secondary disk:
nano /etc/sysmonit/mirror.cfg Add a new storage name separated by commas after the existing storage name.
In our example, this will be:
"SW3-NETSTOR-SRV1-1", "SW3-NETSTOR-SRV1-2" In our example, the file then looks like this (lines 23 & 33):
{ "name": "ComaA", "timeout": 15, "virtaul_ifaces": [ { "name": "br0", "address": "192.168.200.22" }, { "name": "bondSAN", "address": "192.168.20.22" } ], "storage": { "pool_name": "NETSTOR", "nodes": [ { "id": "9b41c9b2ee1cb5eb47917f4d301cf9aa", "address": "2.2.2.20", "port": 4420, "nvme_targets": [ "SW3-NETSTOR-SRV1-1", "SW3-NETSTOR-SRV1-2" ], "subsystem": "sw-mirror" }, { "id": "13da151e3e1e486959db9c08dcb76458", "address": "2.2.2.21", "port": 4420, "nvme_targets": [ "SW3-NETSTOR-SRV2-1", "SW3-NETSTOR-SRV2-2" ], "subsystem": "sw-mirror" } ] } Edit the file and apply the change (CTRL+O & CTRL+X).
We now need to export this new storage over the network so that the primary server can see the new device.
In our example:
sw-nvme expand-pool --path /dev/disk/by-id/ata-WDC_WD10JFCX-68N6GN0_WD-WXK1E6458WKX NOTE:
All the steps from the beginning of this guide up to this point must be performed for the primary server in order to avoid any loss in case of failover.
When the same steps are performed on the primary storage server, we continue to add new storage spaces to the NETSTOR pool.
We can see the state of the zpool:
zpool status pool: NETSTOR state: ONLINE scan: scrub in progress since Wed Dec 9 16:08:22 2020 1,72G scanned at 587M/s, 28,5K issued at 9,50K/s, 114G total 0B repaired, 0,00% done, no estimated completion time config: NAME STATE READ WRITE CKSUM NETSTOR ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 SW3-NETSTOR-SRV1-1 ONLINE 0 0 0 SW3-NETSTOR-SRV2-1 ONLINE 0 0 0 errors: No known data errors We now need to add new logical drives to our pool.
You must be careful with this command. Verify the logical drive names to make sure you have the correct name.
zpool add NETSTOR mirror /dev/disk/by-partlabel/SW3-NETSTOR-SRV1-2 /dev/disk/by-partlabel/SW3-NETSTOR-SRV2-2 -f zpool status pool: NETSTOR state: ONLINE scan: resilvered 728M in 0h0m with 0 errors on Tue Dec 6 16:13:09 2016 config: NAME STATE READ WRITE CKSUM NETSTOR ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 SW3-NETSTOR-SRV1-1 ONLINE 0 0 0 SW3-NETSTOR-SRV2-1 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 SW3-NETSTOR-SRV1-2 ONLINE 0 0 0 SW3-NETSTOR-SRV2-2 ONLINE 0 0 0 errors: No known data errors You must wait until the zpool has finished its resilvering.
You have now expanded the storage of your SERVERware disk pool.

