Como evito que um disco seja montado?

4

Eu possuo um Iomega Prestige. A série de discos inclui uma partição de CD virtual que inclui um utilitário de criptografia de arquivos que só pode ser usado em uma máquina Windows. Toda vez que eu montei a unidade externa no meu sistema de arquivos, a partição do CD Virtual é montada junto com ela.

Eu gostaria de evitar que o CD Virtual fosse montado, permitindo que o restante do disco fosse montado sem problemas. Então, a questão é: Como eu posso remover a partição do CD Virtual ou como posso evitar que ela seja montada?

Eu já vi algumas opções, mas elas não funcionam:

  • A Iomega cria um utilitário para remover isso de um sistema Windows; problema é que eu não corro o Windows, mas eu uso o OS X 10.7.

  • Existe uma dica em MacOSXHints , mas está desatualizado para o Lion. /etc/fstab está obsoleto no Lion e diskutil não fornece mais o UUID de um disco (pelo menos como sugerido na página).

A propósito, não se pode simplesmente formatar e reparticionar o disco. O CD Virtual não será removido.

    
por Chauncey Garrett 07.08.2011 / 01:36

3 respostas

1

O utilitário de criptografia, que também pode remover / ocultar o CD virtual, está disponível para o OSX agora.

Iomega Encryption Utility versão 3.0 para Mac OS: leia primeiro

    
por 17.10.2011 / 17:22
5

Mantenha o seguinte programa em execução em todos os momentos em segundo plano, por exemplo iniciando automaticamente usando 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;
}

Descubra o UUID do volume que você não deseja montar usando diskutil list (para obter o nome do dispositivo) e diskutil info para ler o UUID.

Salve como main.c e compile usando o seguinte comando (você precisa de Ferramentas de Desenvolvedor):

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

No Mac OS X 10.7.1, fazendo o seguinte funcionou para mim agora (praticamente idêntico ao que está no OS X Hint):

Primeiro, descubra o nome do dispositivo do volume que você não quer que seja montado:

diskutil list

A saída parcial é assim:

/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

Neste exemplo, DroboBackup é a partição real, então /dev/disk3s3 é o dispositivo que precisamos em seguida. Então descubra o seu UUID:

diskutil info /dev/disk3s3

Procure Volume UUID , por ex. 3B5315C1-96AE-3471-B43C-2C41CDB12A64 .

Em seguida, digite o seguinte:

sudo touch /etc/fstab
sudo sh -c 'echo "UUID=3B5315C1-96AE-3471-B43C-2C41CDB12A64 none hfs rw,noauto" >> /etc/fstab'

Isso impedirá que o disco seja montado.

    
por 16.09.2011 / 21:43
3

Eu não tenho um Iomega Prestige para testar, mas você pode tentar o utilitário Disk Arbitrator de Aaron Burghardt

A partir da introdução no README (grifo meu):

Disk Arbitrator is Mac OS X forensic utility designed to help the user ensure correct forensic procedures are followed during imaging of a disk device.

Disk Arbitrator is essentially a user interface to the Disk Arbitration framework, which enables a program to participate in the management of block storage devices, including the automatic mounting of file systems. When enabled, Disk Arbitrator will block the mounting of file systems to avoid mounting as read-write and violating the integrity of the evidence.

It is important to note that Disk Arbitrator is not a software write blocker—it does not change the state of currently attached devices nor does it affect newly attached devices to force a device to be read-only. The user still must be careful to not accidentally write to a disk with a command such as dd. Owing to this fact, a hardware or software write-blocker may still be desirable for the most sound procedure. Disk Arbitrator compliments a write-blocker with additional useful features and eliminates the typical forensic recommendation to "disable disk arbitration."

    
por 02.04.2012 / 14:37