Mac Lion:不推荐使用 fstab。那么什么替代它以防止分区安装?

Mel*_*emi 44 mac mount fstab automount osx-lion

如果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.
Run Code Online (Sandbox Code Playgroud)

Dan*_*eck 32

man fstab没有man diskarbitrationd(例如参见此处)提及弃用/etc/fstab.

默认情况下它不存在,但是为什么它会是空的,因为默认值很好?如果你需要它,它就在那里。


弃用 的声明fstab已经在网络上流传了一段时间。

这里

在 Leopard 中不推荐使用 etc/fstab

这里

我打算建议编辑 /etc/fstab 文件,但显然这在 Leopard 中已被弃用,现在可能已从 Snow Leopard 中删除...

除了在其文档中没有提及弃用这一事实之外,Apple为什么要添加实用程序来正确编辑弃用的配置文件?

引用man vifs

NAME
     vifs -- safely edit fstab
[...]
HISTORY
     The vifs utility originates from Mac OSX 10.5.
Run Code Online (Sandbox Code Playgroud)

当以下程序运行时(无限循环,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;
}
Run Code Online (Sandbox Code Playgroud)

另存为 main.c 并使用以下内容进行编译(您需要开发人员工具):

cc main.c -o mountstopd -framework Foundation -framework DiskArbitration
Run Code Online (Sandbox Code Playgroud)


Mil*_*ays 21

无需运行程序或担心 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
Run Code Online (Sandbox Code Playgroud)

确保您知道如何在 vim 中修改和保存文件。Vimtutor 会教你基础知识。

PS /private/etc 其实和 /etc 是一样的。OS X 在内部处理 url(这在 API 文档中有解释 - 虽然我仍然不明白为什么)