cómo listar todos los discos duros en linux desde la línea de comandos
Disco duro, disco duro, unidad de disco o unidad de disco duro son todos los nombres para un dispositivo de almacenamiento de datos (dispositivo de hardware) para almacenar y recuperar información digital por lo general en un ordenador. Un ordenador puede tener varios discos duros conectados, tanto internos como externos.
Ahora bien, estos discos duros pueden dividirse a su vez en múltiples contenedores lógicos para albergar diferentes sistemas de archivos o para mantener los sistemas de archivos/archivos separados. Estos se denominan particiones y pueden montarse independientemente sin afectar a los otros discos y particiones. En una abstracción de alto nivel, se puede ver la partición como discos separados también.
Los discos duros en un sistema son detectados y/o identificados por varios controladores de dispositivos en el kernel y luego se les asigna un identificador de dispositivo único en el momento del arranque, lo que permite que sea montado y leído más tarde (sí, esto es una simplificación de cómo funciona todo, pero debería ser suficiente para este post). Veremos más adelante en el post cómo se pueden listar los discos que han sido identificados por el sistema.
Los discos duros se pueden diferenciar en base a la interfaz utilizada para interactuar con ellos. Algunos de los tipos de disco más utilizados son SCSI (Small Computer System Interface), ATA o IDE (Advanced Technology Attachment), SATA (Serial ATA), SAS (Serial Attached SCSI) entre otros. Como mencioné, al disco duro físico se le asigna un id único al inicio. Esto se puede configurar (usando udev entre otros) para que se le pueda asignar bastante id, pero normalmente la mayoría de los sistemas siguen algunas convenciones universalmente aceptadas a la hora de nombrar los dispositivos.
Hay varios comandos diferentes que se pueden usar en un entorno Linux para listar los discos que se han montado en el sistema.
df
El comando df está pensado principalmente para informar del uso del espacio en disco del sistema de archivos. Sigue siendo una buena utilidad para imprimir los discos que están disponibles en el sistema, aunque imprime los sistemas de archivos en lugar de los discos per se.
Puede utilizar la opción -h o -human-readable con df para imprimir el uso del disco en un formato legible. Busca sistemas de archivos que se identifiquen como /dev/sda, /dev/sdb o /dev/hda para identificar los discos.
lsblk
El comando lsblk es para listar dispositivos de bloque. Lee los datos de la base de datos udev junto con el sistema de archivos sysfs para imprimir un informe sobre todos los dispositivos de bloque disponibles o especificados. Los dispositivos de bloque abstraen las características de hardware reales de cualquier dispositivo físico y le permiten interactuar con él utilizando una interfaz de búfer.
El comando lsblk sin ningún argumento imprimirá los dispositivos de bloque en un formato de árbol. De nuevo, busque los nombres, como sda, sdb, etc. El nivel superior denota el disco y los hijos del primer nivel representan las particiones del bloque.
Hay varias opciones de línea de comandos útiles que se pueden utilizar con el comando lsblk. El -d o -nodeps imprimirá el dispositivo y no las particiones. La opción -S o -scsi sólo mostrará los dispositivos SCSI.
lshw
Otra utilidad comúnmente utilizada es lshw, que puede imprimir información detallada sobre su hardware. De nuevo, puede que no esté por defecto en algunas distros aunque sea una aplicación del sistema.
bash$ lshw -class disk
El comando anterior listará todos los discos del sistema. También puede especificar la clase de almacenamiento si desea imprimir los controladores de almacenamiento también. Puede reducir aún más la verbosidad de la salida utilizando la opción -short option
bash$ lshw -class disk -class storage -short
blkid
El comando lsblk mencionado anteriormente es una opción mejor y recomendada que el comando blkid. Lo incluyo aquí sólo para completarlo.
blkid imprimirá varios atributos diferentes sobre los dispositivos de bloque. Normalmente se pueden distinguir los discos y las particiones en la salida, al igual que con lsblk.
bash$ blkid
fdisk
fdisk es un comando popular que se utiliza principalmente para manipular la tabla de particiones. Puedes usarlo para listar todas las particiones de la tabla de particiones y encontrar los dispositivos que están disponibles. La opción de línea de comandos -list o -l imprimirá todas las particiones conocidas de todos los dispositivos.
bash$ fdisk -l
Probablemente esté buscando algo como esto en la salida.
Hay un par de otras herramientas de manipulación de la tabla de particiones construidas sobre fdisk, con más opciones y características. sfdisk y cfdisk son dos de estos ejemplos. Sin embargo, es posible que no estén instaladas en la mayoría de las distros.
parted
En la línea de fdisk, parted es otra utilidad de manipulación de la tabla de particiones. Nuevamente puedes usar la opción de línea de comandos -list o -l para imprimir los dispositivos o discos y toda su información. Me gusta más la salida por defecto de parted que la de fdisk, pero eso es subjetivo.
bash$ parted -l
Model: ATA ST3160815AS (scsi)
Disk /dev/sda: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Fichero /proc/
Otra forma rudimentaria es imprimir el contenido de la carpeta /proc/partitions/. Esto imprimirá todos los dispositivos y particiones conocidos en el sistema. A estas alturas deberías ser capaz de diferenciar entre el disco y las particiones, supongo.
bash$ cat /proc/partitions
Busca el menor ‘0’ o nombre que se ajuste al formato /dev/sda.
lsscsi
Si sabe que sólo tiene dispositivos SCSI o sólo necesita la información sobre los discos SCSI, entonces puede utilizar el comando lsscsi. Esta utilidad puede no estar instalada en algunas distros por defecto.
Como el nombre del comando sugiere, imprime toda la información sobre los dispositivos SCSI en el sistema.
bash$ lsscsi
No importa la distribución en la que se encuentre, debería ser capaz de listar los discos en su sistema utilizando al menos uno de los comandos listados anteriormente.