Mac Lion: fstab jest przestarzałe. więc co go zastępuje, aby zapobiec montowaniu partycji?

39

Jeśli fstabjest to przestarzałe w Lion (i myślę, że wcześniej?), W jaki sposób można właściwie zapobiec zamontowaniu partycji przy starcie systemu?

Jest to luźno związane z tym pytaniem, które na ten post nie ma odpowiedzi.

Edytować:

Więc moje zamieszanie wynika z przeczytania o fstab i polecenia edytowania /etc/fstab.hd. Więc ... /etc/fstabto, co muszę utworzyć i gdzie dodać informacje o UUID, aby zapobiec montowaniu partycji?

$ 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
źródło
Jest na to skrypt ( opublikowany przez autora na forum Apple ) - prosty w użyciu, przetestowany pod kątem 10.9 i 10.9.1.
Dmitrij Verkhoturov
Przyjęta odpowiedź kwestionuje założenie, że fstab jest przestarzały. Czy powinniśmy odpowiednio edytować pytanie?
DA Vincent

Odpowiedzi:

29

Ani man fstabani man diskarbitrationd(patrz tutaj na przykład) nie wspominają o rezygnacji z /etc/fstab.

Nie ma go domyślnie, ale dlaczego miałby być, gdyby był pusty, ponieważ wartości domyślne są dobre? Jest tam, jeśli potrzebujesz.


Roszczenia o wycofanie się krążyły fstabjuż po Internecie.

Od tutaj :

etc / fstab jest przestarzałe w systemie Leopard

Od tutaj :

Chciałem zaproponować edycję pliku / etc / fstab, ale najwyraźniej był on przestarzały w Leopardzie i prawdopodobnie został teraz usunięty z Snow Leopard ...

Oprócz faktu, że w dokumentacji nie ma wzmianki o przestarzałości, dlaczego Apple dodałoby narzędzia do prawidłowej edycji nieaktualnych plików konfiguracyjnych?

Cytowanie man vifs:

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

Podczas działania następującego programu (nieskończona pętla, Ctrl-C, aby wyjść), żaden dysk nie zostanie zamontowany, przy odpowiednich warunkach można go oczywiście kontrolować bardziej precyzyjnie:

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

Zapisz jako main.c i skompiluj, używając następujących narzędzi (potrzebujesz Narzędzi dla programistów):

cc main.c -o mountstopd -framework Foundation -framework DiskArbitration
Daniel Beck
źródło
Podobnie jest z cron. Bez utraty wartości, po prostu domyślnie nie używana. Jest różnica.
Daniel Beck
Celowo nie odpowiadam na część, która jest duplikatem przywoływanego pytania.
Daniel Beck
może jestem zdezorientowany, cóż, oczywiście! patrz edycja powyżej. jaka jest różnica między /etc/fstabi / etc / fstab.hd`? być może rozwiąże to moje zamieszanie.
Meltemi,
1
@Meltemi: To zupełnie inny plik i nie ma związku. Zobacz na przykład tutaj lub tutaj .
Daniel Beck
ic. mam już /etc/fstabdobrze. dzięki
Meltemi
20

Nie ma potrzeby uruchamiania programów ani martwienia się o to, gdzie znajduje się fstab.

Wystarczy uruchomić sudo vifs i dodać odpowiednie linie do pliku. Mój jest:-

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

Upewnij się, że wiesz, jak zmodyfikować i zapisać plik w vimie. Vimtutor nauczy Cię podstaw.

PS / private / etc jest w rzeczywistości taki sam jak / etc. OS X przetwarza adres URL wewnętrznie (jest to wyjaśnione w dokumentacji API - chociaż nadal nie rozumiem dlaczego)

Milliways
źródło
Jeśli używasz sterownika trzeciej części, takiego jak Paragon NTFS, ta technika może nie działać bez modyfikacji. Na przykład musiałem użyć etykiety (identyfikatory UUID nie będą działać), a typem systemu plików musiał być ufsd_NTFS. Nie zepsuło to niczego, gdyby zastosowano bardziej standardowe opcje, po prostu nie działało.
Zxaos,
To nie zadziałało fat32! Próbowałem zarówno, jak UUIDi LABELrównież.
Necktwi
2

Ponieważ mam ten sam problem i nie znalazłem żadnego rezonującego rozwiązania tego problemu, napisałem małą usługę demona uruchamiania, która uniemożliwia montowanie woluminów o określonych etykietach.

Oto on: https://github.com/nanoant/mountblockd

Adaś
źródło
1
Adaś, w mountblockd, plist mówi, aby wprowadzić nazwę woluminu. Ale mam dwa tomy o tej samej nazwie. Czy zamiast tego plist może przyjmować UUID?
Edward Ned Harvey,