Tag Archives: sysadmin

Workstation Imaging: Transitioning from Symantec Ghost to PING

Recently I faced the challenge of imaging a series of workstations using Symantec (nee Norton) Ghost 8.0.  Traditionally these workstations had been imaged by physically attaching an internal hard drive containing the Ghost image files to the workstation to be imaged.  The workstation was then booted with the Ghost boot disks, and the workstation primary drive was imaged from the attached secondary drive.  This process was time consuming and labor intensive, requiring physically opening each individual chassis and connecting and reconnecting the drive containing the Ghost images.  It also put the hard drive containing the images at risk of damage while being handled.  I began working on a method that was more efficient that didn’t increase cost nor require major retraining.

I started with GhostCast, the bundled tool that allows for images to be deployed via the network.  This allowed me to build a centralized server that would host all workstation images.  I would then be able to boot the workstations via the Ghost boot disks, attach to the network, and image at will.  Everything went according to plan until I tried to create the Ghost boot disks.  The machines I was tasked with, HP/Compaq DC7900, required an ethernet driver that was newer than what had been included with the (admittedly ancient) Ghost 8.0 software.  I suppose I could have manually bundled the driver, but overall frustration with the product led me to seek elsewhere.

Which is what brought me to PING.  PING [PING Is Not Ghost] is a hybrid product consisting of a Linux LiveCD that can either be burned and used directly (similar to the Ghost boot disk + directly attached hard drive scenario above) or integrated into a LAN and used via Preboot eXecution Environment [PXE] which is exactly what I needed.  I was working with a pre-existing test environment in which test hardware was at a premium.  Luckily I had a VMWare ESXi 3.5U machine from a previous project, and was able to spin up a virtual Windows 2003 Enterprise Server that would serve as my image host.  From there I took the following steps:

  • On the image host: Select a location from which to serve your images and unpack the PartImage bundle.  You’ll have a hierarchy with a base called PartImage.  Share this directory on the network (NFS and SMB both work, but I used Windows built-in CIFS sharing) and set permissions as you like.  This is the directory that will be mounted by our PXE booted workstation.
  • PXE requires TFTP as well as DHCP.  I used the excellent TFTPD32 on my image host.  TFTPD32 also provides DHCP and DNS, but my environment had an existing DHCP server so I disabled the built-in functionality.  Once TFTPD32 was set-up and configured I also needed to configure my DHCP server (Microsoft DHCP) to point to the image server for PXE booting, which I’ll cover in a later step.
  • Create the PING LiveCD boot bundle hierarchy:

PXE
PXEi386
PXEi386templates
PXEi386templatespxelinux.cfg

  • The boot bundle files [kernel, initrd.gz, pxelinux.0] will be placed in the PXEi386templates directory.
  • Within the PXE386templatespxelinux.cfg directory, create a file named default that will serve as our PXE configuration.  It should contain the following:

DEFAULT rescue
PROMPT 0
LABEL rescue
KERNEL kernel
APPEND vga=normal devfs=nomount pxe ramdisk_size=33000 load_ramdisk=1 init=/linuxrc prompt_ramdisk=0 initrd=initrd.gz root=/dev/ram0 rw noacpi noapm pci-noacpi lba acpi=off apm=off

  • Now for DHCP: The Microsoft DHCP Server I was working with had to be configured to enable Option 066 Boot Server Host Name (set to point to our image server) and Option 067 Bootfile Name (pxelinux.0).  Once complete, our DHCP server was configured to accept PXE requests from any machine that made a DHCP request (our workstations) and point them to the image server to execute the boot bundle.

Once all these pieces were in place I was able to boot a workstation on the network via PXE, eschewing the use of boot disks.  Once the machine was booted it loaded the PING environment, from which the machine could be either imaged or restored.  Image/Restore times were a fraction of what they’d been using Ghost, and I’d added the possibility of imaging multiple machines simultaneously.  All at zero additional cost.

Thanks to the good people at windowsdream.com for creating an excellent product, and for the documentation who’s default steps I cribbed above.