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


12

在装有Mac OS X 10.6.4的Mac Pro中,我有3个物理驱动器。有时,在重新引导计算机之后,磁盘编号会发生更改,以致/ 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?


3
这不在我的专业知识范围内,但是可以使用批量UUID进行某些操作吗?
fideli

@fideli:不知道...这就是我需要的帮助:)我曾期望OSX能够做到这一点-记得在哪里装载了具有给定UUID的驱动器,并将其留在了那里,但这似乎并没有案子。
Paul Alexander 2010年

在Linux中,磁盘具有符号链接,例如/ dev / disk / by-uuid / [disk-uuid],即使编号也没有改变。也许OSX是类似的?
solarc

Answers:


2

据我了解,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引用该psudo- / clone-device)。我用Fusion做过类似的技巧,但是我现在还没有安装Paralells(所以我无法测试)

stat -f“%Sr%Z” / dev / rdisk s为您提供设备到主,次设备的映射,如果并行不接受到该设备的软链接,则使用该映射。

可以在以下示例中使用:

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=zh_CN中的说明进行操作,以使其在引导时运行。

但这将由其他人完成...


嘿,谢谢你的详细回答。尝试mknodFusion却给出错误提示./vmware-rawdiskCreator create /dev/pdisk1 fullDevice ~/5tc ide Unable to create the source raw disk: The specified device is not a valid physical disk device (20).?干杯
Alexandre G

对于同一个问题,此答案对我非常有用,但适用于VMware Fusion。不幸的是,此后,VMware似乎不喜欢非标准的磁盘设备路径(在vmdk文件中,引用了磁盘/分区)。看起来好像是将它们传递给幕后的diskutil样式库,后者不知道如何处理它们。如此接近...在我的情况下,替代方法可能是在发现之后以编程方式重新生成vmdk文件。
汤姆(Tom)

1

我听过比我聪明的Mac员工,这暗示着磁盘编号多少有些武断,并且不能依靠同一设备在重新启动后获得相同的编号。提到在终端中通过diskutil创建RAID片时提到了这一点。

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


1
didn,我不认为答案是-1错误。有时候答案是“你不能那样做”。
西奥·贝尔克

1

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

df

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

cd /dev
ls -lias

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


0

尝试向您添加条目/etc/fstab

An /etc/fstab example:

# Identifier, mount point, fs type, options1
UUID=DF000C7E-AE0C-3B15-B730-DFD2EF15CB91 /export ufs ro
UUID=FAB060E9-79F7-33FF-BE85-E1D3ABD3EDEA none hfs rw,noauto
LABEL=This40Is40The40Volume40Name none msdos ro

标识符用于识别音量;LABEL是卷名,UUID是通用唯一标识符驱动器。您可以同时使用两者,但是UUID是最佳选择,因为重命名卷不会更改此标识符。

http://macosx.com/forums/mac-os-x-system-mac-software/314314-stop-disk-unmounting-automounting.html


这只会更改驱动器在/ Volumes目录中的安装位置。它对/ dev / disk没有任何影响???分配。
Paul Alexander

0

驱动器号基于引导过程中枚举物理设备的时间。我在Windows上也发生了这种情况。为了解决这个问题,我已经努力寻找了很长时间,但没有找到一个解决方案。切换SATA电缆时,我能够以“正确”的顺序获得磁盘,但这只是一个临时解决方案。在您的情况下,由于Parallels依赖于路径的磁盘编号,因此最好在启动时创建脚本来更新该配置文件。


0

我以前遇到过此问题,通常在完成更新或安装某些东西后它们会更改,但是在第二次重启后会恢复为原始编号。这显然不是理想的,但是似乎对我有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.