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


39

如果fstabLion(和以前,我认为?)已弃用,如何正确防止分区在系统启动时挂载?

此问题松散相关,截至本文为止,该问题尚无答案。

编辑:

因此,我的困惑来自阅读有关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一起使用。
Dmitry Verkhoturov

接受的答案质疑fstab已过时的假设。我们应该相应地编辑问题吗?
DA Vincent

Answers:


29

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.

当以下程序运行时(无限循环,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:这是一个完全不同的文件,并且无关。例如参见此处此处
丹尼尔·贝克

我知道了。我/etc/fstab现在可以正常使用了。thx
Meltemi

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文档对此进行了解释-尽管我仍然不明白为什么)


如果您使用的是第三方驱动程序,例如Paragon NTFS,则未经修改可能无法使用此技术。例如,我必须使用标签(UUID不起作用),而文件系统类型必须是ufsd_NTFS。如果使用更标准的选项,它不会破坏任何东西,只是不起作用。
Zxaos 2013年

它没有用fat32!我都尝试UUIDLABEL为好。
Necktwi

2

由于我有同样的问题,并且还没有找到任何合理的解决方案,因此,我编写了很少的启动守护程序服务,该服务可防止装入具有指定标签的卷。

它在这里:https : //github.com/nanoant/mountblockd


1
Adaś在mountblocked中说要输入卷名。但是我有两卷同名。plist可以改用UUID吗?
爱德华·内德·哈维
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.