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?
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?
Respostas:
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.
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.
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)
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?
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 ext4fuse
ou 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 sudo
se 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 umount
comando normal (com sudo, se usado para montar a partição):
umount ~/mount_point
cd ~
, mkdir mnt
, ext4fuse /dev/diskXsY mnt
, ls -la mnt
sem sudo / root.
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 fsck
não era capaz de reparar nem no Linux nem no Disk Utility.
Minha idéia era ter acesso à minha /home
partição no Mac OS X usando esse driver Paragon, mas não sugiro fazer essa configuração. Até agora, tenho minha /home
partição no Linux formatada hfsplus
sem 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.
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 vagrant
instalar o comando, execute-o em qualquer pasta selecionada:
vagrant init ubuntu/trusty64; vagrant up --provider virtualbox
Isso irá gerar Vagrantfile
arquivo e .vagrant
pasta 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 ssh
e tente montar seu dispositivo no Linux.
Por padrão, sua pasta atual será sincronizada com a /vagrant
pasta na VM. Para opções mais avançadas, você pode modificar Vagrantfile
com a configuração necessária.
Portanto, se você montar seu sistema de arquivos na /vagrant
pasta, 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.
vagrant init ubuntu/xenial64; vagrant up --provider virtualbox
que ubuntu/vivid64
não está mais disponível.
ubuntu/trusty64
lugar.
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 .
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
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:
Depois de instalar o OSXFUSE e o FUSE-EXT2, você poderá montar as partições ext2 / ext3 / ext4 conforme mencionado em outras respostas:
Encontre o nome do dispositivo para a partição EXT que você deseja montar (por exemplo, disk0s2
no 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
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 osxfuse
sem a camada MacFUSE compatibilidade .
Existem dois osxfuse
pacotes 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 osxfuse
versã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.
Para economizar digitação extra, eu uso um script minúsculo que pega o nome da partição disk0s2
e 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
.
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.