I recently picked up a Cisco Catalyst WS-C4500X for my homelab as I am in the process of moving to all 10GBe. Before I put the new switch into service I want to make sure that it is running the latest IOS image.
I will be using a USB drive that has already been formatted as FAT32 (FAT16 is also acceptable). I have copied the .bin file to the usb drive.
Plug the USB drive into the front of the switch. Enter enable mode and run dir on the usb drive as shown below.
Switch>en
Switch#dir usb0:
Directory of usb0:/
37 drwx 16384 Mar 22 2025 23:28:06 +00:00 .Trash-1000
38 -rwx 195351416 Mar 18 2025 01:16:52 +00:00 cat4500e-universal.SPA.03.11.11.E.152-7.E11.bin
31440846848 bytes total (31220072448 bytes free)
Now we need to copy the image from the USB drive to the bootflash on the switch.
Switch#copy usb0:cat4500e-universal.SPA.03.11.11.E.152-7.E11.bin bootflash:
The file will take a bit to copy. Once the copy is complete you will be returned to the prompt.

We now want to confirm that the file is in bootflash.
Switch#show bootflash:
Output below, cat4500e-universal.SPA.03.11.11.E.152-7.E11.bin is our new file. As you can see by the dates this switch has not been upgraded in a long while.

Now we need to change the config-register
Switch>en
Password:
Switch#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Switch(config)#config-register 0x2102
Now we clear out the contents of the bootflash
Switch(config)# no boot system
We must now save the running config in order to see the updated boot vars
Switch#show boot
BOOT variable =
CONFIG_FILE variable does not exist
BOOTLDR variable does not exist
Configuration register is 0x2101 (will be 0x2102 at next reload)
Now we configure the switch to boot the new IOS image.
Switch(config)# boot system bootflash:cat4500e-universal.SPA.03.11.11.E.152-7.E11.bin
Now exit config mode and save changes
Switch(config)#exit
Switch#copy running-config startup-config
Destination filename [startup-config]?
Building configuration...
Compressed configuration from 1491 bytes to 878 bytes[OK]
Now we confirm our boot config
Switch#show boot
BOOT variable = bootflash:cat4500e-universalk9.SPA.03.11.11.E.152-7.E11.bin,12;
CONFIG_FILE variable does not exist
BOOTLDR variable does not exist
Configuration register is 0x2101 (will be 0x2102 at next reload)
Configuration register 0x2101 will boot the first boot image shown in the output of dir bootflash:
Configuration register 0x2102 overrides this behavior and boots the image specified in “BOOT variable” output.
Reference
- https://youtu.be/vaiSC8SzHEc?si=kHM5ak1W_89zHx_j
- https://www.cisco.com/c/en/us/support/docs/routers/10000-series-routers/50421-config-register-use.html