Czy w systemie Mac OS X jest bezpieczna, stabilna aplikacja do odczytu i zapisu w systemach plików ext4 ?
Jeśli nie, jaki jest najlepszy sposób na uzyskanie dostępu do zawartości systemu plików ext4 w systemie Mac OS X?
Czy w systemie Mac OS X jest bezpieczna, stabilna aplikacja do odczytu i zapisu w systemach plików ext4 ?
Jeśli nie, jaki jest najlepszy sposób na uzyskanie dostępu do zawartości systemu plików ext4 w systemie Mac OS X?
Odpowiedzi:
Odpowiedź zależy od chęci inwestowania w oprogramowanie komercyjne:
Jeśli nie masz nic przeciwko wydaniu pieniędzy na produkt komercyjny , extFS firmy Paragon dla komputerów Mac zapewni ci dostęp do odczytu i zapisu w systemach plików ext2 / ext3 / ext4. Obecna wersja obsługuje wszystkie wersje OS X / macOS od 10.10 wzwyż.
Jeśli szukasz darmowego rozwiązania , możesz skonfigurować maszynę wirtualną z systemem Linux, zamontować tam swoje woluminy i udostępnić je za pośrednictwem Samby lub FTP (S). W tym poście podano szczegółowe informacje na temat tego, jak to osiągnąć za pomocą VirtualBox , bezpłatnej aplikacji do obsługi maszyn wirtualnych. Zauważ, że nie jest to do końca lekkie rozwiązanie, nawet jeśli korzystanie z gotowej maszyny wirtualnej VirtualBox oszczędza ci instalowania i konfigurowania dystrybucji Linux od zera.
Opierając się na odpowiedzi Kena: z powodzeniem użyłem fuse4x i fuse-ext2 i zalecam fuse-ext2 zamiast ext4fuse.
ext4fuse było dla mnie kłopotem, ponieważ wymaga ręcznej kompilacji i nie obsługuje opcji fuse4x, które pozwoliłyby mi ustawić kontrolę dostępu. fuse-ext2 zapewnia pakiety do pobrania, a wersja 0.0.7 działała dobrze. Skopiowałem kilka dużych ISO bez problemu.
Można również zainstalować OSXFUSE całkowicie poprzez parzenie kierownika wiersz poleceń pakietu:
brew install homebrew/fuse/ext4fuse
Zauważ, że instalacja informuje, że niektóre polecenia muszą być uruchamiane jako „sudo”.
Z Yosemite lepiej spojrzeć na to . A następnie upewnij się, że katalog jest czytelny przez użytkownika przez robi to . Aby zadziałało, musiałem użyć grupy kół w następujący sposób:
sudo dscl . append /Groups/wheel GroupMembership $(whoami)
W przypadku ostatnich zmian w homebrew powinno to być tak proste, jak:
brew cask install osxfuse
brew install ext4fuse
Może być konieczne ponowne uruchomienie komputera.
ext4fuse jest niestety tylko do odczytu. I może być konieczne użycie flagi , aby działała jak zwykły użytkownik.
Inni oglądający to pytanie mogą być zainteresowani libguestfs . Nie znam portu OS X, ale biorąc pod uwagę, że VirtualBox ma interfejs API, nie jest wykluczone.
Zastanawiam się, dlaczego nikt nie napisał warstwy zgodności, która pozwala na uruchamianie kodu systemu plików jądra Linux w przestrzeni użytkownika / bezpieczniku. A może ktoś?
Jeśli zastanawiasz się, co to wiersz poleceń, aby zamontować partycję ext4 za pomocą fuse i ext2fuse (np. W przypadku instalacji za pomocą MacPorts port install ext2fuse
) - najpierw musisz ustalić, gdzie jest partycja Linux:
diskutil list
Spowoduje to wyświetlenie listy wszystkich partycji dla wszystkich dysków, a wśród nich powinieneś zobaczyć odpowiednie wymienione na liście w kolumnie TYPE jako Linux. Połącz diskX i numer partycji Y tak jak to / dev / diskXsY - np .:
mount -t fuse-ext2 /dev/disk1s2 ~/my_mount_point
Może narzekać, że nie może zapisać do pliku dziennika, ale nadal powinien zamontować partycję w twoim domowym punkcie montowania. Ale jeśli chcesz zamontować partycję w katalogu systemowym, musisz uruchomić ją jako root, np .:
sudo mount -t fuse-ext2 /dev/disk1s2 /sys_mount_point
Jeśli to nie działa spróbuj:
sudo ext2fuse /dev/disk1s2 /sys_mount_point
Aktualizacja : Niedawno odkryłem, że fuse-ext2 ma problemy z niektórymi nowszymi funkcjami ext4, więc zamiast tego lepiej jest użyć ext4fuse ( port install ext4fuse
lub brew install ext4fuse
). Użyj bezpośrednio polecenia ext4fuse:
ext4fuse /dev/disk1s2 ~/mount_point
Również, jak wspomniał Timothy w komentarzach, zwykle potrzebujesz tylko, sudo
jeśli montujesz poza katalogiem domowym lub dysk (/ dev / diskX) jest dostępny tylko przez root:
sudo ext4fuse /dev/disk1s2 /sys_mount_point
Należy zauważyć, że dostęp do zamontowanego systemu plików można uzyskać tylko jako root / sudo. na przykład
sudo ls /sys_mount_point
Aby odmontować system plików, wystarczy użyć zwykłego umount
polecenia (z sudo, jeśli jest używany do zamontowania partycji):
umount ~/mount_point
cd ~
, mkdir mnt
, ext4fuse /dev/diskXsY mnt
, ls -la mnt
bez sudo / root.
Dla przypomnienia przetestowałem sterownik Paragon ExtFS (wersja próbna) na moim MacBooku Pro do zapisu na partycji ext4 w systemie Linux. Odkryłem, że sterownik był bardzo niestabilny i spowodował uszkodzenie systemu plików, fsck
którego nie można naprawić ani w systemie Linux, ani w Narzędziu dyskowym.
Moim pomysłem było mieć dostęp do mojej /home
partycji z Mac OS X za pomocą tego sterownika Paragon, ale nie sugeruję, aby wykonać tę konfigurację. Do tej pory mam /home
partycję w Linuksie sformatowaną hfsplus
bez dzienników, a następnie mogę uzyskać dostęp do moich plików z Mac OS X. Oczywiście od czasu do czasu mam problemy z FS, ale nie jest to zbyt częste. Jednak nie sugeruję tego ustawienia (przynajmniej, że masz aktualną kopię zapasową do codziennej pracy).
Wreszcie uważam, że Paragon jest bardziej odpowiedni do użytku na zewnętrznych dyskach twardych, ale w każdym razie nie jest zbyt niezawodny, jeśli chodzi o oprogramowanie, którego licencja jest droga.
Aktualizacja: Od maja 2015 roku sformatowałem mój / home do ext4 i podłączam system plików za pomocą fuse-ext2 w połączeniu z FUSE dla OS X. Mogę uzyskać dostęp do partycji ext4 w celu odczytu i zapisu. Jest to bardziej solidna konfiguracja niż ta, którą wcześniej opisałem powyżej.
Możesz szybko uruchomić Linux VM na OS X za pomocą Vagrant . Musisz zainstalować dostawcę VM, takiego jak VirtualBox i Vagrant, albo poprzez plik .dmg z witryny, albo za pomocą zaparzacza .
Po vagrant
zainstalowaniu polecenia uruchom to w dowolnym wybranym folderze:
vagrant init ubuntu/trusty64; vagrant up --provider virtualbox
Spowoduje to wygenerowanie Vagrantfile
pliku konfiguracyjnego i .vagrant
folderu.
w ciągu kilku minut uruchomisz system Linux (pobrany z repozytorium Atlas Hashicorp ).
Następnie podłącz do skrzynki za pomocą polecenia: vagrant ssh
i spróbuj zamontować urządzenie w systemie Linux.
Domyślnie bieżący folder zostanie zsynchronizowany z /vagrant
folderem na maszynie wirtualnej. Aby uzyskać bardziej zaawansowane opcje, możesz zmodyfikować Vagrantfile
wymaganą konfigurację.
Więc jeśli podłączysz swój system plików w /vagrant
folderze, zostanie on automatycznie zsynchronizowany z powrotem z systemem macOS.
Alternatywnie wystarczy zainstalować VirtualBox , uruchomić aplikację GUI, zainstalować i uruchomić minimalną wersję systemu Linux, np. Ubuntu , aby osiągnąć to samo, co wyjaśniono powyżej.
Powyższe nienatywne rozwiązanie nie jest idealne, ale przynajmniej twój macOS byłby bardziej stabilny niż instalowanie niestabilnych rozszerzeń jądra, które mogą powodować wiele awarii systemu.
vagrant init ubuntu/xenial64; vagrant up --provider virtualbox
ponieważ ubuntu/vivid64
nie jest już dostępny.
ubuntu/trusty64
zamiast tego.
Miałem dysk USB sformatowany w systemie ext4, który mogłem zamontować po zainstalowaniu osxfuse . Czytanie z niego działa świetnie, ale nie jestem pewien, czy pisanie jest bezpieczne.
Ponadto, w celu przeniesienia plików z systemu plików OS X ( HFS + ) na ext4, możesz najpierw chcieć usunąć te ukryte pliki .DS_Store, w które wkrada się system plików OS X, ponieważ czasami powodują złe i- węzły .
find /my/data/to/move -name '*.DS_Store' -type f -delete
Jest to lepsze niż konieczność ich naprawy za pomocą polecenia fsck .
Wydaje się, że ext4fuse dla Sierra i High Sierra działa dobrze tylko w przypadku dostępu do odczytu i dlatego można go prawdopodobnie uznać za preferowaną opcję. Podczas gdy inne odpowiedzi już zawierają przykłady użycia, powtórzę to jeszcze raz z kilkoma ważnymi szczegółami:
Zainstaluj ext4fuse z:
brew install ext4fuse
Możesz zamontować jako zwykły użytkownik, ale w takim przypadku będziesz mieć dostęp tylko do plików czytelnych dla całego świata, dlatego do pełnego dostępu musisz użyć sudo
, np .:
sudo ext4fuse -o allow_other /dev/disk2s1
Oto skrypt bash, który częściowo automatyzuje proces. Po uruchomieniu automatycznie utworzy punkt montowania po pojawieniu się monitu o wprowadzenie jednego z wyświetlanych identyfikatorów urządzenia, takich jak 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}
Aby odmontować, możesz użyć np. diskutil umount /dev/disk2s1
- jeśli pojawi się komunikat, że odmontowanie się nie powiodło, możesz wymusić odmontowanie diskutil umount force /dev/disk2s1
, chociaż byłoby lepiej zamknąć aplikacje korzystające z plików na dysku i ponowić próbę odmontowania bez force
.
Jeśli akurat posiadasz pliki _lpoperator
(najwyraźniej są one tworzone, gdy używasz rsync z opcją zachowania grupy), następujące polecenie pozwoli ci uzyskać dostęp do tych plików:
/usr/sbin/dseditgroup -o edit -a everyone -t group _lpoperator
Aby włączyć obsługę EXT2 / 3/4 w OSX, potrzebne są dwa pakiety: OSXFUSE i FUSE-EXT2 .
W homebrew formuły OSXFUSE i bezpiecznik-EXT2 nie działa dla mnie po obu Mavericks lub Yosemite.
To, co zadziałało, było następujące:
Po zainstalowaniu zarówno OSXFUSE, jak i FUSE-EXT2 możesz zamontować partycje ext2 / ext3 / ext4, jak wspomniano w innych odpowiedziach:
Znajdź nazwę urządzenia dla partycji EXT, którą chcesz zamontować (np. disk0s2
W poniższym przykładzie (UPDATE) w późniejszych wersjach MacOS partycje ext3 / ext4 mogą być oznaczone jako Microsoft Basic Data, a nie Linux ):
# diskutil list | grep Linux
1: Linux_Swap 8.2 GB disk0s1
2: Linux 119.9 GB disk0s2
Zamontuj partycję do istniejącego punktu montowania:
sudo mkdir -p /Volumes/ext4
sudo mount -t fuse-ext2 /dev/disk0s2 /Volumes/ext4
Montowanie jako zwykły użytkownik nie działało dla mnie. Prawdopodobnie można to naprawić, bawiąc się uprawnieniami, ale nie zajrzałem do tego.
Uwaga: Podejrzewam, że formuły homebrew nie działały, ponieważ homebrew instaluje się osxfuse
bez warstwy zgodności MacFUSE .
Istnieją dwa osxfuse
pakiety w Homebrew:
# brew search osxfuse
>>> osxfuse
>>> Caskroom/cask/osxfuse
Obie wersje nie mogą zamontować partycji EXT. Najprawdopodobniej wersja DMG ( Caskroom/cask/osxfuse
) zawiedzie, ponieważ homebrew instaluje pakiet z ustawieniami domyślnymi, co oznacza, że nie uwzględniono warstwy zgodności MacFUSE . Główna osxfuse
wersja prawdopodobnie potrzebuje specjalnego parametru instalacyjnego, aby włączyć kompatybilność z MacFUSE, więc dopóki nie zostanie to naprawione w homebrew, należy użyć ręcznej metody DMG.
Ta metoda działała na mnie w przypadku indywidualistów, yosemite, elcapitan i sierra.
Aby zaoszczędzić trochę pisania, używam małego skryptu, który pobiera nazwę partycji, taką jak disk0s2
i montuje pod nią /Volumes/disk0s2
, tworząc folder, jeśli to konieczne:
### mount_ext4.sh
sudo mkdir -p "/Volumes/$1"
sudo mount -t fuse-ext2 "/dev/$1" "/Volumes/$1"
open "/Volumes/$1"
Skrypt jest wywoływany z nazwą partycji, za pomocą której przeglądasz diskutil list
, np mount_ext4.sh disk2s3
.
FUSE-EXT2 could not mount /dev/disk2s2 at /Volumes/ext4 because the following problem occurred:
(ale nie ma opisu problemu ani odniesienia). Zainstalowałem dodatek Compability Layer. Korzystam z systemu macOS Sierra, więc wypróbowałem wersję Github gzp500.