web-dev-qa-db-fra.com

Mac Lion: fstab est obsolète. alors qu'est-ce qui le remplace pour empêcher une partition de monter?

Si fstab est obsolète dans Lion (et avant, je pense?), Comment empêcher correctement une partition de monter au démarrage du système?

Ceci est vaguement lié à cette question qui, à compter de cet article, n'a pas de réponse.

Modifier:

Donc, ma confusion vient de la lecture à propos de fstab et de la modification de /etc/fstab.hd. Donc ... /etc/fstab est ce que je dois créer et où j'ajoute des informations UUID pour empêcher le montage de partitions?

$ 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.
39
Meltemi

Ni man fstab ni man diskarbitrationd (voir ici par exemple) ne mentionnent la désapprobation de /etc/fstab.

Ce n'est pas là par défaut, mais pourquoi devrait-il en être ainsi s'il était vide car les valeurs par défaut sont bonnes? C'est là si vous en avez besoin.


Des déclarations de dépréciation de fstab circulent sur le Web depuis quelque temps déjà.

De ici :

etc/fstab est obsolète dans Leopard

De ici :

J'allais suggérer de modifier le fichier/etc/fstab, mais apparemment, il est obsolète dans Leopard et est probablement maintenant supprimé de Snow Leopard ...

Outre le fait que la documentation ne mentionne aucune dépréciation, pourquoi Apple ajouterait-il des utilitaires permettant d’éditer correctement les fichiers de configuration obsolètes?

Citer man vifs:

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

Alors que le programme suivant est exécuté (boucle infinie, Ctrl-C pour quitter), aucun disque ne sera monté, avec les conditions appropriées, vous pouvez le contrôler plus finement, bien sûr:

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

Enregistrez en tant que main.c et compilez en utilisant ce qui suit (vous avez besoin des outils de développement):

cc main.c -o mountstopd -framework Foundation -framework DiskArbitration
29
Daniel Beck

Il n’est pas nécessaire d’exécuter des programmes ou de s’inquiéter de l’emplacement de fstab.

Il suffit d’exécuter Sudo vifs et d’ajouter les lignes appropriées au fichier. Le mien est:-

#
# 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

Assurez-vous de savoir comment modifier et enregistrer un fichier dans vim. Vimtutor va vous apprendre les bases.

PS/private/etc est en fait identique à/etc. OS X traite l'URL en interne (ceci est expliqué dans la documentation de l'API - bien que je ne comprenne toujours pas pourquoi)

20
Milliways

Depuis que j'ai le même problème et que je n'ai trouvé aucune solution résonable, j'ai écrit un petit service de démon de lancement empêchant le montage de volumes avec des étiquettes spécifiées.

La voici: https://github.com/nanoant/mountblockd

2
Adaś