Encontrar todos los dispositivos de almacenamiento conectados a una máquina Linux


32

Tengo la necesidad de encontrar todos los dispositivos de almacenamiento grabables conectados a una máquina determinada, estén o no montados.

La forma tonta de hacer esto sería probar cada entrada /devque corresponda a un dispositivo grabable (hd * y sd *).

¿Existe una solución mejor o debería seguir con esta?


volver a formular una vieja pregunta de SO
warren

2
¿Quizás quieres usar udiscos?
derobert

No solo quiero encontrar qué discos duros hay en un sistema: estoy buscando todos los dispositivos de almacenamiento
Warren

Creo que todos asumimos discos duros y similares. ¿De verdad quieres decir algo más? ¿Debería incluir unidades de cinta, impresoras, etc.?
derobert

2
@derobert - sí, de ahí el título de "todos los dispositivos de almacenamiento" :)
warren

Respuestas:


47

Si solo le interesan los dispositivos de almacenamiento en bloque , puede usar el lsblkpaquete util-linux ampliamente disponible:

$ lsblk -o KNAME,TYPE,SIZE,MODEL
KNAME TYPE   SIZE MODEL
sda   disk 149.1G TOSHIBA MK1637GS
sda1  part  23.3G 
sda2  part    28G 
sda3  part  93.6G 
sda4  part   4.3G 
sr0   rom   1024M CD/DVDW TS-L632M

Se presta bien a las secuencias de comandos con muchas otras columnas disponibles.


13

Puede rastrear la salida lshwy extraer detalles sobre los dispositivos en la clase disko tape(y tal vez en otros; la storageclase le brinda detalles sobre controladores de almacenamiento, scsi, sata, sas, etc.).

p.ej

lshw -class disk -class tape

La -shortopción da un buen resumen compacto. Por ejemplo, en mi servidor zfsonlinux / estación de trabajo / caja de experimento (desafortunadamente no hay dispositivos de cinta):

# lshw -class tape -class disk -class storage -short
Ruta H / W Clase de dispositivo Descripción
================================================== =======
/ 0/100/4/0 almacenamiento Controlador SATA JMB362
/ 0/100/5/0 scsi10 almacenamiento JMB362 Controlador SATA
/0/100/5/0/0.0.0 / dev / sdc disco 120GB Patriot Wildfire
/ 0/100 / b / 0 scsi1 almacenamiento SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon]
/0/100/b/0/0.0.0 / dev / sdd disk 1TB WDC WD10EARS-00Y
/0/100/b/0/0.1.0 / dev / sde disco 1TB WDC WD10EACS-00Z
/0/100/b/0/0.2.0 / dev / sdf disco 1TB WDC WD10EACS-00Z
/0/100/b/0/0.3.0 / dev / sdg disco 1TB ST31000528AS
/0/100/b/0/0.4.0 / dev / sdh disco 1TB ST31000528AS
/0/100/b/0/0.5.0 / dev / sdi disk 1TB ST31000528AS
/0/100/b/0/0.6.0 / dev / sdj disco 1TB ST31000528AS
/ 0/100/11 almacenamiento scsi2 SB7x0 / SB8x0 / SB9x0 Controlador SATA [modo AHCI]
/ 0/100/11/0 / dev / sda disco 128GB Patriot Torqx 2
/ 0/100/11/1 / dev / sdb disco 1TB ST31000528AS
/ 0/1 almacenamiento scsi11     
/0/1/0.0.0 / dev / sdk disk 1967MB Disco SCSI
/0/1/0.0.1 / dev / sdl disk SCSI Disk
/0/1/0.0.2 / dev / sdm disk Disco SCSI
/0/1/0.0.3 / dev / sdn disk Disco SCSI
/ 0/2 almacenamiento scsi66     
/0/2/0.0.0 / dev / sdo disk Disco SCSI
/ 0/3 almacenamiento scsi67     
/0/3/0.0.0 / dev / sdp disk 4057MB Disco SCSI

Los dispositivos / 0/1 son en realidad un lector de tarjetas USB (hay una tarjeta SD de 2GB conectada a una de las ranuras), y el dispositivo / 0/2 es mi teléfono Android conectado para cargar solo. El dispositivo 0/3 es una unidad flash USB de 4GB.

lshwpuede producir texto sin formato, html, xml y salida json. También puede volcar detalles de hardware en un formato de base de datos sqlite.

Está empaquetado para Debian y la mayoría de las otras distribuciones. La página de inicio y la fuente están en http://ezix.org/project/wiki/HardwareLiSter


5

Por favor, prueba este comando

ls -l /dev /dev/mapper |grep '^b'

Enumerará todos los dispositivos de bloque en su sistema.


5

Puede usar lsblkpara enumerar todos los dispositivos de bloque, junto con si cada dispositivo es de solo lectura o no.

Luego puede usar grepe awkimprimir los nombres de los dispositivos de bloque que no son de solo lectura:

lsblk -d -n -oNAME,RO | grep '0$' | awk {'print $1'}

Esta es una gran expansión de la respuesta
Warren

4

lsblk enumerará todos los dispositivos de almacenamiento en bloque.

fdisk -l enumerará todas las particiones en todos los dispositivos que se enumeran en /proc/partitions

lshw -short le dará información sobre todo el hardware (excepto quizás FireWire) en el sistema.


3

Si, según su respuesta a Derobert, que está buscando algo que las listas de las unidades de cinta y las impresoras , puede estar interesado en lsdev, lsusby lspci.


Por supuesto, eso no podrá encontrar almacenamiento conectado a la red :-(
derobert

1
Entoncesfdisk -l
dos puntos

2

Puedes probar el siguiente comando:

file /dev/disk/by-id/* | awk -F'/' 'NR>1{print "\047/dev/"$NF}' | sort | uniq

1
¿Qué hace y cómo se compara con la inclusión de clases de dispositivos de bloque y cinta con lshw?
n611x007

2

Puede usar hwinfo para enumerar todos los discos ( documentación ).

hwinfo --block --short da una visión general:

disk:
  /dev/sdb             WDC WD3200AAKS-7
  /dev/sda             SAMSUNG HD103UJ
partition:
  /dev/sdb1            Partition
  /dev/sdb2            Partition
  /dev/sda1            Partition
cdrom:
  /dev/sr1             TSSTcorp DVD+-RW TS-H653B
  /dev/sr0             HL-DT-ST DVD-ROM GDRH20N

hwinfo --disk da más detalles para cada disco.

FYI: en algunas distribuciones de Linux como Ubuntus 14.04 y superior, hwinfo no está presente en el repositorio oficial .


0

He encontrado eso fdisky lsblkno estoy disponible en la terminal virtual para el instalador de Debian. En este caso uso blkid, que obtiene el UUID para dispositivos de almacenamiento en bloque.


-1

Si se refiere a dispositivos RAID, entonces no podría obtener el resultado correcto usando hdparm smartctl, etc. porque este tipo de herramientas busca / dev, que es el nivel del sistema operativo si desea saber sobre el nivel de hardware, entonces necesita tener una herramienta como megacli Solía ​​depurar con megacli

    [root@ns3539186 ~]# /opt/megaraid/megacli -LDPDInfo -aAll |grep "Virtual Disks\|RAID Level\|State"
Number of Virtual Disks: 2
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
State               : Optimal
Foreign State: None
Media Type: Solid State Device
Foreign State: None
Media Type: Solid State Device
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
State               : Optimal
Foreign State: None
Foreign State: None

Para obtener el número de serie del disco

[root@ns3539186 ~]# /opt/megaraid/megacli -PDList -aAll | egrep 'Slot\ Number|Device\ Id|Inquiry\ Data|Raw|Firmware\ state' | sed 's/Slot/\nSlot/g' |grep "Da                    ta\|Slot\|Raw"
Slot Number: 0
Raw Size: 447.130 GB [0x37e436b0 Sectors]
Inquiry Data: PHYS733402Z0480BGN  INTEL SSDSC2KB480G7                     SCV10100
Slot Number: 1
Raw Size: 447.130 GB [0x37e436b0 Sectors]
Inquiry Data: PHYS733402YV480BGN  INTEL SSDSC2KB480G7                     SCV10100
Slot Number: 2
Raw Size: 3.638 TB [0x1d1c0beb0 Sectors]
Inquiry Data: K3GJTYMB            HGST HUS726040ALA610                    A5GNT920
Slot Number: 3
Raw Size: 3.638 TB [0x1d1c0beb0 Sectors]
Inquiry Data: K3GHW57B            HGST HUS726040ALA610                    A5GNT920

En la salida anterior, los datos de consulta contienen el número de serie


-1

Aquí están los dos comandos que usé para encontrar almacenamiento local y compartido.

Para el almacenamiento local

lsblk | grep -v '^loop'

Para almacenamiento compartido

findmnt -D | grep -v '^tmpfs' | grep -v '^/'

OR

df -kh | grep -v '^tmpfs' | grep -v '^/'

¿Por qué volver a utilizar las mismas herramientas ya sugeridas (y aceptadas) hace más de 6 años?
Warren

Debido a que el sistema operativo ha cambiado y ahora se obtiene una gran cantidad de loopy tmpfspartición. Por lo tanto, es mejor limpiar la salida con grep como se indicó anteriormente.
Mian Asbat Ahmad

-3

Esto enumerará todos sus discos y unidades montadas:

$ df -h

55
En realidad, eso enumera los sistemas de archivos ...
HalosGhost
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.