Jak zamontować kartę SD sformatowaną w formacie ext4 z odpowiednimi uprawnieniami (z rootem)?

9

Widzę tu kilka wzmianek o tworzeniu karty SD w formacie ext4, ale bez przewodnika. To ściśle powiązane pytanie sugeruje, że nie ma sposobu, aby to zrobić, ale moje pytanie różni się tym, że mój telefon jest specjalnie zrootowany.

Sformatowałem kartę jako ext4 (tablica partycji GUID); mój telefon Cyanogenmod zamontował go na /mnt/fuse/sdcard1. Postępowałem zgodnie z instrukcjami , aby zamontować kartę w /storage/sdcard1, tworząc następujący skrypt o/data/local/userinit.sh

#!/system/bin/sh
REALMNT=/mnt/fuse/sdcard1_real
if ! [ -d "$REALMNT" ]; then
  mkdir "$REALMNT" || exit 1
fi
mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 &

Uruchomiłem ponownie i próbuję skopiować plik (przy użyciu Eksploratora plików ES) i wkleić go do katalogu nadrzędnego, co nie powiodło się:

/storage/sdcard1/foo/bar.mp3: open failed: EACCES (Permission denied).

Mogę właściwie odtworzyć plik, więc mogę go otworzyć. FWIW, gdy próbuję skopiować z oryginalnego punktu montowania ( /mnt/fuse/sdcard1), pojawia się nieco inny błąd:

Failed to copy the file bar.mp3

Używam Samsunga Galaxy S3 z Cyanogenmod 10.2.0-i9300.

== EDYCJA ==

su
ls -l /mnt/fuse
drwxrwxr-x media_rw media_rw   2014-03-04 22:08 sdcard1

To było wszystko. W sdcard1_realtym katalogu nie ma , więc przypuszczam, że skrypt nie działa?

== EDIT2 ==

Próbowałem zmodyfikować skrypt, aby rozwiązać problem. Skrypt zaczyna się dobrze, ale potem kończy się niepowodzeniem mkdir "$REALMNT"z błędem /data/local/userinit.sh[6]: : not found.

== EDIT3 ==

Wiem, że skrypt nie działa, więc naprawienie go może rozwiązać moje pytanie, ale pomyślałem, że następujące było interesujące. Sformatowałem kartę SD w komputerze z systemem Linux i przesłałem do niej niektóre pliki. Co dziwne, błędy uprawnień występują tylko w podkatalogach, które utworzyłem. W katalogu głównym partycji (przez /storage/sdcard1) mam już uprawnienia do zapisu.

Krogulec
źródło
1
Jako root wykonaj proszę ls -l /mnt/fuse/i ls -l /mnt/fuse/sdcard1_real. Następnie edytuj swoje pytanie, aby uwzględnić wyniki. Moje przypuszczenie jest „błędne uprawnienia do pliku” - albo na Górze lub do foo/katalogu na karcie. Pamiętaj, że ext4 obsługuje pełne uprawnienia do plików * nix, w tym. użytkownik i grupy.
Izzy
Wpisujesz suterminal, aby uzyskać root. Może być konieczne potwierdzenie udzielenia zezwolenia przez telefon, jeśli robisz to po raz pierwszy.
Chahk
Albo skrypt nie działa, albo w ogóle nie jest wykonywany. Możesz dodać jakieś wyjście debugowania, np. echo Script executed > /mnt/fuse/sdcard1/test.logI sprawdzić, czy w ogóle działa. Jeśli tak, zrób od ostatniego do ostatniego wiersza mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.logi sprawdź komunikat o błędzie. Lub wykonać skrypt ręcznie zobaczyć: su /data/local/userinit.sh.
Izzy
@ Izzy touchpokazuje, że skrypt jest uruchomiony. Próbowałem wykonać skrypt ręcznie su /data/local/userinit.sh, ale nie powiodło się. Próbowałem również su echo foo, i uzyskać podobny błąd: Unknown id: echo.
Sparhawk
Jeśli chodzi o EDIT3, zobacz mój pierwszy komentarz: ext4 obsługuje pełne uprawnienia do plików * nix, w tym. użytkownik i grupy . Utworzyłeś te katalogi z użytkownikiem, który nie istnieje na twoim urządzeniu z Androidem, więc należą one do „nieznanego użytkownika / nieznanej grupy”. Jeśli nie przyznałeś dostępu do zapisu do „świata”, tylko root mógłby tam pisać. Powinieneś zapoznać się z podstawami * nix podczas korzystania z takiego systemu plików na przenośnym nośniku;) Jeśli chodzi o skrypt, ponownie sugeruję dodanie dodatkowych informacji debugowania, np. Użycie echodo wypisania każdego polecenia przed jego wykonaniem i przekierowanie wyjścia błędu za pomocą 2>>.
Izzy

Odpowiedzi:

6

Zostało to prawdopodobnie naprawione kilka miesięcy temu, ale ludzie wciąż zgłaszają problemy. Mogę czytać elementy na karcie, ale nie mam uprawnień do zapisu. Aby to naprawić, połączyłem strategie z kilku źródeł .

  1. Karta partycji z tablicą partycji MS-DOS i systemem plików ext4. Korzystałem z GParted na swoim komputerze stacjonarnym (Linux).
  2. Włóż kartę do telefonu. (Prawdopodobnie nie będziesz teraz mieć dostępu do zapisu.)
  3. Otwórz emulator terminala , domyślnie zainstalowany w Cyanogenmod.
  4. Wpisz następujące informacje (Polecam klawiaturę WiFi dla dużych bloków tekstu). Przyznaj uprawnienia roota emulatora, gdy o nie poprosi.

$I #wskazać monitami, więc nie wpisać je.

$ su
# chown media_rw:media_rw /mnt/media_rw/sdcard1
# chmod g+w /mnt/media_rw/sdcard1

To zmienia uprawnienia karty SD. Właściciel i grupa zmieniają się z systemna media_rw, a także daje grupie prawo do zapisu.

Krogulec
źródło
potrzeba -R dla recursif chown -R media_rw: media_rw / mnt / media_rw / sdcard1
m3asmi
1

Nie jesteś pewien, czy to jest jakaś pomoc, ale być może problem polega na tym, że próbujesz zamontować w niewłaściwym miejscu? Oto mój działający skrypt, który działa na S3 mini z CM11:

#!/system/bin/sh
REALMNT=/mnt/media_rw/sdcard1
if ! [ -d "$REALMNT" ]; then
mkdir "$REALMNT" || exit 1
fi
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 

Lokalizacja REALMNT już istniała, więc oczywiście mkdir nigdy nie został wywołany. A media_rw / sdcard1 jest już własnością media_rw

Musiałem także zaktualizować /etc/permissions/platform.xml, aby uwzględnić: <group id="media_rw"/> w: <permission name="android.permission.WRITE_EXTERNAL_STORAGE">

użytkownik59177
źródło
Dzięki. W pewnym sensie zrezygnowałem z tego, ponieważ miałem również duże zużycie baterii w swoim skrypcie. Ponieważ jest zamocowany w bagażniku, nie będę się już martwić obejściem tego problemu. Dziękuję i +1.
Sparhawk
@Sparhawk: Nie jestem pewien, której wersji CYM używasz, ale moja karta SD nie jest montowana automatycznie.
Luis A. Florit,
@ LuisA.Florit Nie jestem pewien, czy chciałeś odpowiedzieć na tę odpowiedź . W każdym razie używam 11-20140804-SNAPSHOT-M9-i9300. Opublikowałem więcej informacji w innej odpowiedzi .
Sparhawk
@Sparhawk: Moja karta nie jest nawet zamontowana, a procedura montowania w Ustawieniach kończy się niepowodzeniem. Być może problem jest związany z moim pytaniem tutaj ( sunie można zamontować ): android.stackexchange.com/questions/82089/… `Używam cm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip.
Luis A. Florit
@ LuisA.Florit Nie jestem pewien. Być może zadać nowe pytanie?
Sparhawk
0

Adasdadasd opublikował odpowiedź , którą chciałem zaakceptować, ale od tego czasu została usunięta. Powielę to poniżej i zaakceptuję moją odpowiedź, ale jeśli adasdadasd pojawi się ponownie, proszę opublikuj ponownie, a ja ją usunę i zaakceptuję twoją.

https://jira.cyanogenmod.org/browse/CYAN-332

https://github.com/CyanogenMod/android_packages_providers_MediaProvider/commit/faf3f77b9222554227740aed8127714ea9e3f407

Naprawiono domyślnie? Nowa zmiana w github.

Krogulec
źródło
0

Oto linia równoległa

#!/system/bin/sh
REALMNT="/mnt/media_rw/extSdCard"
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p1     "$REALMNT"
sdcard "$REALMNT" /storage/extSdCard 1023 1023 &

A tutaj zapisywalny ext4 na zewnętrznym SD

#!/system/bin/sh
chown media_rw:media_rw /mnt/media_rw/extSdCard
chmod g+w /mnt/media_rw/extSdCard

Możesz zmienić „extSdCard”, tak jak „sdcard1”, w którym zamontowano zewnętrzną kartę SD

Używam stockrom z Kingroot, ale próbuję Supersu z problemami z zamontowaniem systemu plików

Ykg
źródło