Dlaczego nie mogę otworzyć plików DMG, które znajdują się w systemie plików NFS tylko do odczytu?

15

Odkryłem dziwny problem ... jeśli mam pliki obrazów dysku (DMG), które znajdują się w udziale NFS tylko do odczytu, nie mogę ich otworzyć w Mac OS X 10.7.5. Te same pliki otwierają się dobrze, gdy są dostępne przez AFP. Jednak próba ich otwarcia przy użyciu hdiutil attachudziału NFS powoduje „dołączenie nie powiodło się - system plików tylko do odczytu”:

bash-3.2# /usr/bin/hdiutil attach /Volumes/nfs_share/Some.dmg
hdiutil: attach failed - Read-only file system

Nawet jeśli udział AFP jest tylko do odczytu, mogę dołączyć te same obrazy. Ale z jakiegoś powodu udział NFS tylko do odczytu nie działa.

Ostatecznie chcę dołączyć obrazy z plikiem cienia , aby zamontować obrazy tylko do odczytu jako do odczytu i zapisu. Ale to również kończy się niepowodzeniem w ten sam sposób:

bash-3.2# /usr/bin/hdiutil attach /Volumes/nfs_share/Some.dmg -mountpoint /Somewhere -shadow /path/to/Some-Shadow
hdiutil: attach failed - Read-only file system

Ponownie działa to idealnie, jeśli obraz jest wyświetlany za pośrednictwem AFP. Działa również dobrze, jeśli udział NFS jest do odczytu i zapisu, ale ze względów bezpieczeństwa nie mogę tego zrobić.

Jak zamontować pliki DMG, które znajdują się w udziale NFS tylko do odczytu?


Dodatkowe informacje:

Odpowiednia linia z /etc/exportsserwera FreeNAS (FreeBSD 8.2-RELEASE-p7):

/mnt/raid/netboot -alldirs -ro -mapall=netboot:netboot -network 10.100.0.0/16

Wyjście /usr/bin/hdiutil attach -verbose /Volumes/netboot/Lion.nbi/Library.dmg -notremovable -shadow /private/var/netboot/Library-Shadow -owners on -noverify -noautofsck -nobrowse:

Initializing…
DIBackingStoreInstantiatorProbe: interface  0, score      100, CBSDBackingStore
DIBackingStoreInstantiatorProbe: interface  1, score    -1000, CBundleBackingStore
DIBackingStoreInstantiatorProbe: interface  2, score    -1000, CRAMBackingStore
DIBackingStoreInstantiatorProbe: interface  3, score      100, CCarbonBackingStore
DIBackingStoreInstantiatorProbe: interface  4, score    -1000, CDevBackingStore
DIBackingStoreInstantiatorProbe: interface  5, score    -1000, CCURLBackingStore
DIBackingStoreInstantiatorProbe: interface  6, score    -1000, CVectoredBackingStore
CBSDBackingStore::newProbe stat() failed.  No such file or directory.
DIBackingStoreInstantiatorProbe: interface  0, score        1, CBSDBackingStore
DIBackingStoreInstantiatorProbe: interface  1, score    -1000, CBundleBackingStore
DIBackingStoreInstantiatorProbe: interface  2, score    -1000, CRAMBackingStore
DIBackingStoreInstantiatorProbe: interface  3, score    -1000, CCarbonBackingStore
DIBackingStoreInstantiatorProbe: interface  4, score    -1000, CDevBackingStore
DIBackingStoreInstantiatorProbe: interface  5, score    -1000, CCURLBackingStore
DIBackingStoreInstantiatorProbe: interface  6, score    -1000, CVectoredBackingStore
DIBackingStoreInstantiatorProbe: interface  0, score      100, CBSDBackingStore
DIBackingStoreInstantiatorProbe: interface  1, score    -1000, CBundleBackingStore
DIBackingStoreInstantiatorProbe: interface  2, score    -1000, CRAMBackingStore
DIBackingStoreInstantiatorProbe: interface  3, score      100, CCarbonBackingStore
DIBackingStoreInstantiatorProbe: interface  4, score    -1000, CDevBackingStore
DIBackingStoreInstantiatorProbe: interface  5, score    -1000, CCURLBackingStore
DIBackingStoreInstantiatorProbe: interface  6, score    -1000, CVectoredBackingStore
Attaching…
Error 30 (Read-only file system).
Finishing…
DIHLDiskImageAttach() returned 30
hdiutil: attach failed - Read-only file system

Dane wyjściowe rpcinfo -pna serwerze NFS:

   program vers proto   port  service
    100000    4   tcp    111  rpcbind
    100000    3   tcp    111  rpcbind
    100000    2   tcp    111  rpcbind
    100000    4   udp    111  rpcbind
    100000    3   udp    111  rpcbind
    100000    2   udp    111  rpcbind
    100000    4 local    111  rpcbind
    100000    3 local    111  rpcbind
    100000    2 local    111  rpcbind
    100005    1   udp    967  mountd
    100005    3   udp    967  mountd
    100005    1   tcp    967  mountd
    100005    3   tcp    967  mountd
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100024    1   udp    689  status
    100024    1   tcp    689  status
    100021    0   udp    616  nlockmgr
    100021    0   tcp    927  nlockmgr
    100021    1   udp    616  nlockmgr
    100021    1   tcp    927  nlockmgr
    100021    3   udp    616  nlockmgr
    100021    3   tcp    927  nlockmgr
    100021    4   udp    616  nlockmgr
    100021    4   tcp    927  nlockmgr

Dane wyjściowe mountklienta Mac OS X 10.7.5:

/dev/disk1s2 on / (hfs, local)
devfs on /dev (devfs, local, nobrowse)
afp_0egBhf12TAP01SptRt47XSdj-3.2c000002 on /private/var/netboot (afpfs, nobrowse)
afp_0egBhf12TAP01SptRt47XSdj-4.2c000004 on /Network/Applications (afpfs, read-only)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
afp_0egBhf12TAP01SptRt47XSdj-4.2c000008 on /Network/Servers/chef.farcry.sitepalette.com/Users (afpfs, nodev, nosuid, automounted, nobrowse, mounted by jnet)
afp_0egBhf12TAP01SptRt47XSdj-4.2c000009 on /Volumes/Users (afpfs, nodev, nosuid, mounted by jnet)
10.100.1.2:/mnt/raid/netboot on /Volumes/netboot (nfs)

I wreszcie wynik /usr/bin/hdiutil attach -debug /Volumes/netboot/Lion.nbi/Library.dmg -notremovable -shadow /private/var/netboot/Library-Shadow -owners on -noverify -noautofsck -nobrowse:

calling DIHLDiskImageAttach with 
skip-verify: true
auto-fsck: false
drive-options:
quiet: false
shadow-url: file://localhost/private/var/netboot/Library-Shadow
mount-nobrowse: true
enable-owners: true
verbose: false
debug: true
agent: hdiutil
fixed-disk: true
image-options:
main-url: file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
2012-11-27 12:02:23.053 hdiutil[23401:707] DIHLDiskImageAttach: input dictionary {
    agent = hdiutil;
    "auto-fsck" = 0;
    debug = 1;
    "drive-options" =     {
    };
    "enable-owners" = 1;
    "fixed-disk" = 1;
    "image-options" =     {
    };
    "main-url" = "file://localhost/Volumes/netboot/Lion.nbi/Library.dmg";
    "mount-nobrowse" = 1;
    quiet = 0;
    "shadow-url" = "file://localhost/private/var/netboot/Library-Shadow";
    "skip-verify" = 1;
    verbose = 0;
}
2012-11-27 12:02:23.054 hdiutil[23401:707] DIHLDiskImageAttach: disabling legacy image format attach
2012-11-27 12:02:23.055 hdiutil[23401:707] DIHLDiskImageAttach: newImagekeys = {
    "legacy-disabled" = 1;
}
2012-11-27 12:02:23.055 hdiutil[23401:707] DIHLDiskImageAttach: creating DIHelperProxy
2012-11-27 12:02:23.056 hdiutil[23401:707] with dictionary: {
    agent = hdiutil;
    "auto-fsck" = 0;
    debug = 1;
    "drive-options" = <62706c69 73743030 d0080000 00000000 01010000 00000000 00010000 00000000 00000000 00000000 0009>;
    "enable-owners" = 1;
    "fixed-disk" = 1;
    "image-options" = <62706c69 73743030 d101025f 100f6c65 67616379 2d646973 61626c65 6409080b 1d000000 00000001 01000000 00000000 03000000 00000000 00000000 00000000 1e>;
    "main-url" = "file://localhost/Volumes/netboot/Lion.nbi/Library.dmg";
    "mount-nobrowse" = 1;
    operation = DIHelperAttach;
    quiet = 0;
    "shadow-url" = "file://localhost/private/var/netboot/Library-Shadow";
    "skip-verify" = 1;
    verbose = 0;
}
2012-11-27 12:02:23.056 hdiutil[23401:707] [DIHelperProxy alloc]
2012-11-27 12:02:23.056 hdiutil[23401:707] [DIHelperProxy alloc] returning self 0x7fa39b00d690, retainCount 1
2012-11-27 12:02:23.057 hdiutil[23401:707] DIHLDiskImageAttach: running DIHelperProxy
2012-11-27 12:02:23.057 hdiutil[23401:707] [DIHelperProxy performOperationReturning] entry
2012-11-27 12:02:23.057 hdiutil[23401:707] [DIHelperProxy performOperationReturning] detaching thread
2012-11-27 12:02:23.058 hdiutil[23401:2803] [DIHelperProxy workerThread] entry
2012-11-27 12:02:23.058 hdiutil[23401:2803] [DIHelperProxy workerThread] setting up server
2012-11-27 12:02:23.059 hdiutil[23401:2803] [DIHelperProxy threadSetupServer] entry
2012-11-27 12:02:23.059 hdiutil[23401:2803] [DIHelperProxy threadSetupServer] setting up _headerConnection
2012-11-27 12:02:23.060 hdiutil[23401:2803] [DIHelperProxy threadSetupServer] setting up _headerConnection rootObject
2012-11-27 12:02:23.060 hdiutil[23401:2803] [DIHelperProxy threadSetupServer] adding NSConnectionDidInitializeNotification notification
2012-11-27 12:02:23.061 hdiutil[23401:2803] [DIHelperProxy threadSetupServer] exiting
2012-11-27 12:02:23.061 hdiutil[23401:2803] [DIHelperProxy workerThread] launching
2012-11-27 12:02:23.061 hdiutil[23401:2803] [DIHelperProxy threadLaunchToolAuthenticated] entry
2012-11-27 12:02:23.063 hdiutil[23401:2803] launching helper tool at "/System/Library/PrivateFrameworks/DiskImages.framework/Resources/diskimages-helper".
2012-11-27 12:02:23.063 hdiutil[23401:2803] [DIHelperProxy threadLaunchToolAuthenticated] adding NSTaskDidTerminateNotification notification
2012-11-27 12:02:23.063 hdiutil[23401:2803] [DIHelperProxy thread LaunchToolAuthenticated] launching
2012-11-27 12:02:23.065 hdiutil[23401:2803] [DIHelperProxy threadLaunchToolAuthenticated] exiting
2012-11-27 12:02:23.065 hdiutil[23401:2803] [DIHelperProxy workerThread] running runloop
2012-11-27 12:02:23.081 hdiutil[23401:2803] [DIHelperProxy helperConnectionInitialized] entry
2012-11-27 12:02:23.081 hdiutil[23401:2803] [DIHelperProxy helperConnectionInitialized] adding new NSConnectionDidDieNotification notification
2012-11-27 12:02:23.081 hdiutil[23401:2803] [DIHelperProxy helperConnectionInitialized] removing old NSConnectionDidDieNotification notification
2012-11-27 12:02:23.082 hdiutil[23401:2803] [DIHelperProxy helperConnectionInitialized] removing old connection rootObject
2012-11-27 12:02:23.082 hdiutil[23401:2803] [DIHelperProxy helperConnectionInitialized] invalidating old connection
2012-11-27 12:02:23.083 hdiutil[23401:2803] [DIHelperProxy helperConnectionInitialized] releasing old connection
2012-11-27 12:02:23.083 hdiutil[23401:2803] [DIHelperProxy helperConnectionInitialized] and replacing with new connection
2012-11-27 12:02:23.083 hdiutil[23401:2803] [DIHelperProxy helperConnectionInitialized] exit
2012-11-27 12:02:23.085 hdiutil[23401:2803] [DIHelperProxy connectToFramework] entry, helper 0x7fa39b016940
2012-11-27 12:02:23.085 hdiutil[23401:2803] [DIHelperProxy connectToFramework] exit
2012-11-27 12:02:23.186 hdiutil[23401:2803] [DIHelperProxy sendOperationToHelper] entry
2012-11-27 12:02:23.187 hdiutil[23401:2803] [DIHelperProxy sendOperationToHelper] starting operation with helper
2012-11-27 12:02:23.190 hdiutil[23401:2803] [DIHelperProxy sendOperationToHelper] exit
2012-11-27 12:02:23.194 hdiutil[23401:2803] [DIHelperProxy frameworkCallbackWithDictionary] entry
status proc called: initialize
Initializing…
myStatusProc: returning 0 
2012-11-27 12:02:23.199 hdiutil[23401:2803] [DIHelperProxy frameworkCallbackWithDictionary] exit
2012-11-27 12:02:23.201 diskimages-helper[23407:2503] updateImageAndDriveDictionaries: before update _imageOptions: {
    "enable-keychain" = 1;
    writeable = 0;
}
2012-11-27 12:02:23.201 diskimages-helper[23407:2503] updateImageAndDriveDictionaries: _imageOptions: {
    "enable-keychain" = 1;
    "legacy-disabled" = 1;
    writeable = 0;
}
2012-11-27 12:02:23.202 diskimages-helper[23407:2503] _driveOptions: {
    "auto-fsck" = 0;
    autodiskmount = 1;
    removable = 0;
    "unmount-timeout" = 0;
}
2012-11-27 12:02:23.202 diskimages-helper[23407:2503] DIHelperAttach: performOperation: initializing framework
2012-11-27 12:02:23.202 diskimages-helper[23407:2503] {
    agent = hdiutil;
    "auto-fsck" = 0;
    "auto-fsck-failure-override-type" = callback;
    "auto-open-ro-root" = 0;
    "auto-open-rw-root" = 0;
    "auto-stretch" = 0;
    "bundlebs-checkpointing" = 0;
    "bundlebs-localcloseonflush" = 0;
    "bundlebs-localcloseonidle" = 0;
    "bundlebs-localcloseonsleep" = 0;
    "bundlebs-localfdcount" = 6;
    "bundlebs-remotecloseonflush" = 0;
    "bundlebs-remotecloseonidle" = 0;
    "bundlebs-remotecloseonsleep" = 0;
    "bundlebs-remotefdcount" = 3;
    "burn-apple-supported-devices-only" = 0;
    "burn-no-underrun-protection" = 0;
    "burn-synthesize-content" = 1;
    "bzip2-level" = 0;
    "callback-with-sla" = 1;
    debug = 1;
    "disable-encrypted-images" = 0;
    "disable-kernel-mounting" = 1;
    "disable-owners" = 0;
    "drive-options" = <62706c69 73743030 d0080000 00000000 01010000 00000000 00010000 00000000 00000000 00000000 0009>;
    "enable-owners" = 1;
    "filevault-default-case-sensitive-file-system" = "Case-sensitive Journaled HFS+";
    "filevault-default-encryption-type" = "AES-128";
    "filevault-default-file-system" = "Journaled HFS+";
    "filevault-default-image-type" = SPARSEBUNDLE;
    "filevault-default-partition-type" = SPUD;
    "filevault-default-volume-name" = FileVault;
    "fixed-disk" = 1;
    "force-idme" = 0;
    "hfsplus-stretch-parameters" =     {
        "hfsplus-stretch-allocation-block-size" = 4096;
        "hfsplus-stretch-allocation-file-size" = 8388608;
        "hfsplus-stretch-threshold" = 524288;
    };
    "idle-timeout" = 15;
    "ifd-format" = UDZO;
    "ifd-ignore-io-errors" = 1;
    "ifd-segment-size" = 0;
    "iff-format" = UDZO;
    "iff-fs" = "HFS+";
    "iff-layout" = SPUD;
    "iff-source-owners" = auto;
    "iff-spotlight-indexing" = 0;
    "iff-temp-sparse-band-size" = 20480;
    "iff-temp-use-rw-if-possible" = 1;
    "iff-usehelper" = 1;
    "ignore-bad-checksums" = 0;
    "image-options" = <62706c69 73743030 d101025f 100f6c65 67616379 2d646973 61626c65 6409080b 1d000000 00000001 01000000 00000000 03000000 00000000 00000000 00000000 1e>;
    "main-url" = "file://localhost/Volumes/netboot/Lion.nbi/Library.dmg";
    "mount-attempted" = 1;
    "mount-nobrowse" = 1;
    "mount-point" = "/Volumes/";
    "mount-private" = 0;
    "mount-required" = 1;
    "mount-type" = in;
    "nbi-spotlight-indexing" = 0;
    operation = DIHelperAttach;
    "progress-delay" = 5;
    "pthread-reader-cap" = 4;
    quiet = 0;
    "reauthenticate-upon-wake" = 1;
    "shadow-url" = "file://localhost/private/var/netboot/Library-Shadow";
    "skip-auto-fsck-for-system-images" = 1;
    "skip-idme" = 1;
    "skip-idme-reveal" = 0;
    "skip-idme-trash" = 0;
    "skip-previously-verified" = 1;
    "skip-sla" = 0;
    "skip-verify" = 1;
    "skip-verify-locked" = 0;
    "skip-verify-remote" = 1;
    "sparsebundle-compactonidle" = 0;
    "suppress-uiagent" = 1;
    "unmount-timeout" = 0;
    "use-compressed-xml" = 0;
    "use-keychain" = 1;
    verbose = 0;
    "zlib-level" = 1;
}
DILoadDriver: checking for disk image driver
DILoadDriver: DI_kextExists() returned 0x00000000 (0)
DIIsInitialized: returning NO
2012-11-27 12:02:23.206 diskimages-helper[23407:2503] -checkForPreviouslyAttachedImage: entry
2012-11-27 12:02:23.206 diskimages-helper[23407:2503] imageURL file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
2012-11-27 12:02:23.206 diskimages-helper[23407:2503] shadowURL file://localhost/private/var/netboot/Library-Shadow
2012-11-27 12:02:23.207 diskimages-helper[23407:2503] sectionStart (null) sectionLength (null)
2012-11-27 12:02:23.207 diskimages-helper[23407:2503] checkForPreviouslyAttachedImage: setting legacy-disabled to 1
DIIsInitialized: returning YES
DIBackingStoreNewWithCFURL: entry with
file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
skip-permissions-check: true
legacy-disabled: true
DIBackingStoreInstantiatorProbe: entry
file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
skip-permissions-check: true
legacy-disabled: true
DIBackingStoreInstantiatorProbe: probing interface 0 CBSDBackingStore
CBSDBackingStore::newProbe score 100 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 1 CBundleBackingStore
CBundleBackingStore::newProbe score -1000 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 2 CRAMBackingStore
CRAMBackingStore::probe: scheme "file": not ram: or ramdisk: scheme.
CRAMBackingStore::probe: score -1000 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 3 CCarbonBackingStore
CCarbonBackingStore::newProbe: setting initial rval to +100
CCarbonBackingStore::newProbe score 100 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 4 CDevBackingStore
CDevBackingStore::newProbe: not /dev/disk or /dev/rdisk (/Volumes/netboot/Lion.nbi/Library.dmg).CDevBackingStore::newProbe score -1000 for 
DIBackingStoreInstantiatorProbe: probing interface 5 CCURLBackingStore
CCURLBackingStore::probe: scheme is: file
CCURLBackingStore::probe: not recognized URL scheme.
CCURLBackingStore::probe: score -1000 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 6 CVectoredBackingStore
CVectoredBackingStore::newProbe not "vectored" scheme.
CVectoredBackingStore::newProbe score -1000 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: selecting CBSDBackingStore
DIBackingStoreNewWithCFURL: CBSDBackingStore
CBSDBackingStore::setNoFollow: setting _noFollow to 0
DIBackingStoreNewWithCFURL: instantiator returned 0
DIBackingStoreNewWithCFURL: returning 0
2012-11-27 12:02:23.208 diskimages-helper[23407:2503] -checkForPreviouslyAttachedImage: resolving file://localhost/Volumes/netboot/Lion.nbi/Library.dmg returned 0
DIIsInitialized: returning YES
DIBackingStoreNewWithCFURL: entry with
file://localhost/private/var/netboot/Library-Shadow
skip-permissions-check: true
DIBackingStoreInstantiatorProbe: entry
file://localhost/private/var/netboot/Library-Shadow
skip-permissions-check: true
DIBackingStoreInstantiatorProbe: probing interface 0 CBSDBackingStore
CBSDBackingStore::newProbe score 1 for file://localhost/private/var/netboot/Library-Shadow
DIBackingStoreInstantiatorProbe: probing interface 1 CBundleBackingStore
CBundleBackingStore::newProbe score -1000 for file://localhost/private/var/netboot/Library-Shadow
DIBackingStoreInstantiatorProbe: probing interface 2 CRAMBackingStore
CRAMBackingStore::probe: scheme "file": not ram: or ramdisk: scheme.
CRAMBackingStore::probe: score -1000 for file://localhost/private/var/netboot/Library-Shadow
DIBackingStoreInstantiatorProbe: probing interface 3 CCarbonBackingStore
CCarbonBackingStore::newProbe stat() failed.  No such file or directory.
CCarbonBackingStore::newProbe score -1000 for file://localhost/private/var/netboot/Library-Shadow
DIBackingStoreInstantiatorProbe: probing interface 4 CDevBackingStore
CDevBackingStore::newProbe: not /dev/disk or /dev/rdisk (/private/var/netboot/Library-Shadow).CDevBackingStore::newProbe score -1000 for 
DIBackingStoreInstantiatorProbe: probing interface 5 CCURLBackingStore
CCURLBackingStore::probe: scheme is: file
CCURLBackingStore::probe: not recognized URL scheme.
CCURLBackingStore::probe: score -1000 for file://localhost/private/var/netboot/Library-Shadow
DIBackingStoreInstantiatorProbe: probing interface 6 CVectoredBackingStore
CVectoredBackingStore::newProbe not "vectored" scheme.
CVectoredBackingStore::newProbe score -1000 for file://localhost/private/var/netboot/Library-Shadow
DIBackingStoreInstantiatorProbe: selecting CBSDBackingStore
DIBackingStoreNewWithCFURL: CBSDBackingStore
DIBackingStoreNewWithCFURL: instantiator returned 2
DIBackingStoreNewWithCFURL: returning 2
DIResolveURLToBackingStore: unable to resolve to any backing store class. 2. 
2012-11-27 12:02:23.208 diskimages-helper[23407:2503] -checkForPreviouslyAttachedImage: resolving shadow file://localhost/private/var/netboot/Library-Shadow returned 2
2012-11-27 12:02:23.208 diskimages-helper[23407:2503] DIHelperAttach: performOperation: resolving disk image
DIIsInitialized: returning YES
DIIsInitialized: returning YES
DIBackingStoreNewWithCFURL: entry with
file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
legacy-disabled: true
writeable: false
enable-keychain: true
image-path: /Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: entry
file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
legacy-disabled: true
writeable: false
enable-keychain: true
image-path: /Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 0 CBSDBackingStore
CBSDBackingStore::newProbe score 100 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 1 CBundleBackingStore
CBundleBackingStore::newProbe score -1000 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 2 CRAMBackingStore
CRAMBackingStore::probe: scheme "file": not ram: or ramdisk: scheme.
CRAMBackingStore::probe: score -1000 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 3 CCarbonBackingStore
CCarbonBackingStore::newProbe: setting initial rval to +100
CCarbonBackingStore::newProbe score 100 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 4 CDevBackingStore
CDevBackingStore::newProbe: not /dev/disk or /dev/rdisk (/Volumes/netboot/Lion.nbi/Library.dmg).CDevBackingStore::newProbe score -1000 for 
DIBackingStoreInstantiatorProbe: probing interface 5 CCURLBackingStore
CCURLBackingStore::probe: scheme is: file
CCURLBackingStore::probe: not recognized URL scheme.
CCURLBackingStore::probe: score -1000 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: probing interface 6 CVectoredBackingStore
CVectoredBackingStore::newProbe not "vectored" scheme.
CVectoredBackingStore::newProbe score -1000 for file://localhost/Volumes/netboot/Lion.nbi/Library.dmg
DIBackingStoreInstantiatorProbe: selecting CBSDBackingStore
DIBackingStoreNewWithCFURL: CBSDBackingStore
CBSDBackingStore::setPermission: opening /Volumes/netboot/Lion.nbi/Library.dmg
CBSDBackingStore::OpenLockFriendly: mapping flags 0x00000000 -> 0x00000014 (locks are MANDATORY)
CBSDBackingStore:OpenLockFriendly: could not open with lock 30
DIBackingStoreNewWithCFURL: instantiator returned 30
DIBackingStoreNewWithCFURL: returning 30
DIResolveURLToBackingStore: unable to resolve to any backing store class. 30. 
DIResolveURLToDiskImage: resolving backing store/file encoding failed. 30. 
2012-11-27 12:02:23.211 hdiutil[23401:2803] [DIHelperProxy frameworkCallbackWithDictionary] entry
status proc called: attach
Attaching…
Error 30 (Read-only file system).
myStatusProc: returning 0 
2012-11-27 12:02:23.227 hdiutil[23401:2803] [DIHelperProxy frameworkCallbackWithDictionary] exit
2012-11-27 12:02:23.228 hdiutil[23401:2803] [DIHelperProxy frameworkCallbackWithDictionary] entry
status proc called: cleanup
Finishing…
myStatusProc: returning 0 
2012-11-27 12:02:23.228 hdiutil[23401:2803] [DIHelperProxy frameworkCallbackWithDictionary] exit
2012-11-27 12:02:23.229 diskimages-helper[23407:2503] DIHelperAttach performOperation: returning 30
2012-11-27 12:02:23.229 diskimages-helper[23407:2503] -decrementBackgroundThreadCount: _backgroundThreadCount is now 0.
2012-11-27 12:02:23.229 diskimages-helper[23407:303] DIHelper _report_results: reporting {
    payload =     {
    };
    "result-code" = 30;
}
2012-11-27 12:02:23.230 hdiutil[23401:2803] reportResultsToFramework: proxy has finished operation
2012-11-27 12:02:23.230 hdiutil[23401:2803] reportResultsToFramework: results are: {
    payload =     {
    };
    "result-code" = 30;
}
2012-11-27 12:02:23.230 hdiutil[23401:2803] reportResultsToFramework: _threadResultsError is 30
2012-11-27 12:02:23.231 hdiutil[23401:2803] reportResultsToFramework: disconnecting from helper.
2012-11-27 12:02:23.231 diskimages-helper[23407:303] -setCanTerminate: main thread can exit
2012-11-27 12:02:23.332 hdiutil[23401:2803] [DIHelperProxy disconnectFromHelper] entry
2012-11-27 12:02:23.333 hdiutil[23401:2803] disconnectFromHelper: removing observers
2012-11-27 12:02:23.333 hdiutil[23401:2803] disconnectFromHelper: terminating proxy
2012-11-27 12:02:23.334 diskimages-helper[23407:303] DIHelper: terminateHelper: entry.
2012-11-27 12:02:23.334 hdiutil[23401:2803] disconnectFromHelper: terminated proxy
2012-11-27 12:02:23.335 hdiutil[23401:2803] [DIHelperProxy disconnectFromHelper] releasing helper
2012-11-27 12:02:23.335 hdiutil[23401:2803] [DIHelperProxy disconnectFromHelper] exit
2012-11-27 12:02:23.435 diskimages-helper[23407:303] [DIHelper frameworkConnectionDied] entry
2012-11-27 12:02:23.435 diskimages-helper[23407:303] [DIHelper frameworkConnectionDied] releasing connection
2012-11-27 12:02:23.435 diskimages-helper[23407:303] [DIHelper frameworkConnectionDied] releasing frameworkProxy
2012-11-27 12:02:23.435 diskimages-helper[23407:303] -DIHelperAgentMaster terminateUIAgentConnection.
2012-11-27 12:02:23.435 diskimages-helper[23407:303] [DIHelper frameworkConnectionDied] marking _frameworkDisconnected
2012-11-27 12:02:23.435 diskimages-helper[23407:303] [DIHelper frameworkConnectionDied] exiting
2012-11-27 12:02:24.232 hdiutil[23401:2803] [DIHelperProxy workerThread] removing NSConnectionDidDieNotification observers
2012-11-27 12:02:24.233 hdiutil[23401:2803] [DIHelperProxy workerThread] removing NSConnectionDidInitializeNotification observers
2012-11-27 12:02:24.234 hdiutil[23401:2803] [DIHelperProxy workerThread] removing NSTaskDidTerminateNotification observers
2012-11-27 12:02:24.234 hdiutil[23401:2803] [DIHelperProxy threadRunRunLoop] invalidating connection
2012-11-27 12:02:24.235 diskimages-helper[23407:303] DIHelper dealloc.
2012-11-27 12:02:24.234 hdiutil[23401:2803] [DIHelperProxy threadRunRunLoop] releasing connection
2012-11-27 12:02:24.235 diskimages-helper[23407:303] -DIHelperAgentMaster terminateUIAgentConnection.
2012-11-27 12:02:24.235 hdiutil[23401:2803] [DIHelperProxy workerThread] after running runloop
2012-11-27 12:02:24.235 diskimages-helper[23407:303] helper: child_after_exec returning 0
2012-11-27 12:02:24.235 hdiutil[23401:2803] [DIHelperProxy workerThread] waiting for task to terminate to avoid zombies
2012-11-27 12:02:24.236 hdiutil[23401:2803] [DIHelperProxy workerThread] releasing task
2012-11-27 12:02:24.236 hdiutil[23401:2803] [DIHelperProxy workerThread] exiting
2012-11-27 12:02:24.236 hdiutil[23401:707] [DIHelperProxy performOperationReturning] returning 30
2012-11-27 12:02:24.237 hdiutil[23401:707] DIHLDiskImageAttach: DIHelperProxy returned 30
2012-11-27 12:02:24.237 hdiutil[23401:707] [DIHelperProxy dealloc]
DIHLDiskImageAttach() returned 30
hdiutil: attach failed - Read-only file system
kyle:~ root# 
Josh
źródło
1
Nie mam udziału NFS do testowania, ale spróbowałbym mieć cichy system i uruchomić, fs_usageaby sprawdzić, czy mogę złapać system plików wykonujący wywołanie zapisu - prawdopodobnie zgłaszając błąd w Apple. Wydaje się, że powinieneś być w stanie odczytać DMG tylko do odczytu - ale być może istnieje głębszy techniczny powód, dla którego zawodzi, a system operacyjny potrzebuje lepszego komunikatu o błędzie, aby poinformować nas, dlaczego ...
bmike
Dobry pomysł @bike! Ponadto uruchomiłem hdiutilz -debugprzełącznikiem, mogę opublikować te dzienniki tutaj
Josh
Rzeczywiście - odpowiedz na cokolwiek, co znajdziesz, a my możemy połączyć siły - zgłoś błąd lub edytuj odpowiedź, gdy rozróżniamy „dlaczego”.
bmike
Który system operacyjny działa na serwerze NFS? Jaka jest wydajność rpcinfo -pna serwerze? Jaka jest wydajność mountTwojego komputera Mac? Czy możesz również dodać odpowiedni wiersz /etc/exportsna serwerze NFS do pytania?
jaume
1
Skonfigurowałem serwer NFS (Ubuntu 12.04) z eksportem tylko do odczytu, który zamontowałem na komputerze Mac (OS X 10.8.2) i nie mogłem odtworzyć Twojego problemu (przetestowałem wszystkie formaty dmg: tylko do odczytu, skompresowane, zaszyfrowane itp.) ... Czy możesz dodać wynik hdiutil -debugi informacje, o które prosiłem?
jaume

Odpowiedzi:

11

Zainteresowało mnie to pytanie od listopada 2012 r., A nawet skonfigurowałem maszynę wirtualną FreeNAS do odtworzenia problemu.

W końcu się poddałem, ale odkąd pytanie zostało reanimowane , podzielę się tym, co wtedy odkryłem i w ostatnich godzinach (na szczęście nie usunąłem maszyny wirtualnej) i myślę, że przyczyną tego problemu jest. Znalazłem również obejście.

Moja konfiguracja

Przede wszystkim jest to moja konfiguracja testowa:

  • OS X 10.8.2 (przepraszam, nie 10.7.5 wokół).

  • FreeNAS (FreeBSD 8.2-RELEASE-p1)

    wprowadź opis zdjęcia tutaj

    (Wersja OP to FreeBSD 8.2-RELEASE-p7 - Nie mogłem znaleźć tej samej wersji.)

  • System plików NAS w /mnt/raid:

    wprowadź opis zdjęcia tutaj

  • Użytkownik o nazwie netboot:

    wprowadź opis zdjęcia tutaj

  • System plików AFP ( /mnt/raid/netboot) wyeksportowany jako netboot:

    wprowadź opis zdjęcia tutaj

    (Pamiętaj, że jest skonfigurowany tylko do odczytu).

  • System plików NFS (ta sama ścieżka co system plików AFP, aby dopasować konfigurację OP:) /mnt/raid/netboot:

    wprowadź opis zdjęcia tutaj

AFP działa, NFS nie

Zamontowałem system plików AFP tylko do odczytu jako użytkownik netbootza pomocą Findera z K:

wprowadź opis zdjęcia tutaj

i zamontował plik obrazu DMG bez żadnych problemów:

$ sudo rm /private/var/netboot/Library-Shadow
$ sudo /usr/bin/hdiutil attach /Volumes/netboot/p7zip-9.04-0.i386.dmg -notremovable -shadow /private/var/netboot/Library-Shadow -owners on -noverify -noautofsck -nobrowse
Password:
/dev/disk3              Apple_partition_scheme          
/dev/disk3s1            Apple_partition_map             
/dev/disk3s2            Apple_HFS                       /Volumes/p7zip.pkg

Następnie odmontowałem go i Kpodłączyłem system plików NFS tylko do odczytu (ja również użyłem ) i nie mogłem zamontować pliku obrazu DMG.

Myślę, że problem został zarejestrowany tutaj:

CBSDBackingStore::setPermission: opening /Volumes/netboot/Lion.nbi/Library.dmg
CBSDBackingStore::OpenLockFriendly: mapping flags 0x00000000 -> 0x00000014 (locks are MANDATORY)
CBSDBackingStore:OpenLockFriendly: could not open with lock 30

Błąd 30 oznacza (patrz man 2 intro):

30 EROFS System plików tylko do odczytu. Podjęto próbę modyfikacji pliku lub katalogu w systemie plików, który był w tym czasie tylko do odczytu.

Nic dziwnego, tutaj jest to system plików tylko do odczytu, ale ... kiedy jest zamontowany na AFP, działa, dlaczego?

Ponieważ implementacja Apple NFS ma pewne problemy z blokowaniem. Jak stwierdzono w tym poście na gluster.org:

OS X wykonuje fenomenalną blokadę plików (niektórzy twierdzą, że to niepotrzebnie) i zawsze był bardzo wrażliwy na konfigurację blokowania na serwerach NFS. Tak bardzo, że jeśli losowo wybierzesz serwer NFS w dużym przedsiębiorstwie, prawdziwy sukces jest mało prawdopodobny.

W mojej instalacji serwer NFS (czyli maszyna wirtualna FreeNAS) nagle przestał reagować (z mojego komputera Mac /var/log/system.log):

Mar 15 15:35:04 avallone.local rpc.lockd[8119]: Lockd got unexpected signal 20
Mar 15 15:35:04 avallone com.apple.launchd[1] (com.apple.lockd[8119]): Exited with code: 1
Mar 15 15:35:04 avallone com.apple.launchd[1] (com.apple.lockd): Throttling respawn: Will start in 10 seconds
(...)
Mar 15 15:35:07 avallone com.apple.launchd[1] (com.apple.statd[8121]): Exited with code: 1
Mar 15 15:35:07 avallone com.apple.launchd[1] (com.apple.statd): Throttling respawn: Will start in 10 seconds
Mar 15 15:35:13 avallone kernel[0]: nfs server 172.16.54.186:/mnt/raid/netboot: lockd not responding
Mar 15 15:35:13 avallone.local KernelEventAgent[72]: tid 00000000 received event(s) VQ_NOTRESP (1)
Mar 15 15:35:13 avallone.local KernelEventAgent[72]: tid 00000000 type 'nfs', mounted on '/Volumes/netboot', from '172.16.54.186:/mnt/raid/netboot', not responding
(...)
Mar 15 15:35:34 avallone.local KernelEventAgent[72]: tid 00000000 unmounting 1 filesystems

Wynik sudo /usr/bin/hdiutil attach -debug /Volumes/netboot/p7zip-9.04-0.i386.dmg -notremovable -shadow /private/var/netboot/Library-Shadow -owners on -noverify -noautofsck -nobrowsebył:

CBSDBackingStore::setPermission: opening /Volumes/netboot/p7zip-9.04-0.i386.dmg
CBSDBackingStore::OpenLockFriendly: mapping flags 0x00000000 -> 0x00000014 (locks are MANDATORY)
CBSDBackingStore:OpenLockFriendly: could not open with lock 5

Błąd 5 oznacza (ponownie od man 2 intro):

5 Błąd wejścia / wyjścia EIO. Wystąpił fizyczny błąd wejścia lub wyjścia. Ten błąd nie zostanie zgłoszony do czasu kolejnej operacji na tym samym deskryptorze pliku i może zostać utracony (nadpisany) przez kolejne błędy.

co wcale nie jest zaskakujące, system plików NFS zniknął.

Obejście

Obejściem (testowane w systemie OS X 10.8) jest podłączenie NFS z opcjami nolocks,locallocks. Jak wyjaśniono we wspomnianym poście na gluster.org:

Na szczęście jest poprawka: wystarczy wyłączyć blokowanie sieci. Możesz to zrobić, dodając opcje „nolocks, locallocks” w polu opcji zaawansowanych w interfejsie montażowym NFS narzędzia dyskowego, ale jest to bolesne, jeśli wykonujesz wiele z nich i nie pomaga w ogóle w / net. Możesz edytować / etc / auto_master, aby dodać te opcje do wpisu / net, ale nie wpływa to na inne montowania - jednak zalecam usunięcie opcji hidefromfinder w auto_master. Jeśli chcesz naprawić każdy automat, edytuj plik /etc/autofs.conf i wyszukaj wiersz rozpoczynający się od AUTOMOUNTD_MNTOPTS =. Te opcje są stosowane przy każdym montażu. Dodaj nolocks, locallocks, a Twój świat będzie szybszy i szczęśliwszy po ponownym uruchomieniu.

Ręcznie zamontowałem 172.16.54.186:/mnt/raid/netbooti działało bezbłędnie:

$ sudo rm /private/var/netboot/Library-Shadow
$ sudo mount -o nolocks,locallocks,ro 172.16.54.186:/mnt/raid/netboot /tmp/mnt
$ sudo /usr/bin/hdiutil attach /tmp/mnt/p7zip-9.04-0.i386.dmg -notremovable -shadow /private/var/netboot/Library-Shadow -owners on -noverify -noautofsck -nobrowse
/dev/disk6              Apple_partition_scheme          
/dev/disk6s1            Apple_partition_map             
/dev/disk6s2            Apple_HFS                       /Volumes/p7zip.pkg

Edytowałem również w /etc/auto_masterten sposób:

+auto_master # Use directory service
#/net             -hosts    -nobrowse,hidefromfinder,nosuid
/net              -hosts    -nosuid,nolocks,locallocks
/home             auto_home -nobrowse,hidefromfinder
/Network/Servers  -fstab
/-                -static

zatrzymał się i zaczął automountdi autofsd:

$ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.automountd.plist 
$ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.autofsd.plist 
$ sudo launchctl load /System/Library/LaunchDaemons/com.apple.autofsd.plist 
$ sudo launchctl load /System/Library/LaunchDaemons/com.apple.automountd.plist 

i działał jak urok:

$ cd /net/172.16.54.186/mnt/raid/netboot
$ ls 
Network Trash Folder  Temporary Items  p7zip-9.04-0.i386.dmg
$ sudo rm /private/var/netboot/Library-Shadow
$ sudo /usr/bin/hdiutil attach p7zip-9.04-0.i386.dmg -notremovable -shadow /private/var/netboot/Library-Shadow -owners on -noverify -noautofsck -nobrowse
/dev/disk7              Apple_partition_scheme          
/dev/disk7s1            Apple_partition_map             
/dev/disk7s2            Apple_HFS                       /Volumes/p7zip.pkg
jaume
źródło
Wspaniale, co za dobra lektura.
gosmond
Wow, to fantastyczne, dzięki! Przetestuję to w weekend, może to rozwiązać mój problem!
Josh
Dzięki jaume, działało to jak urok! Niestety, znalazłem już alternatywę i nie muszę już montować tego samego DMG z plikiem cienia, ale nolocks,locallockspomaga wydajność NFS innych udziałów NFS tylko do odczytu z plikami DMG, więc dziękuję!
Josh
Dziękujemy za opinię, cieszę się z obejścia tego problemu w twoim środowisku. Chociaż już tego nie potrzebujesz, dobrze wiedzieć, dlaczego coś nie działa, prawda?
jaume
Oczywiście i teraz wiem, co muszę zmienić, jeśli będę potrzebować tego ponownie w przyszłości! (Wcześniej celem było umieszczenie /Librarynaszej macierzy RAID NetBoot na obrazie. Nie potrzebujemy tego już, ponieważ kupiliśmy nowy serwer Mac Pro)
Josh
-1

hdiutil attach -readonly…

Jeśli chodzi o obraz, który jest przechowywany w systemie plików tylko do odczytu, uważam, że -readonlynależy go użyć w momencie dołączania.

(Sprawa AFP może być wyjątkowa.)


Biorąc pod uwagę głosowanie w dół i komentarz @Josh: Źle zrozumiałem -shadowczęść strony podręcznika dla hdiutil:

… Umożliwia dołączenie obrazów tylko do odczytu, odczyt / zapis…

- Wyobraziłem sobie, że to -shadowmoże zastąpić -readonly.

Graham Perrin
źródło
Nie, źle zrozumiałeś. Chciałem dołączyć obraz tylko do odczytu jako wolumin do odczytu i zapisu z plikiem cienia.
Josh
1
Jeśli chodzi o edycję, nie, używając obu -readonlyi -shadowczyta z pliku cienia, ale montuje obraz tylko do odczytu. Na przykład pozwoli to na odczyt zmian dokonanych w pliku cienia bez aktualizacji tego pliku cienia. Problem polegał na tym, że blokady NFS zostały wykryte.
Josh
Bardzo miłe wytłumaczenie @Josh - dzięki! Pozostawię tę odpowiedź, aby inni czytelnicy nie popełnili tego samego błędu co ja.
Graham Perrin