Существует ли безопасное и стабильное приложение для чтения и записи в файловые системы ext4 в Mac OS X?
Если нет, как лучше всего получить доступ к содержимому файловой системы ext4 в Mac OS X?
Существует ли безопасное и стабильное приложение для чтения и записи в файловые системы ext4 в Mac OS X?
Если нет, как лучше всего получить доступ к содержимому файловой системы ext4 в Mac OS X?
Ответы:
Ответ зависит от вашей готовности инвестировать в коммерческое программное обеспечение:
Если вы не возражаете тратить деньги на коммерческий продукт , Paragon в ExtFS для Mac даст вам доступ к чтению и ext2 / ext3 файлов / ext4 систем писать. Текущая версия поддерживает все версии OS X / macOS от 10.10 и выше.
Если вы ищете бесплатное решение , вы можете настроить виртуальную машину Linux, смонтировать там свои тома и поделиться ими / ими через Samba или (S) FTP. В этом посте есть некоторые подробности о том, как этого добиться, используя VirtualBox , бесплатное приложение виртуальной машины. Обратите внимание, что это не совсем легкое решение, даже если использование готовой виртуальной машины VirtualBox избавит вас от установки и настройки дистрибутива Linux с нуля.
Опираясь на ответ Кена: я успешно использовал fuse4x и fuse-ext2 , и я рекомендую использовать fuse-ext2 вместо ext4fuse.
Ext4fuse был для меня хлопотом, потому что он требует ручной компиляции и не поддерживает опции fuse4x, которые позволили бы мне установить контроль доступа. fuse-ext2 предоставляет загружаемые пакеты, а версия 0.0.7 работала просто отлично. Я скопировал несколько больших ISO-файлов без каких-либо проблем.
Также можно полностью установить OSXFUSE через менеджер пакетов командной строки brew :
brew install homebrew/fuse/ext4fuse
Обратите внимание, что при установке сообщается, что некоторые команды необходимо запускать как «sudo» в дополнение к этому.
С Йосемити лучше взглянуть на это . Затем убедитесь, что ваш пользователь может прочитать этот каталог . Чтобы это работало, я должен был использовать группу колес вот так:
sudo dscl . append /Groups/wheel GroupMembership $(whoami)
С недавними изменениями в homebrew это должно быть так просто, как:
brew cask install osxfuse
brew install ext4fuse
Возможно, вам придется перезагрузить компьютер.
К сожалению, ext4fuse только для чтения. И вам может понадобиться использовать флаг, чтобы заставить его работать как обычный пользователь.
Другие, просматривающие этот вопрос, могут быть заинтересованы в libguestfs . Я не знаю о порте OS X, но, учитывая, что VirtualBox имеет API, это не исключено.
Интересно, почему никто не написал слой совместимости, позволяющий запускать код файловой системы ядра Linux в userspace / fuse. Или есть кто-то?
Если вам интересно, что такое командная строка для монтирования раздела 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
cd ~
, mkdir mnt
, ext4fuse /dev/diskXsY mnt
, ls -la mnt
без SUDO / корень.
Для справки: на моем 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 для чтения и записи. Это более надежная настройка, чем та, которую я описал выше.
Вы можете быстро загрузить виртуальную машину 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 будет более стабильной, чем установка нестабильных расширений ядра, которые могут вызвать множество сбоев системы.
vagrant init ubuntu/xenial64; vagrant up --provider virtualbox
as ubuntu/vivid64
больше не доступно.
ubuntu/trusty64
вместо этого.
У меня был USB-накопитель в формате ext4, который я смог смонтировать после установки osxfuse . Чтение из него прекрасно работает, но я не уверен, безопасно ли писать.
Кроме того, для перемещения файлов из файловой системы OS X ( HFS + ) в ext4 вы, возможно, сначала захотите удалить те скрытые файлы .DS_Store, в которые проникла файловая система OS X, поскольку они иногда приводят к некорректным inode .
find /my/data/to/move -name '*.DS_Store' -type f -delete
Это лучше, чем исправлять их после команды fsck .
Для 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 не работают для меня либо на индивидуалистах или Йосемити.
То, что работало, было следующим:
После установки OSXFUSE и FUSE-EXT2 вы можете смонтировать разделы ext2 / ext3 / ext4, как указано в других ответах:
Найдите имя устройства для раздела 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
Смонтируйте раздел в существующую точку монтирования:
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 вручную.
Этот метод работал для меня на Маверикс, Йосемити, Элькапитан и Сьерра.
Чтобы сэкономить лишний набор текста, я использую крошечный скрипт, который берет имя раздела, например, 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
.
FUSE-EXT2 could not mount /dev/disk2s2 at /Volumes/ext4 because the following problem occurred:
(но нет описания проблемы или ссылки). Я установил аддон уровня совместимости. Я на macOS Sierra, поэтому попробовал версию Github GZP500.