Question: I have 3 physical drives in my Mac Pro with Mac OS X 10.6.4. Occasionally after rebooting the machine, the disk numbering changes such that the /dev/disk# does not reference the same drive as it did before the reboot.

Example

/dev/disk0 -> 64GB SSD drive/dev/disk1 -> 640GB Hitachi/dev/disk2 -> 160GB WD (BootCamp)

After rebooting the mapping might be

/dev/disk0 -> 160GB WD (BootCamp)/dev/disk1 -> 640GB Hitachi/dev/disk2 -> 64GB SSD drive

Even more confusing is that the remapping is not consistent. For most stuff this is irrelevant. However I also have Parallels installed to allow access to the BootCamp partition from within OS X. Parallels uses the /dev/disk# path in it’s configuration file so, after rebooting OS X I launch Parallels and it tells me that the disk is no longer present.

Is there a way to tell OS X to always assign a given drive to /dev/disk0?

Answer: As far as i understand MacOS doesn’t have that capability, although for running parallels it might not be strictly necessary.

using macports and installing e2fsprogs with a small patch:

diff -r e2fsprogs-1.41.12/misc/Makefile e2fsprogs-1.41.12.patched/misc/Makefile399c399> ?$(LIBEXT2FS) $(LIBCOM_ERR)—< ?$(LIBEXT2FS)401,402c401

you can use blkid -s UUID /dev/rdisk* to enumerate partitions, disks and get their respective uuids (for any supported file-system which is quite a few).

After that a adding a softlink with ‘ln -s’ or creating an alternate device node with mknodshould work (and then reference that psudo-/clone-device from Parallels). I’ve done similar tricks with Fusion, but I haven’t got Paralells installed right now (so I can’t test)

stat -f “%Sr %Z” /dev/rdisks gives you a map over device to major,minor to be used ifparallels doesn’t accept a soft-link to the device.

which can be used as in the following example:

some@host:/e2fsprogs-1.41.12$ blkid -s UUID /dev/rdisk*s* /dev/rdisk0s1: UUID=”76D6-1701″ /dev/rdisk0s2: UUID=”654F73AE51849687″ /dev/rdisk1s1: UUID=”51FC4E72-BFA9-4DBD-9A5C-0E5H731DB0ED” some@host:/e2fsprogs-1.41.12$ stat -f “%Sr %Z” /dev/rdisk*rdisk0 14,0rdisk0s1 14,1rdisk0s2 14,2rdisk1 14,3rdisk1s1 14,4# okay, UUID 51FC4E72-BFA9-4DBD-9A5C-0E5H731DB0ED is a partition# on the disk we want to use. so we make a ‘private’ device node# pointing to the device containing that partition.some@host:/e2fsprogs-1.41.12$ sudo mknod /dev/pdisk1 b 14 3# just a quick verify that the mknod worked as expected …some@host:/~$ sudo dd if=/dev/rdisk1 ?count=10 2>/dev/null | md5 19d55b28485771bc80acdddbd1b45fafsome@host:/~$ sudo dd if=/dev/pdisk1 ?count=10 2>/dev/null | md5 19d55b28485771bc80acdddbd1b45faf

Now the only thing left is to write a script and using the instructions in http://support.apple.com/kb/HT2420?viewlocale=en_US to make it run at boot.

But that will be for somebody else to finish …