Blog > Jeff Graves
Fix Unresponsive iPhone 4 Home Button
Monday, November 14
posted by Jeff Graves
Our people here at OrcsWeb not only geek-out about providing Remarkable Service and Remarkable Support on our dedicated server and Windows cloud server hosting platforms, but on a wide variety of technology - like iPhone's! Jeff has a great tip to share below...
I've been dealing with an unresponsive iPhone 4 Home Button for some time. Clicking the home button registered roughly one out of every 10 clicks. I had a tough time getting to the home screen or getting the task manager to load. During halftime of last night's Pats/Jets game (Go Pats!) I decided to see if I could find a fix for it.
As I suspected, most resolutions were about heading to the Apple store for a replacement or taking apart your iPhone and replacing the home button PCB membrane & flex cable - not a quick or easy fix. I had replaced the battery on my original iPhone once, so I was not really keen on attempting to take apart the phone and I opt'd not to purchase AppleCare so I'm out of warranty. However, I stumbled across this YouTube video that had an easy fix.
The gist of it is that there's a "gunk" build-up around & behind the home button (makes sense - just look at your keyboard). The user recommends using rubbing alcohol to attempt to clean it out and ensure good contact. I gave it a shot as described in the video, and voila! My iPhone 4 now registers every home button click without issue.
VMFS Resource Temporarily Unavailable
Friday, July 29
posted by Jeff Graves
I was performing some maintenance on a few VMFS LUNs and came across a few files for a VM that I knew were no longer in use. There were a couple of old snapshot files and a VMDK that had been renamed when doing a restore.
After confirming the files were no longer needed or in use, I attempted to remove them using the rm command. ESXi reported back the following error:
rm: cannot remove '
After some quick research, I realized it was likely a file lock that was causing the error. VMFS allows access from multiple ESXi servers at the same time by implementing per-file locking. That likely meant that an ESXi host other than the current owner of the VM had a lock on the file. The cluster was small enough that I was able to simply log in to each host and attempt the delete. After 3 attempts, I found the host with the lock to the files and was able to successfully delete them from the VMFS store.
I had tried removing the files via the datastore browser in vSphere hoping that it would be smart enough to know which host had the lock on the file, and issue the delete the command on that host - but no such luck. There was a way to detect which host had a lock on the files in ESX, but I have not found a similar mechanism in ESXi. Until then, trial and error will suffice.
Multithreaded Powershell Port Scanner
Wednesday, July 13
posted by Jeff Graves
We recently had to perform a hardware upgrade of a perimeter firewall. Doing so is a major undertaking, and while we have very good documentation, it's always important to do some real-world testing.
To facilitate this, we needed to perform some port scanning from outside our network to ensure that A) All of our firewall rule documentation matched what was actually configured, and B) Ensure a smooth transition to the new hardware. Most port scanners I found were capable of scanning a port range for a given IP set. But I wasn't able to find much of anything that could take specific IP/port data and return the results. I had previously written a simple ASP.NET application to do this, but it wasn't designed for testing large datasets.
So, I decided Powershell was the best bet. There were several available examples, but nothing that truly did what we needed. I was able to pull several resources together and came up with the attached Powershell script. Credit for the port detection goes to Boe Prox, to Gaurhoth for the IP range powershell functions, and to Oisin Grehan for the multithreading code.
The result is a script that takes a CSV input and outputs the results to CSV. You can specify IP addresses (eg. 192.168.100.1), CIDR subnets (192.168.1.0/24, 10.254.254.16/28, and/or IP ranges (10.0.1.1-10). The services.xml file in the bin folder contains a powershell object with port settings for various well-know ports and can be modified to meet your needs. Port cans be specified using their well-known name (eg. SMTP, RDP, HTTP) or in a protocol/portNum format (eg. tcp/80, udp/53, tcp/4900-4910).
Scanning is fairly quick:
PS D:\temp\portscanner> .\PortScanner.ps1 Importing Data from .\externalrules.csv Imported 3033 targets Flattening targets into endpoints There are 3996 to scan Begin Scanning at 07/08/2011 15:58:31 Waiting for scanning threads to finish... We scanned 3996 endpoints in 399.1811698 Exporting data to .\results.csv
Happy networking!
SCOM Login Failure Error
Thursday, June 2
posted by Jeff Graves
System Center Operations manager is a pretty nice monitoring and management application, but it is also a complex application that can be very difficult to configure and troubleshoot. Recently, after some account clean-up, we started receiving login failure pop-up windows when trying to run some reports inside the interface. This happened to coincide with a password change, so we thought for sure it was just a password issue - boy were we wrong.
After months of troubleshooting, we finally had a breakthrough today. Previous attempts of resetting passwords, reconfiguring Run As accounts and profiles, applying hotfixes and service packs, the answer came to us. A colleague was able to narrow down the issue specifically to this Event Viewer entry:
Log Name: Operations Manager Source: OpsMgr SDK Service Date: 6/2/2011 10:45:04 AM Event ID: 26319 Task Category: None Level: Error Keywords: Classic User: N/A Computer: SERVER Description: An exception was thrown while processing GetDataWarehouseMonitoringObjectsByRowId for session id uuid:54910ec9-1832-4399-9864-a2fd482aa340;id=863. Exception Message: The creator of this fault did not specify a Reason. Full Exception: System.ServiceModel.FaultException`1[Microsoft.EnterpriseManagement.Common.UnknownDatabaseException]: The creator of this fault did not specify a Reason. (Fault Detail is equal to Login failed for user 'SCOMUser'.).
That's obviously a SQL error, however, we had quadruple checked that the Data Warehouse account (we knew these was the run as credential it was using, because we changed the case of the user to 'SCOmuser' and the error message changed with that same case) was configured to use the proper SCOMUser domain account, and that the domain account had a proper login and permissions to the databases. Furthermore, after enabling SQL login auditing, we received the following message:
Log Name: Application Source: MSSQLSERVER Date: 6/2/2011 2:22:36 PM Event ID: 18456 Task Category: Logon Level: Information Keywords: Classic,Audit Failure User: N/A Computer: SERVER Description: Login failed for user 'SCOMUser'. Reason: Could not find a login matching the name provided. [CLIENT:]
What finally occurred to me was that it was not passing the domain as part of the login, rather, it was attempting to use SCOMUser as a SQL account, and not a windows account. By clicking properties on the Data Warehouse Action Account, going to the Distribution tab, and selecting the "Where is this credential used?" link, we found that it was being used by the "Reporting SDK SQL SQL Authentication Account" profile. Obviously, it being a Windows account was the reason SCOM was not passing the domain.
To correct the issue, we re-associated the Reporting SDK SQL Authentication Account with the appropriate run as credential. After doing so, the pop-up errors are gone!
ASP.NET Routing and IIS 404 errors
Monday, March 28
posted by Jeff Graves
ASP.NET Routing is a powerful feature introduced in .NET 3.5 SP1 and included with .NET 4.0 that allows a developer to route URL's that are not real files. There are several ways you can accomplish this same task, but having it in the ASP.NET pipeline allows the developer great flexibility in how URL's are routed. However, it does not always work "out-of-the-box" for devs. The most common error I've seen is a 404 error - meaning the page cannot be found.
There can be several contributing factors. If you are attempting to utilize extenionless URL's, ensure you have the appropriate IIS hotfix installed: http://support.microsoft.com/kb/980368. More commonly however, the issue is a result of the module not firing for your request type. The easy fix is to add runAllManagedModulesForAllRequests=”true” to the modules tag in your web.config. However, that could have performance implications as you are now telling IIS to ignore the preCondition setting for all modules. The alternative solution is to remove the managedHandler preCondition for the URLRouting module:
<modules>
<remove name="UrlRoutingModule" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
Gogo Inflight Internet
Monday, February 28
posted by Jeff Graves
Had the pleasure of testing out GoGo Inflight internet service on my way out to Seattle to attend the MVP summit (as an ASPInsider). Performance is nothing to write home about, but I was able to use Google's Gmail video chat feature. As expected, audio and video were quite choppy and cut out plenty of times, but the simple fact I could see or hear anything while traveling at 500 miles/hour at 37K feet is amazing itself. Had no problem connecting to the corporate SSL VPN and was able to RDP to a few servers while in-flight to check up on things. Outlook worked well enough to read and respond to necessary emails.
According to a speakeasy.net speedtest, I can get about a half a megabit in either direction. Latency wasn't terrible over the eastern and mid-west part of the country - comparable to 3G service with ping times between 90ms and 180ms though it was 500ms or more for sustained periods at times. Saw some packet loss - about 2% which isn't bad given the minor turbulence we encountered.
Considering I was able to write this from somewhere over the Colorado/Nebraska border and given the fact I can use any one device while in-flight, I'd say it's worth it. Next up - facetime.
Problems installing KB2479628, KB2485376 and SP1 with SATA IDE mode on P55 chipset
Thursday, February 17
posted by Jeff Graves
After Microsoft released February's patches, I ran into a strange issue on my custom-built Win7 x64 desktop. I would get to the windows 7 splash screen, but the system would inexplicably reboot at that screen. In order to get my system back up and running, I would have to boot into Safe mode to allow it to unconfigure the failed patch attempt, and then boot Safe mode a second time before I could boot windows normally. No memory dump was created and nothing was logged to Event Viewer about the failed attempts.
I spent one evening installing each patch one-by-one and rebooting until I was able to narrow it down to KB2479628 and KB2485376. The first patch affects kernel mode drivers and given the type of failure I was seeing, I started looking at driver issues. The most logical was my graphics driver since I could load safe mode without issue. I have an ATI Radeon HD5770 and a co-worker recommended trying driver ver 10.11 but that didn't solve the issue. Since SP1 was around the corner, I figured I just hide the patches and deal with it then.
Fast-forward to yesterday, and I decided to give the SP1 install a try after I finished working for the day. Installation went off without a hitch, but alas, I ran into the same issue on first reboot. It was time tackle the driver issue. First thing I did was get back to a good desktop, and then perform a reboot and enable boot logging (press F8 after the POST to enable boot logging). Doing so will write a list of drivers loaded to C:\windows\ntbtlog.txt. This can be helpful in finding the last driver loaded before a failure when no BSOD occurs.
Knowing that KB2479628 caused the same behavior as the SP1 install, was directly related to drivers and only took a second to install, I decided that I would use it to "test" if a change I made solved the problem. So, I ran the install and on reboot I enabled boot logging again - last driver to load lis flpydisk.sys ... hmmm ... I don't even have a floppy drive. I then compared to the reference log looking for what might load right after this driver. First thing that pops up is my graphics card, so after I go through the safe mode process to boot back to a desktop, I uninstall the display adapter, selecting the "Delete driver software for this device" option and then reboot. I have to repeat the process several times as it keeps picking up an older version of the driver but eventually, I get the base MSFT VGA driver. At that point, I retry the patch installation with boot logging enabled, but again windows automatically power cycles at the splash screen.
Long story short, I repeat the process for nearly every driver on my system: SATA controller, Realtek HD audio, Realtek NIC, etc. The boot logging led me on a wild goose chase and had me uninstalling any software that had a device associated with it including MagicDisc, my IOCell NDAS software, even Microsoft Intellipoint all to no avail. Finally, I remember that when I first built this system, I had an issue with the SATA controller mode. I had tried installing Windows 7 in AHCI mode, but saw something similar to this issue so switched to IDE mode. Looking at the BIOS settings, it was still set to IDE mode, but I tried switching to AHCI mode since nothing else had worked and I was basically out of ideas at that point. To my surprise, system booted after the patch installation.
I was then able to re-install the latest drivers from the mobo manufacturer's website and finally, I tried a SP1 install. After about an hour, the system rebooted and updated to SP1 properly. After all was said and done, I tried switching SATA mode back to IDE and for whatever reason, I now can't reproduce the issue. It's possible it was a race condition with the driver for the SATA controller in IDE mode while trying to update (perhaps the updates were looking to replace though drivers but couldn't because of some incompatibility) - though the currently loaded driver is from 2006 so that's doubtful.
For reference, this is a Core i5-750 on a Gigabyte P55-UD4P motherboard running BIOS F10. If you have similar problems, try switching your SATA controller mode from IDE to AHCI or vice-versa.
UPDATE: After installing a OCZ Vertex SSD, I had to set the controller mode back to AHCI as I was experiencing the same issue. Since changing it, I've had no problems.
HP Proliant MicroServer
Sunday, January 2
posted by Jeff Graves
I have been wanting to upgrade my home server for quite some time and have been eyeballing WHS machines as I was looking for something with a small footprint. While I would normally build my own system, cases for mini-ITX boards that have space for at least 4 HDD's are quite expensive. In fact, the only one I could find that really fit the bill was the Chenbro case. I also had my eye on the ACER H340 series (now H341 and H342), but when I found the HP Proliant MicroServer, it was exactly what I was looking for.
A quick peek at the specs:
- AMD Athlon II Neo N36L Dual-Core processor @ 1.3GHz w/ 2M L2 cache
- 2 DIMM slots supporting up to 8GB DDR3 PC3-10600E unbuffered ECC RAM @ 800MHz (while ECC is supported, it is not required)
- AMD RS785E/SB820M Chipset
- Integrated SATA controller with RAID0,1 (this is done in the driver)
- 4-port SATA backplane supports up to 4x2TB LFF SATA drives (ships with single 160GB HDD)
- Single ODD SATA port (forced IDE mode)
- Embedded Broadcom NC107i PCI Express Gigabit Ethernet Server Adapter supports PXE & WOL
- Onboard VGA with 128MB shared video RAM
- 1x PCI-e Gen2 16x half-height full length slot (max 25W)
- 1x PCI-e Gen2 1x half-height full length slot
- 7 USB ports (4 on the front, 2 in the back, 1 internal)
- 1 rear eSATA port
- 200W 1U Flex ATX Power Supply
- Trusted Platform Module support
- IPMI 2.0 compliant
- Optional ILO management card
I made a few small modifications to the base configuration by adding 2x4GB PC3-10666 DDR3 RAM modules (this was non-ECC consumer grade RAM), a CD/DVD-ROM drive, 2x1TB Western Digital Caviar Green HDD's, and a 16GB Patriot memory stick (to run ESXi). The integrated CPU supports AMD-V and XD bit required for virtualization, so running ESXi (and I suspect Hyper-V) works fine. The system itself is light-weight and the perfect size (10.5" x 8.3" x 10.2"). With the exception of the HDD caddies, the case is very sturdy - metal all around.
Great compact design in my opinion. Cables are routed well and the motherboard is mounted to a tray secured by two thumb screws. You need to disconnect cables and remove the motherboard in order to install PCI-e cards and RAM.
You'll notice what looks like a PCI-e x4 slot on the motherboard. That's actually for the optional remote management card and adding it will cover the PCI-e x1 slot. The motherboard sits underneath the HDD housing, so RAM with certain size heat-spreaders may not fit. The internal USB connection is in the lower left-hand corner of the motherboard. You'll notice there is plenty of room for a large USB flash drive if you so choose.
The HDD drive caddies are plastic and the backplane has necessary SATA connections. Screws are located on the bottom inside the front door. There's also a handy torx driver for working on the system.
Plenty of clearance for the USB flash drive that will hold the ESXi installation.
As far as the ESXi installation goes, couldn't be simpler. I attempted to use SYSLINUX to install ESXi from a USB flash drive, but couldn't get the installation going so I hit Best Buy for a cheap SATA CD/DVD-ROM drive. Note that the system has just a standard Molex power connector for the ODD, so you'll need to purchase a Molex to SATA power cable. Total installation time was only about 10 minutes. I am using the supplied 160GB for VMDK storage and will use RDM for the 1TB HDD's to create a software R1 array since the embedded RAID controller is not supported by ESXi.
While 8GB of RAM won't be enough to virtualize a datacenter, there should be plenty of RAM to run a few Virtual Machines. I was able to P2V my domain controller (was an Optiplex GX1 PII 400MHz box with 256MB - I know ... well past it's prime) in about an hour (only had 100Mbps nic) and am currently downloading Windows Home Server codename Vail to test out WHS in a virtual machine. All-in-all, if you're looking for a home server or virtual test lab, this box is a great fit!
DPM 2010 Tape Belongs to a DPM server sharing this library
Thursday, October 21
posted by Jeff Graves
Recently, I ran into an issue with our DPM 2010 shared tape library installation where several tapes added back to the library where reporting that they belonged to another DPM server sharing the library. I did not care about the data on these tapes, rather, they just needed to be marked as Free in order to be re-used. I logged into each of our DPM servers trying to find the server that owned the tape, but all of them reported the same error.
I tried performing erase operations, re-cataloging the tapes, identifying the unknown tapes, using the ForceTapeFree script , and external erase operations but DPM did not want to free it's grip. Finally, I surmised that it must be something in the DPMDB rather than actual data on the tape.
It turns out that the media had been assoicated with an orphaned Media Pool. To correct this, I used the following DB queries.
First, I needed to locate the proper information about the tape. This query will give you the slot and barcode number which should allow you to find the piece of media you need to correct. You'll want the GlobalMediaId field from this query:
select media.BarcodeValue, media.SlotNum, media.MediaId, gmedia.MediaPoolId
from tbl_MM_Global_ArchiveMedia gmedia
inner join tbl_MM_Media media
on gmedia.MediaId = media.GlobalMediaId
Next, you'll want to find the appropriate "Free Media Pool" for your library. You can do this with the following query:
select library.ProductId, library.SerialNo, library.LibraryId, mpool.Name, mpool.MediaPoolId, mpool.GlobalMediaPoolId
from tbl_MM_MediaPool mpool
inner join tbl_MM_Library library
on mpool.LibraryId = library.LibraryId
where mpool.Name = 'Free Media Pool'
You'll want the GlobalMediaPoolId GUID from that query. We then need to update the media with the proper MediaPoolId:
declare @GlobalMediaId as varchar
declare @GlobalMediaPoolId as varchar
set @GlobalMediaId = '<GUID from query 1>'
set @GlobalMediaPoolId = '<GUID from query 2>'
update tbl_MM_Global_ArchiveMedia
set MediaPoolId = @GlobalMediaPoolId
where MediaId = @GlobalMediaId
Lastly, perform a refresh in the DPM Console. Your tapes should now be marked as Free.
Network Uptime
Tuesday, June 8
posted by Jeff Graves
We upgraded the firmware on some network devices during last month's maintenance window. Before that, they had some impressive uptime:
The devices are configured with HA redundancy, so the rolling firmware upgrades went beautifully with minimal downtime during the route convergence and no manual intervention.












