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ì?
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ì?
Câu trả lời:
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.
Dựa trên câu trả lời của Ken: Tôi đã sử dụng fuse4x và fuse-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ì.
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)
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 đó?
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 ext4fuse
hoặ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 sudo
nế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 umount
lệ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
cd ~
, mkdir mnt
, ext4fuse /dev/diskXsY mnt
, ls -la mnt
mà không sudo / root.
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 fsck
khô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 /home
phâ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ó /home
phân vùng trong Linux được định dạng hfsplus
mà 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.
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ư VirtualBox và Vagrant thông qua tệp .dmg từ trang web hoặc sử dụng thùng bia .
Khi bạn đã vagrant
cà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 Vagrantfile
tập tin cấu hình và .vagrant
thư 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 ssh
và thử 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 /vagrant
thư 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 Vagrantfile
vớ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 /vagrant
thư 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.
vagrant init ubuntu/xenial64; vagrant up --provider virtualbox
như ubuntu/vivid64
là không có sẵn nữa.
ubuntu/trusty64
thay thế.
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 .
Đố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ần có hai gói để kích hoạt hỗ trợ EXT2 / 3/4 trên OSX: OSXFUSE và FUSE-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:
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:
Tìm tên thiết bị cho phân vùng EXT mà bạn muốn gắn kết (ví dụ: disk0s2
trong 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
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 osxfuse
mà không có Lớp tương thích MacFUSE .
Có hai osxfuse
gó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. osxfuse
Phiê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.
Để 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ư disk0s2
và 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
.
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.