Mac Lion: fstab устарела. так, что заменяет это, чтобы препятствовать тому, чтобы раздел был установлен?

39

Если fstabв Lion устарела (и, как мне кажется, раньше), как можно предотвратить установку раздела при загрузке системы?

Это слабо связано с этим вопросом, который по состоянию на этот пост не имеет ответа.

Редактировать:

Так что мое замешательство возникает из-за того, что я прочитал о fstab и получил приказ отредактировать /etc/fstab.hd. Итак ... /etc/fstabчто мне нужно создать и куда я добавляю информацию UUID, чтобы предотвратить монтирование разделов?

$ 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.
Мельтеми
источник
Для этого есть скрипт ( опубликованный автором на яблочном форуме ) - простой в использовании, проверенный на работу с 10.9 и 10.9.1.
Дмитрий Верхотуров
Принятый ответ ставит под сомнение предположение, что fstab устарела. Должны ли мы редактировать вопрос соответственно?
Д.А. Винсент

Ответы:

29

Ни то, man fstabни другое man diskarbitrationd(см. Здесь, например) не упоминают об устаревании /etc/fstab.

Это не там по умолчанию, но почему это должно быть, если это просто было пусто, потому что значения по умолчанию хороши? Это там, если вам это нужно.


В fstabтечение некоторого времени в сети плавали заявления об устаревании .

От сюда :

etc / fstab устарела в Leopard

От сюда :

Я собирался предложить отредактировать файл / etc / fstab, но, видимо, он был объявлен устаревшим в Leopard и, вероятно, теперь удален из Snow Leopard ...

Помимо того, что в документации нет упоминания об устаревании, зачем Apple добавляет утилиты для правильного редактирования устаревших файлов конфигурации?

Цитирование man vifs:

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

В то время как следующая программа работает (бесконечный цикл, Ctrl-C для выхода), диск не будет подключен, при надлежащих условиях вы, конечно, можете управлять им более детально:

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

Сохраните как main.c и скомпилируйте, используя следующее (вам нужны инструменты разработчика):

cc main.c -o mountstopd -framework Foundation -framework DiskArbitration
Даниэль Бек
источник
Это похоже на cron. Нет устаревших, просто не используется по умолчанию. Есть разница
Даниэль Бек
Я намеренно не отвечаю на ту часть, которая является дубликатом упомянутого вопроса.
Даниэль Бек
может я запутался, ну очевидно! см. правку выше. в чем разница между /etc/fstab/ etc / fstab.hd`? возможно, это прояснит мою путаницу.
Meltemi
1
@Meltemi: Это совершенно другой файл, не связанный. Смотрите, например, здесь или здесь .
Даниэль Бек
IC. /etc/fstabТеперь у меня все хорошо работает . спасибо
Мелтеми,
20

Нет необходимости запускать программы или беспокоиться о том, где находится fstab.

Просто запустите sudo vifs и добавьте соответствующие строки в файл. Мой это: -

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

Убедитесь, что вы знаете, как изменить и сохранить файл в vim. Vimtutor научит вас основам.

PS / private / etc фактически совпадает с / etc. OS X обрабатывает URL-адрес внутренне (это объясняется в документации API - хотя я до сих пор не понимаю, почему)

Milliways
источник
Если вы используете драйвер третьей части, такой как Paragon NTFS, этот метод может не работать без изменений. Например, мне пришлось использовать метку (UUIDs не будут работать), а тип файловой системы должен был быть ufsd_NTFS. Ничего не сломалось, если использовались более стандартные опции, просто не работало.
Zxaos
Это не сработало fat32! Я пробовал и то UUIDи другое LABEL.
Necktwi
2

Поскольку у меня та же проблема, и я не нашел для этого приемлемого решения, я написал небольшую службу запуска демона, которая предотвращает монтирование томов с указанными метками.

Вот оно: https://github.com/nanoant/mountblockd

Ādas
источник
1
Adaś, в mountblockd, plist говорит, чтобы ввести имя тома. Но у меня есть два тома с тем же именем. Может ли plist взять UUID вместо этого?
Эдвард Нед Харви