如何防止 OS X 重启时磁盘重新编号?

如何防止 OS X 重启时磁盘重新编号?

我的 Mac Pro 装有 3 个物理驱动器,操作系统为 Mac OS X 10.6.4。有时在重新启动计算机后,磁盘编号会发生变化,导致 /dev/disk# 引用的驱动器与重新启动前不同。

例子

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

重启后映射可能会

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

更令人困惑的是,重新映射并不一致。对于大多数东西来说,这无关紧要。但是,我还安装了 Parallels,以允许从 OS X 内部访问 BootCamp 分区。Parallels 在其配置文件中使用 /dev/disk# 路径,因此,在重新启动 OS XI 后启动 Parallels,它会告诉我磁盘不再存在。

有没有办法告诉 OS X 始终将给定的驱动器分配给 /dev/disk0?

答案1

据我所知,MacOS 没有这种功能,尽管对于运行并行来说,它可能不是绝对必要的。

使用 macports 并安装带有小补丁的 e2fsprogs:

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

您可以使用 blkid -s UUID /dev/rdisk* 来枚举分区、磁盘并获取它们各自的 uuid(对于任何受支持的文件系统来说,数量相当多)。

之后,使用“ln -s”添加软链接或使用 mknod 创建备用设备节点应该可以工作(然后从 Parallels 引用该伪/克隆设备)。我使用 Fusion 做过类似的技巧,但我现在还没有安装 Paralells(所以我无法测试)

stat -f "%Sr%Z" /dev/rdisks如果 Parallels 不接受设备的软链接,则为您提供设备到主设备、次设备的映射以供使用。

其用法如下例所示:

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,0
rdisk0s1 14,1
rdisk0s2 14,2
rdisk1 14,3
rdisk1s1 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 
19d55b28485771bc80acdddbd1b45faf
some@host:/~$ sudo dd if=/dev/pdisk1  count=10 2>/dev/null | md5 
19d55b28485771bc80acdddbd1b45faf

现在唯一剩下的就是编写脚本并使用http://support.apple.com/kb/HT2420?viewlocale=en_US使其在启动时运行。

但那将由其他人来完成……

答案2

我听过比我聪明的 Mac 用户暗示磁盘编号有点随意,不能指望同一台设备在重启后获得相同的编号。这是在通过终端中的 diskutil 创建 RAID 切片时提到的。

我发现所有低级实用程序(例如 diskutil、pdisk 或 gpt)似乎都无法影响磁盘编号。我担心它可能无法控制。

答案3

要查看内置硬盘上卷的字符设备文件的路径名,请打开位于 /Applications/Utilities 中的终端应用程序。键入以下内容,然后按回车键:

df

您可以通过打开终端,然后输入(每行后按回车键)来查看当前卷的字符设备文件的完整路径名:

cd /dev
ls -lias

每个已安装卷上的每个分区(无论是否显示在 Finder 中)在 /dev 目录的列表中都会有两个文件。文件名通过编号标识设备,并通过编号标识设备上的分区。您可能需要在终端窗口中滚动一点才能找到这些文件。

答案4

驱动器编号基于启动期间枚举物理设备的时间。在 Windows 上我也遇到过这种情况。我花了很长时间寻找解决方案,但一直没有找到。当我切换 SATA 电缆时,我能够以“正确”的顺序获取磁盘,但这只是一个临时解决方案。对于您来说,由于 Parallels 依赖磁盘编号作为路径,因此最好创建一个脚本来在启动时更新该配置文件。

相关内容