如何防止磁盘挂载?

Cha*_*ett 5 encryption partitioning macos

我拥有一台 Iomega Prestige。该磁盘系列包括一个虚拟 CD 分区,其中包含一个只能在 Windows 机器上使用的文件加密实用程序。每次我将外部驱动器安装到我的文件系统时,虚拟 CD 分区也会随之安装。

我想阻止安装虚拟 CD,同时允许安装磁盘的其余部分而不会出现问题。所以,问题是:如何删除虚拟 CD 分区或如何防止它挂载?

我已经看到了几个选项,但它们不起作用:

  • Iomega 制作了一个实用程序来为 W​​indows 系统删除它;问题是我不运行 Windows,而是使用 OS X 10.7。

  • MacOSXHints上有提示,但对于 Lion 来说已经过时了。/etc/fstab在 Lion 中已弃用,并且diskutil不再提供磁盘的 UUID(至少如页面所示)。

顺便说一句,不能简单地格式化和重新分区磁盘。虚拟 CD 不会被移除。

Dan*_*eck 5

使以下程序始终在后台运行,例如通过使用自动启动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)

这将阻止磁盘安装。


Bri*_*ian 1

还可以删除/隐藏虚拟 CD 的加密实用程序现在可用于 OSX。

适用于 Mac OS 的 Iomega 加密实用程序版本 3.0:首先阅读