Accessing a USB drive while in Mac single-user mode

Warning: This article is about trying to accomplish some things in Mac single-user mode when your system is in trouble. In this article I assume that you're an experienced Unix administrator, so I don't bother to explain each command. If you don't know what the commands in this article do, don't use them, just take your Mac to an Apple store or Mac dealer. Be careful with all of these steps. When you're logged in, you'll be logged in as the root user, which means you can do a lot of damage to your system, including deleting all of the files on the system.

The partial death of a 2008 iMac

My 2008 iMac running Mac OS X 10.6.x partially died last night. I was working with iMovie, put it into full-screen demo mode, and the display went nuts and the system locked up.

Now it won't boot up all the way; it stops after showing a gray screen with an Apple logo on it. The little timer animation runs briefly, then stops, and the system just sits there.

Additionally, there are 30 thick vertical lines on the screen, probably an 1/8th of an inch thick or more. I assume this means there is a problem with the video card or display. Here's what it looks like in single-user mode:

After many repeated attempts I was just now able to get the system to boot into hardware test mode with the install CD, but the short test showed no errors, even though the 30 lines are still on the display. The longer test just showed a possible "HDD" error, but I can't read much of the message (because of the stripes).

I can get the Mac to boot into single-user mode, where I can work at the command line. Peering through the 30 vertical lines, I can see that the hard drive is there, and all of my files are still there, so I thought I'd try to make another backup of them.

For a long time I couldn't get the iMac to recognize the USB drive I was plugging into the USB port, but after a while I finally figured out the magic formula. Here are the steps I used to get the iMac to recognize the USB drive (thumb drive).

fsck and mount

I recommend not plugging in your USB drive yet. Then boot the system into single-user mode. When you do, you'll be logged in as root at a command line prompt. (Which seems like a security risk. I could walk into any office, reboot a Mac into single-user mode, then wipe their hard drive. But that's another story.)

The first things you're supposed to do are to run these commands:

fsck -yf
mount -uw /

The fsck command takes a while to run, maybe 5 or 10 minutes, although that will vary depending on the size and speed of the drive.

The mount command is necessary because your hard drive is mounted read-only by default, so this re-mounts it in read/write mode.

Run some launchctl commands

Before running the following commands, I recommend running this ls command:

ls /dev/disk*

This shows which disk devices are currently on your system. I'm not logged into my system at the moment, but when I did this on my iMac, I saw three outputs here, all beginning as /dev/disk0. Because I didn't plug in my USB drive yet, I know those device listings are for the drives already in the computer.

Next, plug in your USB drive. After a few moments you should see some sort of message on screen. With the vertical stripes I can't really read that message on my monitor, but it's an indicator that the Mac hardware at least recognized the USB device was plugged in. (I think part of the message showed "USB", or possibly "USBUHC".)

If you're lucky

If you're lucky, you can run that ls command again, and you might see some new device files:

ls /dev/disk*

If you see new files here, congratulations, you're in better shape than I was. If so, and assuming that your USB drive is formatted as a Windows/DOS filesystem, just follow these steps to mount the device:

mkdir /Volumes/usb
mount_msdos /dev/disk1s1 /Volumes/usb

If your USB device is formatted differently, use another mount command. I think there's a command named something like mount_hfs for devices formatted with a Mac filesystem.

Once that's done, you should be able to see the new filesystem with the df command:

df

Because /Volumes/usb refers to the root directory of your USB device, when you copy files to that directory, you're actually copying them onto the device. If these steps have worked for you, great, begin copying your files.

If the USB device didn't show up

In my case, my iMac didn't immediately create any /dev/disk* device files for my USB drive, so I had to dig deeper. In short, here's what I had to do. First, per some other websites, I ran these launchctl commands:

launchctl load /System/Library/LaunchDaemons/com.apple.kextd.plist
launchctl load /System/Library/LaunchDaemons/com.apple.notifyd.plist
launchctl load /System/Library/LaunchDaemons/com.apple.configd.plist
launchctl load /System/Library/LaunchDaemon/com.apple.DirectoryServices.plist

Those may have helped, I don't know. One of them caused the system to start posting information to my display, which combined with the vertical lines was a real pain in the butt.

While that's what was recommended on other websites, I didn't see the new /dev/disk* files until I also ran these commands:

launchctl load /System/Library/LaunchDaemon/com.apple.disk*

There are two "com.apple.disk" files in that directory, and I can't remember their names now, but the last time I was in my system I just used that command, and it worked fine. Shortly after this, the /dev/disk device files showed up.

Once the /dev/disk* files show up

My system created the new files with names like /dev/disk1s1, and based on information I found on other sites, I thought that was the correct device to mount. So I created my mount point like this:

mkdir /Volumes/usb

and then mounted the USB drive like this:

mount_msdos /dev/disk1s1 /Volumes/usb

After that, I copied all the files I wanted to the /Volumes/usb directory (which is really the filesystem on the USB device), and then unmounted the USB device like this:

umount /dev/disk1s1

Once I saw that the /Volumes/usb result no longer showed up in the output of the df command, I removed my USB drive.

Shutting down the system

I haven't looked into those plist files yet, but something about loading them was keeping my Mac from being shut down properly. So to shut my system down, I first unloaded all of the plist files like this:

launchctl unload /System/Library/LaunchDaemons/com.apple.*

At that point I think you can shut down your system by typing exit, but I was trying to do something else next, so I used the reboot command instead.

Other notes

Regarding that mount point, I don't think there's anything special about using the Volumes directory. In my younger days as a Unix admin, I'd create a mount point wherever I wanted to, so unless OS X is doing something unique, you can probably create a mount point wherever you want.

As mentioned at the beginning of this article, these notes pertain to a 2008 model iMac running Mac OS X 10.6.x. Other Mac operating systems are probably at least slightly different.

Summary

I hope these notes have been helpful, and will save you a little time. I know they would have saved me several hours if I knew about all of this last night.

Post new comment

The content of this field is kept private and will not be shown publicly.