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
808 stars 130 forks source link

Fuse Ext2

Fuse-ext2 is an EXT2/EXT3/EXT4 filesystem for FUSE, and is built to work with osxfuse.

Dependencies

Fuse-ext2 requires at least Fuse version 2.6.0 for Linux.
Fuse-ext2 requires at least Fuse for macOS version 2.7.5 or greater.

Alternate Install method of Fuse for macOS

Fuse for macOS can be installed via homebrew if Homebrew-Cask has been tapped.

Look for homebrew/cask in the output.

To install Fuse for macOS using brew:

You will be interactively prompted for sudo access during the install.

brew install --cask osxfuse

For Fuse version 4.0.0 and higher use macfuse

brew install --cask macfuse

Building

Debian/Ubuntu:

Building from source depends on the following:

$ sudo apt-get install m4 autoconf automake libtool
$ sudo apt-get install libfuse-dev e2fsprogs comerr-dev e2fslibs-dev

$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

Fedora

$ sudo dnf install @development-tools m4 autoconf automake libtool e2fsprogs libcom_err-devel fuse-libs e2fsprogs-devel fuse-devel
# build part 
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

You can use checkinstall or some other equivalent tool to generate an install package for your distribution.

FreeBSD:

Install via pkg:

$ pkg install sysutils/fusefs-ext2

Building via ports:

$ cd /usr/ports/sysutils/fusefs-ext2
$ make install clean

macOS:

Dependencies:

OSXfuse

Building from source depends on the following:

Copy and paste this into a file such as /tmp/ext4/script.sh, but do not name the file install.sh. Remember to chmod +x script.sh. Run it from that directory - ./script.sh

#!/bin/sh
export PATH=/opt/gnu/bin:$PATH
export PKG_CONFIG_PATH=/opt/gnu/lib/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

mkdir fuse-ext2.build
cd fuse-ext2.build

if [ ! -d fuse-ext2 ]; then
    git clone https://github.com/alperakcan/fuse-ext2.git   
fi

# m4
if [ ! -f m4-1.4.17.tar.gz ]; then
    curl -O -L http://ftp.gnu.org/gnu/m4/m4-1.4.17.tar.gz
fi
tar -zxvf m4-1.4.17.tar.gz 
cd m4-1.4.17
./configure --prefix=/opt/gnu
make -j 16
sudo make install
cd ../

# autoconf
if [ ! -f autoconf-2.69.tar.gz ]; then
    curl -O -L http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
fi
tar -zxvf autoconf-2.69.tar.gz 
cd autoconf-2.69
./configure --prefix=/opt/gnu
make
sudo make install
cd ../

# automake
if [ ! -f automake-1.15.tar.gz ]; then
    curl -O -L http://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz
fi
tar -zxvf automake-1.15.tar.gz 
cd automake-1.15
./configure --prefix=/opt/gnu
make
sudo make install
cd ../

# libtool
if [ ! -f libtool-2.4.6.tar.gz ]; then
    curl -O -L http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz
fi
tar -zxvf libtool-2.4.6.tar.gz 
cd libtool-2.4.6
./configure --prefix=/opt/gnu
make
sudo make install
cd ../

# e2fsprogs
if [ ! -f e2fsprogs-1.43.4.tar.gz ]; then
    curl -O -L https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.43.4/e2fsprogs-1.43.4.tar.gz
fi
tar -zxvf e2fsprogs-1.43.4.tar.gz
cd e2fsprogs-1.43.4
./configure --prefix=/opt/gnu --disable-nls
make
sudo make install
sudo make install-libs
sudo cp /opt/gnu/lib/pkgconfig/* /usr/local/lib/pkgconfig
cd ../

# fuse-ext2
export PATH=/opt/gnu/bin:$PATH
export PKG_CONFIG_PATH=/opt/gnu/lib/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

cd fuse-ext2
./autogen.sh
CFLAGS="-idirafter/opt/gnu/include -idirafter/usr/local/include/osxfuse/" LDFLAGS="-L/opt/gnu/lib -L/usr/local/lib" ./configure
make
sudo make install

Test

The e2fsprogs live in /opt/gnu/bin and /opt/gnu/sbin. fuse-ext2 is in /usr/local/bin.

cd
dd if=/dev/zero of=/tmp/test-fs.ext4 bs=1024 count=102400  
/opt/gnu/sbin/mkfs.ext4 /tmp/test-fs.ext4
mkdir -p ~/mnt/fuse-ext2.test-fs.ext4
fuse-ext2 /tmp/test-fs.ext4 ~/mnt/fuse-ext2.test-fs.ext4 -o rw+,allow_other,uid=501,gid=20

To verify the UID and GID of the user mounting the file system:

id

To verify the file system has mounted properly:

mount

Usage

See the Man page for options.

Usage:    fuse-ext2 <device|image_file> <mount_point> [-o option[,...]]

Options:  ro, rw+, force, allow_other
          Please see details in the manual.

Example:  fuse-ext2 /dev/sda1 /mnt/sda1

Bugs

Please send the output of the command below when reporting bugs as a GitHub Issue. Before submitting a bug report, please look at the existing issues first.

$ /usr/local/bin/fuse-ext2 -v /dev/path /mnt/point -o debug

Important: Partition Labels

Please do not use commas , in partition labels.

Wrong: e2label /dev/disk0s3 "linux,ext3"

Correct: e2label /dev/disk0s3 "linux-ext3"

Contact

Alper Akcan alper.akcan@gmail.com