0 votos

¿Cómo puedo obtener el número de serie de un volumen FAT?

Necesito obtener mediante un programa el número de serie de un volumen FAT (por ejemplo, una unidad USB o una tarjeta SD extraíble) en mac OS. ¿Conoces algún programa con el que hacerlo? (¡Puntos extra por una llamada a la API de Python!)

Para aclarar, estoy preguntando por el número de 8 dígitos con guiones que muestra el vol en DOS:

C:\>vol e:
Volume in Drive E is MYSDCARD
Volume Serial Number is E432-EF79

E432-EF79 es el VSN que estoy buscando. A veces puede denominarse UUID, aunque no tiene 128 bits de longitud.

En Mac puedo montar la unidad, y obtener su nombre de volumen, utilizando comandos como df . Puedo inspeccionarlo en DiskUtility, y ver cosas como la capacidad y el nombre del dispositivo. Pero, ¿cómo puedo obtener el VSN?

1voto

user3439894 Puntos 5883

Para un FAT32 formato disco , en Terminal El siguiente ejemplo comando compuesto emitirá su número de serie del volumen :

var="$(sudo dd if=/dev/diskNs1 skip=67 bs=1 count=4 2>/dev/null | hexdump -e '4/4 "%X"')"; echo "${var:0:${#var}/2}-${var:${#var}/2}"
  • Sustituir N en /dev/diskNs1 con la correcta número de disco .
    • Puede utilizar el mount comando o diskutil list para determinar la número de disco de la disco de destino .
  • Tenga en cuenta que el disco de destino debe ser desmontado antes de ejecutar el ejemplo comando compuesto .

Suponiendo que el disco de destino se monta como /dev/disk6s1 , en Terminal uso:

diskutil unmountDisk disk6

Después de la disco de destino está desmontado, entonces usa:

var="$(sudo dd if=/dev/disk6s1 skip=67 bs=1 count=4 2>/dev/null | hexdump -e '4/4 "%X"')"; echo "${var:0:${#var}/2}-${var:${#var}/2}"

Para mi disco de prueba , a USB unidad de flash formato FAT32 la salida era:

18E4-4FA7

Lo he confirmado con el vol comando en Windows y el blkid comando en Linux y la salida de vol y blkid que coincida con la salida del ejemplo comando compuesto arriba.


Notas:

Con FAT32 volúmenes El Número de serie del volumen se almacena en el Sector de arranque en offset 67 ( 0x43 ), y son cuatro bytes largo.

Lectura interesante: Números de serie de los volúmenes y verificación de la fecha y hora del formato

Puede haber una forma de formatear la salida del dd comando con hexdump para evitar el resto de comando compuesto Sin embargo, no quise dedicar tiempo a averiguarlo y opté por utilizar expansión de parámetros y aritmética de la cáscara en su lugar para el formato final.

0 votos

Vaya, esto es impresionante. Lo he probado y me ha funcionado. Me gustaría que mi programa no tuviera que tener acceso Root y desmontar el disco para obtener esta información, pero puede que no sea posible. Me has dado una manera de hacerlo (y probado los resultados) cuando antes no tenía manera.

1voto

Joel Puntos 112

P: "¿Cómo puedo obtener el VSN?"

Este Artículo de Wikipedia indica que el VSN de la FAT se basa en el RTC del sistema utilizado para crear o formatear el disco. Es interesante, se dice que Microsoft e IBM crearon el VSN para hacer frente a una innovación temprana de Apple.

Como has sugerido, parece que la etiqueta UUID se utiliza en algunos sistemas en lugar de VSN - Por ejemplo, este parece ser el caso del lsblk utilidad ampliamente utilizada en la mayoría de los sistemas Linux/Unix. Sin embargo, MacOS (específicamente el diskutil ) utiliza un "true" 128-bit UUID para volúmenes FAT. Para los volúmenes FAT existen entonces dos métodos para crear un identificador "único". Intuitivamente, parece que el UUID de 128 bits es mucho más probable que sea "único" que el VSN.

Usted ha indicado su preferencia por el VSN en su pregunta, y eso puede ser "suficientemente único" para su aplicación. Sin embargo, dado que no parece haber ninguna herramienta fácilmente disponible para MacOS para fácilmente extraer el VSN ( vol para MacOS :), tal vez desee considerar una alternativa:

Paso 1: Obtener el nombre del dispositivo

% DEVNM=`diskutil list | grep FAT | grep -o "disk[0-9]s[0-9]"`
% echo $DEVNM
disk4s1

Paso 2: Obtener el UUID (EDITADO)

Uso de MacOS diskutil canalizado a través de grep con una expresión regular dará como resultado el UUID de 128 bits:

% diskutil info "$DEVNM" | grep "Volume UUID:" | grep -o '[0-9A-Z]*-[0-9A-Z]*-[0-9A-Z]*-[0-9A-Z]*-[0-9A-Z]*'
74453B21-2067-3766-8A2D-EA0AC27F99A8

Alternativamente:

  • Ha preguntado por un Python API call :

    • el uuid.py biblioteca puede ser útil generando UUIDs (¿tal vez para su uso en Windows?)

    • El proyecto Python FAT Reader puede ser útil para extraer VSN de volúmenes FAT, pero parece que utiliza dd que requerirá (inconvenientemente) que el volumen sea desmontado.

  • El artículo Obtener los números de serie de las unidades FAT en Unix tiene una buena guía y explicación con un CLI para obtener un VSN de varias variantes de FAT. Es similar a otra respuesta aquí.

  • Si la unidad es exFAT Puedes usar esto:

    % sudo newfs_exfat -N disk3s1 | grep Volume Serial

    Desgraciadamente, newfs_msdos no tiene la posibilidad de emitir el VSN.

1 votos

1. La primera comando en Paso 1: Obtener el nombre del dispositivo errores con zsh: command not found: list porque no incluyó las apropiadas sustitución de comandos . 2. En Paso 2: Obtener el UUID El Volume UUID: de la diskutil info comando no es lo mismo que el Número de serie del volumen de un FAT32 unidad formateada. -- Para mi disco de prueba, en Linux El blkid comando salidas, por ejemplo /dev/sdb1: LABEL="DATA" UUID="18E4-4FA7" TYPE="vfat" y en MacOS El Volume UUID: de la diskutil info comando salidas, por ejemplo E92BA062-FB92-3473-825C-DF7102F7226E

1 votos

Lo que equivale a E92BA062-F , B92-3 , 473-8 y 25C-D con su grep comando . Así que no está muy claro cómo terminó con 5966-39BF . AFAICT diskutil info no emite o no emite sistemáticamente el Número de serie del volumen de un FAT32 unidad formateada. Con FAT32 volúmenes El Número de serie del volumen se almacena en el Sector de arranque en offset 67 ( 0x43 ), y son cuatro bytes largo.

1 votos

AFAICT En MacOS tiene que ser leído a nivel de disco utilizando, por ejemplo dd y luego ser formateado adecuadamente para producir los mismos resultados que en Windows o Linux utilizando el vol y blkid comandos respectivamente. En mis pruebas diskutil info lee los cuatro bytes a partir de offset 67 ( 0x43 ) en el Sector de arranque de mi FAT32 formateado USB conducir.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple 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