So erweitern Sie die Unterstützung für das EXT4-Dateisystem für microSD-Karten auf Lager oder Nicht-Herkunfts-/CyanogenMod-ROMS

Wie mir bekannt ist, Androidwird Ihre Speicherkarte nach 4.4 oder so ähnlich nicht mehr direkt exponiert und muss sorgfältig durch bestimmte Punkte verbunden werden, die durch das System Mountbeachtet werden müssen. Meine Frage ist angesichts dieser Situation und der Tatsache, dass sie sehr kompliziert ist zugreifen und vor allem, wenn man jetzt darauf sitzt, ist es irgendwie immer noch möglich, Unterstützung zu leisten, wenn es ursprünglich nicht existierte, wie es bei früheren ähnlichen Betriebssystemen der Fall war, wenn die Einhängepunkte beim Booten und dann erstellt wurden wird auf sie aufmerksam gemachtvold
ext4SeLinuxext4lineagevold


Was ich getan habe,
seit ich rooted( magisk) bin, benutze ich su mount masterdiese und mounte sie manuell, aber der Versuch, sie dann zu verwenden, voldschlug fehl, weil es zu spät war. Ich habe einige Artikel darüber gefunden, wie dies in früheren Android-Versionen bis 5 erreicht wurde.
Nach 7.6 ist die Android-Welt noch mehr geworden paranoid in Bezug auf die Sicherheit und seLINUXhätte ab 7.x nicht wählerischer sein können Android-Versionen Ich würde gerne wissen, ob es eine definitive Anleitung dazu gibt, wie dies getan werden kann. Es macht mir nichts aus, diese Funktion im Kernel neu zu kompilieren. Dies ist eine weitaus lohnendere Investition als der Versuch, nach benutzerdefinierten ROMs zu suchen und sich von Lagerbeständen zu entfernen, nur weil Sie EXT4Unterstützung wünschen
. Wie kann ich also hinzufügen?EXT4Unterstützung von Stock- und ähnlichen ROMs für Android-Versionen > 7.x und dies auf die richtige Weise, bei der alle Apps auf meine Partitionen zugreifen können. Alle meine Partitionen sind EXT4dies ganz im Gegensatz zu dem zweiten partition app2sdAnsatz, der verwendet wird, um Platz zu sparen. Natürlich habe ich das auch, aber ich habe zwei weitere Partitionen, die für extSD(externe Hauptdatenspeicherpartition) verwendet werden, und eine, die einer anderen App gewidmet ist. insgesamt 3 EXT4Partitionen. Die erste ist die Hauptdatenpartition, die zweite app2sdund die dritte eine spezielle Partition, die einer App gewidmet ist. Wenn es darauf ankommt, bin ich auf einem Samsung-Gerät mit Stock Nougat 7.x gerootet.


Eine andere Sache, die ich beobachtet habe, und ich werde die Frage entsprechend aktualisieren, ist, dass plötzlich aus dem Nichts Partitionen, die unter /storage gemountet sind, jetzt nur gelesen werden, früher waren sie es nicht. Ich kann immer noch über /mnt/media_rw lesen und schreiben. Ich frage mich, was schief gelaufen ist, da viele Apps darauf angewiesen sind, auf meine Partitionen über /storage Mount Point zuzugreifen.

Also nur um hier die Fragen zusammenzufassen:

  • Mounten Sie eine mehrfach ext4partitionierte externe Karte beim Booten, im Gegensatz zum manuellen Mounten, das ich tun kann.
  • Mounten Sie es auf die richtige Weise mit der richtigen Gruppen-ID, damit Sie voldwissen, dass es gemountet wurde und alle Apps und Prozesse frei auf die Partition zugreifen können.
  • Alle externen Partitionen unter /storagewurden plötzlich schreibgeschützt (interne Speicherpartition ist natürlich immer schreibgeschützt). tune2fsbestätigt, dass alle Partitionen sauber sind. Warum passiert das und wie kann es behoben werden?


Danke für die Antwort. Ich habe diese Frage gestellt, die wie eine Erzählung klang, da ich keine Screenshots oder Protokolle zur Hand hatte, falls Sie dies in Ihrem Eröffnungskommentar als Antwort meinten. Also hier ist, was ich versuche zu erreichen, aber auf alle möglichen Fehler stoße.

1) Mount mmck1p2to /data/sdext2und ich erhalte immer wieder den Fehler failed to mount ... mmcblk1p2on ..... invalid argument& another similar line
failed..... /dev/block/vold/publicon .... invalid args. das ist über app2sdund meine magiskhat die globale Option eingeschaltet, die gleiche Partition ist bereits beim Booten unter gemountetmedia_rw and storage


Bind mountingDie Kamera DCIMund viele andere Ordner im internen Speicher schlagen fehl, wenn das Ziel ist /storage/part#, und es hat früher gut funktioniert. Meine Partitionen sind laut tune2fsBericht sauber. Was ist passiert ?

Danke noch einmal. Beantworten Sie hier Ihre Fragen:

1) Was sind derzeit gemountete Dateisysteme (Ausgabe von mount)?
o/p ist zu groß, um hier reinzupassen. PFA

2) Ausgabe von /system/bin/id?
für normale Benutzer

uid=10112(u0_a112) gid=10112(u0_a112) groups=10112(u0_a112),1015(sdcard_rw),1023(media_rw),1028(sdcard_r),3003(inet),9997(everybody),50112(all_a112) context=u:r:untrusted_app:s0:c512,c768


3) Welchen Befehl genau haben Sie verwendet, um mmck1p2 nach /data/sdext2 zu mounten? 4) Welchen Befehl genau haben Sie verwendet, um den Mount-DCIM-Ordner zu binden?

1   mount -o,rw /dev/block/mmcblk1p1 /storage/extsd
2   lp=/sdcard/logger.txt
4   ls./mnt/media_rw
5   ls /mnt/media_rw
6   mkdir -p $_/extsd
7   mount --bind /storage/extsd  $_
8   ls $_

Mit dem obigen Ausführen vom Terminal kann ich Dateien nur vom Terminal sehen. Wenn ich davon weglaufe, adbbekomme ich die gleiche Situation
. Der Gedanke adbwäre hartnäckig, ist aber nicht der Fall. Danach habe ich versucht, vold aufzurufen, in der Hoffnung, dass es mein Reittier dauerhaft und sichtbar machen würde, aber auch dort kein Glück

dreameltemtr:/ # /system/bin/vold
/system/bin/vold
Aborted
134|dreameltemtr:/ # /system/bin/vold --blkid_context=u:r:blkid:s0 --blkid_untrusted_context=u:r:blkid_untrusted:s0 --fsck_context=u:r:fsck:s0 --fsck_untrusted_context=u:
r:fsck_untrusted:s0
ntext=u:r:fsck:s0 --fsck_untrusted_context=u:r:fsck_untrusted:s0              <
SELinux selinux_android_compute_policy_index : Policy Index[2],  Con:u:r:magisk:s0 RAM:SEPF_SECMOBILE_7.1.1_0003, [-1 -1 -1 -1 0 1]

Auch zu mount partition# 2 via app2sdgibt es ein mountSkript, das die App /system/bin/etc or /data/app2sdje nach den von Ihnen gewählten Optionen in das Verzeichnis schreibt. Es verwendet einen ähnlichen Ansatz, außer dass
-- ich seine eigene Binärdatei für die Bind-Mount-Funktionalität verwendet habe
-- ich regelmäßige Tests durchführen werde, um zu sehen, ob bestimmte Partitionen gemountet werden
-- es diese regelmäßig ausführen wird (eine Art viele Skripte zusammenflicken), in der Hoffnung, dass einer wird funktionieren
-- Ich versuche , sowohl über das Blockgerät ( / dev/block/mmcxxx) als auch vold( /dev/block/vold/nnn) zu mounten .
Hier ist das Skript und Sie werden sehen , was ich gerade gesagt habe . Wieder PFA, da es eine Obergrenze für maximale Zeichen auf einem Beitrag gibt.

4) Was sind genaue Fehlermeldungen? –
Genaue Nachrichten sind 2 Zeilen vom app2sd guiAufmerksamkeitsfeld entfernt

- Failed to mount /dev/block/ mmcblk1p2 to /data/sdext2 invalid argument <br>
- Failed to mount /dev/block/vold/public/179:34 to /data/sdext2 invalid argument<br>

Im letzten Teil, wo ich nicht auf extern partitionsgemountet schreiben kann /storage, war diese Instanz der ROM-Installation fehlgeschlagen. Es verursachte wiederholt boot-loopsnach 10 Minuten, also habe ich gerade mein NandroidBackup wiederhergestellt. Also ich kann nicht mehr Details ausgraben.

Sie können eine externe SD-Karte als formatieren ext4und manuell einbinden, wo immer Sie möchten. ext4Unterstützung ist seit der ersten Veröffentlichung von Android auf jedem ROM - Stock oder Custom - vorhanden. Was genau ist Ihre Frage?
Vielen Dank für die Antwort, Irfan, ich kann es manuell finden, wie ich es geschrieben habe
Vielen Dank für die Antwort Irfan Ich kann es manuell finden, wie ich es geschrieben habe. Es gibt 3 Fragen, tut mir leid, wenn es nicht klar war: 1) Es muss beim Booten gemountet und gelesen und geschrieben werden. 2) Die Mount-Informationen müssen übertragen werden, um zu sagen, dass der vold-Prozess ausgeführt wird, damit alle anderen Prozesse und Apps auf diesen externen Datenspeicher zugreifen können Partition
3) Eine andere Sache, die ich beobachtet habe, und ich werde die Frage entsprechend aktualisieren, ist plötzlich aus dem Nichts, dass unter /storage gemountete Partitionen jetzt nur gelesen werden, früher waren sie es nicht. Ich kann immer noch über /mnt/media_rw lesen und schreiben. Ich frage mich, was schief gelaufen ist, da viele Apps darauf angewiesen sind, auf meine Partitionen über /storage Mount Point zuzugreifen.
Bitte klären Sie, ob Sie nach einer nicht gerooteten Lösung suchen. Ich denke, Ihr Problem ist nicht das Dateisystem, sondern eher App-Berechtigungen. schau mal unter android.stackexchange.com/search?q=WRITE_EXTERNAL_STORAGE
@ user1874594 1) Was sind derzeit gemountete Dateisysteme (Ausgabe von mount)? 2) Ausgabe von /system/bin/id? 3) Welchen Befehl genau haben Sie zum Mounten mmck1p2verwendet /data/sdext2? 4) Welchen Befehl genau haben Sie verwendet, um den Mount-DCIM-Ordner zu binden? 5) Was sind genaue Fehlermeldungen?
Nochmals vielen Dank, Irfan. Es gibt ein Mount-Skript, das ich in der Frage veröffentlichen werde. und auch o/p der Halterung
Weitere Details hinzugefügt, die Sie nach Irfan gefragt haben. Danke!
@ALex danke nochmal. Dieses ROM ist permissivedirekt aus der Box
danke leute für eure hilfe. Ich habe endlich die Montage mit geschehen
danke leute für eure hilfe. Ich habe endlich die Montage mit dem Modul durchgeführt, fbind magiskaber es würde nicht sofort passieren. musste das Skript öffnen, das voller Funktionen war, und eine der Funktionen suchte nach Mount media read write as a mountaing pt In /proc /partitions. & es hat sich nie als wahr herausgestellt mit einer Zeit von 1800 s. Diese Funktion musste angepasst werden, damit das Ergebnis wahr ist, wenn , /mntgemountet wurde und dann das Mounten erfolgen würde. Hoffentlich wird sich die Zeit, die ich in all das investiert habe, auszahlen, da jedes Mal, wenn ich damit konfrontiert werde, dasselbe Modul verwendet wird!

Antworten (1)

Ich glaube ich verstehe deine Frage nicht ganz. Es ist nicht klar, was und wie Sie bisher versucht haben und mit welchen Einschränkungen oder Einschränkungen Sie konfrontiert waren, um das zu erreichen, was Sie erreichen wollten. Aber um deine Fragen genau zu beantworten:

Mounten Sie eine mehrfach ext4partitionierte externe Karte beim Booten, im Gegensatz zum manuellen Mounten, das ich tun kann

Das Einbinden einer externen SD-Karte erfolgt über vold. Sie können dies deaktivieren fstabund einen initDienst definieren oder ein init.dSkript einfügen, um die Partitionen beim Booten so zu mounten, wie Sie es möchten.

Mounten Sie es auf die richtige Weise mit der richtigen Gruppen-ID, damit Sie voldwissen, dass es gemountet wurde und alle Apps und Prozesse frei auf die Partition zugreifen können

Seit Android 6 hängt im Portable Storage-Modus eine voldexterne SD-Karte an /mnt/media_rw/[UUID]und emuliert diese dann an /storage/[UUID]. Apps mit WRITE_MEDIA_STORAGEder Berechtigung (die GID zugeordnet ist media_rw (1023)) haben Schreibzugriff auf Dateisystemebene auf die externe SD-Karte. Apps von Drittanbietern können jedoch nicht auf die SD-Karte schreiben, da die besagte Berechtigung signature|privilegedeine Schutzstufe hat. Die Emulation ermöglicht es Apps, die gesamte SD-Karte zu lesen, aber nur in ihre privaten Verzeichnisse zu schreiben. Auch Apps können Android-APIs (wie SAF) verwenden, um Dateien auf der SD-Karte zu speichern. Einzelheiten finden Sie unter Wie verschiebt man Dateien auf eine externe SD-Karte?

Dieses ganze Phänomen ist tief in das Android-Framework integriert - Java und nativ. Wenn Sie also dieses Verhalten ändern möchten, müssen Sie die Android-Quelle ändern und das ROM neu erstellen. Oder verlassen Sie sich nicht darauf voldund mounten Sie Partitionen nicht selbst mit den richtigen Berechtigungen, wie ich bereits erwähnt habe.

Alle externen Partitionen unter /storagewurden plötzlich schreibgeschützt

Es kann mehrere mögliche Gründe geben, Sie können das Kernel-Protokoll oder das Android-Protokoll überprüfen, um zu sehen, was genau passiert, wenn Sie dies tun mount -o rw,remount. Das Mounten im Nur-Lese-Modus kann ein Zeichen für Fehler aufgrund der Verschlechterung des Flash-Chips sein. Oder die Partition(en) haben einfach ihre maximale Einhängezahl erreicht, also müssen Sie fsck.

Danke für Ihre Antwort. Ich habe diese Details gegeben, um die Sie gebeten haben, so weit ich sie ausgraben konnte. Was ich von all dem bekommen möchte, ist auf einer , die SD-Karten wie CM oder Lineage nicht unterstützt. Wie kann ich diese Funktionalität haben, damit ich nicht jedes Mal ein neues Lineage-ROM flashen und mich dann mit den anderen Mängeln befassen muss ROM. ext4Hoffe, ich bin jetzt klar. Jetzt sehe ich für diese Instanz den Ordner /etc/init.d nicht, es gibt einen Init-Ordner und selbst wenn ich rw erneut einhänge. Beim Neustart werden Skripte gelöscht. Ich kann sie in xbin einfügen, bin mir aber nicht sicher, ob sie ausgeführt werden.