Localicé con éxito un archivo en el sistema de archivos ext4. Por ejemplo, el bloque inicial de 4k del archivo "ciclic.txt" es 105441. Pero cuando lo lee directamente desde la tarjeta emmc, el primer bloque emmc no está allí, sino que cambia a 5168904. Simplemente busco en toda la memoria emmc para obtener pero es muy lento. ¿Cómo obtener la ubicación real directamente? ¿Puedo usarlo para la última operación de borrado seguro? ¡¡¡Muchas gracias!!!
Respuesta1
Los números de bloque utilizados por ext4 --- que puede encontrar usando el comando "stat" de debugfs o usando "filefrag -v" son números de bloque lógicos de 4k. Es decir, están en unidades de 4k, relativas al inicio de la partición.
Si usa un programa como fdisk o gdisk, le dará el inicio de la partición en sectores de 512 bytes.
Así que aquí tienes un ejemplo. Supongamos que desea encontrar la ubicación de /boot/vmlinuz-4.19.0-2-amd64. (El cual, usando el comando "df /boot/vmlinuz-4.19.0-2-amd64", encontramos que está ubicado en /dev/nvme0n1p4 como el sistema de archivos /boot). Puede encontrar los números de bloque lógico que se encuentran en utilizar varias formas:
- filefrag -v /boot/vmlinuz-4.19.0-2-amd64
- debugfs -R "extensiones vmlinuz-4.19.0-2-amd64" /dev/nvme0n1p4
- debugfs -R "stat vmlinuz-4.19.0-2-amd64" /dev/nvme0n1p4
Con cualquiera de estos mecanismos encontraremos que el archivo está usando los números de bloque 60416-61680.
Para saber dónde están en relación con el comienzo de /dev/nvme0n1p4, multiplique esos números de bloque por 4096 si desea compensaciones de bytes, o por 8 si los desea en unidades de sectores de 512 bytes.
Si desea dónde están en relación con el comienzo del dispositivo (por ejemplo, /dev/nvme0n1 en este caso), puede buscarlo con el comando:
- gato /sys/block/nvme0n1/nvme0n1p4/start
O puede usar el comando gdisk e imprimir la tabla de particiones. En ambos casos, esto le dará la ubicación inicial de la partición "p4" en unidades de sectores de 512 bytes.
Nota final: A veces la gente dice números LBA cuando hablan de números de sector 512 tal como los usa el kernel de Linux, pero hay que tener un poco de cuidado. Desde la perspectiva del dispositivo de almacenamiento, LBA significa Direcciones de bloque lógico y están en unidades de lo que el dispositivo de almacenamiento considere su tamaño de bloque lógico. Históricamente, para la mayoría de los dispositivos, el tamaño de los dispositivos de bloque lógico de casi todos los dispositivos de almacenamiento era de 512 bytes. Hubo excepciones, como el IBM Mainframe DASD, que tenía un tamaño de sector de 2048 bytes, pero 512 era el estándar efectivo. Con los dispositivos de almacenamiento modernos, existen algunos "HDD de formato avanzado", por ejemplo, que utilizan un tamaño de bloque lógico de 4k, y si conecta un analizador SATA entre la CPU y el HDD, verá que se envían solicitudes de E/S. unidades de números LBA de 4k. Sin embargo, el kernel de Linux supone en la capa del dispositivo de bloque que todos los números están en unidades de sectores de 512 bytes, aunque eso puede no ser cierto en el nivel del controlador del dispositivo. La mayoría de nosotros no tendremos analizadores de bus SCSI o SATA en su mesa de trabajo, por lo que esta distinción probablemente no importará demasiado a menos que esté depurando o escribiendo un controlador de dispositivo para un adaptador de bus host. Por lo tanto, no se produce ningún daño real al utilizar la terminología "LBA" cuando se hace referencia a sectores de 512 bytes. Es muy común hacerlo, y si sólo te preocupas por las cosas desde la perspectiva del kernel de Linux y sus utilidades de espacio de usuario, no pasa nada. Sin embargo, hay personas a las que les gusta ser quisquillosos con este tipo de cosas, y si usted es el tipo de persona a la que le gusta creer que es moralmente superior al señalar cuándo las personas deberían usar KiB en lugar de KB, ahora conoce otra forma de hacerlo. ser quisquilloso y molesto. :-)