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?
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.
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.
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)
$ 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?
osxfuse
wurden von Homebrew entfernt und ext4fuse
auf die neue - verzweigte (?) - Opensource-Version verschoben macfuse
: (1) brew install --cask macfuse
(2) verwenden Sie den Patch ext4fuse.rb
in diesem Link ( github.com/gerard/ext4fuse/issues/66 )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 _lpoperator
sind (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
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:
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:
Suchen Sie den Gerätenamen für die EXT-Partition, die Sie mounten möchten (z. B. disk0s2
im 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
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 osxfuse
ohne den MacFUSE Compatibility Layer installiert wird .
Es gibt zwei osxfuse
Pakete 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 osxfuse
benö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.
Um etwas zusätzliches Tippen zu sparen, verwende ich ein winziges Skript, das den Partitionsnamen wie z . B. nimmt disk0s2
und unter einhängt /Volumes/disk0s2
und 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
.
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 ext4fuse
oder 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, sudo
wenn 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 umount
Befehl (mit sudo, wenn es zum Einhängen der Partition verwendet wird):
umount ~/mount_point
cd ~
, mkdir mnt
, ext4fuse /dev/diskXsY mnt
, ls -la mnt
ohne sudo/root ausführen.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, fsck
die weder in Linux noch im Festplattendienstprogramm repariert werden konnten.
Meine Idee war es, /home
mit 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 /home
Partition in Linux hfsplus
ohne 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.
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 vagrant
Befehl installiert haben, führen Sie diesen in einem beliebigen ausgewählten Ordner aus:
vagrant init ubuntu/trusty64; vagrant up --provider virtualbox
Dadurch werden die Vagrantfile
Konfigurationsdatei und der .vagrant
Ordner 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 /vagrant
Ordner in der VM synchronisiert. Für erweiterte Optionen können Sie die Vagrantfile
erforderliche Konfiguration ändern.
Wenn Sie also Ihr Dateisystem innerhalb des /vagrant
Ordners 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.
vagrant init ubuntu/xenial64; vagrant up --provider virtualbox
as ubuntu/vivid64
ist nicht mehr verfügbar.ubuntu/trusty64
stattdessen 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.
fsck
, newfs
reparieren 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.
kopischke