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.


คำตอบที่ได้รับการยอมรับคำถามสมมติฐานที่ fstab จะเลิก เราควรแก้ไขคำถามให้เหมาะสมหรือไม่
DA Vincent

คำตอบ:


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มันคล้ายกับ ไม่มีการคัดค้านไม่ได้ใช้โดยค่าเริ่มต้น มีความแตกต่าง
Daniel Beck

ฉันตั้งใจไม่ตอบส่วนที่ซ้ำซ้อนของคำถามอ้างอิง
Daniel Beck

บางทีฉันอาจจะสับสนดีชัด! ดูการแก้ไขด้านบน ความแตกต่างระหว่าง/etc/fstabและ / etc / fstab.hd` คืออะไร บางทีนี่อาจจะทำให้ความสับสนของฉันชัดเจนขึ้น
Meltemi

1
@Meltemi: เป็นไฟล์ที่แตกต่างอย่างสิ้นเชิงและไม่เกี่ยวข้องกัน ดูตัวอย่างที่นี่หรือที่นี่
Daniel Beck

เข้าใจแล้ว. ฉันได้มันทำงานได้/etc/fstabดีตอนนี้ ขอบคุณ
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

ตรวจสอบให้แน่ใจว่าคุณรู้วิธีแก้ไขและบันทึกไฟล์เป็นกลุ่ม Vimtutor จะสอนพื้นฐานให้คุณ

PS / private / etc เป็นจริงเหมือนกับ / etc OS X ประมวลผล URL ภายใน (อธิบายไว้ในเอกสารประกอบ API - แม้ว่าฉันยังไม่เข้าใจว่าทำไม)


หากคุณใช้ไดรเวอร์ส่วนที่สามเช่น Paragon NTFS เทคนิคนี้อาจใช้ไม่ได้หากไม่มีการดัดแปลง ตัวอย่างเช่นฉันต้องใช้ Label (UUIDs จะไม่ทำงาน) และประเภทระบบไฟล์จะต้องเป็น ufsd_NTFS แทน ไม่ทำลายอะไรเลยหากใช้ตัวเลือกมาตรฐานมากกว่านี้มันก็ไม่ทำงาน
Zxaos

มันใช้งานไม่ได้fat32! ฉันลองทั้งUUIDและLABELเช่นกัน
Necktwi

2

เนื่องจากฉันมีปัญหาเดียวกันและไม่พบวิธีแก้ปัญหาที่เป็นกันเองสำหรับเรื่องนี้ฉันจึงเขียนบริการ launchemon เพียงเล็กน้อยซึ่งป้องกันการติดตั้งไดรฟ์ข้อมูลด้วยป้ายกำกับที่ระบุ

นี่คือ: https://github.com/nanoant/mountblockd


1
อย่างไรก็ตาม, ใน mountblockd, Plist บอกว่าจะใส่ชื่อเสียง แต่ฉันมีสองเล่มที่มีชื่อเดียวกัน ผู้วางแผนสามารถใช้ UUID แทนได้หรือไม่
Edward Ned Harvey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.