Learn › BMC & Server Management › Boot Device Control

Boot Device Control

Final test: the whole Boot Device Control chapter. Read every boot option parameter and record which the firmware implements, capture seven refusals with standard error, learn what chassis bootdev writes from its own error, prove with a raw command and a sibling control that the refusal is the firmware, capture a real boot over the console and pull the option ROM banner and the boot decision out of it, file the genuine Dell boot flags decode, and write the procedure and the report. 25 objectives on a real workstation with a real IPMI 2.0 controller at 10.100.0.2.

Chapter 8. Boot Device Control

This chapter covers the following topics:

What you already know. Chapter 2 controlled host power and established that a command reply is not proof of a transition. Chapter 5 met completion codes 0xC1 and 0xCC and the discipline of capturing a refusal with 2>&1. Chapter 7 captured a boot over the console. This chapter uses all three to answer a question the equipment answers with a refusal.

Objectives. After this chapter you can:

The machine. The controller in this chapter refuses several of the commands taught below, and that is the chapter rather than a defect. Every refusal quoted here was captured on the machine you will get. The host is powered and its firmware carries a network boot ROM, so the boot order this chapter is about is real and visible on the console. Boot takes about 3 minutes. This chapter is free; the machine is yours for 60 minutes and stops itself after 20 minutes idle.

This chapter uses a real Linux workstation and software-emulated IPMI hardware. The protocol requests and replies are real; controller identity, sensor values and host behavior may be seeded or emulated. Supplied physical-hardware captures are labeled separately.

Pre-check 1 of 5

These five questions establish whether you need this chapter in full. Each explanation names the section that covers the point.

Pre-check 2 of 5

Pre-check 3 of 5

Pre-check 4 of 5

Pre-check 5 of 5

8.1 The request, and the chassis device

Goal: assess the requested one-time network boot without changing the saved normal boot order. Read the controller capability list first. The work order asks you to record whether the requested override can actually be verified.

prompt: ops@mgmt:~$ answer: ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 mc info output: Device ID : 0 Device Revision : 3 Firmware Revision : 1.05 IPMI Version : 2.0 Manufacturer ID : 0 Manufacturer Name : Unknown Product ID : 256 (0x0100) Product Name : Unknown (0x100) Device Available : yes Provides Device SDRs : yes Additional Device Support : Sensor Device SDR Repository Device SEL Device FRU Inventory Device IPMB Event Receiver Chassis Device Aux Firmware Rev Info : 0x00 0x00 0x00 0x00 hint: mc has an info subcommand.

Chassis Device is advertised in this capture. That supports investigating chassis operations, but does not promise every command or parameter is implemented. An absent or unexpected capability flag also needs platform documentation and a valid request, not a blanket conclusion.

A one-time override requests the next boot. Verify its application and later consumption or clearing on the actual platform; do not assume a failed PXE attempt has automatically restored the intended disk boot.

Check: keep the difference between an advertised class, a successful override request and an observed boot outcome.

8.1.1 The state before anything

prompt: ops@mgmt:~$ answer: ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 chassis status output: System Power : on Power Overload : false Power Interlock : inactive Main Power Fault : false Power Control Fault : false Power Restore Policy : always-off Last Power Event : Chassis Intrusion : inactive Front-Panel Lockout : inactive Drive Fault : false Cooling/Fan Fault : false hint: chassis has a status subcommand.

Eleven lines and not one of them is about boot. chassis status reports the power state, the fault flags, the restore policy and the intrusion switch. The boot options are a separate command family with their own parameters, and nothing in this block hints at them.

That is worth noticing before you go looking. On a controller where a boot override is not taking effect, this is not the place to check.

8.1.2 The host is running

prompt: ops@mgmt:~$ answer: ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 chassis power status output: Chassis Power is on hint: chassis power takes a status subcommand.

The host is on. Section 8.7 restarts it to watch the firmware choose a boot device, and a machine that is already off would give a power on rather than a reset, which is a different thing.

8.2 Boot options are eight parameters

The single most useful fact in this chapter: the boot options are not one setting. They are a numbered set of parameters, read with Get System Boot Options and written with Set System Boot Options, and a controller may implement some and not others.

ParameterWhat it carries
0Set In Progress, the lock used while a multi-parameter write is under way
1Service Partition Selector
2Service Partition Scan
3BMC Boot Flag Valid Bit Clearing
4Boot Info Acknowledge
5Boot Flags: the valid bit, the persistence bit, the boot mode bit and the device selector
6Boot Initiator Info
7Boot Initiator Mailbox

Parameter 5 is the one that matters. Everything a boot override does lives in its five data bytes.

chassis bootparam get takes a parameter number:

prompt: ops@mgmt:~$ answer: ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 chassis bootparam get 1 output: Boot parameter version: 1 Boot parameter 1 is valid/unlocked Boot parameter data: 00 Service Partition Selector : unspecified hint: chassis bootparam get takes the parameter number.

A real decode. Boot parameter 1 is valid/unlocked, the raw data byte, and ipmitool's reading of it: the service partition selector is unspecified.

This is the answer a parameter gives when the firmware implements it. Hold the shape in mind, because section 8.3 shows what the other answer looks like.

Objective 4 files this with > ~/boot/param1.txt 2>&1. The 2>&1 is habit here rather than necessity, and habit is the point: the same command against a different parameter needs it.

8.2.1 The boot info acknowledge

prompt: ops@mgmt:~$ answer: ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 chassis bootparam get 4 output: Boot parameter version: 1 Boot parameter 4 is valid/unlocked Boot parameter data: Boot Info Acknowledge :

Also implemented, and worth reading rather than skipping.

Boot Info Acknowledge is how the firmware and the operating system tell the controller they have seen a boot override. Each line is a party that has acknowledged: the operating system or service partition, the OS loader, and BIOS/POST.

It exists because a boot override is consumed rather than applied. The controller sets the flags, the firmware reads them at the next start, and the acknowledge is how the controller learns they were read. When an override appears ineffective, this parameter is one clue. Its interpretation depends on the platform's acknowledgement and clearing rules; corroborate it with the boot flags and console rather than treating missing acknowledgement as proof of one failed component.

8.3 A parameter this firmware does not have

Goal: compare a second parameter read with the earlier successful reads. The title describes this lab's limitation; the response still needs precise interpretation.

prompt: ops@mgmt:~$ answer: ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 chassis bootparam get 0 output: Get Chassis Boot Parameter 0 failed: Invalid data field in request hint: The same command with parameter number 0.

The response reports 0xCC, Invalid data field in request. It does not name the offending field. Keep the exact request and compare it with platform documentation and controlled reads before concluding which capability is missing.

Check: do not save this as a successful parameter capture. The next step tests parameter 5, which matters for the requested override.

8.3.1 The boot flags

Goal: read the flags that carry an IPMI boot-device override. Parameter 5 is the important read before attempting this change.

prompt: ops@mgmt:~$ answer: ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 chassis bootparam get 5 output: Get Chassis Boot Parameter 5 failed: Invalid data field in request hint: The same command with the parameter number for the boot flags.

The controller returned Invalid data field in request. The requested flags were not read successfully, so we do not yet have evidence that an override can be set or verified.

The response alone does not identify the rejected field or prove the entire feature is absent. Check the request format, platform support and interface context. The following controlled reads and writes document this lab's limitation.

Check: keep this error as a result, not as a successful boot-flags capture. Do not restart the host expecting PXE from this failed read.

8.3.2 Capturing the refusal

A refusal is written to standard error, which a plain > does not capture. Objective 7 is that refusal in a file, and without 2>&1 the file closes empty:

prompt: ops@mgmt:~$ answer: ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 chassis bootparam get 5 > ~/boot/param5.txt 2>&1 output: hint: The same command redirected into the file with standard error captured by 2>&1.

The file holds:

Get Chassis Boot Parameter 5 failed: Invalid data field in request

Seven of this lab's twenty-five objectives are refusals, and every one of them needs the redirect. A file that closes empty is the single most common way to lose an objective here, and it is also how a real finding gets lost from a real report.

8.3.3 The whole sweep

Two parameters answer and one does not, so far. The useful question is which of the eight this firmware has, and a loop answers it in one command. for p in 0 1 2 3 4 5 6 7; do ...; done runs the body once per value, and head -4 keeps each answer short:

prompt: ops@mgmt:~$ answer: for p in 0 1 2 3 4 5 6 7; do printf '## parameter %s\n' $p; ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 chassis bootparam get $p 2>&1 | head -4; done output:

parameter 0

Get Chassis Boot Parameter 0 failed: Invalid data field in request

parameter 1

Boot parameter version: 1 Boot parameter 1 is valid/unlocked Boot parameter data: 00 Service Partition Selector : unspecified

parameter 2

Get Chassis Boot Parameter 2 failed: Invalid data field in request

parameter 3

Get Chassis Boot Parameter 3 failed: Invalid data field in request

parameter 4

Boot parameter version: 1 Boot parameter 4 is valid/unlocked Boot parameter data: Boot Info Acknowledge :

parameter 5

Get Chassis Boot Parameter 5 failed: Invalid data field in request

parameter 6

Get Chassis Boot Parameter 6 failed: Invalid data field in request

parameter 7

Get Chassis Boot Parameter 7 failed: Invalid data field in request hint: A for loop over the eight parameter numbers, each read piped into head, with a printf label in front of each.

Two of eight. Parameters 1 and 4 answer; 0, 2, 3, 5, 6 and 7 all refuse with the same completion code.

A sweep like this is worth running on any controller before you rely on a capability, and it is three lines of shell. The alternative is discovering the gap during a maintenance window.

Note that 2>&1 sits inside the loop, on the command whose error you want. Objective 8 redirects the whole loop as well, which is the outer > ~/boot/sweep.txt 2>&1 after done.

8.4 The convenience command

chassis bootdev is what an operator actually types. It takes a target name rather than five data bytes, and it is the command the change request would be carried out with.

prompt: ops@mgmt:~$ answer: ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 chassis bootdev pxe output: Set Chassis Boot Parameter 4 failed: Invalid data field in request Set Chassis Boot Parameter 5 failed: Invalid data field in request hint: chassis has a bootdev subcommand, taking the target name.

Two errors from one command, and together they teach what the convenience command is doing.

Set Chassis Boot Parameter 4 failed and Set Chassis Boot Parameter 5 failed. bootdev writes two parameters: the boot info acknowledge, so the controller can tell when the override is picked up, and the boot flags, which carry the override itself.

This is the value of reading an error rather than skipping to the next idea. Nothing in the ipmitool manual page for bootdev says it writes parameters 4 and 5; the failure does.

8.4.1 The same refusal for any target

Goal: compare a second target while keeping the rest of the request consistent.

prompt: ops@mgmt:~$ answer: ipmitool -I lanplus -H 10.100.0.2 -U ADMIN -P ADMIN -C 3 chassis bootdev disk output: Set Chassis Boot Parameter 4 failed: Invalid data field in request Set Chassis Boot Parameter 5 failed: Invalid data field in request hint: The same command with a different target.

Both tested targets returned failures naming parameters 4 and 5. That establishes two refused requests, not that every possible target or option must fail. The response does not identify the exact invalid field.

Check: record both requests and their results, then consult the supported platform procedure before further writes. A successful read elsewhere is not proof a boot override can be written.

8.4.2 Recording what bootdev writes

Goal: understand what the convenience command attempted. The errors name parameter 4 and parameter 5; do not turn either error into a successful write.

prompt: ops@mgmt:~$ answer: printf '%s\n' 'chassis bootdev attempts parameter 4, boot info acknowledge, and parameter 5, boot flags.' 'Parameter 5 carries the valid, persistence, boot mode and boot device fields.' 'The recorded lab requests failed. Reading parameter 4 successfully does not prove writing it succeeds; multiple failed targets do not prove every possible request is unsupported.' > ~/boot/bootdev-note.txt output: hint: Write the short evidence note with printf, then read it with cat ~/boot/bootdev-note.txt.

Your file should record these statements:

Practice Boot Device Control in a real Linux terminal at The Linux Camp. Progress is verified automatically as you type commands on the machine.