This is an old revision of the document!


Debugging Windows iSCSI boot

A null-modem cable

To debug Windows iSCSI boot problems, you will need a second Windows machine running windbg, and a null-modem cable to connect the two machines together via their serial ports. The debugging machine does not need to be running the same version of Windows as the iSCSI-booting machine.

This tutorial is designed to help you capture the information that will be needed to diagnose your iSCSI boot problems.

Preparing the machines

Connect the null-modem cable between the serial port of the debugging machine and the serial port of the iSCSI-booting machine. (If one or both of the machines do not have serial ports then you can use a FireWire cable instead, but these instructions assume that you are using a null-modem cable.)

Preparing the tools

Download the latest version of windbg as part of the Debugging Tools for Windows package from http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx and install it onto the debugging machine.

Locate the Microsoft iSCSI initiator (which you have already downloaded and installed on the iSCSI-booting machine), and install it onto the debugging machine.

Preparing the iSCSI-booting machine

On the debugging machine, start the Microsoft iSCSI Initiator utility (StartAll ProgramsMicrosoft iSCSI InitiatorMicrosoft iSCSI Initiator). Go to the Discovery tab and click on Add to add a new target portal. Enter the IP address or DNS name of your iSCSI target.

Adding an iSCSI target

Go to the Targets tab. You should see a list of available iSCSI target IQNs. Select the one containing your iSCSI-bootable Windows disk, and click on Log On to connect to the target.

Connecting to the iSCSI target

The iSCSI-bootable Windows disk should now show up as an extra drive in My Computer on the debugging machine. Start up Notepad and open the file X:\boot.ini (where X: is the drive letter for the iSCSI-bootable Windows disk). You should see something like

  [boot loader]
  timeout=30
  default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
  [operating systems]
  multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003" /fastdetect

Duplicate the multi(0)disk(0)rdisk(0)partition(1)… line, and append the options

  /debug /debugport=com1 /baudrate=115200 /break

(where com1 is the serial port on the iSCSI-booting machine). The resulting file should look something like

  [boot loader]
  timeout=30
  default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
  [operating systems]
  multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003" /fastdetect
  multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003" /fastdetect /debug /debugport=com1 /baudrate=115200 /break

Save this modified boot.ini file and close Notepad. Go back to the Microsoft iSCSI Initiator utility. On the Targets tab, select the one containing your iSCSI-bootable Windows disk, and click on Details. Tick the box next to the session identifier (which will be a long hex string such as ffffffff810ca00c-4000013700000001), and click on Log off to disconnect from the target.

Disconnecting from the iSCSI target

Starting the iSCSI-booting machine

Windows boot menu

Switch on the iSCSI-booting machine. You should reach the Windows boot menu offering you a choice such as

  Please select the operating system to start:
  
      Windows Server 2003
      Windows Server 2003 [debugger enabled]

Select the option which includes “[debugger enabled]”, and press Enter to continue. You should see the screen go black, and the machine will appear to have frozen. This is because it is waiting to be controlled by the debugging machine.

Using the debugger

On the debugging machine, start the Windows debugger (StartAll ProgramsDebugging Tools for WindowsWinDbg). Start a kernel debugging session (FileKernel Debug). After a brief pause, you should see several messages appear, ending with

  Break instruction exception - code 80000003 (first chance)
  nt!DbgBreakPoint:
  8081d971 cc              int     3

Windows debugger attaching

Allow the iSCSI-booting machine to continue using DebugGo. After several seconds, you should see iSCSI boot messages start to appear. For a successful boot, these will look something like

  IscsiBP-IscsiBPInitialize: enter
  IscsiBP iBF table found at FC564950 (FC545000)
  IscsiBP iBF table copied to E12B9A08
  IscsiBP Found device \??\PCI#VEN_10EC&DEV_8139&SUBSYS_00000000&REV_20#3&13c0b0c5&0&18#{cac88484-7515-4c03-82e6-71a87abac361}
  IscsiBP Handle 800000B4 has IpAddress 10.254.254.15
  Subnetmask Prefix - 24 is 00 ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00
  IscsiBP Handle 800000B4 has SubnetMask 255.255.255.0
  IscsiBP Handle 800000B4 has DefaultGateway 10.254.254.2
  IscsiBP nic 0 config -> 0
  IscsiBP-IscsiBPInitialize: exit
  Found iSCSI Boot Parameters at 810CABA0, attempting iSCSI boot
  Allocating the Boot Connection Pool of size 30
  Allocating Connection Pool 810C5F10
  Allocating the Boot Connection Pool entry 0 SUCCESS
  Allocating the Boot Connection Pool entry 1 SUCCESS
  ...
  Waiting 60 seconds for boot disk
  iSpSystemWorkerThread: Entering
  iSpSystemWorkerThread:  Coming out of wait
  iSpSystemWorkerThread: Start Logon Completion Thread 810C7008
  Delay 10 seconds for Disk to arrive.......
  iSpSystemWorkerThread:  After Logon Completion Thread
  Delay for Disk Complete, continue with boot
  NIC device \??\PCI#VEN_10EC&DEV_8139&SUBSYS_00000000&REV_20#3&13c0b0c5&0&18#{cac88484-7515-4c03-82e6-71a87abac361} has PCI bus type
  ISCSI Boot Status 0, (0, 0, 0, 0)

If you are using sanbootconf then a successful boot will look something like

  iSCSI Boot Parameter Driver initialising
  Found iBFT at 9cfb0 OEM ID "FENSYS" OEM table ID "gPXE"
  Found iBFT Initiator 0:
    Flags = 0x3, valid, boot selected
    iSNS = 0.0.0.0
    SLP = 0.0.0.0
    Radius = 0.0.0.0, 0.0.0.0
    Name = iqn.2000-01.org.etherboot:host_10_0_0_90.home
  Found iBFT NIC 0:
    Flags = 0x3, valid, boot selected
    IP = 10.0.0.90/24
    Origin = 0
    Gateway = 10.0.0.6
    DNS = 10.0.0.6, 0.0.0.0
    DHCP = 0.0.0.0
    VLAN = 0000
    MAC = 52:54:00:33:22:11
    PCI = 00:03.0
    Hostname = host_10_0_0_90.home
  Found NIC with MAC address 52:54:00:33:22:11 at "\??\PCI#VEN_10EC&DEV_8139&SUBSYS_00000000&REV_20#3&13c0b0c5&0&18#{ad498944-762f-11d0-8dcb-00c04fc3358c}\{7C0E3A80-E8E7-4B81-933E-C997BF973430}"
  iBFT NIC 0 is interface "\??\PCI#VEN_10EC&DEV_8139&SUBSYS_00000000&REV_20#3&13c0b0c5&0&18#{ad498944-762f-11d0-8dcb-00c04fc3358c}\{7C0E3A80-E8E7-4B81-933E-C997BF973430}"
  iBFT NIC 0 is PDO 8124DCF8
  iBFT NIC 0 is NetCfgInstanceId "{7C0E3A80-E8E7-4B81-933E-C997BF973430}"
  Found iBFT target 0:
    Flags = 0x3, valid, boot selected
    IP = 10.0.0.6
    Port = 3260
    LUN = 0000-0000-0000-0000
    CHAP type = 0 (None)
    NIC = 0
    Name = iqn.2006-05.home.dolphin:winxp
    CHAP name = 
    CHAP secret = 
    Reverse CHAP name = 
    Reverse CHAP secret = 
  iSCSI Boot Parameter Driver initialisation complete
  iSCSI boot parameters requested
  iSCSI boot parameters requested
  Found iSCSI Boot Parameters at 81208008, attempting iSCSI boot
  Allocating the Boot Connection Pool of size 30
  Allocating Connection Pool 81205850
  Allocating the Boot Connection Pool entry 0 SUCCESS
  Allocating the Boot Connection Pool entry 1 SUCCESS
  ...
  Waiting 60 seconds for boot disk
  iSpSystemWorkerThread: Entering
  iSpSystemWorkerThread:  Coming out of wait
  iSpSystemWorkerThread: Start Logon Completion Thread 81205008
  Delay 10 seconds for Disk to arrive.......
  iSpSystemWorkerThread:  After Logon Completion Thread
  Will notify BusChangeDetected
  Delay for Disk Complete, continue with boot
  ISCSI Boot Status 0, (0, 0, 0, 0)

For an unsuccessful boot, the messages will end with a “Bugcheck Analysis”; this is the debugging equivalent of the Blue Screen of Death that occurs when the debugger is not attached.

Save the debugging transcript to a file using EditWrite Window Text to File.

Diagnosing the problem

Installing the Microsoft iSCSI initiator

No "IscsiBP" messages appear

If you do not see any IscsiBP messages appear, then you do not have the boot-capable iSCSI initiator installed on the iSCSI-booting machine.

  • Did you download the boot-capable Microsoft iSCSI initiator from http://connect.microsoft.com? If you installed the standard (non-boot-capable) Microsoft iSCSI initiator, then you will not be able to boot via iSCSI.
  • Did you install the checked build (the file ending in -x86chk.exe)? If you installed the free build (the file ending in -x86fre.exe, then you may not see any diagnostic messages.
  • When you installed the boot-capable Microsoft iSCSI initiator, did you tick the option to “Configure iSCSI Network Boot Support”?

"IscsiBP Found device" message does not appear

If you do not see a message starting with “IscsiBP Found device”, then your network card is not being detected at boot time.

  • When you installed the boot-capable Microsoft iSCSI initiator, did you select the correct network card to be used for iSCSI boot?

Other problems

You can e-mail the saved debugging transcript to etherboot-discuss@lists.sourceforge.net, along with any other information that you think may be relevant. Please note that the debugging transcript is the most important information; if you provide a full description of your setup and your problem, but do not provide the debugging transcript, then we will probably not be able to solve your problem.

You can also often find us in the #etherboot IRC channel on FreeNode.


QR Code
QR Code sanboot:winnt_iscsi_debug (generated for current page)