Mac Lion: fstab è obsoleto. quindi cosa lo sostituisce per impedire il montaggio di una partizione?


39

Se fstabè deprecato in Lion (e prima, penso?) Come si fa, correttamente, a impedire il montaggio di una partizione all'avvio del sistema?

Questo è vagamente correlato a questa domanda che a partire da questo post non ha risposta.

Modificare:

Quindi la mia confusione deriva dalla lettura di fstab e dal fatto che mi viene detto di modificarlo /etc/fstab.hd. Quindi ... /etc/fstabè ciò che devo creare e dove aggiungo le informazioni UUID per impedire il montaggio delle partizioni?

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


La risposta accettata mette in dubbio il presupposto che fstab sia deprecato. Dovremmo modificare la domanda di conseguenza?
DA Vincent,

Risposte:


29

man fstabman diskarbitrationd(vedi qui per esempio) menzione deprecazione di /etc/fstab.

Non è presente per impostazione predefinita, ma perché dovrebbe essere, se fosse vuoto perché le impostazioni predefinite sono buone? È lì se ne hai bisogno.


Le rivendicazioni di deprecazione di fstabfluttuano nel web da qualche tempo ormai.

Da qui :

etc / fstab è deprecato in Leopard

Da qui :

Stavo per suggerire di modificare il file / etc / fstab, ma apparentemente era deprecato in Leopard e probabilmente ora è stato rimosso da Snow Leopard ...

A parte il fatto che non c'è menzione di deprecazioni nella sua documentazione, perché Apple dovrebbe aggiungere utilità per modificare correttamente i file di configurazione obsoleti?

Citando man vifs:

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

Mentre viene eseguito il seguente programma (ciclo infinito, Ctrl-C per uscire), nessun disco verrà montato, con le condizioni adeguate è possibile controllarlo più chiaramente, ovviamente:

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

Salva come main.c e compila usando il seguente (hai bisogno di Strumenti per gli sviluppatori):

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

È simile con cron. Nessun deprezzamento, semplicemente non utilizzato per impostazione predefinita. C'è una differenza
Daniel Beck

Non sto rispondendo intenzionalmente alla parte che è un duplicato della domanda di riferimento.
Daniel Beck

forse sono confuso, beh, ovviamente! vedi modifica sopra. qual è la differenza tra /etc/fstabe / etc / fstab.hd`? forse questo chiarirà la mia confusione.
Meltemi,

1
@Meltemi: è un file completamente diverso e non correlato. Vedi ad esempio qui o qui .
Daniel Beck

circuito integrato. ora ho funzionato /etc/fstabbene. grazie
Meltemi,

20

Non è necessario eseguire programmi o preoccuparsi della posizione di fstab.

Basta eseguire sudo vifs e aggiungere le righe appropriate al file. Il mio è:-

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

Assicurati di sapere come modificare e salvare un file in vim. Vimtutor ti insegnerà le basi.

PS / private / etc è effettivamente lo stesso di / etc. OS X elabora l'URL internamente (questo è spiegato nella documentazione dell'API, anche se ancora non capisco perché)


Se si utilizza un driver di terze parti come Paragon NTFS, questa tecnica potrebbe non funzionare senza modifiche. Ad esempio, ho dovuto usare un'etichetta (gli UUID non funzionavano) e il tipo di filesystem doveva essere invece ufsd_NTFS. Non avrebbe rotto nulla se fossero state utilizzate le opzioni più standard, semplicemente non ha funzionato.
Zxaos,

Non ha funzionato per fat32! Ho provato entrambi UUIDe LABELanche.
Necktwi,

2

Dato che ho lo stesso problema e non ho trovato alcuna soluzione accettabile per questo, ho scritto un piccolo servizio daemon di avvio che impedisce il montaggio di volumi con etichette specificate.

Eccolo: https://github.com/nanoant/mountblockd


1
Adaś, in mountblockd, il plist dice di inserire il nome del volume. Ma ho due volumi con lo stesso nome. Il plist può invece prendere l'UUID?
Edward Ned Harvey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.