पृष्ठभूमि में हर समय निम्नलिखित कार्यक्रम चालू रखें, उदा। ऑटो द्वारा उपयोग शुरू launchd
:
#include <CoreFoundation/CoreFoundation.h>
#include <DiskArbitration/DiskArbitration.h>
DADissenterRef BlockMount(DADiskRef disk, void *context)
{
DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, kDAReturnNotPermitted, CFSTR("forbidden!"));
CFDictionaryRef description = DADiskCopyDescription(disk);
// UUID of the disk you don't want to mount:
CFUUIDRef backupDisk = CFUUIDCreateFromString(NULL, CFStringCreateWithCString(NULL, "3B5315C1-96AE-3471-B43C-2C41CDB12A64", kCFStringEncodingUTF8));
if (CFDictionaryContainsKey(description, kDADiskDescriptionVolumeUUIDKey)) {
CFUUIDRef value = CFDictionaryGetValue(description, kDADiskDescriptionVolumeUUIDKey);
if (CFEqual(backupDisk, value)) {
return dissenter;
}
}
return NULL;
}
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;
}
उस वॉल्यूम का UUID ज्ञात करें जिसका उपयोग आप माउंट नहीं करना चाहते हैं diskutil list
(डिवाइस नाम प्राप्त करने के लिए) और diskutil info
UUID पढ़ने के लिए।
मुख्य कमांड के रूप में सहेजें और निम्नलिखित कमांड का उपयोग करके संकलन करें (आपको डेवलपर टूल की आवश्यकता है):
cc main.c -o mountstopd -framework Foundation -framework DiskArbitration
Mac OS X 10.7.1 पर, मेरे लिए अभी-अभी काम किया है (OS X Hint में जो है उसके बहुत समान)
सबसे पहले, उस वॉल्यूम का डिवाइस नाम पता करें जिसे आप माउंट नहीं करना चाहते हैं:
diskutil list
आंशिक उत्पादन इस तरह दिखता है:
/dev/disk3
#: TYPE NAME SIZE IDENTIFIER
0: Apple_partition_scheme *2.2 TB disk3
1: Apple_partition_map 32.3 KB disk3s1
2: Apple_HFS DroboBackup 2.2 TB disk3s3
इस उदाहरण में, DroboBackup वास्तविक विभाजन है, इसलिए /dev/disk3s3
वह डिवाइस है जिसकी हमें अगली आवश्यकता है। फिर इसका UUID पता करें:
diskutil info /dev/disk3s3
ढूंढें Volume UUID
, उदा। 3B5315C1-96AE-3471-B43C-2C41CDB12A64
।
फिर, निम्नलिखित दर्ज करें:
sudo touch /etc/fstab
sudo sh -c 'echo "UUID=3B5315C1-96AE-3471-B43C-2C41CDB12A64 none hfs rw,noauto" >> /etc/fstab'
यह डिस्क को माउंट होने से रोकेगा।