Как я могу смонтировать файловую систему ext4 на OS X?

131

Существует ли безопасное и стабильное приложение для чтения и записи в файловые системы ext4 в Mac OS X?

Если нет, как лучше всего получить доступ к содержимому файловой системы ext4 в Mac OS X?

Эван Кроске
источник
Было бы более полезно, если бы вы указали, какую версию OS X вы используете. Существуют проблемы совместимости с доступными решениями в зависимости от версии ОС.
копище

Ответы:

60

Ответ зависит от вашей готовности инвестировать в коммерческое программное обеспечение:

Если вы не возражаете тратить деньги на коммерческий продукт , Paragon в ExtFS для Mac даст вам доступ к чтению и ext2 / ext3 файлов / ext4 систем писать. Текущая версия поддерживает все версии OS X / macOS от 10.10 и выше.

Если вы ищете бесплатное решение , вы можете настроить виртуальную машину Linux, смонтировать там свои тома и поделиться ими / ими через Samba или (S) FTP. В этом посте есть некоторые подробности о том, как этого добиться, используя VirtualBox , бесплатное приложение виртуальной машины. Обратите внимание, что это не совсем легкое решение, даже если использование готовой виртуальной машины VirtualBox избавит вас от установки и настройки дистрибутива Linux с нуля.

Копишке
источник
2
Наверняка есть бесплатное решение от nonvm?
Pacerier
osboxes.org предоставляет более новые версии по сравнению с virtualboxes.org.
Tim
36

Опираясь на ответ Кена: я успешно использовал fuse4x и fuse-ext2 , и я рекомендую использовать fuse-ext2 вместо ext4fuse.

Ext4fuse был для меня хлопотом, потому что он требует ручной компиляции и не поддерживает опции fuse4x, которые позволили бы мне установить контроль доступа. fuse-ext2 предоставляет загружаемые пакеты, а версия 0.0.7 работала просто отлично. Я скопировал несколько больших ISO-файлов без каких-либо проблем.

pwnall
источник
может ли fuse-ext2 монтировать вещи как доступные для записи или только для чтения?
knocte
25

Также можно полностью установить OSXFUSE через менеджер пакетов командной строки brew :

brew install homebrew/fuse/ext4fuse

Обратите внимание, что при установке сообщается, что некоторые команды необходимо запускать как «sudo» в дополнение к этому.


С Йосемити лучше взглянуть на это . Затем убедитесь, что ваш пользователь может прочитать этот каталог . Чтобы это работало, я должен был использовать группу колес вот так:

sudo dscl . append /Groups/wheel GroupMembership $(whoami)
akauppi
источник
18

С недавними изменениями в homebrew это должно быть так просто, как:

brew cask install osxfuse
brew install ext4fuse

Возможно, вам придется перезагрузить компьютер.

К сожалению, ext4fuse только для чтения. И вам может понадобиться использовать флаг, чтобы заставить его работать как обычный пользователь.

Другие, просматривающие этот вопрос, могут быть заинтересованы в libguestfs . Я не знаю о порте OS X, но, учитывая, что VirtualBox имеет API, это не исключено.

Интересно, почему никто не написал слой совместимости, позволяющий запускать код файловой системы ядра Linux в userspace / fuse. Или есть кто-то?

Кен Арнольд
источник
10

Если вам интересно, что такое командная строка для монтирования раздела ext4 с использованием fuse и ext2fuse (например, при установке с использованием MacPorts port install ext2fuse) - тогда, во-первых, вам нужно выяснить, где находится раздел Linux:

diskutil list

Это перечислит все разделы для всех дисков, и среди них вы должны увидеть соответствующие разделы, перечисленные в столбце TYPE как Linux. Объедините diskX и номер раздела Y ​​следующим образом / dev / diskXsY - например:

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

Он может жаловаться на невозможность записи в файл журнала, но он все равно должен монтировать раздел в вашу домашнюю точку монтирования. Но если вы хотите смонтировать раздел в системный каталог, вам нужно запустить его как root, например:

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

Если это не сработает, попробуйте:

sudo ext2fuse /dev/disk1s2 /sys_mount_point

Обновление : совсем недавно я обнаружил, что у fuse-ext2 есть проблемы с некоторыми новыми функциями ext4, поэтому вместо него лучше использовать ext4fuse ( port install ext4fuseили brew install ext4fuse). Используйте команду ext4fuse напрямую:

ext4fuse /dev/disk1s2 ~/mount_point

Также, как отметил Тимоти в комментариях, вам обычно нужно использовать только sudoесли вы монтируете за пределами вашего домашнего каталога или диск (/ dev / diskX) доступен только root:

sudo ext4fuse /dev/disk1s2 /sys_mount_point

Следует отметить, что вы можете получить доступ только к этой смонтированной файловой системе как root / sudo. например

sudo ls /sys_mount_point

А для размонтирования файловой системы вы просто используете обычную umountкоманду (с sudo, если она используется для монтирования раздела):

umount ~/mount_point
Пирз
источник
Вам нужно получить доступ к диску как root, если вы монтируете его вне вашей домашней директории. Вы можете cd ~, mkdir mnt, ext4fuse /dev/diskXsY mnt, ls -la mntбез SUDO / корень.
Тимоти Цорн
mount: exec /Library/Filesystems/fuse-ext2.fs/Contents/Resources/mount_fuse-ext2 для ...: Нет такого файла или каталога
Вольфганг
9

Для справки: на моем MacBook Pro я протестировал драйвер Paragon ExtFS (пробная версия) для записи в раздел ext4 в Linux. Я обнаружил, что драйвер был очень нестабильным, и это приводило к повреждению файловой системы, которую fsckне удалось исправить ни в Linux, ни в Disk Utility.

Моя идея состояла в том, чтобы получить доступ к моему /homeразделу из Mac OS X с помощью этого драйвера Paragon, но я не предлагаю делать эту настройку. Пока что мой /homeраздел в Linux отформатирован hfsplusбез ведения журнала, и затем я могу получить доступ к своим файлам из Mac OS X. Конечно, время от времени у меня возникают некоторые проблемы с моей FS, но это происходит не очень часто. Однако я не предлагаю эту настройку (по крайней мере, у вас есть актуальная резервная копия для вашей повседневной работы).

Наконец, я считаю, что Paragon более подходит для внешних жестких дисков, но в любом случае он не очень надежен для программного обеспечения, лицензия которого стоит дорого.

Обновление: по состоянию на май 2015 года я отформатировал мой / home в ext4, и я смонтировал файловую систему с помощью fuse-ext2 в сочетании с FUSE для OS X. Я могу получить доступ к разделу ext4 для чтения и записи. Это более надежная настройка, чем та, которую я описал выше.

Муаммар
источник
Я могу подтвердить последнюю запись здесь, где драйвер Paragon ExtFS может создать некоторые проблемы на ваших Linux-дисках. Для меня, который выполняет двойную загрузку OSX и Linux, Paragon создал повреждения на моем устройстве. Это было легко решить, но это не стабильное решение ...
Дальнейший неудачный опыт работы с драйвером Paragon ExtFS. Постоянная паника ядра, приводящая к перезагрузке системы, повреждению файловой системы (к счастью, fsck на Linux box работал). Пробовал на двух разных внешних дисках с одинаковыми результатами.
9

Вы можете быстро загрузить виртуальную машину Linux на OS X, используя Vagrant . Вам необходимо установить VM провайдера, такого как VirtualBox и Vagrant, либо через файл .dmg с сайта, либо с помощью brew cask .

После того, как вы установили vagrantкоманду, запустите ее в любой выбранной папке:

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

Это создаст Vagrantfileфайл конфигурации и .vagrantпапку.

и через несколько минут загрузится Linux box (скачанный из репозитория Atlas Hashicorp ).

Затем подключитесь к коробке с помощью команды: vagrant sshи попробуйте смонтировать устройство в Linux.

По умолчанию ваша текущая папка будет синхронизирована с /vagrantпапкой в ​​ВМ. Для более продвинутых опций, вы можете изменить Vagrantfileс необходимой конфигурацией.

Поэтому, если вы смонтируете свою файловую систему в /vagrantпапке, она будет автоматически синхронизирована с вашей macOS.


В качестве альтернативы вам просто нужно установить VirtualBox , запустить приложение с графическим интерфейсом, установить и загрузить минимальную версию Linux, например Ubuntu , чтобы добиться того же, что описано выше.


Приведенные выше неродные решения не идеальны, но, по крайней мере, ваша macOS будет более стабильной, чем установка нестабильных расширений ядра, которые могут вызвать множество сбоев системы.

kenorb
источник
Побежал с vagrant init ubuntu/xenial64; vagrant up --provider virtualboxas ubuntu/vivid64больше не доступно.
Фредрик Эрландссон
Попробуйте использовать ubuntu/trusty64вместо этого.
kenorb
8

У меня был USB-накопитель в формате ext4, который я смог смонтировать после установки osxfuse . Чтение из него прекрасно работает, но я не уверен, безопасно ли писать.

Кроме того, для перемещения файлов из файловой системы OS X ( HFS + ) в ext4 вы, возможно, сначала захотите удалить те скрытые файлы .DS_Store, в которые проникла файловая система OS X, поскольку они иногда приводят к некорректным inode .

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

Это лучше, чем исправлять их после команды fsck .

yuvilio
источник
7

Обновленный ответ для (Высокой) Сьерры

Для Sierra и High Sierra ext4fuse, кажется, хорошо работает только для доступа к чтению, и поэтому его, вероятно, можно считать предпочтительным вариантом. В то время как другие ответы уже дают некоторые примеры использования, я повторю это еще раз с некоторыми важными деталями:

Установите ext4fuse с помощью:

brew install ext4fuse

Вы можете подключиться как обычный пользователь, но в этом случае вы сможете получить доступ только к файлам, доступным для чтения, поэтому для полного доступа вам необходимо использовать sudo, например:

sudo ext4fuse -o allow_other /dev/disk2s1

Вот скрипт bash, который частично автоматизирует процесс. При запуске он автоматически создает точку монтирования после того, как вам будет предложено ввести один из отображаемых идентификаторов устройства, например 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}

Для размонтирования вы можете использовать, например diskutil umount /dev/disk2s1- если вы получите сообщение о том, что размонтирование не удалось, вы можете принудительно размонтировать его diskutil umount force /dev/disk2s1, хотя было бы удобнее закрыть приложения, использующие файлы на диске, и повторить попытку размонтирования без него force.

Если у вас есть файлы, которыми владеют _lpoperator(по-видимому, они создаются при использовании rsync с опцией сохранения группы), то следующая команда позволит вам получить доступ к этим файлам:

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

Оригинальный ответ для Йосемити и старше (не рекомендуется)

Для включения поддержки EXT2 / 3/4 в OSX необходимы два пакета: OSXFUSE и FUSE-EXT2 .

В доморощенных формулах для OSXFUSE и FUSE-EXT2 не работают для меня либо на индивидуалистах или Йосемити.

То, что работало, было следующим:

  1. Вручную загрузите и установите OSXFUSE DMG с http://osxfuse.github.io/ . ВАЖНО : После запуска установщика PKG убедитесь, что в мастере выбран уровень совместимости MacFUSE (по умолчанию он не включен) - без него при попытке монтирования я получал ошибку.
  2. Вручную загрузите FUSE-EXT2 с http://sourceforge.net/projects/fuse-ext2/ или для Sierra / El Capitan с https://github.com/gpz500/fuse-ext2/releases и запустите установщик PKG.

После установки OSXFUSE и FUSE-EXT2 вы можете смонтировать разделы ext2 / ext3 / ext4, как указано в других ответах:

  1. Найдите имя устройства для раздела EXT, который вы хотите смонтировать (например, disk0s2в приведенном ниже примере (UPDATE) в более поздних версиях MacOS разделы ext3 / ext4 могут быть помечены как Microsoft Basic Data, а не Linux ):

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

  2. Смонтируйте раздел в существующую точку монтирования:

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

Монтаж как обычный пользователь у меня не работал. Возможно, это можно исправить, поигравшись с разрешениями, но я не рассматривал это.

Примечание. Я подозреваю, что формулы homebrew не сработали, поскольку homebrew устанавливается osxfuseбез слоя совместимости MacFUSE .

В osxfuseдоморощенном пиве есть две упаковки:

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

Обе версии не могут монтировать разделы EXT. Скорее всего, версия DMG ( Caskroom/cask/osxfuse) дает сбой, потому что homebrew устанавливает пакет с настройками по умолчанию, что означает, что уровень совместимости MacFUSE не включен. Основная osxfuseверсия, вероятно, нуждается в каком-то особом параметре установки, чтобы включить совместимость с MacFUSE, поэтому до тех пор, пока это не будет исправлено в homebrew, следует использовать метод DMG вручную.

Этот метод работал для меня на Маверикс, Йосемити, Элькапитан и Сьерра.

Сценарий монтирования EXT2 / 3/4 для более старых версий OSX (устарело)

Чтобы сэкономить лишний набор текста, я использую крошечный скрипт, который берет имя раздела, например, disk0s2и монтирует его /Volumes/disk0s2, создавая папку при необходимости:

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

Сценарий вызывается с именем раздела, с помощью которого вы ищите diskutil list, например mount_ext4.sh disk2s3.

ccpizza
источник
1
Попробовал это, но, к сожалению, получить ошибку FUSE-EXT2 could not mount /dev/disk2s2 at /Volumes/ext4 because the following problem occurred:(но нет описания проблемы или ссылки). Я установил аддон уровня совместимости. Я на macOS Sierra, поэтому попробовал версию Github GZP500.
Winterflags
6

В MacPorts есть также e2fsprogs. Я еще не проверял это сам, но выглядит многообещающим.

crysaz
источник