如何在OS X上安装ext4文件系统?


131

在Mac OS X上是否有安全,稳定的应用程序来读取和写入ext4文件系统?

如果没有,在Mac OS X上访问ext4文件系统内容的最佳方法是什么?


如果您指定了正在运行的OS X版本,那将非常有用。根据操作系统修订版,可用的解决方案存在兼容性问题。
kopischke

Answers:


60

答案取决于您是否愿意投资商业软件:

如果您不介意在商业产品上花一些钱Paragon的Mac版extFS将为您提供对ext2 / ext3 / ext4文件系统的读写权限。当前版本支持从10.10开始的所有OS X / macOS版本。

如果您正在寻找免费解决方案,您可以设置Linux虚拟机,在那里安装卷并通过Samba或(S)FTP 共享它们。这篇文章详细介绍了如何使用免费虚拟机应用程序VirtualBox实现这一目标。请注意,这不是一个轻量级的解决方案,即使使用预先构建的VirtualBox VM也可以免于从头开始安装和配置Linux发行版。


2
当然有一个免费的nonvm解决方案?
Pacerier

osboxes.org提供了较新的版本vs virtualboxes.org。
蒂姆

36

以Ken的答案为基础:我成功使用了fuse4xfuse-ext2,我推荐使用fuse-ext2而不是ext4fuse。

ext4fuse对我来说很麻烦,因为它需要手动编译,并且不支持fuse4x选项,这些选项允许我设置访问控制。fuse-ext2提供可下载的软件包,0.0.7版本工作得很好。我没有任何问题地复制了一些大的ISO。


fuse-ext2可以将东西挂载为可写还是只读取?
knocte

25

也可以通过brew命令行包管理器完全安装OSXFUSE :

brew install homebrew/fuse/ext4fuse

请注意,安装会告诉某些命令除此之外还需要作为“sudo”运行。


优胜美地最好看看这个。然后通过执行操作确保用户可以读取该目录。为了它的工作,我不得不像这样使用轮组:

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

18

随着最近对自制软件的更改,这应该是这样简单:

brew cask install osxfuse
brew install ext4fuse

您可能需要重新启动。

不幸的是,ext4fuse是只读的。并且您可能需要使用标志来使其作为普通用户工作。

查看此问题的其他人可能对libguestfs感兴趣。我不知道OS X端口,但考虑到VirtualBox有一个API,它不是不可能的。

我想知道为什么没有人编写兼容层来允许Linux内核文件系统代码在用户空间/保险丝中运行。还是有人?


10

如果您想知道使用fuse和ext2fuse安装ext4分区的命令行是什么(例如,使用MacPorts安装时port install ext2fuse) - 那么首先需要确定Linux分区的位置:

diskutil list

这将列出所有磁盘的所有分区,其中您应该看到TYPE列下列为Linux的相关分区。像这样/ dev / diskXsY组合diskX和分区号Y - 例如:

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功能方面存在问题,因此最好使用ext4fuseport install ext4fusebrew install ext4fuse)。直接使用ext4fuse命令:

ext4fuse /dev/disk1s2 ~/mount_point

另外正如Timothy在评论中所提到的,sudo如果你在主目录之外安装或者只能由root访问磁盘(/ dev / diskX),你通常只需要使用它:

sudo ext4fuse /dev/disk1s2 /sys_mount_point

应该注意的是,您只能以root / sudo的身份访问该挂载的文件系统。例如

sudo ls /sys_mount_point

要卸载文件系统,只需使用普通umount命令(如果用于挂载分区,则使用sudo):

umount ~/mount_point

如果将驱动器挂载到主目录之外,则只需以root用户身份访问该驱动器。你可以cd ~mkdir mntext4fuse /dev/diskXsY mntls -la mnt没有sudo /根。
蒂莫西·佐恩

mount:exec /Library/Filesystems/fuse-ext2.fs/Contents/Resources/mount_fuse-ext2 for ...:没有这样的文件或目录
Wolfgang Fahl 2017年

9

仅仅为了记录,我已经在我的MacBook Pro上测试了Paragon ExtFS驱动程序(试用版),以便在Linux中写入ext4分区。我发现驱动程序非常不稳定,并且它导致文件系统损坏,fsck无法在Linux和磁盘工具中修复。

我的想法是/home使用这个Paragon驱动程序从Mac OS X 访问我的分区,但我不建议进行此设置。到目前为止,我将/homeLinux中的分区格式化为hfsplus没有日志记录,然后我可以从Mac OS X访问我的文件。当然,我不时会在FS中遇到一些问题,但不是很频繁。但是,我也不建议使用此设置(至少您有日常工作的最新备份)。

最后,我认为Paragon更适合用于外部硬盘,但无论如何它对于许可证价格昂贵的软件来说并不是非常可靠。

更新:截至2015年5月,我已将/ home格式化为ext4,并使用fuse-ext2和FUSE for OS X挂载文件系统。我可以访问ext4分区进行读写。它比我之前描述的设置更稳固。


我可以确认这里的最后一个条目,Paragon ExtFS驱动程序可以在您的Linux驱动器上造成一些问题。对我来说,谁是双启动OSX和Linux,paragon在我/设备上造成了破坏。这很容易解决,但这不是一个稳定的解决方案...

Paragon ExtFS驱动程序的进一步糟糕体验。一致的内核恐慌导致系统重启,文件系统损坏(幸运的是Linux机箱上的fsck确实有效)。试用两个不同的外部驱动器,结果相同。

9

您可以使用Vagrant在OS X上快速启动Linux VM。您需要通过站点中的.dmg文件或使用brew cask安装VM提供程序,如VirtualBoxVagrant

一旦你vagrant安装了命令,在任何选定的文件夹中运行以下命令:

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

这将生成Vagrantfile配置文件和.vagrant文件夹。

你将在几分钟内启动Linux机箱(从Atlas Hashicorp存储库下载)。

然后通过命令连接到该框vagrant ssh尝试在Linux中安装您的设备

默认情况下,您当前的文件夹将与/vagrantVM中的文件夹同步。对于更高级的选项,您可以Vagrantfile使用所需的配置进行修改。

因此,如果您将文件系统挂载到/vagrant文件夹中,它将自动同步回您的macOS。


或者,您只需安装一个VirtualBox,运行GUI应用程序,安装并启动最小版本的Linux,例如Ubuntu,以实现与上述相同的操作。


上面的非原生解决方案并不理想,但至少你的macOS会更稳定,而不是安装不稳定的内核扩展,这可能会导致很多系统崩溃。


跑了vagrant init ubuntu/xenial64; vagrant up --provider virtualbox作为ubuntu/vivid64不可用了。
Fredrik Erlandsson 2016年

请尝试使用ubuntu/trusty64
kenorb 2016年

8

我有一个ext4格式的USB驱动器,我能够在安装osxfuse后安装。阅读它很有效,但我不确定写作是否安全。

此外,为了将文件从OS X的文件系统(HFS +)移动到ext4,您可能首先要删除 OS X文件系统隐藏的那些隐藏的.DS_Store文件,因为它们偶尔会导致错误的inode

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

使用fsck命令后修复它们要好一些。


7

更新了(High)Sierra的答案

对于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

约塞米蒂及以前的原始答案(已弃用)

需要两个软件包才能在OSX上启用EXT2 / 3/4支持:OSXFUSEFUSE-EXT2

对于我来说,OSXFUSE和FUSE-EXT2 的自制公式对我来说都不适用于小牛队或优胜美地。

做了以下工作:

  1. http://osxfuse.github.io/手动下载并安装OSXFUSE DMG 。重要提示:启动PKG安装程序后,请确保在向导中选择了MacFUSE兼容层(默认情况下未启用) - 没有它我在尝试安装时遇到错误。
  2. http://sourceforge.net/projects/fuse-ext2/手动下载FUSE-EXT2 或从https://github.com/gpz500/fuse-ext2/releases下载Sierra / El Capitan 并运行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

作为普通用户安装对我不起作用。可能这可以通过摆弄权限来修复,但我没有调查它。

注意:我怀疑自制的公式不起作用,因为自制软件安装osxfuse没有MacFUSE兼容层

osxfuse自制软件包有两个包:

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

两个版本都无法安装EXT分区。最有可能的是,DMG版本(Caskroom/cask/osxfuse)失败,因为自制软件程序使用默认设置安装软件包,这意味着不包括MacFUSE兼容性层。主osxfuse版本可能需要一些特殊的安装参数才能启用MacFUSE兼容性,因此在自制程序中修复此问题之前,应使用手动DMG方法。

这种方法适用于我的小牛队,优胜美地,elcapitan和山脉。

旧版OSX版本的EXT2 / 3/4安装脚本(不建议使用)

为了节省一些额外的输入,我使用一个小脚本,它接受分区名称,如下所示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


1
试过这个,但遗憾的是得到了错误FUSE-EXT2 could not mount /dev/disk2s2 at /Volumes/ext4 because the following problem occurred:(但没有问题描述或参考)。我已经安装了Compability Layer插件。我在macOS Sierra上试过Github gzp500版。
Winterflags

6

MacPorts中还有e2fsprogs。我自己还没有测试过,但看起来很有希望。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.