1 votos

¿Cómo puedo comprobar la ubicación de un archivo (por ejemplo, el clúster o el número de sector) en el almacenamiento interno?

Me gustaría saber si cierto archivo se mueve en la memoria Flash (almacenamiento interno), entre las escrituras/actualizaciones de la misma.

¿Hay alguna forma de obtener la ubicación del archivo en la memoria Flash?
(Número de grupo, número de sector, etc.)

Estoy usando Android v8,
y puede instalar una aplicación para ello,
o utilizar la línea de comandos, si es que existe un comando relevante en el indicador de comandos de Linux que tiene Android.

0voto

Jack Wade Puntos 231

Supongo que al decir grupo te refieres a Windows'. unidad de asignación , comúnmente llamado bloque en el mundo de Linux. Es una unidad de almacenamiento de datos que utiliza un sistema de archivos. Un cluster/bloque puede consistir o corresponder a múltiples sectores en el medio de almacenamiento subyacente (disco duro o almacenamiento flash). El sector es la unidad atómica mínima de almacenamiento que un sistema operativo puede leer o escribir. El tamaño del bloque se decide en el momento de la creación del sistema de archivos, es decir, cuando formateamos una partición ( high-level formatting ). Las particiones y los sistemas de archivos facilitan la clasificación y organización de nuestros datos en el dispositivo de almacenamiento físico.

UNIDADES DE DISCO DURO

"Sector" puede referirse a un sector físico o sector lógico . En los primeros tiempos de los discos duros sólo existían sectores físicos creados al dividir en pequeñas partes los grupos/pistas de los discos giratorios. C ylinder/ H ead/ S ector (CHS) ha sido un método popular de abordar antes del L ogical B bloquear A dimiento (LBA) fue ideado. En lugar de tratar directamente con los sectores físicos, el SO ahora habla con el firmware de la controladora de disco (a través de comandos SATA/SCSI) refiriéndose a un número LBA. El firmware, a su vez, mantiene un Asignación de LBA a CHS mismo, que incluye ECC , Lista G (tabla de defectos del disco), etc. Este mapeo (1:1 / secuenciado / lineal) ( ref ) se crea durante low-level formatting de la unidad de disco en el momento de la fabricación, que nunca cambia, excepto si algún sector se marca como malo y se reasigna a algún sector de repuesto. Así que el sistema operativo / sistema de archivos es consciente de la geometría física del disco, que es propocional a la geometría de LBAs.

ALMACENAMIENTO FLASH

En los soportes flash (SSD, eMMC, UFS, tarjetas SD, etc.) no hay discos giratorios y, por tanto, no hay cilindros. La memoria flash NAND está formada por celdas de silicio, cada una de las cuales consta de un ( S ingle- L evel- C ell), dos ( M ulti- LC ), tres ( T riple- LC ) o cuatro ( Q uad- LC ) bits. Las celdas se agrupan en páginas (por ejemplo, de 4KB) y páginas en borrar bloques (por ejemplo, de 128 KB). LBAs a P hysical B bloquear A La asignación de direcciones está totalmente controlada por F pestaña T ón L ayer; una parte del firmware del controlador flash. El sistema operativo no sabe nada al respecto, puede ver como máximo los LBAs, no lo que ocurre por debajo. Ni siquiera el ECC de las celdas de memoria que fallan, y por eso no nos damos cuenta de la mala salud de la eMMC a menos que falle, excepto al leer EXT_CSD (requiere Root) usando mmc-utils o de /sys/class/mmc_host/*/*/life_time (si el controlador lo admite).

Dado que una página de memoria no puede sobrescribirse sin más, a diferencia de los discos duros, toda una EraseBlock tiene que ser Borrado primero antes de ser Programado (escrito). Un efecto secundario es que se borran/reescriben varias páginas y el mapeo físico cambia incluso si se edita un archivo pequeño. Esta innecesaria lectura-modificación-escritura ( RMW ) se llama W rite A mplificación. En los discos duros, los archivos no se sustituyen físicamente a menos que se acorten o alarguen. El sistema operativo es consciente de estos cambios físicos en el disco duro, pero no en la memoria flash.

¿QUÉ ES EL SECTOR?

Al fin y al cabo lo que nos preocupa es el sector lógico. Los medios de almacenamiento informan al sistema operativo del tamaño de su sector lógico, pero "la por defecto de 512 cubre la mayor parte del hardware" porque los discos duros han estado utilizando 512B desde los primeros tiempos, aunque las cosas han cambiado con Formato 4Kn también para los discos duros. 512B es el tamaño que ve el SO, en realidad es un poco más grande para dejar espacio a la cabecera, ECC, etc. El tamaño del sector físico en el almacenamiento flash es de ninguna utilidad a nosotros.


Sus preguntas:

Me gustaría saber si un determinado archivo se mueve en la memoria Flash (almacenamiento interno), entre las escrituras/actualizaciones del mismo.

Depende de la definición de "mover" . En el almacenamiento flash, aunque no se escriba en un archivo, éste puede seguir cambiando su verdadera ubicación física debido al fondo G arbage C ollección; un fenómeno controlado por FTL internamente para reducir la WA, para lograr Nivelación del desgaste y para proporcionar un alto rendimiento de escritura ( Programa operaciones) borrando páginas no válidas en el fondo ( Borrar operaciones).

¿Hay alguna forma de obtener la ubicación del archivo en la memoria Flash (número de clúster, número de sector, etc.)?

Sí, puede obtener las direcciones de bloque del sistema de archivos de un archivo que tienen un mapeo lineal con los LBA del dispositivo de bloque subyacente (partición). Pero estas direcciones no son las reales/físicas ubicación del archivo en la memoria Flash . Sin embargo, normalmente uno no se preocupa por la verdadera ubicación física, a menos que se trate de algún tipo de análisis forense o de recuperación de datos.

EJEMPLO

~# cat /sys/block/mmcblk0/queue/logical_block_size
512
~# blockdev --getss /dev/block/by-name/cache
512
~# tune2fs -l /dev/block/by-name/cache | grep 'Block size'
Block size:               4096

Así que el tamaño del sector aquí es de 512B mientras que el tamaño del bloque del sistema de archivos es de 4KiB. Vamos a crear un archivo de prueba:

~# echo foobar >/cache/test_file
~# cat /cache/test_file
foobar
~# filefrag -sv -b512 /cache/test_file
Filesystem type is: ef53
File size of /cache/test_file is 7 (8 block of 512 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:   
   0:        0..       7:     307200..    307207:      8:             last,eof
/cache/test_file: 1 extent found

* debugfs -R 'stat test_file' /dev/block/by-name/cache también puede utilizarse en lugar de filefrag

El archivo creado (de 7 bytes de tamaño) ocupa 1 bloque del sistema de archivos. -b 512 convierte el tamaño del bloque (4096B) en el tamaño del sector (512B). "archivo_de_prueba" debe estar a 307200 th sector, lo mismo para la partición y el sistema de archivos porque el sistema de archivos ocupa toda la partición:

~# blockdev --getsize64 /dev/block/by-name/cache | awk '$1 /= 4096'
65536
~# tune2fs -l /dev/block/by-name/cache | grep 'Block count'
Block count:              65536

Vamos a leer el archivo directamente desde la partición:

~# dd if=/dev/block/by-name/cache skip=307200 count=1 | head -c7
foobar

Está ahí. Ahora localiza el archivo desde el inicio de la eMMC:

~# readlink /dev/block/by-name/cache
/dev/block/mmcblk0p25
~# cat /sys/block/mmcblk0/mmcblk0p25/start
7471104
~# dd if=/dev/block/mmcblk0 skip=$(( 7471104 + 307200 )) count=1 | head -c7
foobar

Así, aunque se borren el sistema de archivos y la partición, se puede leer el archivo (siempre que no se sobrescriba).

Vamos a investigar un poco más:

~# rm /cache/test_file; sync; echo -n 1 >/proc/sys/vm/drop_caches
~# dd if=/dev/block/mmcblk0 skip=$(( 7471104 + 307200 )) count=1 | head -c7
foobar

El archivo se borra del sistema de archivos, pero físicamente sigue ahí. Pidamos a FTL que lo borre definitivamente:

~# fstrim /cache; sync; echo -n 1 >/proc/sys/vm/drop_caches
~# dd if=/dev/block/mmcblk0 skip=$(( 7471104 + 307200 )) count=1 | head -c7

Y se ha ido. Pero lo más probable es que siga ahí en algún lugar de O ver- P rovisión del espacio , programado para ser Borrado en la próxima GC, sólo que no sabemos dónde está.

Nota:

  • dd en las particiones desnudas es un asesino. Tengan cuidado.
  • tune2fs y filefrag forman parte de e2fsprogs . filefrag no viene con Android, construye desde el código fuente o intenta este . fstrim es un applet de busybox.

RELACIONADO:

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X