¿Cómo puedo montar un sistema de archivos ext4 en OS X?

¿Existe una aplicación segura y estable para leer y escribir en sistemas de archivos ext4 en Mac OS X?

Si no, ¿cuál es la mejor manera de acceder al contenido de un sistema de archivos ext4 en Mac OS X?

Sería más que útil si especificara qué versión de OS X está ejecutando. Hay problemas de compatibilidad con las soluciones disponibles según la revisión del sistema operativo.

Respuestas (11)

La respuesta depende de su voluntad de invertir en software comercial:

Si no le importa gastar algo de dinero en un producto comercial , extFS de Paragon para Mac le dará acceso de lectura y escritura a los sistemas de archivos ext2 / ext3 / ext4. La versión actual es compatible con todas las versiones de OS X/macOS desde 10.10 en adelante.

Si está buscando una solución gratuita , puede configurar una máquina virtual Linux, montar su(s) volumen(es) allí y compartirlos a través de Samba o (S)FTP. Esta publicación tiene algunos detalles sobre cómo lograr esto usando VirtualBox , una aplicación de máquina virtual gratuita. Tenga en cuenta que esta no es exactamente una solución liviana, incluso si el uso de una VM VirtualBox preconstruida le ahorrará la instalación y configuración de una distribución de Linux desde cero.

¿Seguro que hay una solución nonvm gratuita?
osboxes.org proporciona versiones más nuevas frente a virtualboxes.org.
¿Realmente puede montar una unidad externa física en una máquina virtual VirtualBox, al menos en la versión gratuita? No veo una manera. En cualquier caso, crear la VM es la parte fácil, montar la unidad dentro de ella es la parte difícil que debe responderse.
@ q.undertow , sí, puedes (aunque no a través de una GUI). Lamento discrepar en la parte "debe ser respondida", ya que eso no se especificó en la pregunta de OP; también podríamos estar hablando de una imagen de disco virtual
@kopischke gracias, es bueno saberlo. Yo mismo estoy tratando de recuperar datos de mi unidad externa de Linux, es demasiado grande para crear un archivo de imagen a partir de ella, realmente necesito leer la unidad física.
Actualización: probé la solución VirtualBox, y es más difícil de lo que parece la documentación vinculada anteriormente. El inconveniente está en el paso "adjuntar": VBoxManage se queja de que no puede encontrar mi máquina virtual (intenté especificarla tanto por nombre como por uuid). Luego, si trato de "registrar" el archivo .vbox existente, ¡se queja de que tal VM ya existe! En este punto, sentí que proceder era demasiado arriesgado y volví a planificar una solución de red deportiva (solo con una tarjeta SD de 16G en lugar de un disquete de 1M, LOL).
Evitaría la solución de Paragon. Tengo una unidad con una gran cantidad de archivos (alrededor de 300 en la carpeta raíz) y solo muestra una fracción de ellos. Probé la misma unidad con Ubuntu (que se ejecuta en una VM en la misma máquina) y ve todos los archivos.

Sobre la base de la respuesta de Ken: utilicé fuse4x y fuse-ext2 con éxito, y recomiendo fuse-ext2 sobre ext4fuse. fuse-ext2 proporciona acceso de escritura, mientras que ext4fuse solo proporciona acceso de lectura. Tenga en cuenta que, a pesar de su nombre, fuse-ext2 es compatible con EXT2/EXT3/EXT4.

ext4fuse fue una molestia para mí, porque requiere compilación manual y no tiene soporte para las opciones de fuse4x que me permitirían configurar el control de acceso. fuse-ext2 proporciona paquetes descargables, y la versión 0.0.7 funcionó bien. Copié algunos ISO grandes sin ningún problema.

¿Puede fuse-ext2 montar cosas como escritura o solo lectura?

También se puede instalar OSXFUSE completamente a través del administrador de paquetes de la línea de comandos brew :

brew install homebrew/fuse/ext4fuse

Tenga en cuenta que la instalación indica que ciertos comandos deben ejecutarse como 'sudo' además de esto.


Con Yosemite mejor échale un vistazo a esto . Y luego asegúrese de que su usuario pueda leer el directorio al hacer esto . Para que funcionara tuve que usar el grupo de ruedas así:

sudo dscl . append /Groups/wheel GroupMembership $(whoami)
Años después,$ 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

Con los cambios recientes en homebrew, esto debería ser tan simple como:

brew cask install osxfuse
brew install ext4fuse

Puede que tenga que reiniciar.

ext4fuse es de solo lectura, desafortunadamente. Y es posible que deba usar una bandera para que funcione como un usuario normal.

Otros que ven esta pregunta pueden estar interesados ​​en libguestfs . No estoy al tanto de un puerto OS X, pero considerando que VirtualBox tiene una API, no está fuera de discusión.

Me pregunto por qué nadie ha escrito una capa de compatibilidad para permitir que el código del sistema de archivos del kernel de Linux se ejecute en el espacio de usuario/fusible. O tiene alguien?

Algunas actualizaciones a partir de osxfusese eliminaron de homebrew y ext4fusepasaron a depender de la nueva versión de código abierto ramificada (?) macfuse: (1) brew install --cask macfuse(2) use el parche ext4fuse.rben este enlace ( github.com/gerard/ext4fuse/issues/66 )

Respuesta actualizada para (High) Sierra y versiones más recientes de MacOS

Para Sierra y High Sierra , ext4fuse parece funcionar bien solo para acceso de lectura y, por lo tanto, probablemente podría considerarse la opción preferida. Mientras que otras respuestas ya dan algunos ejemplos de uso, lo repetiré una vez más con algunos detalles importantes:

Instale ext4fuse con:

brew install ext4fuse

Puede montar como un usuario normal, pero en ese caso solo podrá acceder a archivos legibles por todo el mundo, es por eso que para el acceso completo necesita usar sudo, por ejemplo:

sudo ext4fuse -o allow_other /dev/disk2s1

Aquí hay un script bash que automatiza parcialmente el proceso. Cuando se inicie, creará automáticamente el punto de montaje después de que se le solicite que ingrese uno de los identificadores de dispositivo que se muestran, como 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}

Para desmontar, puede usar, por ejemplo diskutil umount /dev/disk2s1: si recibe un mensaje de que el desmontaje falló, puede forzar el desmontaje con diskutil umount force /dev/disk2s1, aunque sería más limpio cerrar las aplicaciones que están usando los archivos en el disco y volver a intentar desmontar sin force.

Si tiene archivos propiedad de _lpoperator(aparentemente, se crean cuando usa rsync con la opción de grupo de preservación), entonces el siguiente comando permitirá acceder a esos archivos:

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

Respuesta original para Yosemite y mayores * (obsoleto)

Se necesitan dos paquetes para habilitar la compatibilidad con EXT2/3/4 en OSX: OSXFUSE y FUSE-EXT2 .

Las fórmulas caseras para OSXFUSE y FUSE-EXT2 no me funcionaron ni en Mavericks ni en Yosemite.

Lo que funcionó fue lo siguiente:

  1. Descarga e instalación manual de OSXFUSE DMG desde http://osxfuse.github.io/ . IMPORTANTE : una vez que inicie el instalador de PKG, asegúrese de haber seleccionado Capa de compatibilidad de MacFUSE en el asistente (no está habilitada de forma predeterminada); sin ella, recibía un error al intentar montar.
  2. Descargue manualmente FUSE-EXT2 desde http://sourceforge.net/projects/fuse-ext2/ o para Sierra/El Capitan desde https://github.com/gpz500/fuse-ext2/releases y ejecute el instalador de PKG.

Una vez que haya instalado OSXFUSE y FUSE-EXT2, puede montar las particiones ext2/ext3/ext4 como se menciona en otras respuestas:

  1. Encuentre el nombre del dispositivo para la partición EXT que desea montar (p. ej. disk0s2, en el ejemplo a continuación, (ACTUALIZAR) en versiones posteriores de MacOS, las particiones ext3/ext4 pueden etiquetarse como Datos básicos de Microsoft y no como Linux ):

    1:     Linux_Swap    8.2 GB     disk0s1
    2:     Linux         119.9 GB   disk0s2
    
  2. Monte la partición en un punto de montaje existente:

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

Montar como usuario habitual no me funcionó. Probablemente esto se pueda solucionar jugando con los permisos, pero no lo investigué.

Nota: Mi sospecha es que las fórmulas de homebrew no funcionaron porque homebrew se instala osxfusesin la capa de compatibilidad de MacFUSE .

Hay dos osxfusepaquetes en homebrew:

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

Ambas versiones fallan al montar particiones EXT. Lo más probable es que la versión de DMG ( Caskroom/cask/osxfuse) falle porque homebrew instala el paquete con la configuración predeterminada, lo que significa que la capa de compatibilidad de MacFUSE no está incluida. La osxfuseversión principal probablemente necesite algún parámetro de instalación especial para habilitar la compatibilidad con MacFUSE, por lo que hasta que esto se solucione en homebrew, se debe usar el método DMG manual.

Este método funcionó en mavericks, yosemite, el capitan y sierra.

Script de montaje EXT2/3/4 para versiones anteriores de OSX (obsoleto)

Para ahorrar algo de tipeo adicional, uso un pequeño script que toma el nombre de la partición disk0s2y lo monta en /Volumes/disk0s2, creando la carpeta si es necesario:

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

La secuencia de comandos se llama con el nombre de la partición que busca diskutil list, por ejemplo mount_ext4.sh disk2s3.

Intenté esto pero desafortunadamente obtuve el error FUSE-EXT2 could not mount /dev/disk2s2 at /Volumes/ext4 because the following problem occurred:(pero no hay una descripción o referencia del problema). He instalado el complemento Compability Layer. Estoy en macOS Sierra, así que probé la versión Github gzp500.

Si se pregunta cuál es la línea de comando para montar una partición ext4 usando fuse y ext2fuse (por ejemplo, cuando se instala usando MacPorts port install ext2fuse), primero debe averiguar dónde está la partición de Linux:

diskutil list

Esto enumerará todas las particiones para todos los discos y, entre ellas, debería ver las relevantes enumeradas en la columna TIPO como Linux. Combine el disco X y el número de partición Y así /dev/diskXsY - por ejemplo:

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

Es posible que se queje de no poder escribir en el archivo de registro, pero aun así debería montar la partición en el punto de montaje de su hogar. Pero si desea montar la partición en un directorio del sistema, debe ejecutarlo como root, por ejemplo:

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

Si eso no funciona, intente:

sudo ext2fuse /dev/disk1s2 /sys_mount_point

Actualización : más recientemente, descubrí que fuse-ext2 tiene problemas con ciertas características más nuevas de ext4, por lo que es mejor usar ext4fuse ( port install ext4fuseo brew install ext4fuse). Use el comando ext4fuse directamente:

ext4fuse /dev/disk1s2 ~/mount_point

Además, como lo menciona Timothy en los comentarios, generalmente solo necesita usar sudosi está montando fuera de su directorio de inicio o si solo se puede acceder al disco (/dev/diskX) por root:

sudo ext4fuse /dev/disk1s2 /sys_mount_point

Cabe señalar que solo puede acceder a ese sistema de archivos montado como root/sudo. p.ej

sudo ls /sys_mount_point

Y para desmontar el sistema de archivos, solo usa el umountcomando normal (con sudo si se usa para montar la partición):

umount ~/mount_point
Solo necesita acceder a la unidad como root si la monta fuera de su directorio de inicio. Puede cd ~, mkdir mnt, ext4fuse /dev/diskXsY mnt, ls -la mntsin sudo/root.
mount: exec /Library/Filesystems/fuse-ext2.fs/Contents/Resources/mount_fuse-ext2 para...: No existe tal archivo o directorio
ext4fuse es prácticamente inútil. Tose permisos interminables y errores de lectura cuando intentas leer cualquier cosa. No fue de ayuda para mí para sacar los archivos y el volumen ext4.

Solo para que conste, probé el controlador Paragon ExtFS (versión de prueba) en mi MacBook Pro para escribir en la partición ext4 en Linux. Descubrí que el controlador era muy inestable y creaba daños en el sistema de archivos que fsckno se podían reparar ni en Linux ni en la Utilidad de Discos.

Mi idea era tener acceso a mi /homepartición desde Mac OS X usando este controlador Paragon, pero no sugiero hacer esta configuración. Hasta ahora, tengo mi /homepartición en Linux formateada hfsplussin diario, y luego puedo acceder a mis archivos desde Mac OS X. Por supuesto, de vez en cuando tengo algunos problemas en mi FS, pero no es muy frecuente. Sin embargo, tampoco sugiero esta configuración (al menos que tenga una copia de seguridad actualizada para su trabajo diario).

Finalmente, creo que Paragon es más adecuado tal vez para usar en discos duros externos, pero de todos modos no es muy confiable por ser un software cuya licencia es costosa.

Actualización: a partir de mayo de 2015, formateé mi /home en ext4 y monté el sistema de archivos usando fuse-ext2 en combinación con FUSE para OS X. Puedo acceder a la partición ext4 para leer y escribir. Es una configuración más sólida que la que describí anteriormente.

Puedo confirmar la última entrada aquí donde el controlador Paragon ExtFS puede causar algunos problemas en sus unidades Linux. Para mí, que es un arranque dual de OSX y Linux, Paragon creó corrupciones en mi / dispositivo. Esto fue fácil de resolver pero, sin embargo, no es una solución estable...
Otra mala experiencia con el controlador Paragon ExtFS. Pánicos constantes del kernel que conducen al reinicio del sistema, corrupción del sistema de archivos (afortunadamente, fsck en el cuadro de Linux funcionó). Probé en dos unidades externas diferentes con los mismos resultados.

Puede iniciar Linux VM rápidamente en su OS X usando Vagrant . Debe instalar un proveedor de VM como VirtualBox y Vagrant , ya sea a través del archivo .dmg del sitio o usando brew cask .

Una vez que haya vagrantinstalado el comando, ejecútelo en cualquier carpeta seleccionada:

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

Esto generará Vagrantfileel archivo y la .vagrantcarpeta de configuración.

y tendrá la caja de Linux arrancada en pocos minutos (descargada del repositorio de Atlas Hashicorp ).

Luego, conéctese a la caja mediante el comando: vagrant sshe intente montar su dispositivo dentro de Linux.

De forma predeterminada, su carpeta actual se sincronizará con la /vagrantcarpeta en VM. Para opciones más avanzadas, puede modificar Vagrantfilecon la configuración requerida.

Entonces, si monta su sistema de archivos dentro de la /vagrantcarpeta, se sincronizará automáticamente con su macOS.


Alternativamente, solo necesita instalar un VirtualBox , ejecutar la aplicación GUI, instalar y arrancar una versión mínima de Linux, por ejemplo , Ubuntu , para lograr lo mismo que se explicó anteriormente.


Las soluciones no nativas anteriores no son ideales, pero al menos su macOS sería más estable en lugar de instalar extensiones de kernel inestables que pueden causar muchos bloqueos del sistema.

Corrió con vagrant init ubuntu/xenial64; vagrant up --provider virtualboxcomo ubuntu/vivid64ya no está disponible.
Trate de usar en su ubuntu/trusty64lugar.

Tenía una unidad USB formateada con ext4 que pude montar después de instalar osxfuse . Leerlo funciona muy bien, pero no estoy seguro de si escribir es seguro.

Además, para mover archivos del sistema de archivos de OS X ( HFS+ ) a ext4, es posible que primero desee eliminar los archivos .DS_Store ocultos que el sistema de archivos de OS X introduce sigilosamente, ya que ocasionalmente provocan inodos defectuosos .

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

Es mejor que tener que arreglarlos después con un comando fsck .

También hay e2fsprogs disponibles en MacPorts. Todavía no lo he probado, pero parece prometedor.

Ninguno de los e2fsprogs te permite hacer esto. Aparentemente, uno de ellos solía hacerlo, pero ya no está en el paquete. Las herramientas de este paquete le permiten ejecutar , reparar fscky newfscrear un sistema de archivos ext, pero no le permiten montarlo ni leerlo.

Echa un vistazo a --> https://github.com/alperakcan/fuse-ext2

Esto es lo que intentaré a continuación.

Para ext2, hay una versión de macports: https://ports.macports.org/port/ext2fuse/summary

Hay un módulo ext4 para osxfuse (que puede instalar a través de macports), ¡pero es de solo lectura!

La multitud de versiones es un poco confusa, pero en un momento logré que funcionara, lo intentaré nuevamente y actualizaré esta respuesta si funciona. :)

osxfuse está disponible en macports y como paquete independiente. Todavía no sé cuál funciona mejor en las versiones más nuevas de OS X, pero prefiero macports para mi software gratuito en OS X.

ext4fuse es técnicamente de solo lectura, pero ni siquiera siempre le permite leer, arroja muchos errores oscuros y básicamente se interpone en su camino al menos tanto como lo ayuda.