Вы правы - вы можете получить эту информацию, используя Disk Arbitration Framework:
DASessionRef session = DASessionCreate(NULL);
if (session) {
DADiskRef disk = DADiskCreateFromBSDName(NULL, session, "/dev/disk0s1");
if (disk) {
CFDictionaryRef diskDescription = DADiskCopyDescription(disk);
NSDictionary *diskData = (NSDictionary *)diskDescription;
NSString *diskSizeKey = (NSString *)kDADiskDescriptionMediaSizeKey;
unsigned long size = [[diskData objectForKey:diskSizeKey]
unsignedLongValue];
NSLog(@"size in bytes = %lu", size);
CFRelease(diskDescription);
CFRelease(disk);
}
else NSLog(@"Error while getting DA disk for /dev/disk0s1");
CFRelease(session);
}
else NSLog(@"Error while creating DA session");
Обратите внимание, что / dev / disk0s1 - это раздел EFI.