Como montar um sistema de arquivos ext4 no OS X?

131

Existe um aplicativo seguro e estável para leitura e gravação em sistemas de arquivos ext4 no Mac OS X?

Caso contrário, qual é a melhor maneira de acessar o conteúdo de um sistema de arquivos ext4 no Mac OS X?

Evan Kroske
fonte
Seria mais que útil se você especificasse qual versão do OS X você está executando. Há problemas de compatibilidade com as soluções disponíveis, dependendo da revisão do SO.
Kopischke

Respostas:

60

A resposta depende da sua vontade de investir em software comercial:

Se você não se importa em gastar algum dinheiro com um produto comercial , o extFS para Mac da Paragon fornecerá acesso de leitura e gravação aos sistemas de arquivos ext2 / ext3 / ext4. A versão atual suporta todas as versões do OS X / macOS a partir da 10.10 em diante.

Se você está procurando uma solução gratuita , pode configurar uma máquina virtual Linux, montar seu (s) volume (s) e compartilhá-los via Samba ou (S) FTP. Este post tem alguns detalhes sobre como conseguir isso usando o VirtualBox , um aplicativo gratuito de máquina virtual. Observe que essa não é exatamente uma solução leve, mesmo que o uso de uma VM VirtualBox pré- instalada poupe a instalação e a configuração de uma distribuição Linux a partir do zero.

kopischke
fonte
2
Certamente há uma solução nonvm gratuita?
Pacerier
osboxes.org fornece versões mais recentes vs virtualboxes.org.
Tim
36

Com base na resposta de Ken: usei o fuse4x e o fuse-ext2 com êxito e recomendo o fuse-ext2 sobre o ext4fuse.

O ext4fuse era um aborrecimento para mim, porque requer compilação manual e não oferece suporte às opções do fuse4x que me permitiriam definir o controle de acesso. O fuse-ext2 fornece pacotes para download e a versão 0.0.7 funcionou perfeitamente. Copiei algumas ISOs grandes sem nenhum problema.

pwnall
fonte
o fuse-ext2 pode montar coisas como graváveis ​​ou somente leitura?
knocte 16/04
25

Também é possível instalar o OSXFUSE completamente por meio do gerenciador de pacotes da linha de comando brew :

brew install homebrew/fuse/ext4fuse

Observe que a instalação informa que certos comandos precisam ser executados como 'sudo' além disso.


Com Yosemite, é melhor dar uma olhada nisso . E, em seguida, verifique se o diretório é legível pelo usuário, fazendo isso . Para funcionar, eu tive que usar o grupo de roda como este:

sudo dscl . append /Groups/wheel GroupMembership $(whoami)
akauppi
fonte
18

Com alterações recentes no homebrew, isso deve ser tão simples quanto:

brew cask install osxfuse
brew install ext4fuse

Você pode ter que reiniciar.

O ext4fuse é somente leitura, infelizmente. E você pode precisar usar um sinalizador para que ele funcione como um usuário normal.

Outros que visualizam essa pergunta podem estar interessados ​​em libguestfs . Não conheço uma porta do OS X, mas, considerando que o VirtualBox tem uma API, isso não está fora de questão.

Eu me pergunto por que ninguém escreveu uma camada de compatibilidade para permitir que o código do sistema de arquivos do kernel Linux seja executado no espaço do usuário / fusível. Ou tem alguém?

Ken Arnold
fonte
10

Se você está se perguntando qual é a linha de comando para montar uma partição ext4 usando o fusível e o ext2fuse (por exemplo, quando instalado usando o MacPorts port install ext2fuse) - primeiro você precisa descobrir onde está a partição Linux:

diskutil list

Isso listará todas as partições para todos os discos e, entre elas, você deverá ver as relevantes listadas na coluna TYPE como Linux. Combine o diskX e o número da partição Y como este / dev / diskXsY - por exemplo:

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

Ele pode reclamar por não conseguir gravar no arquivo de log, mas ainda deve montar a partição no seu ponto de montagem doméstico. Mas se você deseja montar a partição em um diretório do sistema, é necessário executá-la como root, por exemplo:

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

Se isso não funcionar, tente:

sudo ext2fuse /dev/disk1s2 /sys_mount_point

Atualização : Mais recentemente, descobri que o fuse-ext2 tem problemas com certos recursos mais recentes do ext4; portanto, é melhor usar o ext4fuse ( port install ext4fuseou brew install ext4fuse). Use o comando ext4fuse diretamente:

ext4fuse /dev/disk1s2 ~/mount_point

Também como mencionado por Timothy nos comentários, você normalmente só precisa usar sudose estiver montando fora do diretório inicial ou se o disco (/ dev / diskX) estiver acessível apenas pela raiz:

sudo ext4fuse /dev/disk1s2 /sys_mount_point

Note-se que você só pode acessar esse sistema de arquivos montado como root / sudo. por exemplo

sudo ls /sys_mount_point

E para desmontar o sistema de arquivos, basta usar o umountcomando normal (com sudo, se usado para montar a partição):

umount ~/mount_point
Pierz
fonte
Você só precisa acessar a unidade como root se a montar fora do diretório inicial. Você pode cd ~, mkdir mnt, ext4fuse /dev/diskXsY mnt, ls -la mntsem sudo / root.
Timothy Zorn
mount: exec /Library/Filesystems/fuse-ext2.fs/Contents/Resources/mount_fuse-ext2 para ...: Nenhum tal lima ou diretório
Wolfgang Fahl
9

Apenas para constar, testei o driver Paragon ExtFS (versão de teste) no meu MacBook Pro para gravar na partição ext4 no Linux. Eu descobri que o driver era muito instável e criava corrupções no sistema de arquivos que fscknão era capaz de reparar nem no Linux nem no Disk Utility.

Minha idéia era ter acesso à minha /homepartição no Mac OS X usando esse driver Paragon, mas não sugiro fazer essa configuração. Até agora, tenho minha /homepartição no Linux formatada hfsplussem registro no diário e posso acessar meus arquivos no Mac OS X. É claro que, de tempos em tempos, tenho alguns problemas no FS, mas não é muito frequente. No entanto, também não sugiro essa configuração (pelo menos, que você tenha um backup atualizado para o seu trabalho diário).

Finalmente, acredito que o Paragon é mais adequado, talvez para uso em discos rígidos externos, mas de qualquer forma não é muito confiável por ser um software cuja licença é cara.

Atualização: a partir de maio de 2015, eu formatei meu / home para ext4 e montei o sistema de arquivos usando o fuse-ext2 em combinação com o FUSE para OS X. Posso acessar a partição ext4 para ler e escrever. É uma configuração mais sólida do que a descrita anteriormente.

muammar
fonte
Posso confirmar a última entrada aqui em que o driver Paragon ExtFS pode causar alguns problemas em suas unidades Linux. Para mim, que está inicializando o OSX e o Linux, o paragon criou corrupções no meu / dispositivo. Este foi fácil de resolver, mas no entanto isso não é uma solução estável ...
Mais experiência ruim com o driver Paragon ExtFS. Pânico consistente no kernel levando à reinicialização do sistema, corrupção do sistema de arquivos (felizmente o fsck na caixa do Linux funcionou). Tentei em duas unidades externas diferentes com os mesmos resultados.
9

Você pode inicializar a VM do Linux rapidamente no seu OS X usando o Vagrant . Você precisa instalar o provedor de VM, como o VirtualBox e o Vagrant , via arquivo .dmg do site ou usando o barril de fermentação .

Depois de vagrantinstalar o comando, execute-o em qualquer pasta selecionada:

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

Isso irá gerar Vagrantfilearquivo e .vagrantpasta de configuração .

e você terá a caixa do Linux inicializada em alguns minutos (baixada do repositório Atlas Hashicorp ).

Em seguida, conecte-se à caixa via comando: vagrant sshe tente montar seu dispositivo no Linux.

Por padrão, sua pasta atual será sincronizada com a /vagrantpasta na VM. Para opções mais avançadas, você pode modificar Vagrantfilecom a configuração necessária.

Portanto, se você montar seu sistema de arquivos na /vagrantpasta, ele será sincronizado automaticamente de volta ao seu macOS.


Como alternativa, você só precisa instalar um VirtualBox , executar o aplicativo GUI, instalar e inicializar uma versão mínima do Linux, por exemplo, Ubuntu , a fim de obter o mesmo explicado acima.


As soluções não nativas acima não são ideais, mas pelo menos o seu macOS seria mais estável, em vez de instalar extensões de kernel instáveis, o que pode causar muitas falhas no sistema.

kenorb
fonte
Funcionou com o vagrant init ubuntu/xenial64; vagrant up --provider virtualboxque ubuntu/vivid64não está mais disponível.
Fredrik Erlandsson 30/10
Tente usar em seu ubuntu/trusty64lugar.
Kenorb # 30/16
8

Eu tinha uma unidade USB formatada em ext4 que consegui montar depois de instalar o osxfuse . A leitura funciona muito bem, mas não tenho certeza se a escrita é segura.

Além disso, para mover arquivos do sistema de arquivos do OS X ( HFS + ) para o ext4, primeiro você pode remover os arquivos .DS_Store ocultos nos quais o sistema de arquivos do OS X se infiltra, pois ocasionalmente causa inodes ruins .

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

É melhor do que ter que corrigi-los depois com um comando fsck .

yuvilio
fonte
7

Resposta atualizada para (High) Sierra

Para Sierra e High Sierra, o ext4fuse parece funcionar bem apenas para acesso de leitura e, portanto, poderia provavelmente ser considerado a opção preferida. Enquanto outras respostas já fornecem alguns exemplos de uso, repetirei novamente com alguns detalhes importantes:

Instale o ext4fuse com:

brew install ext4fuse

Você pode montar como um usuário normal, mas, nesse caso, você poderá acessar apenas arquivos legíveis por todo o mundo, por isso, para obter acesso total, é necessário usar sudo, por exemplo:

sudo ext4fuse -o allow_other /dev/disk2s1

Aqui está um script bash que automatiza parcialmente o processo. Quando iniciado, ele cria automaticamente o ponto de montagem depois que você for solicitado a inserir um dos identificadores de dispositivos exibidos, 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, você pode usar, por exemplo diskutil umount /dev/disk2s1- se receber uma mensagem de que a desmontagem falhou, você pode forçar a desmontagem diskutil umount force /dev/disk2s1, embora seja mais fácil fechar os aplicativos que estão usando arquivos no disco e tentar desmontar novamente sem force.

Se você possui arquivos de propriedade _lpoperator(aparentemente eles são criados quando você usa o rsync com a opção preserve group), o comando a seguir permitirá acessar esses arquivos:

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

Resposta original para Yosemite e mais antigos (descontinuado)

São necessários dois pacotes para ativar o suporte EXT2 / 3/4 no OSX: OSXFUSE e FUSE-EXT2 .

As fórmulas de homebrew para OSXFUSE e FUSE-EXT2 não funcionaram para mim em independentes ou em yosemite.

O que funcionou foi o seguinte:

  1. Baixe e instale manualmente o OSXFUSE DMG em http://osxfuse.github.io/ . IMPORTANTE : Depois de iniciar o instalador do PKG, verifique se você selecionou a Camada de compatibilidade do MacFUSE no assistente (ele não está ativado por padrão) - sem ele eu estava recebendo um erro ao tentar montar.
  2. Baixe manualmente o FUSE-EXT2 em http://sourceforge.net/projects/fuse-ext2/ ou para Sierra / El Capitan em https://github.com/gpz500/fuse-ext2/releases e execute o instalador do PKG.

Depois de instalar o OSXFUSE e o FUSE-EXT2, você poderá montar as partições ext2 / ext3 / ext4 conforme mencionado em outras respostas:

  1. Encontre o nome do dispositivo para a partição EXT que você deseja montar (por exemplo, disk0s2no exemplo abaixo, (UPDATE) em versões posteriores do MacOS, as partições ext3 / ext4 podem ser rotuladas como Microsoft Basic Data e não Linux ):

    # diskutil list | grep Linux 1: Linux_Swap 8.2 GB disk0s1 2: Linux 119.9 GB disk0s2

  2. Monte a partição em um ponto de montagem existente:

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

Montar como um usuário comum não funcionou para mim. Provavelmente, isso pode ser corrigido mexendo nas permissões, mas eu não procurei.

Nota: Minha suspeita é que as fórmulas homebrew não funcionou porque homebrew instala osxfusesem a camada MacFUSE compatibilidade .

Existem dois osxfusepacotes no homebrew:

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

Ambas as versões falham ao montar partições EXT. Provavelmente, a versão DMG ( Caskroom/cask/osxfuse) falha porque o homebrew instala o pacote com as configurações padrão, o que significa que a Camada de Compatibilidade do MacFUSE não está incluída. A osxfuseversão principal provavelmente precisa de algum parâmetro de instalação especial para habilitar a compatibilidade com o MacFUSE; portanto, até que isso seja corrigido em homebrew, o método DMG manual deve ser usado.

Este método funcionou para mim em dissidentes, yosemite, elcapitan e sierra.

Script de montagem EXT2 / 3/4 para versões OSX mais antigas (descontinuado)

Para economizar digitação extra, eu uso um script minúsculo que pega o nome da partição disk0s2e a monta /Volumes/disk0s2, criando a pasta, se necessário:

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

O script é chamado com o nome da partição que você procura diskutil list, por exemplo mount_ext4.sh disk2s3.

ccpizza
fonte
1
Tentei isso, mas infelizmente obtive o erro FUSE-EXT2 could not mount /dev/disk2s2 at /Volumes/ext4 because the following problem occurred:(mas não há descrição ou referência do problema). Eu instalei o complemento da camada de compatibilidade. Estou no macOS Sierra, então tentei a versão Github gzp500.
Winterflags
6

Também existem e2fsprogs disponíveis no MacPorts. Eu ainda não testei, mas parece promissor.

crysaz
fonte