Rufen Sie /system/bin/sdcard manuell über das Terminal auf

Ich versuche, eine EXT4-formatierte SD-Karte unter Cyanogenmod 13.1 (Android 6.0.1) zu mounten.

Bisher habe ich Setup-Skripte, um die Karte /mnt/ext_sdcardwährend des Bootens zu mounten. Mein derzeitiges Verständnis ist, dass der "sdcard" -Dienst dann aufgerufen werden muss, um einen FUSE-Mount zu erstellen, der auf den tatsächlichen Mount-Punkt zeigt, der den Medienscanner schließlich zu der neu gemounteten Festplatte führt.

Das Folgen einiger älterer Dokumentations- und Forenthreads führt mich zu diesem Befehl im Terminal:

service sdcard /system/bin/sdcard /mnt/ext_sdcard /mnt/test 1023 1023
    class late_start

Wenn ich den Befehl ausführe (natürlich als Root), schlägt er mit einem Exit-Status von 1und ohne Ausgabe-/Fehlermeldungen fehl.

Meine Frage: Mache ich etwas falsch, oder ist dieser Befehl in 6.0.1 veraltet (der Dokumente-/Forum-Thread schien sich auf KitKat zu beziehen)? Was ist die korrekte Syntax/Argumente für die Verwendung dieses Befehls?

Antworten (2)

Setzen Sie diesen Befehl in eine init.*.rc-Datei? Mein Verständnis ist, dass Sie dies zum Beispiel in einer init.extmount.rc haben würden. Dazu muss boot.img entpackt und neu gepackt werden.

Da ich nichts Besseres zu tun hatte, habe ich das erstellt: https://github.com/BenBaltz/mountext

Es ist eine flashbare Wiederherstellungs-Zip-Datei, mit der Sie Ihr Skript installieren können, indem Sie boot.img entpacken und mit den Änderungen neu packen.

Terminal-Befehle BEARBEITEN

su -c mount -o bind /mnt/ext_sdcard /path/to/new/dir
Danke Ben, ich werde mir dein Skript ansehen. Außerdem verwende ich diesen Befehl derzeit in der Hauptdatei init.rc
Ich habe Ihren Befehl in init.mountext..rc ausprobiert und bekam service: Unknown command sdcard. Dann habe ich versucht, service call sdcard...was zurückkam Service sdcard does not exist. Außerdem habe ich zwei laufende Instanzen von sdcardauf meinem System gefunden und festgestellt, dass sie mit aufgerufen wurden /system/bin/sdcard -u1023 -g1023 -U0 /mnt/media_rw/8005-91F9 8005-91F9. Unterscheidet sich dieser Befehl zwischen den Android-ROMs?
@Jake Ich sehe nichts nach 'I got'.
@Jake Das haben die Bootlogs gesagt? Sie müssen neu starten, damit es ausgeführt wird.
Nein, ich habe es direkt im Terminal ausgeführt (als root). Ich würde sie lieber im Terminal ausführen, bis ich sicher bin, dass sie funktionieren, anstatt Systemdateien zu patchen.
@Jake Das ist nicht möglich. Wenn Sie nur alle Dateien auf Ihrer regulären SD-Karte haben möchten, kann ein Bind-Mount in einem Live-System ausgeführt werden. Sie könnten mount -o bind /mnt/ext_sdcard /sdcard verwenden. Ich weiß nicht, ob Sie ein Bind-Mount für ein leeres Verzeichnis erstellen können. Ich teste das jetzt.

In der Speicherkonfiguration von Android 6+ :

Das Mounten physischer externer Speichervolumes wird von volddurchgeführt, das Staging-Vorgänge durchführt, um die Medien vorzubereiten, bevor sie Apps zugänglich gemacht werden.
...
Die fest codierten FUSE-Dienste wurden aus gerätespezifischen Dateien entfernt und werden stattdessen bei Bedarf init.rcdynamisch abgezweigt.vold

Die sdcardin Dateien definierten Dienste *.rcwerden also nicht mehr benötigt und auch nicht storage_list.xmlin framework-res.apk. Verwaltet stattdessen vollständig die mit Flag in volddefinierten Speichergeräte . Weitere Einzelheiten finden Sie in der Storage Journey von Android .voldmanaged=fstab

In Android 9 wurde die FUSE-Unterstützung vollständig von sdcardBinary entfernt und durch sdcardfs. sdcardfskann direkt per mountBefehl gemountet werden, ist also sdcardnicht unbedingt erforderlich. Von Android 6 bis 8 sdcardsollte die Binärdatei jedoch ein emuliertes Dateisystem mounten, wenn es mit den richtigen Argumenten ausgeführt wird. Sie können das Fehlerprotokoll einsehen logcat.

Sie können auch ein FUSE-basiertes Tool eines Drittanbieters verwenden bindfs, um dasselbe zu erreichen. Weitere Informationen finden Sie unter Wie kann ich einen Ordner in /sdcard mit den richtigen Berechtigungen binden?