我需要在我的应用程序中确定我的Mac内部驱动器中哪个是启动驱动器。 我不确定是否有任何特定的驱动器属性或任何特定的文件可以帮助我唯一地识别内部启动驱动器。 'diskutil info'命令提供了切片的“可引导”属性,但该属性不够好,因为该属性对于单个驱动器的多个切片或所有驱动器都返回为true。
我需要在我的应用程序中确定我的Mac内部驱动器中哪个是启动驱动器。 我不确定是否有任何特定的驱动器属性或任何特定的文件可以帮助我唯一地识别内部启动驱动器。 'diskutil info'命令提供了切片的“可引导”属性,但该属性不够好,因为该属性对于单个驱动器的多个切片或所有驱动器都返回为true。
$ /usr/sbin/bless --info --getBoot
/dev/disk0s2
更多信息请参阅“man bless”。使用“--plist”参数,输出可以轻松解析为NSDictionary
,以下示例代码演示了这一点:
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/sbin/bless"];
[task setArguments:@[@"--info", @"--getBoot", @"--plist"]];
NSPipe * out = [NSPipe pipe];
[task setStandardOutput:out];
[task launch];
[task waitUntilExit];
NSFileHandle *read = [out fileHandleForReading];
NSData *data = [read readDataToEndOfFile];
NSDictionary* plist = [NSPropertyListSerialization propertyListWithData:data options:0 format:NULL error:NULL];
NSLog(@"output: %@", plist);
输出:
{
"Boot Volume" = "/dev/disk0s2";
}