En un decodificador Android Nougat (7.1.1), du
y df
de mi /data
partición son muy diferentes:
$ adb shell du -sh /data
1.0G /data
$ adb shell df -H /data
Filesystem Size Used Avail Use% Mounted on
/dev/block/sda9 10G 10G 469M 96% /data
No creo que se monte nada más bajo /data
:
$ adb shell mount | grep "\/data"
/dev/block/sda9 on /data type ext4 (rw,seclabel,nosuid,nodev,relatime,discard,noauto_da_alloc,data=ordered)
$ adb shell mount | grep "sda9"
/dev/block/sda9 on /data type ext4 (rw,seclabel,nosuid,nodev,relatime,discard,noauto_da_alloc,data=ordered)
lsof
me indica que hay docenas de procesos que mantienen cientos de pequeños archivos borrados del tipo
init 1 root 3w CHR 1,11 0t0 14517 /dev/__kmsg__ (deleted)
ueventd 391 root 3w CHR 1,11 0t0 14593 /dev/__kmsg__ (deleted)
. . .
main 756 root mem unknown /dev/ashmem/dalvik-large object space allocation (deleted)
main 756 root mem unknown /dev/ashmem/dalvik-large object space allocation (deleted)
. . .
omm.times 3934 system mem unknown /dev/ashmem/dalvik-mark sweep sweep array free buffer (deleted)
omm.times 3934 system mem unknown /dev/ashmem/dalvik-mark sweep sweep array free buffer (deleted)
Utilizando busybox
Los resultados son diferentes ( df
muestra un uso mucho menor), pero sigue habiendo una gran discrepancia entre du
y df
:
$ adb shell busybox du -sh /data
389.4M /data
$ adb shell busybox df -h /data
Filesystem Size Used Available Use% Mounted on
/dev/block/bootdevice/by-name/userdata
9.7G 8.6G 1.1G 89% /data
Y utilizando toybox
los resultados son similares a busybox
:
$ adb shell toybox du -sh /data
389M /data
$ adb shell toybox df -h /data
Filesystem Size Used Avail Use% Mounted on
/dev/block/sda9 10G 8.6G 1.1G 89% /data
Creo que es importante tener en cuenta que estos números siguen siendo similares después de un reinicio .
Además, quiero señalar que no puedo actualizar por OTA el Android de este dispositivo debido a que se está quedando sin espacio en el disco, a pesar de que la imagen de la OTA sólo tiene un tamaño de 1 GB. Este hecho me lleva a creer que los resultados de df
son precisos en términos de espacio de disco real disponible.
Todos los comandos adb se ejecutan como Root, es decir, hice adb root
antes de ejecutarlos. Pero a riesgo de que esta pregunta sea demasiado verbosa, aquí está todo lo que se ejecuta en el prompt de adb:
$ adb shell
Z:/ # whoami
root
Z:/ # du -sh /data
389M /data
Z:/ # df -h /data
Filesystem Size Used Avail Use% Mounted on
/dev/block/sda9 10G 8.6G 1.1G 89% /data
10.197.12.14:/ # busybox du -sh /data
389.4M /data
Z:/ # busybox df -h /data
Filesystem Size Used Available Use% Mounted on
/dev/block/bootdevice/by-name/userdata
9.7G 8.6G 1.1G 89% /data
Z:/ # toybox du -sh /data
389M /data
Z:/ # toybox df -h /data
Filesystem Size Used Avail Use% Mounted on
/dev/block/sda9 10G 8.6G 1.1G 89% /data
Z:/ #
Un usuario en los comentarios ha pedido lo siguiente:
Z:/ # while read num; do (( sum += num )); done <<< $(find /data -type f -exec stat -c%b {} +); expr $sum / 2048
393
Entiendo que du
informa del espacio libre al escanear los nodos alcanzables, y que por lo tanto esto podría significar que mi sistema de archivos está corrupto. Sin embargo, por desgracia, esto es para los dispositivos en el campo, y no quiero tener que (y no creo que pueda) ejecutar fsck
o e2fsck
.
¿Qué puede estar causando la enorme diferencia entre du
y df
en este dispositivo, y cómo podría resolverse este problema? Estaré encantado de proporcionar más registros.
0 votos
df
ydu
en su mayoría difieren un poco (véase aquí por qué) pero no tanto. Parece que hay algún problema con sudu
binario. Utilice uno diferente. Vea aquí lo que debe esperar: ¿Cómo se utiliza el espacio en disco en el dispositivo Android?0 votos
Has llamado a ambos como "usuario normal". Así que
df
puede informar del "espacio libre" (también conocido como "Disk Free") normalmente - mientras quedu
sólo puede resumir lo que el usuario tiene acceso. No hay nada roto, funciona como está diseñado. Pruebe ambos como Root, ver la captura de pantalla por @alecxs0 votos
Gracias, @IrfanLatif. He añadido los resultados de busybox a la pregunta original.
1 votos
@Izzy Según mi descripción original, los llamé como Root.
0 votos
@zippy tu descripción original muestra tus comandos con el prefijo
$
. Los comandos llamados como Root llevan un#
. Pero, efectivamente, eché de menos su comentario sobreadb root
(además como es bastante infrecuente; nunca tuve una ROM que me permitiera eso en ninguno de mis dispositivos, ni siquiera ROMs personalizadas). Pero sí, puedes ejecutar fsck (incluso en modo de sólo lectura si lo prefieres), está disponible en el dispositivo.0 votos
Https:/i.stack.imgur.com/n0cBI.png https:/i.stack.imgur.com/qwTbp.png
0 votos
@alecxs -- He puesto los resultados de ese comando en la descripción. Nuestro busybox está aquí: links-w.astronics.com/MBSlU8bHA_k contraseña "busybox.zip" sin las comillas. Y lo que no he mencionado aún es que no puedo actualizar por OTA esta unidad debido a que el disco está lleno (!).
0 votos
393M suma de todos los archivos (con acceso de lectura) es congruente con
du
. busybox v1.15.3 funciona bien también. pensé en los enlaces duros, pero que debe producir resultados opuestos, así que ni idea :(0 votos
Compruebe 'du -sh /proc/*/*/mnt' (no estoy seguro de que esto sea útil, ya que he desactivado completamente la separación de espacios de nombres en SuperSU y no sé cómo comprobarlo)
0 votos
El motivo de la demora en la respuesta es que un cliente estuvo de visita esta semana. @alexcs, he probado el remontaje, pero no parece tener efecto. También estoy intentando construir un fsck para Nougat en aarch64 en toybox (no hay ninguno incorporado) pero no funciona. ¿Puede alguien indicarme un fsck para aarch64?
0 votos
/system/bin/e2fsck
1 votos
Por favor, intente establecer selinux permisivo con setenforce/getenforce. Ahora, haga un umount perezoso, mate a system_server, vuelva a montar sda9 en otro directorio y compruebe de nuevo
0 votos
Hoy tengo el Mecool KII Pro S905D en mis manos. me di cuenta de que estas cajas de televisión se envían con busybox pre-rooted userdebug builds. selinux es permisivo pero los espacios de nombres están aislados. sin aplicación de superusuario en absoluto ni idea de cómo establecer global