Pregunta ¿Cuál es la mejor manera de obtener información sobre las unidades actualmente sin montar?


Primero, la situación: tengo una computadora Linux con dos bahías de unidades eSATA que aceptan unidades SSD extraíbles. Estoy tratando de escribir una pequeña aplicación GUI que facilite al usuario montar / desmontar / format / backup / etc las unidades que pone en estas bahías.

Todo funciona en su mayoría. Sin embargo, un pequeño problema es que no sé cómo encontrar información sobre el contenido de las unidades insertadas hasta que las unidades se hayan montado correctamente.

Entonces, por ejemplo, si el usuario inserta una unidad que no puedo montar (por ejemplo, porque no está formateada o está formateada con un sistema de archivos inesperado), todo lo que puedo decir de mi aplicación es "La unidad no se pudo montar".

Esto no es muy satisfactorio, porque si la unidad no está formateada, el usuario probablemente querrá formatearla ... pero si la unidad contiene datos de un sistema de archivos no reconocido, el usuario probablemente no querrá formatearla ... o al menos, quiero poder advertirle que al hacerlo, estará borrando datos potencialmente valiosos.

Entonces, mi pregunta es: ¿existe algún método para consultar información básica (especialmente del tipo de sistema de archivos) desde una unidad que no requiera que la unidad ya esté montada? ¿O simplemente tengo que intentar montarlo con varios sistemas de archivos conocidos hasta que uno de los intentos de montaje tenga éxito, y dar un vago mensaje de "cuidado" si ninguno de ellos lo hace?

En caso de que sea importante, las rutas que utilizo para montar las unidades en las bahías de unidades son:

/dev/disk/by-path/pci-0000:00:1f.2-scsi-2:0:0:0
/dev/disk/by-path/pci-0000:00:1f.2-scsi-1:0:0:0

36
2017-10-13 21:05


origen




Respuestas:


Si las unidades están desmontadas, hay varias cosas que puede hacer.

Puedes usar un comando como fdisk -l o sfdisk -l para enumerar las particiones. Solo el tipo de partición puede proporcionarle información útil si las particiones se configuran correctamente.y

# sfdisk -l

Disk /dev/sda: 4177 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1   *      0+     30      31-    248976   83  Linux
/dev/sda2         31    4176    4146   33302745   8e  Linux LVM
/dev/sda3          0       -       0          0    0  Empty
/dev/sda4          0       -       0          0    0  Empty

Si está presente en su sistema puede usar el comando vol_id contra una partición para devolver algunos detalles útiles (parte del paquete udev en Debian). Esto generalmente le dirá qué sistema de archivos se está utilizando realmente.

# vol_id /dev/sda1

ID_FS_USAGE=filesystem
ID_FS_TYPE=ext3
ID_FS_VERSION=1.0
ID_FS_UUID=32c44d53-9025-4d10-8f36-75c166547bd5
ID_FS_UUID_ENC=32c44d53-9025-4d10-8f36-75c166547bd5
ID_FS_LABEL=
ID_FS_LABEL_ENC=
ID_FS_LABEL_SAFE=

El comando lshw -class disk le dará algunos detalles sobre el tipo de unidad. Es posible que desee utilizar esto si tiene curiosidad sobre el número de serie real de la unidad.

# lshw -class disk

  *-disk
       description: ATA Disk
       product: VBOX HARDDISK
       physical id: 0.0.0
       bus info: scsi@0:0.0.0
       logical name: /dev/sda
       version: 1.0
       serial: VB169e93fb-d1e0fd97
       size: 32GiB (34GB)
       capabilities: partitioned partitioned:dos
       configuration: ansiversion=5 signature=000d39f8

Si está seguro de que hay un sistema de archivos particular como ext2 / 3 en él, entonces puede usar el sistema de archivos específico tune2fs Herramienta para examinar más detalles.

# tune2fs -l /dev/sda1

tune2fs 1.41.3 (12-Oct-2008)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          8cbdf102-05c7-4ae4-96ea-681cf9b11914
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      filetype sparse_super
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              124496
Block count:              248976
Reserved block count:     12448
Free blocks:              212961
Free inodes:              124467
First block:              1
Block size:               1024
Fragment size:            1024
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         4016
Inode blocks per group:   502
Last mount time:          Thu Oct  7 15:34:42 2010
Last write time:          Thu Oct  7 15:34:42 2010
Mount count:              4
Maximum mount count:      30
Last checked:             Wed Sep 15 09:29:03 2010
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           128

Otra herramienta útil es lsblk.

# lsblk 

NAME                MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                   8:0    0    30G  0 disk 
└─sda1                8:1    0    30G  0 part 
  ├─vg1-root (dm-0) 254:0    0  23.3G  0 lvm  /
  └─vg1-swap (dm-1) 254:1    0   1.9G  0 lvm  [SWAP]
sr0                  11:0    1  1024M  0 rom  

Si has pareado instalado puedes ejecutar un comando como este

parted /dev/sda print all

Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 34.4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  255MB   255MB   primary  ext2         boot 
 2      255MB   34.4GB  34.1GB  primary               lvm  

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg1root: 32.6GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  32.6GB  32.6GB  ext3              

De todos modos más allá de eso te sugiero que eches un vistazo a la udev o separado fuente.


52
2017-10-13 21:30



'vol_id' ha sido renombrado como 'blkid', para cualquiera que encuentre esta gran respuesta. - Dave S.
lsblk es rad, gracias! - Travis Reeder
lsblk -i -o kname,mountpoint,fstype,size,maj:min,name,state,rm,rota,ro,type,label,model,serial - sjas
maravillosa respuesta !! - Sufiyan Ghori


Otro comando útil es blkid - Devuelve información similar a vol_id pero también puede escanear todos los dispositivos en el sistema, en lugar de requerir que se pase un dispositivo.

Para forzar blkid para escanear todos los dispositivos en lugar de usar información en caché, ejecute blkid -c /dev/null (necesitas permiso de lectura en los dispositivos de bloque, por lo que normalmente necesitarás ejecutarlo como root)


5
2017-10-13 21:56



Un usuario anónimo quería agregar: todo esto es útil, pero 'vol-id' ahora ha sido reemplazado completamente por 'blkid'; Ni SuSE ni Debian tienen ya 'vol-id' en sus repositorios. correr whereis blockid desde la línea de comando (o man blockid), usted encontrará si está cargado. Ejecutar como root: blkid /dev/sdb1 da (por ejemplo): /dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat" La página del manual vale la pena mirar también. - Chris S


Aquí hay una sugerencia de IBM: SCSI: agregar, eliminar y volver a escanear en caliente dispositivos SCSI: volver a escanear un dispositivo SCSI. Esto volverá a escanear esa dirección SCSI para nuevos dispositivos, y luego podrá leer la información en / var / log / messages. Algunas otras herramientas de disco también funcionarán, sin que usted monte la unidad.

echo 1 > /sys/bus/scsi/drivers/sd/<SCSI-ID>/block/device/rescan

Ayer probé algo ligeramente diferente, y funcionó (sistema RHEL4):

cd /sys/bus/scsi/devices
echo > 0\:0\:0\:0/rescan

1
2017-10-13 21:22





Una simple descripción de todas las particiones encontradas por el núcleo da

cat /proc/partitions

0
2018-03-03 08:49