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.

3 ответа3

28

Ни 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
19

Нет необходимости запускать программы или беспокоиться о том, где находится 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 - хотя я до сих пор не понимаю, почему)

2

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .