¿Cómo puedo saber si es un disco duro local o una llave USB? Prefiero una forma de hacerlo sin privilegios de root./dev/sdX
OK, udevadm
ayudó mucho:
Para HDD local:
udevadm info --query=all --name=sdb | grep ID_BUS
E: ID_BUS=ata
Para llave USB:
udevadm info --query=all --name=sdc | grep ID_BUS
E: ID_BUS=usb
bash
hardware
hard-disk
administration
margarita
fuente
fuente
Respuestas:
Hay algunas formas de saber sin privilegios de root, muchas de ellas difíciles / hacky:
Utilizando
/dev/disk/by-id
:Si esto responde con algo así
/dev/disk/by-id/usb-blah-blah-blah
, entonces es un disco USB. Otros prefijos incluyenata
,dm
,memstick
,scsi
, etc.El uso
/dev/disk/by-path
no es significativamente diferente:Obtendrás algo como
/dev/disk/by-path/pci-0000:00:1d.7-usb-0:1:1.0-scsi-0:0:0:0
. Esto muestra la ruta del dispositivo que conduce al disco. En este caso, una ruta aproximada es PCI → USB → disco. (tenga en cuenta el-usb-
).Usando udev (ejecuto Debian. Mi
udevadm
está en el/sbin
que no está en mi$PATH
- el tuyo podría estar en otro lugar, dentro o fuera de tu$PATH
):Obtendrá el tipo de bus en el que se encuentra el dispositivo. Elimine la
| grep ID_BUS
lista completa de información (es posible que deba agregarla|less
).Si ha
lshw
instalado, la respuesta de Huygens también puede funcionar:Y mire a través de la salida de su disco. En
less
, pruebe /sdX y mire lasbus info
líneas anteriores, la primera solo diráscsi@…
, pero la otra varias líneas antes será más esclarecedora. Sin embargo, realmente debería ejecutar esto como superusuario, por lo que puede no ser adecuado. (síntomas: en la computadora portátil lo probé, enumeraba el disco SATA pero no el USB, ejecutándose consudo
ambos listados)También hay otros, más o menos directos que estos.
fuente
esatap
?Conozco una solución, pero, lamentablemente, requiere privilegio de root. De todos modos, aún puede resultarle útil:
Para cada dispositivo, imprimirá el nombre lógico (por ejemplo,
/dev/sda
) y la información del bus, que en el caso de un dispositivo USB sería algo así como 'usb @ 1: 2'.Salida de muestra:
fuente
Podrías usar
lsblk
:donde
-d
o--nodeps
significa no imprimir esclavos y /-o name,tran
o--output name,tran
lista de medios solo el nombre del dispositivo y el tipo de transporte del dispositivo. Agreguerm
a la lista de columnas de salida para ver qué dispositivos son extraíbles (1
sitrue
):fuente
Esto no necesita privilegios de root (pero muchos de estos comandos usan y dependen de bashisms, por lo que no funcionarán en todos los shells compatibles con POSIX):
Hay una forma rápida de preguntar sobre :
sdX
El archivo realmente interesante es
capability
. En mi Debian, tengo ungenhd.h
archivo, así que:En absoluto, solo para saber si la bandera
removable
está activada:asi que
funciona probando si el
capability
valor (que es 52 en misda
ejemplo anterior) tiene el1
conjunto de bits (es decir, si es un número impar).Pero Linux muestra todos los indicadores
/sys
, por lo que pedirlos/sys/block/sdX/removable
es mucho más simple. ;-)Por lo tanto, podría ser una llave USB
removable
, pero como hay muchos dispositivos extraíbles , preferiría asegurarme de que el tamaño del medio sea mayor que 0 (como una bandeja de CD-ROM descargada, para muestra) y que el dispositivo no esté en uso: al mirar esosdX/trace/enable
no está enlazado:Nota: Todo esto está bien probado en bash v4.2 +.
En bash , puedes usar esta forma muy rápida y eficiente:
En mi sistema, hay 4 llaves USB, pero una de ellas (
sde
) ya está montada, por lo que la salida del comando anterior:Mi guión:
Escribí una pequeña función bash para instalar Debian Live actualizado.
# La primera parte solo muestra el tamaño legible por humanos. La función comienza allí.
Esto asigna la respuesta, como una matriz , a la variable dada como primer argumento o variable
$REPLY
:(El último campo puede contener espacios).
fuente
…,device/{model,type,vendor,uevent}
? (2) ¿Puede explicar sus comandos GENHD y sus comandos "trace / enable"? (3) Su[ $(( $(< $file ) & 1 )) -ne 0 ]
prueba se puede simplificar (acortar) a(( $(< $file ) & 1 ))
./usr/src/*/include/linux
. Tratarsed -ne 's/#define.*GENHD_FL_\([A-Z0-9_]*\)[ \t]*\([0-9]*\) \?.*$/GENHD_FLAGS[\2]="\1"/p;' /usr/src/*/include/linux/genhd.h
. (3) SíSugiero simplemente usar
hdparm
olshw
(que puede necesitar instalar), y usarsudo
para ejecutarlo como root.todos deberían darle información.
fuente
hdparm -i /dev/sda /dev/sda: HDIO_DRIVE_CMD(identify) failed: Invalid exchange HDIO_GET_IDENTITY failed: Invalid argument
Acabo de leer el valor de
/sys/block/sdX/removable
.Por ejemplo:
/dev/sdc
es una llave USB (podría ser una tarjeta SD o cualquier otro medio extraíble).fuente
dmesg
es el método más fácil:( siendo el nombre de su dispositivo, por ejemplo )
sdX
sda
Desde el comando anterior, verá lo siguiente:
fuente
dmesg
lee búfer de mensajes circular del núcleo por lo que esta solución sólo funciona relativamente poco tiempo después de un reinicioPuede usar los siguientes comandos para obtener nodos de dispositivos SD, USB y SATA.
fuente
/dev/sdX
, ¿cómo puedo saber si es un HDD local o una llave USB?" determinación. (2) Preferimos respuestas que dan comandos y las explicamos sobre respuestas que solo proporcionan comandos. Por favor explique lo que está haciendo. Por favor no responda en los comentarios; edite su respuesta para que sea más clara y completa. … (Continúa)awk
es una herramienta muy poderosa. Muchos principiantes publican respuestas que hacengrep
y canalizan su salidaawk
. Esto rara vez es necesario;awk
puede hacer coincidencia de patrones y puede seleccionar la entrada deseada sin ayuda degrep
. Tiene una canalización de dosgrep
comandos, entubadosawk
, y luego un segundoawk
comando. Esto se puede simplificar enormemente; por favor, inténtalo. (4) Además, para mayor claridad, es posible que desee cambiar`…`
a$(…)
: vea esto , esto y esto .Soy vago, inxi me dice esto fácilmente:
Creo que también me dice si es FireWire y tal vez otro tipo, pero tendría que comprobarlo dos veces, no he usado esos tipos en mucho tiempo.
También me dice que use -p si las particiones son remotas, como los montajes samba o nfs.
fuente
Después de enchufar el dispositivo USB, ejecute
dmesg
en una ventana de consola. Se le proporcionarán algunos consejos.Por ejemplo, dirá algo parecido a "Dispositivo conectado, almacenamiento masivo / dev / sdd".
fuente