enlazar montaje / enlace simbólico: ¿mantener el "árbol" de destino al eliminar la fuente?

Estoy tratando de lograr algo bastante extraño, así que tengan paciencia conmigo.

Agregué una tarjeta SD externa a mi viejo Droid Mini (básicamente solo para un experimento para ver si podía o no expandir la capacidad de almacenamiento). Actualmente ejecuta Lineage OS 13.

El problema es que el adaptador SD externo consume mucha energía y el núcleo de esta versión (3.4.42) no admite correctamente la suspensión automática.

Puedo obligar al dispositivo a entrar en modo de bajo consumo desvinculando el dispositivo SCSI del dispositivo USB, pero obviamente desaparece si hago eso.

Leí que los montajes de enlace pueden preservar la estructura de directorios de la carpeta de origen incluso si se elimina, pero parece que no puedo hacer que funcione (ver aquí - "Es posible desmontar /algún/dónde, en cuyo caso / otro lugar/donde permanece montado." )

La idea es esperar hasta que el dispositivo USB quede inactivo y luego suspenderlo manualmente desvinculándolo hasta que se vuelva a necesitar. Sin embargo, si desvinculo el dispositivo, el archivo "stat" que estoy usando para monitorear la inactividad TAMBIÉN desaparece, ¿no puedo usarlo para verificar si se solicita actividad?

Entonces, mi idea (quizás tonta) fue hacer un montaje de enlace de la tarjeta externa a un dispositivo USB "virtual" que no desaparece cuando se elimina la fuente y se vuelve a conectar cuando es necesario.

Sin embargo, pequeños pasos, ¿alguna idea de cómo podría preservar una unidad "falsa" para que el sistema funcione? Los montajes de unión no parecen hacer lo correcto aquí .

Gracias

eso suena muy loco...
Sí, pero la parte tonta es que el teléfono de mi amigo con un kernel LIGERAMENTE más nuevo se suspende automáticamente muy bien, supongo que esa función se volvió a trasladar a su kernel.
espera a que redacte una respuesta, unos minutos

Respuestas (1)

Eso suena realmente loco...

A primera vista, supongo que si bien puede desmontar el directorio de origen de un montaje de enlace, debe mantener conectado el dispositivo subyacente para que funcione un montaje de enlace.

Confirmé mi suposición en experimentos en mi OnePlus 6 (Android Linux 4.9.65) y mi Ubuntu 18.04 (real Linux 4.15.0) y el resultado es el mismo.

En Ubuntu, inserté una unidad flash USB (sistema de archivos ext4) y la monté en /mnt/usb, y la vinculo montada /mnt/usb/dataen/mnt/bind

  • Desmonté /mnt/usbmientras mantenía la unidad flash conectada y puedo acceder /mnt/bindsin error. Todos los cambios se /mnt/bindreflejan en <drive root>/data(verificado más tarde).
  • Luego desconecté la unidad flash e intenté acceder /mnt/bind, y recibí este mensaje:

    ls: reading directory '/mnt/bind': Input/output error
    

En mi OnePlus 6, inserté una unidad flash USB a través de OTG (sistema de archivos exFAT). Monté el dispositivo /dev/block/vold/public:8:97en /data/dev, y lo monté en /data/dev/Androidenlace /data/bind.

  • Desmonté /data/devmientras mantenía el OTG conectado, y todos los datos permanecen /data/bindy son accesibles sin errores.
  • Luego apagué la "función OTG" en la aplicación Configuración, el punto de montaje de Android /mnt/media_rw/xxxx-xxxxdesapareció, pero aún puedo acceder a mi montaje de enlace.
  • Luego desconecté la unidad OTG e intenté acceder /data/bindy obtuve esto:

    ls: reading directory `/data/bind`: I/O error
    

    Una nota al margen es que, a diferencia de Ubuntu, el acceso /data/bindpermaneció disponible durante aproximadamente medio minuto, pero los directorios que no visité anteriormente ya no estaban accesibles, solo los directorios que visité antes de desconectar la unidad aún estaban accesibles.

Eso es todo. La conclusión está en el párrafo superior.

Eso tiene sentido. Este pensamiento en realidad también se me ocurrió, pero luego me di cuenta de que en realidad no estoy desconectando físicamente el dispositivo. Lo estoy desvinculando de /sys/bus/USB/....algo escribiendo el ID del dispositivo en los archivos de vinculación/desvinculación, así que esperaba que esto funcionara. Tendré que hacer algunos experimentos más.
@flyingfishfinger Si mi respuesta tiene sentido, ¿te importaría marcarla como aceptada? :PAG
Déjame probar algunas permutaciones de esto mañana y te responderé :)
@flyingfishfinger Bien. Las acciones hablan más que las palabras.
¿Cuál es la diferencia entre expulsar, desvincular y desmontar? Siguiendo aproximadamente sus pasos, aún puedo acceder tanto a /bind como a /dev después de expulsar el disco a través de Configuración (la entrada /mnt/media_rw/ desapareció, como la suya). Sin embargo, esto no parece ser equivalente a desvincular el controlador de almacenamiento USB, ya que cuando lo hago, tanto /bind como /data aparecen vacíos.
@flyingfishfinger Entonces no lo sé. Solo sé que el dispositivo debe permanecer conectado físicamente