4

У меня есть Iomega Prestige. Серия дисков включает в себя раздел Virtual CD, который содержит утилиту шифрования файлов, которую можно использовать только на компьютере с Windows. Каждый раз, когда я монтирую внешний диск в свою файловую систему, раздел Virtual CD монтируется вместе с ним.

Я бы хотел запретить монтирование виртуального компакт-диска, а оставшуюся часть диска смонтировать без проблем. Итак, вопрос: как я могу удалить раздел Virtual CD или как я могу предотвратить его монтирование?

Я видел несколько вариантов, но они не будут работать:

  • Iomega делает утилиту, чтобы удалить это для системы Windows; Проблема в том, что я не запускаю Windows, а использую OS X 10.7.

  • На MacOSXHints есть подсказка, но для Lion она устарела. /etc/fstab устарела в Lion, и diskutil больше не предоставляет UUID диска (по крайней мере, как указано на странице).

Кстати, нельзя просто отформатировать и перераспределить диск. Виртуальный CD не будет удален.

3 ответа3

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;
}

Узнайте UUID тома, который вы не хотите монтировать, используя diskutil list (чтобы получить имя устройства) и информацию о diskutil info для чтения UUID.

Сохраните как main.c и скомпилируйте с помощью следующей команды (вам нужны инструменты разработчика):

cc main.c -o mountstopd -framework Foundation -framework DiskArbitration

На Mac OS X 10.7.1 выполнение следующего работало для меня только сейчас (в значительной степени идентично тому, что в OS X Hint):

Сначала найдите имя устройства тома, который вы не хотите монтировать:

diskutil list

Частичный вывод выглядит так:

/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

В этом примере DroboBackup является фактическим разделом, поэтому /dev/disk3s3 - это устройство, которое нам нужно дальше. Тогда узнайте его UUID:

diskutil info /dev/disk3s3

Найдите 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'

Это предотвратит монтаж диска.

3

У меня нет Iomega Prestige для тестирования, но вы можете попробовать утилиту Disk Arbitrator Аарона Бургхардта.

Из вступления в README (акцент мой):

Disk Arbitrator - это служебная утилита для Mac OS X, разработанная для того, чтобы помочь пользователю обеспечить правильные процедуры судебной экспертизы во время создания образа дискового устройства.

Disk Arbitrator - это, по сути, пользовательский интерфейс для среды Disk Arbitration, которая позволяет программе участвовать в управлении блочными устройствами хранения, включая автоматическое монтирование файловых систем. При включении Disk Arbitrator блокирует монтирование файловых систем, чтобы избежать монтирования в режиме чтения-записи и нарушения целостности улик.

Важно отметить, что Disk Arbitrator не является программным блокировщиком записи - он не изменяет состояние подключенных в данный момент устройств и не влияет на вновь подключенные устройства, заставляя устройство быть доступным только для чтения. Пользователь по-прежнему должен быть осторожным, чтобы случайно не записать на диск команду, например dd . Вследствие этого факта аппаратный или программный блокировщик записи все еще может быть желателен для наиболее надежной процедуры. Disk Arbitrator дополняет блокировщик записи дополнительными полезными функциями и исключает типичную судебную рекомендацию «отключить арбитраж диска».

1

Утилита шифрования, которая также может удалять / скрывать виртуальный компакт-диск, теперь доступна для OSX.

Утилита шифрования Iomega версии 3.0 для Mac OS: сначала прочтите

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .