alperakcan / fuse-ext2

Fuse-ext2 is a multi OS FUSE module to mount ext2, ext3 and ext4 file system devices and/or images with read write support.
GNU General Public License v2.0
800 stars 127 forks source link

Mac OS X: unable to auto mount inserting an USB memory stick #34

Open gpz500 opened 8 years ago

gpz500 commented 8 years ago

At the insertion of an USB memory stick with a single ext4 partition, the partition is not mounted and these lines compare in /var/log/fuse-ext2_util.log:

[...]
2016-04-04 18:29:07: fuse-ext2 script invoked with command line "/System/Library/Filesystems/fuse-ext2.fs/fuse-ext2.util" "-m" "-o" "nodev" "-o" "noowners" "-o" "nosuid" "/dev/disk1s1" "/Volumes/Untitled 3"
2016-04-04 18:29:07: Invoking user: root
2016-04-04 18:29:07: [Mount] Entering function Mount...
2016-04-04 18:29:07: [Mount] Processing argument "/dev/disk1s1"
2016-04-04 18:29:07: [Mount] Processing argument "/Volumes/Untitled 3"
2016-04-04 18:29:07: [Mount] Got plain device "/dev/disk1s1"
2016-04-04 18:29:07: [Mount] Got raw device "/dev/rdisk1s1"
2016-04-04 18:29:07: [Mount] Invoking:
2016-04-04 18:29:07: [Mount]   "/usr/local/bin/fuse-ext2.wait" "/Volumes/Untitled 3" "5" "/usr/local/bin/fuse-ext2" "/dev/disk1s1" "/Volumes/Untitled 3" "-oauto_xattr,defer_permissions,local"
2016-04-04 18:29:13: [Mount] /usr/local/bin/fuse-ext2.wait returned with retval: 0
2016-04-04 18:29:13: [Mount] Output from mount operation: Mounting /dev/disk1s1 Read-Only.
Use 'force' or 'rw+' options to enable Read-Write mode
mount_osxfusefs: 'default_permissions' can't be used with 'defer_permissions'
Did not receive a signal within 5.000000 seconds. Exiting...
2016-04-04 18:29:13: [Mount] Executing "/usr/local/bin/fuse-ext2.daemon"
2016-04-04 18:29:13: [Mount] Exiting function mount...

After having removed defer_permissions from mount options (modified /System/Library/Filesystems/fuse-ext2.fs/fuse-ext2.util as OPTIONS="auto_xattr,defer_permissions" --> OPTIONS="auto_xattr") it works as expected.

gpz500 commented 8 years ago

For anyone with the same problem, my fork gpz500/fuse-ext2 (specifically since commit 21c9a2e4f12c41fae15a6caa7bd855c5d73ba029) solves this issue. It includes also solutions, picked up from discussions on respective issues, to issues #32 and #33. And, finally, it installs whitout having to disable SIP.

kadin2048 commented 8 years ago

I think I am having the same issue but even with gpz500's fork, I am getting the same error. I'm trying to mount a portable HDD, not a memory stick, although I can't imagine why that would make a difference.

The error I am getting is the same as noted previously:

2016-06-27 22:12:23: fuse-ext2 script invoked with command line "/System/Library/Filesystems/fuse-ext2.fs/Contents/Resources/../../fuse-ext2.util" "-p" "disk5s1" "removable" "readonly" "" "" "" "" ""
2016-06-27 22:12:23: Invoking user: root
2016-06-27 22:12:24: [Probe] Entering function Probe...
2016-06-27 22:12:24: [Probe] Executing "/usr/local/bin/fuse-ext2.probe" "/dev/disk5s1" 2>&1
2016-06-27 22:12:24: [Probe]   Return value: 0
2016-06-27 22:12:24: [Probe]   Volname     : 
2016-06-27 22:12:24: [Probe]   Output (PROBE_OUTPUT): ""
2016-06-27 22:12:24: fuse-ext2 script invoked with command line "/System/Library/Filesystems/fuse-ext2.fs/Contents/Resources/../../fuse-ext2.util" "-k" "disk5s1" "" "" "" "" "" "" ""
2016-06-27 22:12:24: Invoking user: root
2016-06-27 22:12:24: [PrintUUID] Entering function PrintUUID...
2016-06-27 22:12:24: [PrintUUID] PrintUUID not implemented, returning FSUR_INVAL.
2016-06-27 22:12:24: [PrintUUID] Returning from function PrintUUID...
2016-06-27 22:12:24: fuse-ext2 script invoked with command line "/System/Library/Filesystems/fuse-ext2.fs/Contents/Resources/../../fuse-ext2.util" "-q" "/dev/rdisk5s1" "" "" "" "" "" "" ""
2016-06-27 22:12:24: Invoking user: root
2016-06-27 22:12:24: [QuickVerify] Entering function QuickVerify.
2016-06-27 22:12:24: [QuickVerify] Reporting that the volume is fine, even though that may not be the case (no fs checks performed).
2016-06-27 22:12:24: [QuickVerify] Returning from function QuickVerify.
2016-06-27 22:12:24: fuse-ext2 script invoked with command line "/System/Library/Filesystems/fuse-ext2.fs/fuse-ext2.util" "-m" "-o" "nodev" "-o" "noowners" "-o" "nosuid" "/dev/disk5s1" "/Volumes/Untitled 1"
2016-06-27 22:12:24: Invoking user: root
2016-06-27 22:12:24: [Mount] Entering function Mount...
2016-06-27 22:12:24: [Mount] Processing argument "/dev/disk5s1"
2016-06-27 22:12:24: [Mount] Processing argument "/Volumes/Untitled 1"
2016-06-27 22:12:24: [Mount] Got plain device "/dev/disk5s1"
2016-06-27 22:12:24: [Mount] Got raw device "/dev/rdisk5s1"
2016-06-27 22:12:24: [Mount] Invoking:
2016-06-27 22:12:24: [Mount]   "/usr/local/bin/fuse-ext2.wait" "/Volumes/Untitled 1" "5" "/usr/local/bin/fuse-ext2" "/dev/disk5s1" "/Volumes/Untitled 1" "-oauto_xattr,defer_permissions,local"
2016-06-27 22:12:29: [Mount] /usr/local/bin/fuse-ext2.wait returned with retval: 0
2016-06-27 22:12:29: [Mount] Output from mount operation: Mounting /dev/disk5s1 Read-Only.
Use 'force' or 'rw+' options to enable Read-Write mode
mount_osxfusefs: 'default_permissions' can't be used with 'defer_permissions'
Did not receive a signal within 5.000000 seconds. Exiting...
2016-06-27 22:12:29: [Mount] Executing "/usr/local/bin/fuse-ext2.daemon"
2016-06-27 22:12:29: [Mount] Exiting function mount...

I've tested using gpz500's fork (commit 45bcd02e, latest; fuse-ext2 --version reports itself as fuse-ext2 0.0.9-gpz501 27) and also the main alperakcan version (commit 71393044) and I seem to get an identical error in both cases.

Mounting manually seems to work OK, but sure is inconvenient.

This is on OS 10.10.5 with latest dependencies from Brew. OSXFUSE is version 2.8.3.

gpz500 commented 8 years ago

Hi @kadin2048, I tested my fork only on OS X 10.11.x (El Capitan) so I can't say if it is working on previous versions of OS X.
In any case, it seems that the failed mount cause is the option defer_permissions which, with recent versions of FUSE for OS X, is no more compatible with the option default_permissions (which, in turn, is forced by the command fuse-ext2: https://github.com/alperakcan/fuse-ext2/blob/master/fuse-ext2/fuse-ext2.c#L29). So, please, try to edit /System/Library/Filesystems/fuse-ext2.fs/fuse-ext2.util in this way: change the line OPTIONS="auto_xattr,defer_permissions" to OPTIONS="auto_xattr" , and check if the log changes.
Just a question: the log you have reported is not from my fork, right? In the log it results that the fuse-ext2.fs package is in /System/Library/Filesystems, while with my fork it should be in /Library/Filesystems; and in my fuse-ext2.util file there is no longer any option defer_permissions.

kadin2048 commented 8 years ago

@gpz500: Thanks for your response. The log above was supposed to be from your fork (45bcd02, specifically), but I did not notice that any of the install paths had changed, and I didn't explicitly remove any of the previously-installed products (built from 7139304); I just sudo make install-ed thinking that they would be the same and get clobbered. (Although fuse-ext2 --version did report the correct version string as though it had been changed, so that threw me off. But maybe not everything was the updated version.)

I will try to blow everything away and try a clean reinstallation of 45bcd02 to see if that fixes the issue.

kadin2048 commented 8 years ago

Is there a recommended method of uninstalling alperakcan's version completely, or list of files that need to be deleted to ensure it's completely gone? I am still not able to get it working and I can't tell if it's a problem related to 10.10.5 or if it's stemming from having the remains of alperakcan's branch installed with gpz500's on top of it.

I deleted /System/Library/Filesystems/fuse-ext2.fs but now I'm getting an error mount: exec /System/Library/Filesystems/fuse-ext2.fs/Contents/Resources/mount_fuse-ext2 for /private/tmp/disk3s1: No such file or directory so clearly somebody is still looking for it and I haven't uninstalled the old version completely.

(For the record, I have tried running sudo make uninstall from commit 7139304 but I'm getting no logfile and the error noted above after I try to install gpz500's latest after that.)

gpz500 commented 8 years ago

Hello @kadin2048, is there a symbolic link /sbin/mount_fuse-ext2 insisting to point to /System/Library/Filesystems/fuse-ext2.fs/...? This one, unfortunately, is not removed by sudo make uninstall... Please verify with the command: $ ls -l /sbin and, in such a case, delete it.

In any case, deleting all the following objects from alperkcan installation, should be sufficient to get a clean start:

/usr/local/bin/fuse-ext2
/usr/local/bin/fuse-ext2.install
/usr/local/bin/fuse-ext2.probe
/usr/local/bin/fuse-ext2.uninstall
/usr/local/bin/fuse-ext2.wait
/sbin/mount_fuse-ext2
/System/Library/Filesystems/fuse-ext2.fs
/Library/PreferencePanes/fuse-ext2.prefPane
/usr/local/lib/pkgconfig/fuse-ext2.pc
/usr/local/share/man/man1/fuse-ext2.1

The same objects are installed in slight different locations by my (gpz500) fork:

/usr/local/bin/fuse-ext2
/usr/local/bin/fuse-ext2.install
/usr/local/bin/fuse-ext2.probe
/usr/local/bin/fuse-ext2.uninstall
/usr/local/bin/fuse-ext2.wait
/usr/local/sbin/mount_fuse-ext2
/Library/Filesystems/fuse-ext2.fs
/Library/PreferencePanes/fuse-ext2.prefPane
/usr/local/lib/pkgconfig/fuse-ext2.pc
/usr/local/share/man/man1/fuse-ext2.1