Wie kann ich ein ext4-Dateisystem unter OS X mounten?

Gibt es eine sichere, stabile Anwendung zum Lesen und Schreiben in ext4 -Dateisysteme unter Mac OS X?

Wenn nicht, wie greife ich am besten auf den Inhalt eines ext4-Dateisystems unter Mac OS X zu?

Es wäre mehr als hilfreich, wenn Sie angeben würden, welche Version von OS X Sie ausführen. Je nach Version des Betriebssystems gibt es Kompatibilitätsprobleme mit den verfügbaren Lösungen.

Antworten (11)

Die Antwort hängt von Ihrer Bereitschaft ab, in kommerzielle Software zu investieren:

Wenn es Ihnen nichts ausmacht, etwas Geld für ein kommerzielles Produkt auszugeben , erhalten Sie mit Paragons extFS für Mac Lese- und Schreibzugriff auf ext2 / ext3 / ext4-Dateisysteme. Die aktuelle Version unterstützt alle Versionen von OS X / macOS ab 10.10 aufwärts.

Wenn Sie nach einer kostenlosen Lösung suchen , können Sie eine virtuelle Linux-Maschine einrichten, Ihr(e) Volume(s) dort mounten und es/sie über Samba oder (S)FTP freigeben. Dieser Beitrag enthält einige Details dazu, wie dies mit VirtualBox , einer kostenlosen Anwendung für virtuelle Maschinen, erreicht werden kann. Beachten Sie, dass dies nicht gerade eine leichte Lösung ist, auch wenn Sie durch die Verwendung einer vorgefertigten VirtualBox-VM die Installation und Konfiguration einer Linux-Distribution von Grund auf ersparen.

Sicherlich gibt es eine kostenlose nonvm-Lösung?
osboxes.org bietet neuere Versionen als virtualboxes.org.
Können Sie wirklich ein physisches externes Laufwerk in einer VirtualBox-VM mounten, zumindest in der kostenlosen Version davon? Ich sehe keinen Weg. In jedem Fall ist das Erstellen der VM der einfache Teil, das Mounten des Laufwerks darin ist der schwierige Teil, der beantwortet werden muss.
@q.undertow ja, das kannst du (allerdings nicht über eine GUI). Ich bin anderer Meinung in Bezug auf den Teil „muss beantwortet werden“, da dies in der Frage von OP nicht angegeben wurde. wir könnten auch von einem virtuellen Disk-Image sprechen
@kopischke danke, das ist gut zu wissen. Ich selbst versuche, Daten von meinem externen Linux-Laufwerk wiederherzustellen, es ist viel zu groß, um daraus eine Image-Datei zu erstellen, ich muss das physische Laufwerk wirklich lesen.
Update: Ich habe die VirtualBox-Lösung ausprobiert, und sie ist schwieriger, als es die oben verlinkte Dokumentation vermuten lässt. Der Haken liegt im Schritt „Anhängen“: VBoxManage beschwert sich, dass es meine VM nicht finden kann (ich habe versucht, sie sowohl nach Namen als auch nach UUID anzugeben). Wenn ich dann versuche, die vorhandene .vbox-Datei zu "registrieren", beschwert sie sich, dass eine solche VM bereits existiert! An diesem Punkt hielt ich das Vorgehen für zu riskant und plante wieder eine Sneaker-Net-Lösung (nur mit einer 16G-SD-Karte anstelle einer 1M-Diskette, LOL).
Ich würde Paragons Lösung vermeiden. Ich habe ein Laufwerk mit einer großen Anzahl von Dateien (ca. 300 im Stammordner) und es zeigt nur einen Bruchteil davon an. Ich habe dasselbe Laufwerk mit Ubuntu ausprobiert (das in einer VM auf demselben Computer ausgeführt wird) und es sieht alle Dateien.

Aufbauend auf Kens Antwort: Ich habe „fuse4x“ und „ fuse-ext2 “ erfolgreich verwendet und empfehle „fuse-ext2“ gegenüber „ext4fuse“. fuse-ext2 bietet Schreibzugriff, während ext4fuse nur Lesezugriff bietet. Beachten Sie, dass fuse-ext2 trotz seines Namens EXT2/EXT3/EXT4 unterstützt.

ext4fuse war ein Problem für mich, da es eine manuelle Kompilierung erfordert und keine Unterstützung für fuse4x-Optionen bietet, mit denen ich die Zugriffskontrolle festlegen könnte. fuse-ext2 bietet herunterladbare Pakete, und die Version 0.0.7 funktionierte einwandfrei. Ich habe problemlos ein paar große ISOs hinüberkopiert.

kann fuse-ext2 Dinge als beschreibbar oder nur schreibgeschützt einhängen?

Man kann OSXFUSE auch komplett über den brew command line package manager installieren:

brew install homebrew/fuse/ext4fuse

Beachten Sie, dass die Installation mitteilt, dass bestimmte Befehle zusätzlich als „sudo“ ausgeführt werden müssen.


Bei Yosemite schau dir das besser an . Stellen Sie dann sicher, dass das Verzeichnis für Ihren Benutzer lesbar ist, indem Sie dies tun . Damit es funktioniert, musste ich die Radgruppe wie folgt verwenden:

sudo dscl . append /Groups/wheel GroupMembership $(whoami)
Jahre später,$ brew info ext2fuse ext2fuse: stable 0.8.1 (bottled) Compact implementation of ext2 file system using FUSE https://sourceforge.net/projects/ext2fuse Disabled because it requires closed-source macFUSE! Not installed

Mit den jüngsten Änderungen an Homebrew sollte dies so einfach sein wie:

brew cask install osxfuse
brew install ext4fuse

Möglicherweise müssen Sie neu starten.

ext4fuse ist leider schreibgeschützt. Und Sie müssen möglicherweise ein Flag verwenden , damit es als normaler Benutzer funktioniert.

Andere, die diese Frage sehen, könnten an libguestfs interessiert sein . Mir ist kein OS X-Port bekannt, aber wenn man bedenkt, dass VirtualBox über eine API verfügt, ist dies nicht ausgeschlossen.

Ich frage mich, warum niemand eine Kompatibilitätsschicht geschrieben hat, damit Linux-Kernel-Dateisystemcode in Userspace/Fuse ausgeführt werden kann. Oder hat jemand?

Einige Updates osxfusewurden von Homebrew entfernt und ext4fuseauf die neue - verzweigte (?) - Opensource-Version verschoben macfuse: (1) brew install --cask macfuse(2) verwenden Sie den Patch ext4fuse.rbin diesem Link ( github.com/gerard/ext4fuse/issues/66 )

Aktualisierte Antwort für (High) Sierra und neuere MacOS-Versionen

Für Sierra und High Sierra scheint ext4fuse nur für den Lesezugriff gut zu funktionieren und könnte daher wahrscheinlich als bevorzugte Option angesehen werden. Während andere Antworten bereits einige Verwendungsbeispiele geben, wiederhole ich es noch einmal mit einigen wichtigen Details:

Installieren Sie ext4fuse mit:

brew install ext4fuse

Sie können als normaler Benutzer mounten, aber in diesem Fall können Sie nur auf weltweit lesbare Dateien zugreifen, deshalb müssen Sie für vollen Zugriff verwenden sudo, z.

sudo ext4fuse -o allow_other /dev/disk2s1

Hier ist ein Bash-Skript, das den Prozess teilweise automatisiert. Beim Start erstellt es automatisch den Einhängepunkt, nachdem Sie aufgefordert werden, eine der angezeigten Gerätekennungen einzugeben, z . B disk2s1.:

diskutil list
read -p "Please type the EXT4 device identifier: " disk_id
MOUNT_POINT=~/mnt/$disk_id
mkdir -p ${MOUNT_POINT}
sudo ext4fuse -o allow_other /dev/$disk_id ${MOUNT_POINT}
echo "***TO UNMOUNT USE***: 'diskutil umount ${MOUNT_POINT}'"
open ${MOUNT_POINT}

Zum Unmounten können Sie z . B. verwenden diskutil umount /dev/disk2s1— wenn Sie eine Meldung erhalten, dass das Unmounten fehlgeschlagen ist, können Sie das Unmounten mit erzwingen diskutil umount force /dev/disk2s1, obwohl es sauberer wäre, die Apps zu schließen, die die Dateien auf der Festplatte verwenden, und das Unmounten ohne erneut zu versuchen force.

Wenn Sie zufällig Dateien haben, die Eigentum von _lpoperatorsind (anscheinend werden sie erstellt, wenn Sie rsync mit der Option Preserve Group verwenden), ermöglicht der folgende Befehl den Zugriff auf diese Dateien:

/usr/sbin/dseditgroup -o edit -a everyone -t group _lpoperator

Ursprüngliche Antwort für Yosemite und älter * (veraltet)

Zwei Pakete werden benötigt, um die EXT2/3/4-Unterstützung unter OSX zu aktivieren: OSXFUSE und FUSE-EXT2 .

Die Homebrew -Formeln für OSXFUSE und FUSE-EXT2 haben bei mir weder auf Mavericks noch auf Yosemite funktioniert.

Was funktioniert hat war folgendes:

  1. Manuelles Herunterladen und Installieren der OSXFUSE-DMG von http://osxfuse.github.io/ . WICHTIG : Stellen Sie nach dem Start des PKG-Installationsprogramms sicher, dass Sie im Assistenten die MacFUSE-Kompatibilitätsebene ausgewählt haben (standardmäßig ist sie nicht aktiviert) – ohne sie habe ich beim Mounten eine Fehlermeldung erhalten.
  2. Laden Sie FUSE-EXT2 manuell von http://sourceforge.net/projects/fuse-ext2/ oder für Sierra/El Capitan von https://github.com/gpz500/fuse-ext2/releases herunter und führen Sie das PKG-Installationsprogramm aus.

Sobald Sie sowohl OSXFUSE als auch FUSE-EXT2 installiert haben, können Sie die ext2/ext3/ext4-Partitionen mounten, wie in anderen Antworten erwähnt:

  1. Suchen Sie den Gerätenamen für die EXT-Partition, die Sie mounten möchten (z. B. disk0s2im folgenden Beispiel (UPDATE) in späteren MacOS-Versionen könnten ext3/ext4-Partitionen als Microsoft Basic Data und nicht als Linux bezeichnet werden ):

    1:     Linux_Swap    8.2 GB     disk0s1
    2:     Linux         119.9 GB   disk0s2
    
  2. Mounten Sie die Partition an einem vorhandenen Mount-Punkt:

     sudo mount -t fuse-ext2 /dev/disk0s2 /Volumes/ext4
    

Das Mounten als normaler Benutzer hat bei mir nicht funktioniert. Wahrscheinlich kann dies durch Herumfummeln mit Berechtigungen behoben werden, aber ich habe mich nicht damit befasst.

Hinweis: Mein Verdacht ist, dass die Homebrew-Formeln nicht funktionierten, weil Homebrew osxfuseohne den MacFUSE Compatibility Layer installiert wird .

Es gibt zwei osxfusePakete in Homebrew:

# brew search osxfuse
>>> osxfuse
>>> Caskroom/cask/osxfuse

Beide Versionen können EXT-Partitionen nicht mounten. Höchstwahrscheinlich schlägt die DMG-Version ( Caskroom/cask/osxfuse) fehl, weil Homebrew das Paket mit Standardeinstellungen installiert, was bedeutet, dass MacFUSE Compatibility Layer nicht enthalten ist. Die Hauptversion osxfusebenötigt wahrscheinlich einige spezielle Installationsparameter, um die MacFUSE-Kompatibilität zu aktivieren. Bis dies in Homebrew behoben ist, sollte daher die manuelle DMG-Methode verwendet werden.

Diese Methode funktionierte bei Mavericks, Yosemite, El Capitan und Sierra.

EXT2/3/4-Mount-Skript für ältere OSX-Versionen (veraltet)

Um etwas zusätzliches Tippen zu sparen, verwende ich ein winziges Skript, das den Partitionsnamen wie z . B. nimmt disk0s2und unter einhängt /Volumes/disk0s2und den Ordner bei Bedarf erstellt:

### mount_ext4.sh
sudo mkdir -p "/Volumes/$1"
sudo mount -t fuse-ext2 "/dev/$1" "/Volumes/$1"
open "/Volumes/$1"

Das Skript wird mit dem Partitionsnamen aufgerufen, den Sie über nachschlagen diskutil list, zB mount_ext4.sh disk2s3.

Habe dies versucht, bekomme aber leider den Fehler FUSE-EXT2 could not mount /dev/disk2s2 at /Volumes/ext4 because the following problem occurred:(aber es gibt keine Problembeschreibung oder Referenz). Ich habe das Compability Layer Addon installiert. Ich bin auf macOS Sierra, also habe ich die Github gzp500-Version ausprobiert.

Wenn Sie sich fragen, was die Befehlszeile ist, um eine ext4-Partition mit fuse und ext2fuse zu mounten (z. B. wenn sie mit MacPorts installiert wird port install ext2fuse) - dann müssen Sie zuerst herausfinden, wo sich die Linux-Partition befindet:

diskutil list

Dadurch werden alle Partitionen für alle Festplatten aufgelistet, und darunter sollten Sie die relevanten Partitionen sehen, die in der Spalte TYP als Linux aufgeführt sind. Kombinieren Sie diskX und Partitionsnummer Y wie folgt /dev/diskXsY - zB:

mount -t fuse-ext2 /dev/disk1s2 ~/my_mount_point

Es kann sich darüber beschweren, dass es nicht in der Lage ist, in die Protokolldatei zu schreiben, aber es sollte die Partition trotzdem in Ihren Home-Mount-Punkt einhängen. Wenn Sie die Partition jedoch in ein Systemverzeichnis einhängen möchten, müssen Sie sie als root ausführen, z.

sudo mount -t fuse-ext2 /dev/disk1s2 /sys_mount_point

Wenn das nicht funktioniert, versuchen Sie Folgendes:

sudo ext2fuse /dev/disk1s2 /sys_mount_point

Update : Kürzlich habe ich festgestellt, dass fuse-ext2 Probleme mit bestimmten neueren ext4-Funktionen hat, daher ist es besser, stattdessen ext4fuse ( port install ext4fuseoder brew install ext4fuse) zu verwenden. Verwenden Sie den Befehl ext4fuse direkt:

ext4fuse /dev/disk1s2 ~/mount_point

Wie auch von Timothy in den Kommentaren erwähnt, müssen Sie normalerweise nur verwenden, sudowenn Sie außerhalb Ihres Home-Verzeichnisses mounten oder die Festplatte (/dev/diskX) nur für Root zugänglich ist:

sudo ext4fuse /dev/disk1s2 /sys_mount_point

Es sollte beachtet werden, dass Sie auf dieses gemountete Dateisystem nur als root/sudo zugreifen können. z.B

sudo ls /sys_mount_point

Und um das Dateisystem auszuhängen, verwenden Sie einfach den normalen umountBefehl (mit sudo, wenn es zum Einhängen der Partition verwendet wird):

umount ~/mount_point
Sie müssen nur dann als Root auf das Laufwerk zugreifen, wenn Sie es außerhalb Ihres Home-Verzeichnisses mounten. Sie können cd ~, mkdir mnt, ext4fuse /dev/diskXsY mnt, ls -la mntohne sudo/root ausführen.
mount: exec /Library/Filesystems/fuse-ext2.fs/Contents/Resources/mount_fuse-ext2 for ...: Keine solche Datei oder Verzeichnis
ext4fuse ist praktisch nutzlos. Es hustet endlose Berechtigungen und Lesefehler aus, wenn Sie versuchen, etwas zu lesen. Es war keine Hilfe für mich, die Dateien und das ext4-Volume tatsächlich zu entfernen.

Nur fürs Protokoll: Ich habe den Paragon ExtFS-Treiber (Testversion) auf meinem MacBook Pro getestet, um unter Linux auf die ext4-Partition zu schreiben. Ich fand, dass der Treiber sehr instabil war und Beschädigungen des Dateisystems verursachte, fsckdie weder in Linux noch im Festplattendienstprogramm repariert werden konnten.

Meine Idee war es, /homemit diesem Paragon-Treiber von Mac OS X aus auf meine Partition zuzugreifen, aber ich schlage nicht vor, dieses Setup durchzuführen. Bisher habe ich meine /homePartition in Linux hfsplusohne Journaling formatiert und kann dann von Mac OS X aus auf meine Dateien zugreifen. Natürlich habe ich von Zeit zu Zeit einige Probleme in meinem FS, aber das ist nicht sehr häufig. Ich empfehle dieses Setup jedoch auch nicht (zumindest, dass Sie ein aktuelles Backup für Ihre tägliche Arbeit haben).

Schließlich glaube ich, dass Paragon vielleicht besser geeignet ist, um es für externe Festplatten zu verwenden, aber es ist sowieso nicht sehr zuverlässig, da es sich um eine Software handelt, deren Lizenz teuer ist.

Update: Ab Mai 2015 habe ich mein /home auf ext4 formatiert und ich mounte das Dateisystem mit fuse-ext2 in Kombination mit FUSE für OS X. Ich kann auf die ext4-Partition lesen und schreiben. Es ist ein solideres Setup als das, das ich oben beschrieben habe.

Ich kann den letzten Eintrag hier bestätigen, wo der Paragon ExtFS-Treiber auf Ihren Linux-Laufwerken einige schlimme Probleme machen kann. Für mich, der OSX und Linux doppelt bootet, hat paragon Beschädigungen auf meinem / -Gerät verursacht. Dies war einfach zu lösen, aber das ist keine stabile Lösung ...
Weitere schlechte Erfahrungen mit dem Paragon ExtFS-Treiber. Ständige Kernel-Panics, die zu einem Neustart des Systems und einer Beschädigung des Dateisystems führen (zum Glück hat fsck auf der Linux-Box funktioniert). Versucht auf zwei verschiedenen externen Laufwerken mit dem gleichen Ergebnis.

Mit Vagrant können Sie die Linux-VM schnell auf Ihrem OS X booten . Sie müssen VM-Anbieter wie VirtualBox und Vagrant entweder über die .dmg-Datei von der Website oder mithilfe von brew cask installieren .

Sobald Sie den vagrantBefehl installiert haben, führen Sie diesen in einem beliebigen ausgewählten Ordner aus:

vagrant init ubuntu/trusty64; vagrant up --provider virtualbox

Dadurch werden die VagrantfileKonfigurationsdatei und der .vagrantOrdner generiert.

und Sie haben die Linux-Box innerhalb weniger Minuten gebootet (heruntergeladen aus dem Atlas Hashicorp- Repository).

Verbinden Sie sich dann über den Befehl: mit der Boxvagrant ssh und versuchen Sie, Ihr Gerät in Linux zu mounten.

Standardmäßig wird Ihr aktueller Ordner mit dem /vagrantOrdner in der VM synchronisiert. Für erweiterte Optionen können Sie die Vagrantfileerforderliche Konfiguration ändern.

Wenn Sie also Ihr Dateisystem innerhalb des /vagrantOrdners mounten, wird es automatisch wieder mit Ihrem macOS synchronisiert.


Alternativ müssen Sie nur eine VirtualBox installieren , die GUI-App ausführen, eine minimale Linux-Version installieren und booten, z. B. Ubuntu , um dasselbe wie oben beschrieben zu erreichen.


Die oben genannten nicht-nativen Lösungen sind nicht ideal, aber zumindest wäre Ihr macOS stabiler, anstatt instabile Kernel-Erweiterungen zu installieren, die viele Systemabstürze verursachen können.

Ran with vagrant init ubuntu/xenial64; vagrant up --provider virtualboxas ubuntu/vivid64ist nicht mehr verfügbar.
Versuchen Sie es ubuntu/trusty64stattdessen mit verwenden.

Ich hatte ein ext4-formatiertes USB-Laufwerk, das ich mounten konnte, nachdem ich osxfuse installiert hatte . Das Lesen daraus funktioniert großartig, aber ich bin mir nicht sicher, ob das Schreiben sicher ist.

Außerdem sollten Sie beim Verschieben von Dateien aus dem Dateisystem von OS X ( HFS+ ) nach ext4 zuerst diese versteckten .DS_Store-Dateien entfernen, die sich in das OS X-Dateisystem einschleichen, da sie gelegentlich fehlerhafte Inodes verursachen .

find /my/data/to/move -name '*.DS_Store' -type f -delete

Es ist besser, als sie danach mit einem fsck - Befehl reparieren zu müssen.

Es gibt auch e2fsprogs in MacPorts. Ich habe es selbst noch nicht getestet, sieht aber vielversprechend aus.

Keiner der e2fsprogs lässt Sie dies tun. Anscheinend einer davon früher, aber er ist nicht mehr im Paket. Mit den Tools in diesem Paket können Sie ein Ext-Dateisystem ausführen fsck, newfsreparieren und erstellen, aber Sie können es nicht mounten oder daraus lesen.

Werfen Sie einen Blick auf --> https://github.com/alperakcan/fuse-ext2

Das werde ich als nächstes versuchen.

Für ext2 gibt es eine Macports-Version: https://ports.macports.org/port/ext2fuse/summary

Es gibt ein ext4-Modul für osxfuse (das Sie über Macports installieren können), aber es ist schreibgeschützt!

Die Vielzahl der Versionen ist etwas verwirrend, aber irgendwann hatte ich es geschafft, es zum Laufen zu bringen. Ich werde es erneut versuchen und diese Antwort aktualisieren, falls dies der Fall ist. :)

osxfuse ist auf Macports und als eigenständiges Paket verfügbar. Ich weiß noch nicht, welches unter neueren OS X-Versionen am besten funktioniert, aber ich bevorzuge Macports für meine kostenlose Software unter OS X.

ext4fuse ist technisch gesehen nur lesbar, aber es erlaubt Ihnen nicht einmal immer zu lesen, es spuckt viele obskure Fehler aus und steht Ihnen im Grunde mindestens so viel im Weg, wie es hilft.