¿Por qué stat informa que no hay espacio en / (raíz) pero hay espacio disponible en / system?

En mi teléfono Android 4.4.2 Samsung Galaxy S4 rooteado con chipset armv7l, si inicio un shell, puedo usar el statcomando, pero algunos dispositivos informan de manera extraña. En particular, el /dispositivo muestra tamaño cero, bloques cero, cuando /systeminforma números válidos:

root@jfltevzw:/ # stat /
stat /
  File: /
  Size: 0           Blocks: 0          IO Block: 4096   directory
Device: 1h/1d   Inode: 1           Links: 31
Access: (0755/drwxr-xr-x)  Uid: (    0/ UNKNOWN)   Gid: (    0/ UNKNOWN)
Access: 1970-01-01 00:00:00.000000000
Modify: 2015-04-25 00:48:54.000000000
Change: 2015-04-25 00:48:54.000000000

root@jfltevzw:/ # stat /system
stat /system
  File: /system
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: b310h/45840d    Inode: 2           Links: 25
Access: (0755/drwxr-xr-x)  Uid: (    0/ UNKNOWN)   Gid: (    0/ UNKNOWN)
Access: 1970-01-01 00:00:00.000000000
Modify: 2015-01-10 01:52:27.000000000
Change: 2015-01-10 01:52:27.000000000

Mirando mis monturas, veo estas dos entradas:

/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 rw,seclabel,relatime,data=ordered 0 0
rootfs / rootfs rw,relatime 0 0

¿Por qué mi partición raíz muestra statque no tiene espacio disponible y hay una manera de determinar de manera confiable cuánto espacio hay disponible desde un comando de shell o mediante un punto de entrada C como el que statvfs()también informa cero espacio disponible para mi aplicación?

Respuestas (2)

statinforma 0 espacios/bloques en / porque / = ramdisk que vive en ram, ram no es un dispositivo de bloque. Su ramdrive real vive almacenado con su kernel y dt.img en una partición emmc especificada etiquetada como boot .

El ramdisk combinado, el binario del kernel y el dt.img (binario del árbol de dispositivos) se conocen colectivamente como su boot.img

La imagen de arranque también contiene algunos directorios reales [reales] que funcionan como marcadores de posición, generalmente son /data /dev /proc /system

Además, su ramdisk contiene la configuración necesaria *.rc y *.sh y los scripts de shell necesarios para iniciar su dispositivo y establecer/activar su sistema operativo. El ramdisk también contiene la configuración de la política selinux de su dispositivo, los archivos sepolicy y de contexto, por último, su ramdisk contiene el directorio /sbin, que es donde reside el daemon adb y, por lo general, los binarios de cargador, salud y ueventd y cualquier binario específico del fabricante relacionado con los servicios, generalmente seguridad. El ramdisk/ramdrive es temporal y se descarga de la memoria cuando apaga o reinicia, y se vuelve a cargar en su lugar designado en la memoria cuando su dispositivo se reinicia.

Piense en ello como Windows. En el mismo disco duro de 1TB. Puede usar C:\ y D:\ al mismo tiempo en la misma unidad. No puedes simplemente buscar el espacio libre de todos.

En android hay particiones en mmc

/caché/datos/sistema, etc.

cada uno tiene su propia búsqueda de información para cada uno.

Adjuntaré algunas capturas de pantalla de mi N7000 de 16 GB y sus particiones. Tal vez estas fotos te lleven a alguna parte.

(Haga clic en la imagen para ampliar)

IMG: pariciones de gatos IMG: soportes para gatos IMG: gato mountstats

Esto no explica por qué statlos informes no tienen espacio, pero puedo escribir archivos en la raíz fs, no está llena, ni mucho menos.
Sé que no respondí la estadística de rootfs, pero la pregunta no es volver a leerla... ¿hay alguna forma de determinar de forma fiable cuánto espacio hay disponible...?
¡Esto todavía necesita una edición!