Mac Lion: o fstab está obsoleto. Então, o que a substitui para impedir a montagem de uma partição?

39

Se fstabfoi descontinuado no Lion (e antes, acho?), Como alguém impede corretamente que uma partição seja montada na inicialização do sistema?

Isso está pouco relacionado a essa pergunta que, a partir deste post, não tem resposta.

Editar:

Portanto, a minha confusão vem da leitura sobre o fstab e da edição para edição /etc/fstab.hd. Então ... /etc/fstabé o que preciso criar e onde adiciono informações de UUID para impedir a montagem de partições?

$ cat /etc/fstab.hd 
IGNORE THIS FILE.
This file does nothing, contains no useful data, and might go away in
future releases.  Do not depend on this file or its contents.
Meltemi
fonte
Existe um script para isso ( publicado no fórum da apple pelo autor ) - simples de usar, testado trabalhando com 10.9 e 10.9.1.
Dmitry Verkhoturov
A resposta aceita questiona a suposição de que o fstab está obsoleto. Devemos editar a pergunta de acordo?
DA Vincent

Respostas:

29

Nem man fstabnem man diskarbitrationd(ver aqui , por exemplo) depreciação menção /etc/fstab.

Por padrão, não está lá, mas por que deveria estar se estivesse vazio porque os padrões são bons? Está lá se você precisar.


As reivindicações de descontinuação fstabestão flutuando na web há algum tempo.

A partir daqui :

etc / fstab está obsoleto no Leopard

A partir daqui :

Eu sugeriria editar o arquivo / etc / fstab, mas aparentemente isso foi preterido no Leopard e provavelmente agora está removido do Snow Leopard ...

Além do fato de não haver menção de descontinuação em sua documentação, por que a Apple adicionaria utilitários para editar corretamente os arquivos de configuração descontinuados?

Citação man vifs:

NAME
     vifs -- safely edit fstab
[...]
HISTORY
     The vifs utility originates from Mac OSX 10.5.

Enquanto o programa a seguir é executado (loop infinito, Ctrl-C para sair), nenhum disco será montado. Com as condições adequadas, você pode controlá-lo com mais detalhes, é claro:

#include <CoreFoundation/CoreFoundation.h>
#include <DiskArbitration/DiskArbitration.h>

DADissenterRef BlockMount(DADiskRef disk, void *context)
{
        DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, kDAReturnNotPermitted, CFSTR("forbidden!"));
        return dissenter;
}

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

Salve como main.ce compile usando o seguinte (você precisa das Ferramentas do desenvolvedor):

cc main.c -o mountstopd -framework Foundation -framework DiskArbitration
Daniel Beck
fonte
É semelhante com cron. Sem depreciação, apenas não usado por padrão. Há uma diferença.
Daniel Beck
Intencionalmente, não estou respondendo à parte que é uma duplicata da pergunta referenciada.
Daniel Beck
talvez eu esteja confuso, bem, obviamente! veja a edição acima. qual a diferença entre /etc/fstabe / etc / fstab.hd`? talvez isso esclareça minha confusão.
Meltemi
11
@Meltemi: É um arquivo totalmente diferente e não relacionado. Veja, por exemplo, aqui ou aqui .
Daniel Beck
ic. Eu tenho que trabalhar /etc/fstabmuito bem agora. thx
Meltemi
20

Não há necessidade de executar programas ou se preocupar com a localização do fstab.

Basta executar o sudo vifs e adicionar as linhas apropriadas ao arquivo. O meu é:-

#
# Warning - this file should only be modified with vifs(8)
#
# Failure to do so is unsupported and may be destructive.
#
UUID=E00F307A-9295-482E-8A79-2FA2C922F3CD none ntfs rw,noauto
LABEL=Tempy none ntfs rw,noauto

Certifique-se de saber como modificar e salvar um arquivo no vim. O Vimtutor ensinará o básico.

PS / private / etc é realmente o mesmo que / etc. O OS X processa o URL internamente (isso é explicado na documentação da API - embora eu ainda não entenda o porquê)

Milliways
fonte
Se você estiver usando um driver de terceiros, como o Paragon NTFS, essa técnica pode não funcionar sem modificações. Por exemplo, eu tive que usar um Label (os UUIDs não funcionariam) e o tipo de sistema de arquivos teve que ser ufsd_NTFS. Não quebrou nada se as opções mais padrão foram usadas, simplesmente não funcionou.
Zxaos
Não deu certo fat32! Eu tentei ambos UUIDe LABELtambém.
Necktwi
2

Como tenho o mesmo problema e não encontrei nenhuma solução razoável para isso, escrevi pouco serviço de daemon de inicialização que impede a montagem de volumes com etiquetas especificadas.

Aqui está: https://github.com/nanoant/mountblockd

Adaś
fonte
11
Adaś, em mountblockd, o plist diz para inserir o nome do volume. Mas eu tenho dois volumes com o mesmo nome. O plist pode usar o UUID?
Edward Ned Harvey