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

39

Si fstabest 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 à ce poste n'a pas de réponse.

Modifier:

Donc, ma confusion vient de la lecture à propos de fstab et de l’instruction /etc/fstab.hd. Alors ... /etc/fstabest-ce que je dois créer et ajouter des informations UUID pour empêcher le montage des 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.
Meltemi
la source
Il existe un script pour cela ( posté sur le forum apple par l'auteur ) - simple à utiliser, testé avec les versions 10.9 et 10.9.1.
Dmitry Verkhoturov
La réponse acceptée remet en cause l'hypothèse que fstab est obsolète. Devrions-nous modifier la question en conséquence?
DA Vincent

Réponses:

29

Ni man fstabni man diskarbitrationd(voir ici, par exemple) ne mentionnez la dépréciation 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 réclamations de dépréciation de fstabInternet circulent sur le Web depuis quelque temps déjà.

À partir d' ici :

etc / fstab est obsolète dans Leopard

À partir d' 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 ...

Hormis le fait qu'il n'y ait aucune mention de dépréciation dans sa documentation, pourquoi Apple aurait-il ajouté des utilitaires pour éditer correctement des fichiers de configuration dépréciés?

Citant man vifs:

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

Pendant l'exécution du programme suivant (boucle infinie, Ctrl-C pour quitter), aucun disque ne sera monté. Avec des 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
Daniel Beck
la source
C'est pareil avec cron. Aucune dépréciation, mais non utilisée par défaut. Il y a une différence.
Daniel Beck
Je ne réponds volontairement pas à la partie qui est une copie de la question mentionnée.
Daniel Beck
peut-être que je suis confus, eh bien, évidemment! voir éditer ci-dessus. Quelle est la différence entre /etc/fstabet / etc / fstab.hd`? peut-être que cela éclaircira ma confusion.
Meltemi le
1
@Meltemi: C'est un fichier totalement différent et sans lien. Voir par exemple ici ou ici .
Daniel Beck
ic. Je travaille avec /etc/fstabjuste bien maintenant. Merci
Meltemi le
20

Il n’est pas nécessaire d’exécuter des programmes ni de se soucier de l’emplacement de fstab.

Il suffit de lancer 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)

Milliways
la source
Si vous utilisez un pilote tiers, tel que Paragon NTFS, cette technique peut ne pas fonctionner sans modification. Par exemple, je devais utiliser une étiquette (les UUID ne fonctionneraient pas) et le type de système de fichiers devait être ufsd_NTFS à la place. Cela n'a rien cassé si les options plus standard ont été utilisées, cela n'a tout simplement pas fonctionné.
Zxaos
Cela n'a pas fonctionné pour fat32! J'ai essayé les deux UUIDet LABELaussi.
Necktwi
2

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

Adaś
la source
1
Adaś, dans mountblockd, le plist dit d'entrer le nom du volume. Mais j'ai deux volumes avec le même nom. Est-ce que le plist peut prendre UUID à la place?
Edward Ned Harvey