Storage Configuration

Joe Kaiser edited this page Jan 25, 2018 · 7 revisions

Storage Controller Configuration

Stacki manages storage at both the Partition level and the hardware RAID controller level.

There are two ways to configure a storage controller: using a spreadsheet and the command line.

Using a spreadsheet is easier and a Stacki best practice, so, use a spreadsheet.

Raid Controllers

Stacki can automatically configure LSI MegaRAID controllers.

This allows you to not ever have to touch a keyboard/mouse/console to configure your LSI RAID card.

All other controllers require proprietary CLI interfaces which we can no longer distribute because Stacki is now fully open source. Sorry about that?

There are also a number of on-board RAID controllers that do "Fake Raid." Stacki can't talk to those because, again, proprietary crap.

"Fake Raid" is software raid done with a hardware BIOS config. If you're not dual booting Windows and Linux, then it's colossally stupid to enable it deliberately. Turn it off and do real Linux software raid, which we can do easily.

Spreadsheet

The configuration of disk controllers can be specified in a spreadsheet with the following columns:

  1. Name. A host name, appliance type or global.
  2. Slot. The slot of a specific disk in the array.
  3. Raid Level. The RAID level for the disks. This can be 0, 1, 10, 5, 6, 50, 60.
  4. Array Id. The order in which the RAID groups will be constructed.
  5. Options. Any additional options to be passed on to the storcli or MegaRaid command.

A sample spreadsheet is shown below.

NAMESLOTRAID LEVELARRAY IDOPTIONS
global011
111
*0*
backend0601
1601
2601
3601
4601
5601
6601
7601
8601
9601
10601
11601
12Hotspare1
backend-lsi-0-1012size=136gb force
1312
113
213
3101
4101
5101
6hotspare1
7101

Note: Example spreadsheets for controller configuration are also available on your frontend in /opt/stack/share/examples/spreadsheets. Look for files with 'controller' in the name.

The Name column can contain a specific host name (e.g., backend-lsi-0-1), an appliance type (e.g., backend) or it can be set to global.

  1. In the sample spreadsheet, the default configuration is global

    1. The first logical disk (the Linux kernel will see this as sda) is a RAID 1 mirror composed of the disks in slot 0 and 1
    2. The remaining disks (the disks in slots 2 and up) will be configured as individual RAID 0 disks. This is analogous to setting up the controller in JBOD mode. We specify this with the wildcard symbol "*" for the Slot and Array Id cells. Wildcards are useful when your backend hosts have different number of disks drives.
  2. The next configuration is for all backend hosts.

    1. The first logical disk (sda) will be a RAID 1 and it will be constructed with the disk in slot 5 and the disk in slot 15.
    2. The second logical disk (sdb) will be a RAID 5 composed of the disks in slots 0 through 4.
    3. The third logical disk (sdc) will be a RAID 5 composed of the disks in slots 16 through 21.
    4. The fourth logical disk (sdd) will be a RAID 6 composed of the disks in slots 6 through 12 and the disks in slots 13 and 14 will be hot spares associated with only this array.
    5. The disks in slots 22 and 23 are designated as hot spares that can be used as replacements for any failed drive in any array.

    Note: When using RAID 10, the MegaRAID controller has a span limit of 8 spans. By default, Stacki configures each span to be 2 drives wide. This will limit the total number of disks in a RAID10 to 16 disks.

  3. The next configuration is for the host named backend-lsi-0-1.

    1. This first logical disk(sda) is a RAID 10 set composed of disks 3 through 7
    2. The second logical disk(sdb) is a RAID 1 set with disks 0, and 13 with a size of 136 GB.
    3. The third logical disk(sdc) is a RAID 1 set with disks 1, and 2.

    Note: This configuration is for an LSI controller that uses storcli as the primary configuration utility.

When you are finished editing your spreadsheet, save it as a CSV file, then copy the CSV file to your frontend. Then, load the CSV file into the database on the frontend by executing:

# stack load storage controller file=controller.csv

If the controller spreadsheet contains advanced configuration, the force=y argument will need to be appended to the above command:

# stack load storage controller file=controller.csv force=y

You can view your storage controller configuration by executing:

# stack list storage controller

The nukecontroller attribute

A host's hardware RAID controller will only be reconfigured if the nukecontroller attribute is set to true. As an example, to set the nukecontroller attribute for host backend-0-0, execute:

# stack set host attr backend-0-0 attr=nukecontroller value=true

Then, the next time backend-0-0 is installed, it will remove the current hardware RAID controller configuration, then configure it as you specified in your spreadsheet.

Like the nukedisks attribute, nukecontroller is set to false on the initial installation of a backend node. If the RAID controller has been configured by hand with a keyboard and monitor, that configuration is safe unless the nukecontroller attribute is set to true.

After the host has completed installation, the nukecontroller attribute for that host is reset to false.

This ensures that the controller will not be reconfigured on the next installation.

Command line

The command line tools can do that same thing that using a spreadsheet does. So if you prefer typing the same command over and over with only slight changes, look at the "storage controller" commands:

# stack | grep "storage controller"
add storage controller {scope} [adapter=int] [arrayid=string] [enclosure=int] [hotspare=int] [raidlevel=int] [slot=int]
dump storage controller
list storage controller [host]
load storage controller [file=string] [processor=string]
remove storage controller {scope} [adapter=int] [enclosure=int] [slot=int]
report host storage controller {host}

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Storage Configuration

Joe Kaiser edited this page Jan 25, 2018 · 7 revisions

Storage Controller Configuration

Stacki manages storage at both the Partition level and the hardware RAID controller level.

There are two ways to configure a storage controller: using a spreadsheet and the command line.

Using a spreadsheet is easier and a Stacki best practice, so, use a spreadsheet.

Raid Controllers

Stacki can automatically configure LSI MegaRAID controllers.

This allows you to not ever have to touch a keyboard/mouse/console to configure your LSI RAID card.

All other controllers require proprietary CLI interfaces which we can no longer distribute because Stacki is now fully open source. Sorry about that?

There are also a number of on-board RAID controllers that do "Fake Raid." Stacki can't talk to those because, again, proprietary crap.

"Fake Raid" is software raid done with a hardware BIOS config. If you're not dual booting Windows and Linux, then it's colossally stupid to enable it deliberately. Turn it off and do real Linux software raid, which we can do easily.

Spreadsheet

The configuration of disk controllers can be specified in a spreadsheet with the following columns:

  1. Name. A host name, appliance type or global.
  2. Slot. The slot of a specific disk in the array.
  3. Raid Level. The RAID level for the disks. This can be 0, 1, 10, 5, 6, 50, 60.
  4. Array Id. The order in which the RAID groups will be constructed.
  5. Options. Any additional options to be passed on to the storcli or MegaRaid command.

A sample spreadsheet is shown below.

NAMESLOTRAID LEVELARRAY IDOPTIONS
global011
111
*0*
backend0601
1601
2601
3601
4601
5601
6601
7601
8601
9601
10601
11601
12Hotspare1
backend-lsi-0-1012size=136gb force
1312
113
213
3101
4101
5101
6hotspare1
7101

Note: Example spreadsheets for controller configuration are also available on your frontend in /opt/stack/share/examples/spreadsheets. Look for files with 'controller' in the name.

The Name column can contain a specific host name (e.g., backend-lsi-0-1), an appliance type (e.g., backend) or it can be set to global.

  1. In the sample spreadsheet, the default configuration is global

    1. The first logical disk (the Linux kernel will see this as sda) is a RAID 1 mirror composed of the disks in slot 0 and 1
    2. The remaining disks (the disks in slots 2 and up) will be configured as individual RAID 0 disks. This is analogous to setting up the controller in JBOD mode. We specify this with the wildcard symbol "*" for the Slot and Array Id cells. Wildcards are useful when your backend hosts have different number of disks drives.
  2. The next configuration is for all backend hosts.

    1. The first logical disk (sda) will be a RAID 1 and it will be constructed with the disk in slot 5 and the disk in slot 15.
    2. The second logical disk (sdb) will be a RAID 5 composed of the disks in slots 0 through 4.
    3. The third logical disk (sdc) will be a RAID 5 composed of the disks in slots 16 through 21.
    4. The fourth logical disk (sdd) will be a RAID 6 composed of the disks in slots 6 through 12 and the disks in slots 13 and 14 will be hot spares associated with only this array.
    5. The disks in slots 22 and 23 are designated as hot spares that can be used as replacements for any failed drive in any array.

    Note: When using RAID 10, the MegaRAID controller has a span limit of 8 spans. By default, Stacki configures each span to be 2 drives wide. This will limit the total number of disks in a RAID10 to 16 disks.

  3. The next configuration is for the host named backend-lsi-0-1.

    1. This first logical disk(sda) is a RAID 10 set composed of disks 3 through 7
    2. The second logical disk(sdb) is a RAID 1 set with disks 0, and 13 with a size of 136 GB.
    3. The third logical disk(sdc) is a RAID 1 set with disks 1, and 2.

    Note: This configuration is for an LSI controller that uses storcli as the primary configuration utility.

When you are finished editing your spreadsheet, save it as a CSV file, then copy the CSV file to your frontend. Then, load the CSV file into the database on the frontend by executing:

# stack load storage controller file=controller.csv

If the controller spreadsheet contains advanced configuration, the force=y argument will need to be appended to the above command:

# stack load storage controller file=controller.csv force=y

You can view your storage controller configuration by executing:

# stack list storage controller

The nukecontroller attribute

A host's hardware RAID controller will only be reconfigured if the nukecontroller attribute is set to true. As an example, to set the nukecontroller attribute for host backend-0-0, execute:

# stack set host attr backend-0-0 attr=nukecontroller value=true

Then, the next time backend-0-0 is installed, it will remove the current hardware RAID controller configuration, then configure it as you specified in your spreadsheet.

Like the nukedisks attribute, nukecontroller is set to false on the initial installation of a backend node. If the RAID controller has been configured by hand with a keyboard and monitor, that configuration is safe unless the nukecontroller attribute is set to true.

After the host has completed installation, the nukecontroller attribute for that host is reset to false.

This ensures that the controller will not be reconfigured on the next installation.

Command line

The command line tools can do that same thing that using a spreadsheet does. So if you prefer typing the same command over and over with only slight changes, look at the "storage controller" commands:

# stack | grep "storage controller"
add storage controller {scope} [adapter=int] [arrayid=string] [enclosure=int] [hotspare=int] [raidlevel=int] [slot=int]
dump storage controller
list storage controller [host]
load storage controller [file=string] [processor=string]
remove storage controller {scope} [adapter=int] [enclosure=int] [slot=int]
report host storage controller {host}

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Storage Configuration

Joe Kaiser edited this page Jan 25, 2018 · 7 revisions

Storage Controller Configuration

Stacki manages storage at both the Partition level and the hardware RAID controller level.

There are two ways to configure a storage controller: using a spreadsheet and the command line.

Using a spreadsheet is easier and a Stacki best practice, so, use a spreadsheet.

Raid Controllers

Stacki can automatically configure LSI MegaRAID controllers.

This allows you to not ever have to touch a keyboard/mouse/console to configure your LSI RAID card.

All other controllers require proprietary CLI interfaces which we can no longer distribute because Stacki is now fully open source. Sorry about that?

There are also a number of on-board RAID controllers that do "Fake Raid." Stacki can't talk to those because, again, proprietary crap.

"Fake Raid" is software raid done with a hardware BIOS config. If you're not dual booting Windows and Linux, then it's colossally stupid to enable it deliberately. Turn it off and do real Linux software raid, which we can do easily.

Spreadsheet

The configuration of disk controllers can be specified in a spreadsheet with the following columns:

  1. Name. A host name, appliance type or global.
  2. Slot. The slot of a specific disk in the array.
  3. Raid Level. The RAID level for the disks. This can be 0, 1, 10, 5, 6, 50, 60.
  4. Array Id. The order in which the RAID groups will be constructed.
  5. Options. Any additional options to be passed on to the storcli or MegaRaid command.

A sample spreadsheet is shown below.

NAMESLOTRAID LEVELARRAY IDOPTIONS
global011
111
*0*
backend0601
1601
2601
3601
4601
5601
6601
7601
8601
9601
10601
11601
12Hotspare1
backend-lsi-0-1012size=136gb force
1312
113
213
3101
4101
5101
6hotspare1
7101

Note: Example spreadsheets for controller configuration are also available on your frontend in /opt/stack/share/examples/spreadsheets. Look for files with 'controller' in the name.

The Name column can contain a specific host name (e.g., backend-lsi-0-1), an appliance type (e.g., backend) or it can be set to global.

  1. In the sample spreadsheet, the default configuration is global

    1. The first logical disk (the Linux kernel will see this as sda) is a RAID 1 mirror composed of the disks in slot 0 and 1
    2. The remaining disks (the disks in slots 2 and up) will be configured as individual RAID 0 disks. This is analogous to setting up the controller in JBOD mode. We specify this with the wildcard symbol "*" for the Slot and Array Id cells. Wildcards are useful when your backend hosts have different number of disks drives.
  2. The next configuration is for all backend hosts.

    1. The first logical disk (sda) will be a RAID 1 and it will be constructed with the disk in slot 5 and the disk in slot 15.
    2. The second logical disk (sdb) will be a RAID 5 composed of the disks in slots 0 through 4.
    3. The third logical disk (sdc) will be a RAID 5 composed of the disks in slots 16 through 21.
    4. The fourth logical disk (sdd) will be a RAID 6 composed of the disks in slots 6 through 12 and the disks in slots 13 and 14 will be hot spares associated with only this array.
    5. The disks in slots 22 and 23 are designated as hot spares that can be used as replacements for any failed drive in any array.

    Note: When using RAID 10, the MegaRAID controller has a span limit of 8 spans. By default, Stacki configures each span to be 2 drives wide. This will limit the total number of disks in a RAID10 to 16 disks.

  3. The next configuration is for the host named backend-lsi-0-1.

    1. This first logical disk(sda) is a RAID 10 set composed of disks 3 through 7
    2. The second logical disk(sdb) is a RAID 1 set with disks 0, and 13 with a size of 136 GB.
    3. The third logical disk(sdc) is a RAID 1 set with disks 1, and 2.

    Note: This configuration is for an LSI controller that uses storcli as the primary configuration utility.

When you are finished editing your spreadsheet, save it as a CSV file, then copy the CSV file to your frontend. Then, load the CSV file into the database on the frontend by executing:

# stack load storage controller file=controller.csv

If the controller spreadsheet contains advanced configuration, the force=y argument will need to be appended to the above command:

# stack load storage controller file=controller.csv force=y

You can view your storage controller configuration by executing:

# stack list storage controller

The nukecontroller attribute

A host's hardware RAID controller will only be reconfigured if the nukecontroller attribute is set to true. As an example, to set the nukecontroller attribute for host backend-0-0, execute:

# stack set host attr backend-0-0 attr=nukecontroller value=true

Then, the next time backend-0-0 is installed, it will remove the current hardware RAID controller configuration, then configure it as you specified in your spreadsheet.

Like the nukedisks attribute, nukecontroller is set to false on the initial installation of a backend node. If the RAID controller has been configured by hand with a keyboard and monitor, that configuration is safe unless the nukecontroller attribute is set to true.

After the host has completed installation, the nukecontroller attribute for that host is reset to false.

This ensures that the controller will not be reconfigured on the next installation.

Command line

The command line tools can do that same thing that using a spreadsheet does. So if you prefer typing the same command over and over with only slight changes, look at the "storage controller" commands:

# stack | grep "storage controller"
add storage controller {scope} [adapter=int] [arrayid=string] [enclosure=int] [hotspare=int] [raidlevel=int] [slot=int]
dump storage controller
list storage controller [host]
load storage controller [file=string] [processor=string]
remove storage controller {scope} [adapter=int] [enclosure=int] [slot=int]
report host storage controller {host}

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Storage Configuration

Joe Kaiser edited this page Jan 25, 2018 · 7 revisions

Storage Controller Configuration

Stacki manages storage at both the Partition level and the hardware RAID controller level.

There are two ways to configure a storage controller: using a spreadsheet and the command line.

Using a spreadsheet is easier and a Stacki best practice, so, use a spreadsheet.

Raid Controllers

Stacki can automatically configure LSI MegaRAID controllers.

This allows you to not ever have to touch a keyboard/mouse/console to configure your LSI RAID card.

All other controllers require proprietary CLI interfaces which we can no longer distribute because Stacki is now fully open source. Sorry about that?

There are also a number of on-board RAID controllers that do "Fake Raid." Stacki can't talk to those because, again, proprietary crap.

"Fake Raid" is software raid done with a hardware BIOS config. If you're not dual booting Windows and Linux, then it's colossally stupid to enable it deliberately. Turn it off and do real Linux software raid, which we can do easily.

Spreadsheet

The configuration of disk controllers can be specified in a spreadsheet with the following columns:

  1. Name. A host name, appliance type or global.
  2. Slot. The slot of a specific disk in the array.
  3. Raid Level. The RAID level for the disks. This can be 0, 1, 10, 5, 6, 50, 60.
  4. Array Id. The order in which the RAID groups will be constructed.
  5. Options. Any additional options to be passed on to the storcli or MegaRaid command.

A sample spreadsheet is shown below.

NAMESLOTRAID LEVELARRAY IDOPTIONS
global011
111
*0*
backend0601
1601
2601
3601
4601
5601
6601
7601
8601
9601
10601
11601
12Hotspare1
backend-lsi-0-1012size=136gb force
1312
113
213
3101
4101
5101
6hotspare1
7101

Note: Example spreadsheets for controller configuration are also available on your frontend in /opt/stack/share/examples/spreadsheets. Look for files with 'controller' in the name.

The Name column can contain a specific host name (e.g., backend-lsi-0-1), an appliance type (e.g., backend) or it can be set to global.

  1. In the sample spreadsheet, the default configuration is global

    1. The first logical disk (the Linux kernel will see this as sda) is a RAID 1 mirror composed of the disks in slot 0 and 1
    2. The remaining disks (the disks in slots 2 and up) will be configured as individual RAID 0 disks. This is analogous to setting up the controller in JBOD mode. We specify this with the wildcard symbol "*" for the Slot and Array Id cells. Wildcards are useful when your backend hosts have different number of disks drives.
  2. The next configuration is for all backend hosts.

    1. The first logical disk (sda) will be a RAID 1 and it will be constructed with the disk in slot 5 and the disk in slot 15.
    2. The second logical disk (sdb) will be a RAID 5 composed of the disks in slots 0 through 4.
    3. The third logical disk (sdc) will be a RAID 5 composed of the disks in slots 16 through 21.
    4. The fourth logical disk (sdd) will be a RAID 6 composed of the disks in slots 6 through 12 and the disks in slots 13 and 14 will be hot spares associated with only this array.
    5. The disks in slots 22 and 23 are designated as hot spares that can be used as replacements for any failed drive in any array.

    Note: When using RAID 10, the MegaRAID controller has a span limit of 8 spans. By default, Stacki configures each span to be 2 drives wide. This will limit the total number of disks in a RAID10 to 16 disks.

  3. The next configuration is for the host named backend-lsi-0-1.

    1. This first logical disk(sda) is a RAID 10 set composed of disks 3 through 7
    2. The second logical disk(sdb) is a RAID 1 set with disks 0, and 13 with a size of 136 GB.
    3. The third logical disk(sdc) is a RAID 1 set with disks 1, and 2.

    Note: This configuration is for an LSI controller that uses storcli as the primary configuration utility.

When you are finished editing your spreadsheet, save it as a CSV file, then copy the CSV file to your frontend. Then, load the CSV file into the database on the frontend by executing:

# stack load storage controller file=controller.csv

If the controller spreadsheet contains advanced configuration, the force=y argument will need to be appended to the above command:

# stack load storage controller file=controller.csv force=y

You can view your storage controller configuration by executing:

# stack list storage controller

The nukecontroller attribute

A host's hardware RAID controller will only be reconfigured if the nukecontroller attribute is set to true. As an example, to set the nukecontroller attribute for host backend-0-0, execute:

# stack set host attr backend-0-0 attr=nukecontroller value=true

Then, the next time backend-0-0 is installed, it will remove the current hardware RAID controller configuration, then configure it as you specified in your spreadsheet.

Like the nukedisks attribute, nukecontroller is set to false on the initial installation of a backend node. If the RAID controller has been configured by hand with a keyboard and monitor, that configuration is safe unless the nukecontroller attribute is set to true.

After the host has completed installation, the nukecontroller attribute for that host is reset to false.

This ensures that the controller will not be reconfigured on the next installation.

Command line

The command line tools can do that same thing that using a spreadsheet does. So if you prefer typing the same command over and over with only slight changes, look at the "storage controller" commands:

# stack | grep "storage controller"
add storage controller {scope} [adapter=int] [arrayid=string] [enclosure=int] [hotspare=int] [raidlevel=int] [slot=int]
dump storage controller
list storage controller [host]
load storage controller [file=string] [processor=string]
remove storage controller {scope} [adapter=int] [enclosure=int] [slot=int]
report host storage controller {host}

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Storage Configuration

Joe Kaiser edited this page Jan 25, 2018 · 7 revisions

Storage Controller Configuration

Stacki manages storage at both the Partition level and the hardware RAID controller level.

There are two ways to configure a storage controller: using a spreadsheet and the command line.

Using a spreadsheet is easier and a Stacki best practice, so, use a spreadsheet.

Raid Controllers

Stacki can automatically configure LSI MegaRAID controllers.

This allows you to not ever have to touch a keyboard/mouse/console to configure your LSI RAID card.

All other controllers require proprietary CLI interfaces which we can no longer distribute because Stacki is now fully open source. Sorry about that?

There are also a number of on-board RAID controllers that do "Fake Raid." Stacki can't talk to those because, again, proprietary crap.

"Fake Raid" is software raid done with a hardware BIOS config. If you're not dual booting Windows and Linux, then it's colossally stupid to enable it deliberately. Turn it off and do real Linux software raid, which we can do easily.

Spreadsheet

The configuration of disk controllers can be specified in a spreadsheet with the following columns:

  1. Name. A host name, appliance type or global.
  2. Slot. The slot of a specific disk in the array.
  3. Raid Level. The RAID level for the disks. This can be 0, 1, 10, 5, 6, 50, 60.
  4. Array Id. The order in which the RAID groups will be constructed.
  5. Options. Any additional options to be passed on to the storcli or MegaRaid command.

A sample spreadsheet is shown below.

NAMESLOTRAID LEVELARRAY IDOPTIONS
global011
111
*0*
backend0601
1601
2601
3601
4601
5601
6601
7601
8601
9601
10601
11601
12Hotspare1
backend-lsi-0-1012size=136gb force
1312
113
213
3101
4101
5101
6hotspare1
7101

Note: Example spreadsheets for controller configuration are also available on your frontend in /opt/stack/share/examples/spreadsheets. Look for files with 'controller' in the name.

The Name column can contain a specific host name (e.g., backend-lsi-0-1), an appliance type (e.g., backend) or it can be set to global.

  1. In the sample spreadsheet, the default configuration is global

    1. The first logical disk (the Linux kernel will see this as sda) is a RAID 1 mirror composed of the disks in slot 0 and 1
    2. The remaining disks (the disks in slots 2 and up) will be configured as individual RAID 0 disks. This is analogous to setting up the controller in JBOD mode. We specify this with the wildcard symbol "*" for the Slot and Array Id cells. Wildcards are useful when your backend hosts have different number of disks drives.
  2. The next configuration is for all backend hosts.

    1. The first logical disk (sda) will be a RAID 1 and it will be constructed with the disk in slot 5 and the disk in slot 15.
    2. The second logical disk (sdb) will be a RAID 5 composed of the disks in slots 0 through 4.
    3. The third logical disk (sdc) will be a RAID 5 composed of the disks in slots 16 through 21.
    4. The fourth logical disk (sdd) will be a RAID 6 composed of the disks in slots 6 through 12 and the disks in slots 13 and 14 will be hot spares associated with only this array.
    5. The disks in slots 22 and 23 are designated as hot spares that can be used as replacements for any failed drive in any array.

    Note: When using RAID 10, the MegaRAID controller has a span limit of 8 spans. By default, Stacki configures each span to be 2 drives wide. This will limit the total number of disks in a RAID10 to 16 disks.

  3. The next configuration is for the host named backend-lsi-0-1.

    1. This first logical disk(sda) is a RAID 10 set composed of disks 3 through 7
    2. The second logical disk(sdb) is a RAID 1 set with disks 0, and 13 with a size of 136 GB.
    3. The third logical disk(sdc) is a RAID 1 set with disks 1, and 2.

    Note: This configuration is for an LSI controller that uses storcli as the primary configuration utility.

When you are finished editing your spreadsheet, save it as a CSV file, then copy the CSV file to your frontend. Then, load the CSV file into the database on the frontend by executing:

# stack load storage controller file=controller.csv

If the controller spreadsheet contains advanced configuration, the force=y argument will need to be appended to the above command:

# stack load storage controller file=controller.csv force=y

You can view your storage controller configuration by executing:

# stack list storage controller

The nukecontroller attribute

A host's hardware RAID controller will only be reconfigured if the nukecontroller attribute is set to true. As an example, to set the nukecontroller attribute for host backend-0-0, execute:

# stack set host attr backend-0-0 attr=nukecontroller value=true

Then, the next time backend-0-0 is installed, it will remove the current hardware RAID controller configuration, then configure it as you specified in your spreadsheet.

Like the nukedisks attribute, nukecontroller is set to false on the initial installation of a backend node. If the RAID controller has been configured by hand with a keyboard and monitor, that configuration is safe unless the nukecontroller attribute is set to true.

After the host has completed installation, the nukecontroller attribute for that host is reset to false.

This ensures that the controller will not be reconfigured on the next installation.

Command line

The command line tools can do that same thing that using a spreadsheet does. So if you prefer typing the same command over and over with only slight changes, look at the "storage controller" commands:

# stack | grep "storage controller"
add storage controller {scope} [adapter=int] [arrayid=string] [enclosure=int] [hotspare=int] [raidlevel=int] [slot=int]
dump storage controller
list storage controller [host]
load storage controller [file=string] [processor=string]
remove storage controller {scope} [adapter=int] [enclosure=int] [slot=int]
report host storage controller {host}

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Storage Configuration

Joe Kaiser edited this page Jan 25, 2018 · 7 revisions

Storage Controller Configuration

Stacki manages storage at both the Partition level and the hardware RAID controller level.

There are two ways to configure a storage controller: using a spreadsheet and the command line.

Using a spreadsheet is easier and a Stacki best practice, so, use a spreadsheet.

Raid Controllers

Stacki can automatically configure LSI MegaRAID controllers.

This allows you to not ever have to touch a keyboard/mouse/console to configure your LSI RAID card.

All other controllers require proprietary CLI interfaces which we can no longer distribute because Stacki is now fully open source. Sorry about that?

There are also a number of on-board RAID controllers that do "Fake Raid." Stacki can't talk to those because, again, proprietary crap.

"Fake Raid" is software raid done with a hardware BIOS config. If you're not dual booting Windows and Linux, then it's colossally stupid to enable it deliberately. Turn it off and do real Linux software raid, which we can do easily.

Spreadsheet

The configuration of disk controllers can be specified in a spreadsheet with the following columns:

  1. Name. A host name, appliance type or global.
  2. Slot. The slot of a specific disk in the array.
  3. Raid Level. The RAID level for the disks. This can be 0, 1, 10, 5, 6, 50, 60.
  4. Array Id. The order in which the RAID groups will be constructed.
  5. Options. Any additional options to be passed on to the storcli or MegaRaid command.

A sample spreadsheet is shown below.

NAMESLOTRAID LEVELARRAY IDOPTIONS
global011
111
*0*
backend0601
1601
2601
3601
4601
5601
6601
7601
8601
9601
10601
11601
12Hotspare1
backend-lsi-0-1012size=136gb force
1312
113
213
3101
4101
5101
6hotspare1
7101

Note: Example spreadsheets for controller configuration are also available on your frontend in /opt/stack/share/examples/spreadsheets. Look for files with 'controller' in the name.

The Name column can contain a specific host name (e.g., backend-lsi-0-1), an appliance type (e.g., backend) or it can be set to global.

  1. In the sample spreadsheet, the default configuration is global

    1. The first logical disk (the Linux kernel will see this as sda) is a RAID 1 mirror composed of the disks in slot 0 and 1
    2. The remaining disks (the disks in slots 2 and up) will be configured as individual RAID 0 disks. This is analogous to setting up the controller in JBOD mode. We specify this with the wildcard symbol "*" for the Slot and Array Id cells. Wildcards are useful when your backend hosts have different number of disks drives.
  2. The next configuration is for all backend hosts.

    1. The first logical disk (sda) will be a RAID 1 and it will be constructed with the disk in slot 5 and the disk in slot 15.
    2. The second logical disk (sdb) will be a RAID 5 composed of the disks in slots 0 through 4.
    3. The third logical disk (sdc) will be a RAID 5 composed of the disks in slots 16 through 21.
    4. The fourth logical disk (sdd) will be a RAID 6 composed of the disks in slots 6 through 12 and the disks in slots 13 and 14 will be hot spares associated with only this array.
    5. The disks in slots 22 and 23 are designated as hot spares that can be used as replacements for any failed drive in any array.

    Note: When using RAID 10, the MegaRAID controller has a span limit of 8 spans. By default, Stacki configures each span to be 2 drives wide. This will limit the total number of disks in a RAID10 to 16 disks.

  3. The next configuration is for the host named backend-lsi-0-1.

    1. This first logical disk(sda) is a RAID 10 set composed of disks 3 through 7
    2. The second logical disk(sdb) is a RAID 1 set with disks 0, and 13 with a size of 136 GB.
    3. The third logical disk(sdc) is a RAID 1 set with disks 1, and 2.

    Note: This configuration is for an LSI controller that uses storcli as the primary configuration utility.

When you are finished editing your spreadsheet, save it as a CSV file, then copy the CSV file to your frontend. Then, load the CSV file into the database on the frontend by executing:

# stack load storage controller file=controller.csv

If the controller spreadsheet contains advanced configuration, the force=y argument will need to be appended to the above command:

# stack load storage controller file=controller.csv force=y

You can view your storage controller configuration by executing:

# stack list storage controller

The nukecontroller attribute

A host's hardware RAID controller will only be reconfigured if the nukecontroller attribute is set to true. As an example, to set the nukecontroller attribute for host backend-0-0, execute:

# stack set host attr backend-0-0 attr=nukecontroller value=true

Then, the next time backend-0-0 is installed, it will remove the current hardware RAID controller configuration, then configure it as you specified in your spreadsheet.

Like the nukedisks attribute, nukecontroller is set to false on the initial installation of a backend node. If the RAID controller has been configured by hand with a keyboard and monitor, that configuration is safe unless the nukecontroller attribute is set to true.

After the host has completed installation, the nukecontroller attribute for that host is reset to false.

This ensures that the controller will not be reconfigured on the next installation.

Command line

The command line tools can do that same thing that using a spreadsheet does. So if you prefer typing the same command over and over with only slight changes, look at the "storage controller" commands:

# stack | grep "storage controller"
add storage controller {scope} [adapter=int] [arrayid=string] [enclosure=int] [hotspare=int] [raidlevel=int] [slot=int]
dump storage controller
list storage controller [host]
load storage controller [file=string] [processor=string]
remove storage controller {scope} [adapter=int] [enclosure=int] [slot=int]
report host storage controller {host}

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Storage Configuration

Joe Kaiser edited this page Jan 25, 2018 · 7 revisions

Storage Controller Configuration

Stacki manages storage at both the Partition level and the hardware RAID controller level.

There are two ways to configure a storage controller: using a spreadsheet and the command line.

Using a spreadsheet is easier and a Stacki best practice, so, use a spreadsheet.

Raid Controllers

Stacki can automatically configure LSI MegaRAID controllers.

This allows you to not ever have to touch a keyboard/mouse/console to configure your LSI RAID card.

All other controllers require proprietary CLI interfaces which we can no longer distribute because Stacki is now fully open source. Sorry about that?

There are also a number of on-board RAID controllers that do "Fake Raid." Stacki can't talk to those because, again, proprietary crap.

"Fake Raid" is software raid done with a hardware BIOS config. If you're not dual booting Windows and Linux, then it's colossally stupid to enable it deliberately. Turn it off and do real Linux software raid, which we can do easily.

Spreadsheet

The configuration of disk controllers can be specified in a spreadsheet with the following columns:

  1. Name. A host name, appliance type or global.
  2. Slot. The slot of a specific disk in the array.
  3. Raid Level. The RAID level for the disks. This can be 0, 1, 10, 5, 6, 50, 60.
  4. Array Id. The order in which the RAID groups will be constructed.
  5. Options. Any additional options to be passed on to the storcli or MegaRaid command.

A sample spreadsheet is shown below.

NAMESLOTRAID LEVELARRAY IDOPTIONS
global011
111
*0*
backend0601
1601
2601
3601
4601
5601
6601
7601
8601
9601
10601
11601
12Hotspare1
backend-lsi-0-1012size=136gb force
1312
113
213
3101
4101
5101
6hotspare1
7101

Note: Example spreadsheets for controller configuration are also available on your frontend in /opt/stack/share/examples/spreadsheets. Look for files with 'controller' in the name.

The Name column can contain a specific host name (e.g., backend-lsi-0-1), an appliance type (e.g., backend) or it can be set to global.

  1. In the sample spreadsheet, the default configuration is global

    1. The first logical disk (the Linux kernel will see this as sda) is a RAID 1 mirror composed of the disks in slot 0 and 1
    2. The remaining disks (the disks in slots 2 and up) will be configured as individual RAID 0 disks. This is analogous to setting up the controller in JBOD mode. We specify this with the wildcard symbol "*" for the Slot and Array Id cells. Wildcards are useful when your backend hosts have different number of disks drives.
  2. The next configuration is for all backend hosts.

    1. The first logical disk (sda) will be a RAID 1 and it will be constructed with the disk in slot 5 and the disk in slot 15.
    2. The second logical disk (sdb) will be a RAID 5 composed of the disks in slots 0 through 4.
    3. The third logical disk (sdc) will be a RAID 5 composed of the disks in slots 16 through 21.
    4. The fourth logical disk (sdd) will be a RAID 6 composed of the disks in slots 6 through 12 and the disks in slots 13 and 14 will be hot spares associated with only this array.
    5. The disks in slots 22 and 23 are designated as hot spares that can be used as replacements for any failed drive in any array.

    Note: When using RAID 10, the MegaRAID controller has a span limit of 8 spans. By default, Stacki configures each span to be 2 drives wide. This will limit the total number of disks in a RAID10 to 16 disks.

  3. The next configuration is for the host named backend-lsi-0-1.

    1. This first logical disk(sda) is a RAID 10 set composed of disks 3 through 7
    2. The second logical disk(sdb) is a RAID 1 set with disks 0, and 13 with a size of 136 GB.
    3. The third logical disk(sdc) is a RAID 1 set with disks 1, and 2.

    Note: This configuration is for an LSI controller that uses storcli as the primary configuration utility.

When you are finished editing your spreadsheet, save it as a CSV file, then copy the CSV file to your frontend. Then, load the CSV file into the database on the frontend by executing:

# stack load storage controller file=controller.csv

If the controller spreadsheet contains advanced configuration, the force=y argument will need to be appended to the above command:

# stack load storage controller file=controller.csv force=y

You can view your storage controller configuration by executing:

# stack list storage controller

The nukecontroller attribute

A host's hardware RAID controller will only be reconfigured if the nukecontroller attribute is set to true. As an example, to set the nukecontroller attribute for host backend-0-0, execute:

# stack set host attr backend-0-0 attr=nukecontroller value=true

Then, the next time backend-0-0 is installed, it will remove the current hardware RAID controller configuration, then configure it as you specified in your spreadsheet.

Like the nukedisks attribute, nukecontroller is set to false on the initial installation of a backend node. If the RAID controller has been configured by hand with a keyboard and monitor, that configuration is safe unless the nukecontroller attribute is set to true.

After the host has completed installation, the nukecontroller attribute for that host is reset to false.

This ensures that the controller will not be reconfigured on the next installation.

Command line

The command line tools can do that same thing that using a spreadsheet does. So if you prefer typing the same command over and over with only slight changes, look at the "storage controller" commands:

# stack | grep "storage controller"
add storage controller {scope} [adapter=int] [arrayid=string] [enclosure=int] [hotspare=int] [raidlevel=int] [slot=int]
dump storage controller
list storage controller [host]
load storage controller [file=string] [processor=string]
remove storage controller {scope} [adapter=int] [enclosure=int] [slot=int]
report host storage controller {host}

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Storage Configuration

Joe Kaiser edited this page Jan 25, 2018 · 7 revisions

Storage Controller Configuration

Stacki manages storage at both the Partition level and the hardware RAID controller level.

There are two ways to configure a storage controller: using a spreadsheet and the command line.

Using a spreadsheet is easier and a Stacki best practice, so, use a spreadsheet.

Raid Controllers

Stacki can automatically configure LSI MegaRAID controllers.

This allows you to not ever have to touch a keyboard/mouse/console to configure your LSI RAID card.

All other controllers require proprietary CLI interfaces which we can no longer distribute because Stacki is now fully open source. Sorry about that?

There are also a number of on-board RAID controllers that do "Fake Raid." Stacki can't talk to those because, again, proprietary crap.

"Fake Raid" is software raid done with a hardware BIOS config. If you're not dual booting Windows and Linux, then it's colossally stupid to enable it deliberately. Turn it off and do real Linux software raid, which we can do easily.

Spreadsheet

The configuration of disk controllers can be specified in a spreadsheet with the following columns:

  1. Name. A host name, appliance type or global.
  2. Slot. The slot of a specific disk in the array.
  3. Raid Level. The RAID level for the disks. This can be 0, 1, 10, 5, 6, 50, 60.
  4. Array Id. The order in which the RAID groups will be constructed.
  5. Options. Any additional options to be passed on to the storcli or MegaRaid command.

A sample spreadsheet is shown below.

NAMESLOTRAID LEVELARRAY IDOPTIONS
global011
111
*0*
backend0601
1601
2601
3601
4601
5601
6601
7601
8601
9601
10601
11601
12Hotspare1
backend-lsi-0-1012size=136gb force
1312
113
213
3101
4101
5101
6hotspare1
7101

Note: Example spreadsheets for controller configuration are also available on your frontend in /opt/stack/share/examples/spreadsheets. Look for files with 'controller' in the name.

The Name column can contain a specific host name (e.g., backend-lsi-0-1), an appliance type (e.g., backend) or it can be set to global.

  1. In the sample spreadsheet, the default configuration is global

    1. The first logical disk (the Linux kernel will see this as sda) is a RAID 1 mirror composed of the disks in slot 0 and 1
    2. The remaining disks (the disks in slots 2 and up) will be configured as individual RAID 0 disks. This is analogous to setting up the controller in JBOD mode. We specify this with the wildcard symbol "*" for the Slot and Array Id cells. Wildcards are useful when your backend hosts have different number of disks drives.
  2. The next configuration is for all backend hosts.

    1. The first logical disk (sda) will be a RAID 1 and it will be constructed with the disk in slot 5 and the disk in slot 15.
    2. The second logical disk (sdb) will be a RAID 5 composed of the disks in slots 0 through 4.
    3. The third logical disk (sdc) will be a RAID 5 composed of the disks in slots 16 through 21.
    4. The fourth logical disk (sdd) will be a RAID 6 composed of the disks in slots 6 through 12 and the disks in slots 13 and 14 will be hot spares associated with only this array.
    5. The disks in slots 22 and 23 are designated as hot spares that can be used as replacements for any failed drive in any array.

    Note: When using RAID 10, the MegaRAID controller has a span limit of 8 spans. By default, Stacki configures each span to be 2 drives wide. This will limit the total number of disks in a RAID10 to 16 disks.

  3. The next configuration is for the host named backend-lsi-0-1.

    1. This first logical disk(sda) is a RAID 10 set composed of disks 3 through 7
    2. The second logical disk(sdb) is a RAID 1 set with disks 0, and 13 with a size of 136 GB.
    3. The third logical disk(sdc) is a RAID 1 set with disks 1, and 2.

    Note: This configuration is for an LSI controller that uses storcli as the primary configuration utility.

When you are finished editing your spreadsheet, save it as a CSV file, then copy the CSV file to your frontend. Then, load the CSV file into the database on the frontend by executing:

# stack load storage controller file=controller.csv

If the controller spreadsheet contains advanced configuration, the force=y argument will need to be appended to the above command:

# stack load storage controller file=controller.csv force=y

You can view your storage controller configuration by executing:

# stack list storage controller

The nukecontroller attribute

A host's hardware RAID controller will only be reconfigured if the nukecontroller attribute is set to true. As an example, to set the nukecontroller attribute for host backend-0-0, execute:

# stack set host attr backend-0-0 attr=nukecontroller value=true

Then, the next time backend-0-0 is installed, it will remove the current hardware RAID controller configuration, then configure it as you specified in your spreadsheet.

Like the nukedisks attribute, nukecontroller is set to false on the initial installation of a backend node. If the RAID controller has been configured by hand with a keyboard and monitor, that configuration is safe unless the nukecontroller attribute is set to true.

After the host has completed installation, the nukecontroller attribute for that host is reset to false.

This ensures that the controller will not be reconfigured on the next installation.

Command line

The command line tools can do that same thing that using a spreadsheet does. So if you prefer typing the same command over and over with only slight changes, look at the "storage controller" commands:

# stack | grep "storage controller"
add storage controller {scope} [adapter=int] [arrayid=string] [enclosure=int] [hotspare=int] [raidlevel=int] [slot=int]
dump storage controller
list storage controller [host]
load storage controller [file=string] [processor=string]
remove storage controller {scope} [adapter=int] [enclosure=int] [slot=int]
report host storage controller {host}

Clone this wiki locally