Cha*_*ett 5 encryption partitioning macos
我拥有一台 Iomega Prestige。该磁盘系列包括一个虚拟 CD 分区,其中包含一个只能在 Windows 机器上使用的文件加密实用程序。每次我将外部驱动器安装到我的文件系统时,虚拟 CD 分区也会随之安装。
我想阻止安装虚拟 CD,同时允许安装磁盘的其余部分而不会出现问题。所以,问题是:如何删除虚拟 CD 分区或如何防止它挂载?
我已经看到了几个选项,但它们不起作用:
Iomega 制作了一个实用程序来为 Windows 系统删除它;问题是我不运行 Windows,而是使用 OS X 10.7。
MacOSXHints上有提示,但对于 Lion 来说已经过时了。/etc/fstab在 Lion 中已弃用,并且diskutil不再提供磁盘的 UUID(至少如页面所示)。
顺便说一句,不能简单地格式化和重新分区磁盘。虚拟 CD 不会被移除。
使以下程序始终在后台运行,例如通过使用自动启动launchd:
#include <CoreFoundation/CoreFoundation.h>
#include <DiskArbitration/DiskArbitration.h>
DADissenterRef BlockMount(DADiskRef disk, void *context)
{
DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, kDAReturnNotPermitted, CFSTR("forbidden!"));
CFDictionaryRef description = DADiskCopyDescription(disk);
// UUID of the disk you don't want to mount:
CFUUIDRef backupDisk = CFUUIDCreateFromString(NULL, CFStringCreateWithCString(NULL, "3B5315C1-96AE-3471-B43C-2C41CDB12A64", kCFStringEncodingUTF8));
if (CFDictionaryContainsKey(description, kDADiskDescriptionVolumeUUIDKey)) {
CFUUIDRef value = CFDictionaryGetValue(description, kDADiskDescriptionVolumeUUIDKey);
if (CFEqual(backupDisk, value)) {
return dissenter;
}
}
return NULL;
}
int main (int argc, const char * argv[])
{
DAApprovalSessionRef session = DAApprovalSessionCreate (kCFAllocatorDefault);
if (!session)
{
fprintf(stderr, "failed to create Disk Arbitration session");
}
else
{
DARegisterDiskMountApprovalCallback(session, NULL, BlockMount, NULL);
DAApprovalSessionScheduleWithRunLoop(session, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
while (true) {
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 60 /* seconds */, false);
}
DAApprovalSessionUnscheduleFromRunLoop(session, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
DAUnregisterApprovalCallback(session, BlockMount, NULL);
CFRelease(session);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
找出您不想使用的卷的 UUID diskutil list(以获取设备名称)并diskutil info读取 UUID。
另存为 main.c 并使用以下命令编译(您需要开发人员工具):
cc main.c -o mountstopd -framework Foundation -framework DiskArbitration
Run Code Online (Sandbox Code Playgroud)
在 Mac OS X 10.7.1 上,刚刚执行以下操作对我有用(与 OS X 提示中的内容几乎相同):
首先,找出您不想挂载的卷的设备名称:
diskutil list
Run Code Online (Sandbox Code Playgroud)
部分输出如下所示:
/dev/disk3
#: TYPE NAME SIZE IDENTIFIER
0: Apple_partition_scheme *2.2 TB disk3
1: Apple_partition_map 32.3 KB disk3s1
2: Apple_HFS DroboBackup 2.2 TB disk3s3
Run Code Online (Sandbox Code Playgroud)
在这个例子中,DroboBackup是实际的分区,/dev/disk3s3我们接下来需要的设备也是如此。然后找出它的UUID:
diskutil info /dev/disk3s3
Run Code Online (Sandbox Code Playgroud)
寻找Volume UUID,例如3B5315C1-96AE-3471-B43C-2C41CDB12A64。
然后,输入以下内容:
sudo touch /etc/fstab
sudo sh -c 'echo "UUID=3B5315C1-96AE-3471-B43C-2C41CDB12A64 none hfs rw,noauto" >> /etc/fstab'
Run Code Online (Sandbox Code Playgroud)
这将阻止磁盘安装。
| 归档时间: |
|
| 查看次数: |
10125 次 |
| 最近记录: |