Hi, great app - now that I have it working.
OS: Running MacOS 26.6.2
Source: App purchased through App Store
Issue: Could not enable toggle for fskit modules
When attempting to enable and mount ext4 filesystems on macOS 15+ using xlinuxfs (com.huanchuan.xlinuxfs.lklfuse), the extension consistently fails to activate via the standard System Settings UI toggle and results in fskitd: Attempt to start disabled extension errors during Disk Arbitration probes.
While the diagnostic script provided inside the app correctly targets enabledModules.plist in the group.com.apple.fskit.settings container, the fix frequently fails to take effect because macOS’s preference daemon (cfprefsd) and fskitd maintain an in-memory cache that immediately overwrites or ignores on-disk changes unless flushed in a specific order. Additionally, ext4 filesystems marked with (needs journal recovery) silently fail user-space mount requests unless explicitly mounted read-only.
Root Cause Breakdown
- cfprefsd & Daemon IPC Desync
The provided fix script appends the bundle ID to $HOME/Library/Group Containers/group.com.apple.fskit.settings/enabledModules.plist and executes pkill -9 fskit_agent.
However, because cfprefsd holds the Group Container preference state in RAM, running pkill -9 fskit_agent alone causes cfprefsd to write back the stale in-memory array (omitting the newly added bundle ID) or causes fskitd (running as uid 0) to continue rejecting the extension based on its un-reloaded policy table.
Resolution: cfprefsd, FSKitModuleManagement, fskitd, and diskarbitrationd must be terminated simultaneously to ensure all layers read directly from disk upon respawning.
2. ext4 Superblock Journal Recovery Block
When an ext4 partition is removed without a clean unmount, the superblock retains the (needs journal recovery) flag.
lklfuse rejects standard read-write mount requests via fskitd because user-space LKL cannot safely replay the journal on a raw block device without risk of corruption.
Standard GUI mount attempts simply fail with no direct feedback explaining that an unplayed journal is blocking the driver.
Recommended Fixes for Future Releases
- Update the In-App Diagnostic / Fix Script
Update the troubleshooting helper script to terminate cfprefsd and the associated system daemons alongside fskit_agent:
Bash
#!/bin/zsh
PLIST="$HOME/Library/Group Containers/group.com.apple.fskit.settings/enabledModules.plist"
BID="com.huanchuan.xlinuxfs.lklfuse"
mkdir -p "$HOME/Library/Group Containers/group.com.apple.fskit.settings"
Ensure array structure and inject bundle ID
if [ ! -f "$PLIST" ]; then
/usr/libexec/PlistBuddy -c "Add : array" "$PLIST"
fi
/usr/libexec/PlistBuddy -c "Print" "$PLIST" | grep -qF "$BID" || /usr/libexec/PlistBuddy -c "Add :0 string $BID" "$PLIST"
Flush the in-memory preference caching layer and reload daemons simultaneously
killall "System Settings" FSKitModuleManagement 2>/dev/null
killall cfprefsd 2>/dev/null
sudo killall -9 fskitd fskit_agent diskarbitrationd 2>/dev/null
2. UI Fallback for Dirty ext4 Superblocks
Implement an automated pre-mount inspection (or detect status code 0x00000001 / probe failures).
If the superblock has (needs journal recovery) set, offer a 1-click fallback in the UI: "Mount as Read-Only (Unclean Journal Detected)" passing diskutil mount readOnly / -o ro,noload directly to the fskitd mount handler.
Hi, great app - now that I have it working.
OS: Running MacOS 26.6.2
Source: App purchased through App Store
Issue: Could not enable toggle for fskit modules
When attempting to enable and mount ext4 filesystems on macOS 15+ using xlinuxfs (com.huanchuan.xlinuxfs.lklfuse), the extension consistently fails to activate via the standard System Settings UI toggle and results in fskitd: Attempt to start disabled extension errors during Disk Arbitration probes.
While the diagnostic script provided inside the app correctly targets enabledModules.plist in the group.com.apple.fskit.settings container, the fix frequently fails to take effect because macOS’s preference daemon (cfprefsd) and fskitd maintain an in-memory cache that immediately overwrites or ignores on-disk changes unless flushed in a specific order. Additionally, ext4 filesystems marked with (needs journal recovery) silently fail user-space mount requests unless explicitly mounted read-only.
Root Cause Breakdown
The provided fix script appends the bundle ID to $HOME/Library/Group Containers/group.com.apple.fskit.settings/enabledModules.plist and executes pkill -9 fskit_agent.
However, because cfprefsd holds the Group Container preference state in RAM, running pkill -9 fskit_agent alone causes cfprefsd to write back the stale in-memory array (omitting the newly added bundle ID) or causes fskitd (running as uid 0) to continue rejecting the extension based on its un-reloaded policy table.
Resolution: cfprefsd, FSKitModuleManagement, fskitd, and diskarbitrationd must be terminated simultaneously to ensure all layers read directly from disk upon respawning.
2. ext4 Superblock Journal Recovery Block
When an ext4 partition is removed without a clean unmount, the superblock retains the (needs journal recovery) flag.
lklfuse rejects standard read-write mount requests via fskitd because user-space LKL cannot safely replay the journal on a raw block device without risk of corruption.
Standard GUI mount attempts simply fail with no direct feedback explaining that an unplayed journal is blocking the driver.
Recommended Fixes for Future Releases
Update the troubleshooting helper script to terminate cfprefsd and the associated system daemons alongside fskit_agent:
Bash
#!/bin/zsh
PLIST="$HOME/Library/Group Containers/group.com.apple.fskit.settings/enabledModules.plist"
BID="com.huanchuan.xlinuxfs.lklfuse"
mkdir -p "$HOME/Library/Group Containers/group.com.apple.fskit.settings"
Ensure array structure and inject bundle ID
if [ ! -f "$PLIST" ]; then
/usr/libexec/PlistBuddy -c "Add : array" "$PLIST"
fi
/usr/libexec/PlistBuddy -c "Print" "$PLIST" | grep -qF "$BID" || /usr/libexec/PlistBuddy -c "Add :0 string $BID" "$PLIST"
Flush the in-memory preference caching layer and reload daemons simultaneously
killall "System Settings" FSKitModuleManagement 2>/dev/null
killall cfprefsd 2>/dev/null
sudo killall -9 fskitd fskit_agent diskarbitrationd 2>/dev/null
2. UI Fallback for Dirty ext4 Superblocks
Implement an automated pre-mount inspection (or detect status code 0x00000001 / probe failures).
If the superblock has (needs journal recovery) set, offer a 1-click fallback in the UI: "Mount as Read-Only (Unclean Journal Detected)" passing diskutil mount readOnly / -o ro,noload directly to the fskitd mount handler.