Làm cách nào tôi có thể gắn hệ thống tệp ext4 trên OS X?


131

Có ứng dụng an toàn, ổn định để đọc và ghi vào hệ thống tệp ext4 trên Mac OS X không?

Nếu không, cách tốt nhất để truy cập nội dung của hệ thống tệp ext4 trên Mac OS X là gì?


Sẽ hữu ích hơn nếu bạn chỉ định phiên bản OS X nào bạn đang chạy. Có các vấn đề tương thích với các giải pháp có sẵn tùy thuộc vào sửa đổi hệ điều hành.
kopischke

Câu trả lời:


60

Câu trả lời phụ thuộc vào việc bạn sẵn sàng đầu tư vào phần mềm thương mại:

Nếu bạn không ngại chi một số tiền cho một sản phẩm thương mại , extFS cho Mac của Paragon sẽ cung cấp cho bạn quyền truy cập đọc và ghi vào các hệ thống tệp ext2 / ext3 / ext4. Phiên bản hiện tại hỗ trợ tất cả các phiên bản OS X / macOS từ 10.10 trở lên.

Nếu bạn đang tìm kiếm một giải pháp miễn phí , bạn có thể thiết lập một máy ảo Linux, gắn (các) âm lượng của bạn ở đó và chia sẻ chúng / chúng thông qua Samba hoặc (S) FTP. Bài đăng này có một số chi tiết về cách đạt được điều này bằng VirtualBox , một ứng dụng máy ảo miễn phí. Lưu ý rằng đây không chính xác là một giải pháp nhẹ, ngay cả khi sử dụng VirtualBox VM dựng sẵn sẽ giúp bạn cài đặt và định cấu hình bản phân phối Linux từ đầu.


2
Chắc chắn có một giải pháp nonvm miễn phí?
Pacerier

osboxes.org cung cấp các phiên bản mới hơn so với virtualboxes.org.
Tim

36

Dựa trên câu trả lời của Ken: Tôi đã sử dụng fuse4xfuse-ext2 thành công và tôi khuyên dùng fuse-ext2 trên ext4fuse.

ext4fuse là một rắc rối đối với tôi, vì nó yêu cầu biên dịch thủ công và không hỗ trợ các tùy chọn fuse4x cho phép tôi đặt điều khiển truy cập. fuse-ext2 cung cấp các gói có thể tải xuống và phiên bản 0.0.7 hoạt động tốt. Tôi đã sao chép một vài ISO lớn mà không có vấn đề gì.


fuse-ext2 có thể gắn kết mọi thứ như có thể ghi hoặc chỉ đọc?
knocte

25

Người ta cũng có thể cài đặt OSXFUSE hoàn toàn thông qua trình quản lý gói dòng lệnh brew :

brew install homebrew/fuse/ext4fuse

Lưu ý rằng cài đặt cho biết một số lệnh nhất định cần được chạy dưới dạng 'sudo' ngoài điều này.


Với Yosemite tốt hơn có một cái nhìn về điều này . Và sau đó đảm bảo rằng thư mục có thể đọc được bởi người dùng của bạn bằng cách làm điều này . Để nó hoạt động tôi phải sử dụng nhóm bánh xe như thế này:

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

18

Với những thay đổi gần đây đối với homebrew, điều này sẽ đơn giản như:

brew cask install osxfuse
brew install ext4fuse

Bạn có thể phải khởi động lại.

Thật không may, ext4fuse chỉ đọc. Và bạn có thể cần sử dụng một cờ để làm cho nó hoạt động như một người dùng bình thường.

Những người khác xem câu hỏi này có thể quan tâm đến libguestfs . Tôi không biết về cổng OS X, nhưng xem xét rằng VirtualBox có API, điều đó không nằm ngoài dự đoán.

Tôi tự hỏi tại sao không ai đã viết một lớp tương thích để cho phép mã hệ thống tập tin nhân Linux chạy trong không gian người dùng / cầu chì. Hay có ai đó?


10

Nếu bạn đang tự hỏi dòng lệnh là gì để gắn kết phân vùng ext4 bằng fuse và ext2fuse (ví dụ: khi được cài đặt bằng MacPorts port install ext2fuse) - thì trước tiên bạn cần tìm ra phân vùng Linux ở đâu:

diskutil list

Điều này sẽ liệt kê tất cả các phân vùng cho tất cả các đĩa và trong số chúng, bạn sẽ thấy những phân vùng có liên quan được liệt kê dưới cột TYPE là Linux. Kết hợp đĩaX và số phân vùng Y như thế này / dev / đĩaXsY - ví dụ:

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

Nó có thể phàn nàn về việc không thể ghi vào tệp nhật ký nhưng nó vẫn nên gắn phân vùng vào điểm gắn kết nhà của bạn. Nhưng nếu bạn muốn gắn kết phân vùng vào một thư mục hệ thống thì bạn cần chạy nó dưới dạng root, ví dụ:

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

Nếu không được, hãy thử:

sudo ext2fuse /dev/disk1s2 /sys_mount_point

Cập nhật : Gần đây tôi đã thấy rằng fuse-ext2 có vấn đề với một số tính năng ext4 mới hơn, vì vậy thay vào đó, tốt hơn là sử dụng ext4fuse ( port install ext4fusehoặc brew install ext4fuse). Sử dụng lệnh ext4fuse trực tiếp:

ext4fuse /dev/disk1s2 ~/mount_point

Ngoài ra, như Timothy đã đề cập trong các bình luận bạn thường chỉ cần sử dụng sudonếu bạn đang gắn ngoài thư mục chính của mình hoặc đĩa (/ dev / đĩaX) chỉ có thể truy cập bằng root:

sudo ext4fuse /dev/disk1s2 /sys_mount_point

Cần lưu ý rằng bạn chỉ có thể truy cập hệ thống tập tin được gắn kết đó dưới dạng root / sudo. ví dụ

sudo ls /sys_mount_point

Và để ngắt kết nối hệ thống tập tin, bạn chỉ cần sử dụng umountlệnh bình thường (với sudo nếu được sử dụng để gắn kết phân vùng):

umount ~/mount_point

Bạn chỉ cần truy cập ổ đĩa dưới dạng root nếu bạn gắn nó bên ngoài thư mục chính của bạn. Bạn có thể cd ~, mkdir mnt, ext4fuse /dev/diskXsY mnt, ls -la mntmà không sudo / root.
Timothy Zorn

núi: exec /Library/Filesystems/fuse-ext2.fs/Contents/Resources/mount_fuse-ext2 cho ...: Không có tập tin hoặc thư mục
Wolfgang FAHL

9

Chỉ để ghi lại, tôi đã thử nghiệm trình điều khiển Paragon ExtFS (phiên bản dùng thử) trên MacBook Pro của tôi để ghi vào phân vùng ext4 trong Linux. Tôi thấy rằng trình điều khiển rất không ổn định và nó đã tạo ra các lỗi cho hệ thống tập tin fsckkhông thể sửa chữa trong Linux cũng như trong Disk Utility.

Ý tưởng của tôi là có quyền truy cập vào /homephân vùng của tôi từ Mac OS X bằng trình điều khiển Paragon này, nhưng tôi không đề xuất thực hiện thiết lập này. Cho đến nay, tôi có /homephân vùng trong Linux được định dạng hfsplusmà không ghi nhật ký và sau đó tôi có thể truy cập các tệp của mình từ Mac OS X. Tất nhiên, thỉnh thoảng tôi gặp một số vấn đề trong FS nhưng không thường xuyên. Tuy nhiên, tôi cũng không đề xuất thiết lập này (ít nhất là bạn có bản sao lưu cập nhật cho công việc hàng ngày của mình).

Cuối cùng, tôi tin rằng Paragon phù hợp hơn có thể sử dụng cho các ổ đĩa cứng ngoài nhưng dù sao nó cũng không đáng tin cậy lắm vì phần mềm có bản quyền đắt tiền.

Cập nhật: Kể từ tháng 5 năm 2015, tôi đã định dạng / home của mình thành ext4 và tôi gắn hệ thống tập tin bằng fuse-ext2 kết hợp với FUSE cho OS X. Tôi có thể truy cập vào phân vùng ext4 để đọc và ghi. Nó là thiết lập vững chắc hơn so với cái tôi đã mô tả ở trên.


Tôi có thể xác nhận mục cuối cùng ở đây nơi trình điều khiển Paragon ExtFS có thể gây ra một số sự cố xấu trên các ổ đĩa linux của bạn. Đối với tôi, người đang nhân đôi OSX và Linux, paragon đã tạo ra các lỗi trên thiết bị của tôi. Điều này rất dễ giải quyết nhưng tuy nhiên đó không phải là giải pháp ổn định ...

Thêm kinh nghiệm xấu với trình điều khiển Paragon ExtFS. Sự hoảng loạn hạt nhân liên tục dẫn đến việc khởi động lại hệ thống, làm hỏng hệ thống tập tin (may mắn là fsck trên hộp Linux đã hoạt động). Đã thử trên hai ổ đĩa ngoài khác nhau với cùng kết quả.

9

Bạn có thể khởi động Linux VM nhanh chóng trên OS X bằng Vagrant . Bạn cần phải cài đặt nhà cung cấp VM như VirtualBoxVagrant thông qua tệp .dmg từ trang web hoặc sử dụng thùng bia .

Khi bạn đã vagrantcài đặt lệnh, hãy chạy lệnh này trong bất kỳ thư mục đã chọn nào:

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

Điều này sẽ tạo Vagrantfiletập tin cấu hình và .vagrantthư mục.

và bạn sẽ có hộp Linux được khởi động trong vòng vài phút (được tải xuống từ kho lưu trữ Atlas Hashicorp ).

Sau đó kết nối với hộp thông qua lệnh: vagrant sshthử gắn thiết bị của bạn vào Linux.

Theo mặc định, thư mục hiện tại của bạn sẽ được đồng bộ hóa với /vagrantthư mục trong VM. Đối với các tùy chọn nâng cao hơn, bạn có thể sửa đổi Vagrantfilevới cấu hình được yêu cầu.

Vì vậy, nếu bạn gắn hệ thống tập tin của mình trong /vagrantthư mục, nó sẽ tự động được đồng bộ hóa trở lại macOS của bạn.


Ngoài ra, bạn chỉ cần cài đặt VirtualBox , chạy ứng dụng GUI, cài đặt và khởi động một phiên bản tối thiểu của Linux, ví dụ Ubuntu để đạt được điều tương tự như đã giải thích ở trên.


Giải pháp không phải bản địa ở trên không lý tưởng, nhưng ít nhất macOS của bạn sẽ ổn định hơn thay vì cài đặt các phần mở rộng kernel không ổn định có thể gây ra nhiều sự cố hệ thống.


Ran với vagrant init ubuntu/xenial64; vagrant up --provider virtualboxnhư ubuntu/vivid64là không có sẵn nữa.
Fredrik Erlandsson

Hãy thử sử dụng ubuntu/trusty64thay thế.
kenorb

8

Tôi đã có một ổ USB được định dạng ext4 mà tôi có thể gắn kết sau khi cài đặt osxfuse . Đọc từ nó hoạt động rất tốt, nhưng tôi không chắc viết có an toàn không.

Ngoài ra, để di chuyển tập tin từ hệ thống tập tin của OS X ( HFS + ) để ext4, bạn có thể đầu tiên muốn loại bỏ tập tin những ẩn .DS_Store OS X hệ thống tập tin lẻn vào khi họ thỉnh thoảng gây xấu inodes .

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

Nó là tốt hơn so với việc phải sửa chúng sau khi có lệnh fsck .


7

Cập nhật câu trả lời cho (Cao) Sierra

Đối với Sierra và High Sierra ext4fuse dường như chỉ hoạt động tốt đối với truy cập đọc và do đó, nó có thể được coi là tùy chọn ưa thích. Trong khi các câu trả lời khác đã đưa ra một số ví dụ sử dụng, tôi sẽ lặp lại một lần nữa với một số chi tiết quan trọng:

Cài đặt ext4fuse với:

brew install ext4fuse

Bạn có thể gắn kết như một người dùng bình thường nhưng trong trường hợp đó, bạn sẽ chỉ có thể truy cập các tệp có thể đọc được trên thế giới, đó là lý do tại sao để truy cập đầy đủ bạn cần sử dụng sudo, ví dụ:

sudo ext4fuse -o allow_other /dev/disk2s1

Đây là một tập lệnh bash tự động hóa một phần quá trình. Khi được khởi chạy, nó sẽ tự động tạo điểm gắn kết sau khi bạn được nhắc nhập một trong các số nhận dạng thiết bị được hiển thị, chẳng hạn như 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}

Để ngắt kết nối, bạn có thể sử dụng, ví dụ diskutil umount /dev/disk2s1- nếu bạn nhận được thông báo hủy kết nối thất bại thì bạn có thể buộc ngắt kết nối diskutil umount force /dev/disk2s1, mặc dù vậy sẽ sạch hơn khi đóng các ứng dụng đang sử dụng tệp trên đĩa và thử lại mà không cần kết nối force.

Nếu bạn tình cờ có các tệp thuộc sở hữu _lpoperator(rõ ràng chúng được tạo khi bạn sử dụng rsync với tùy chọn nhóm bảo tồn), thì lệnh sau sẽ cho phép bạn truy cập các tệp đó:

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

Câu trả lời gốc cho Yosemite trở lên (không dùng nữa)

Cần có hai gói để kích hoạt hỗ trợ EXT2 / 3/4 trên OSX: OSXFUSEFUSE-EXT2 .

Các công thức homebrew cho OSXFUSE và FUSE-EXT2 không hoạt động đối với tôi trên cả mavericks hoặc yosemite.

Những gì đã làm việc là như sau:

  1. Tải xuống và cài đặt thủ công DMX OSXFUSE từ http://osxfuse.github.io/ . QUAN TRỌNG : Khi bạn khởi chạy trình cài đặt PKG, hãy đảm bảo bạn đã chọn Lớp tương thích MacFUSE trong trình hướng dẫn (nó không được bật theo mặc định) - không có nó tôi đã gặp lỗi trong khi thử gắn kết.
  2. Tải xuống thủ công FUSE-EXT2 từ http://sourceforge.net/projects/fuse-ext2/ hoặc cho Sierra / El Capitan từ https://github.com/gpz500/fuse-ext2/release và chạy trình cài đặt PKG.

Khi bạn đã cài đặt cả OSXFUSE và FUSE-EXT2, bạn có thể gắn các phân vùng ext2 / ext3 / ext4 như được đề cập trong các câu trả lời khác:

  1. Tìm tên thiết bị cho phân vùng EXT mà bạn muốn gắn kết (ví dụ: disk0s2trong ví dụ bên dưới, (CẬP NHẬT) trong các phiên bản MacOS sau, phân vùng ext3 / ext4 có thể được gắn nhãn Microsoft Basic Data chứ không phải Linux ):

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

  2. Gắn kết phân vùng vào một điểm gắn kết hiện có:

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

Gắn kết như một người dùng thông thường không làm việc cho tôi. Có lẽ điều này có thể được khắc phục bằng cách thay đổi quyền, nhưng tôi đã không xem xét nó.

Lưu ý: Sự nghi ngờ của tôi là các công thức homebrew không hoạt động vì cài đặt homebrew osxfusemà không có Lớp tương thích MacFUSE .

Có hai osxfusegói trong homebrew:

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

Cả hai phiên bản không thể gắn kết phân vùng EXT. Nhiều khả năng, phiên bản DMG ( Caskroom/cask/osxfuse) không thành công do homebrew cài đặt gói với cài đặt mặc định, điều đó có nghĩa là Lớp tương thích MacFUSE không được bao gồm. osxfusePhiên bản chính có thể cần một số tham số cài đặt đặc biệt để kích hoạt khả năng tương thích MacFUSE, vì vậy cho đến khi điều này được khắc phục trong homebrew, nên sử dụng phương pháp DMG thủ công.

Phương pháp này hiệu quả với tôi trên mavericks, yosemite, elcapitan và sierra.

Kịch bản gắn kết EXT2 / 3/4 cho các phiên bản OSX cũ hơn (không dùng nữa)

Để lưu thêm một số thao tác gõ, tôi sử dụng một tập lệnh nhỏ có tên phân vùng như disk0s2và gắn nó vào bên dưới /Volumes/disk0s2, tạo thư mục nếu cần:

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

Kịch bản được gọi với tên phân vùng mà bạn tra cứu qua diskutil list, vd mount_ext4.sh disk2s3.


1
Đã thử điều này nhưng không may nhận được lỗi FUSE-EXT2 could not mount /dev/disk2s2 at /Volumes/ext4 because the following problem occurred:(nhưng không có mô tả vấn đề hoặc tài liệu tham khảo). Tôi đã cài đặt addon Layer Compability. Tôi đang dùng macOS Sierra nên đã dùng thử phiên bản Github gzp500.
Winterflags

6

Ngoài ra còn có e2fspross có sẵn trong MacPorts. Tôi đã không tự mình thử nghiệm nhưng có vẻ đầy hứa hẹn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.