Como posso saber se é um disco rígido local ou uma chave USB? Eu preferiria uma maneira de fazer isso sem privilégios de root./dev/sdX
OK, udevadm
ajudou muito:
Para HDD local:
udevadm info --query=all --name=sdb | grep ID_BUS
E: ID_BUS=ata
Para chave USB:
udevadm info --query=all --name=sdc | grep ID_BUS
E: ID_BUS=usb
bash
hardware
hard-disk
administration
margarida
fonte
fonte
Respostas:
Existem algumas maneiras de dizer sem privilégios de root, muitas delas complicadas / hacky:
Usando
/dev/disk/by-id
:Se isso responder com algo parecido
/dev/disk/by-id/usb-blah-blah-blah
, então é um disco USB. Outros prefixos incluemata
,dm
,memstick
,scsi
, etc.O uso
/dev/disk/by-path
não é significativamente diferente:Você terá algo como
/dev/disk/by-path/pci-0000:00:1d.7-usb-0:1:1.0-scsi-0:0:0:0
. Isso mostra o caminho do dispositivo que leva ao disco. Nesse caso, um caminho aproximado é PCI → USB → disco. (observe o-usb-
).Usando o udev (eu executo o Debian. O meu
udevadm
é o/sbin
que não está no meu$PATH
- o seu pode estar em outro lugar, dentro ou fora do seu$PATH
):Você verá o tipo de barramento em que o dispositivo está. Remova o
| grep ID_BUS
para obter a lista completa de informações (pode ser necessário adicionar|less
).Se você tem
lshw
instalou, a resposta da Huygens também pode funcionar:E observe a saída do seu disco. Em
less
, tente/ sdX e observe asbus info
linhas anteriores - a primeira dirá apenasscsi@…
, mas a linha várias antes de ser mais esclarecedora. No entanto, você realmente deve executar isso como superusuário, para que ele não seja adequado. (sintomas: no laptop que eu tentei, ele listou o disco SATA, mas não o disco USB - funcionando com ossudo
dois listados)Também existem outros, mais ou menos diretos do que esses.
fonte
esatap
?Conheço uma solução, mas, infelizmente, requer privilégios de root. De qualquer forma, você ainda pode achar útil:
Para cada dispositivo, ele imprimirá o nome lógico (por exemplo,
/dev/sda
) e as informações do barramento, que no caso de um dispositivo USB seriam algo como 'usb @ 1: 2'.Saída de amostra:
fonte
Você poderia usar
lsblk
:onde
-d
ou--nodeps
meios não imprimem escravos e-o name,tran
ou--output name,tran
meios listam apenas o nome do dispositivo e o tipo de transporte do dispositivo. Adicionerm
à lista de colunas de saída para ver quais dispositivos são removíveis (1
setrue
):fonte
Isso não precisa de privilégios de root (mas muitos desses comandos usam e dependem de bashisms, portanto, eles não funcionarão em todos os shells compatíveis com POSIX):
Existe uma maneira rápida de perguntar sobre :
sdX
O arquivo realmente interessante é
capability
. No meu Debian, eu tenho umgenhd.h
arquivo, então:De todo, apenas para saber se o sinalizador
removable
está definido:então
funciona testando se o
capability
valor (que é 52 na minhasda
exemplo acima) tem o1
conjunto de bits (ou seja, se é um número ímpar).Mas o Linux renderiza todas as bandeiras
/sys
, portanto, pedir/sys/block/sdX/removable
é muito mais simples! ;-)Portanto, poderia ser uma chave USB
removable
, mas como existem muitos dispositivos removíveis , eu preferiria garantir que o tamanho da mídia seja maior que 0 (como uma bandeja de CD-ROM descarregada, por exemplo) e que o dispositivo não seja dentro use: Ao assistir quesdX/trace/enable
não está vinculado:Nota: Tudo isso é bem testado no bash v4.2 +.
No bash , você pode usar esta maneira muito rápida e eficiente:
No meu sistema, existem 4 chaves USB, mas uma delas (
sde
) já está montada; portanto, o comando anterior gera:Meu script:
Há uma pequena função bash que escrevi para instalar o Debian Live atualizado.
# A primeira parte processa apenas o tamanho legível por humanos. A função começa aí.
Isso atribui a resposta, como uma matriz , à variável fornecida como o primeiro argumento ou à variável
$REPLY
:(O último campo pode conter espaços.)
fonte
…,device/{model,type,vendor,uevent}
? (2) Você pode explicar seus comandos GENHD e seus comandos "trace / enable"? (3) Seu[ $(( $(< $file ) & 1 )) -ne 0 ]
teste pode ser simplificado (reduzido) para(( $(< $file ) & 1 ))
./usr/src/*/include/linux
. Tentesed -ne 's/#define.*GENHD_FL_\([A-Z0-9_]*\)[ \t]*\([0-9]*\) \?.*$/GENHD_FLAGS[\2]="\1"/p;' /usr/src/*/include/linux/genhd.h
. (3) simEu sugiro apenas usar
hdparm
orlshw
(que você pode precisar instalar) e usarsudo
para executá-lo como root.todos devem fornecer informações.
fonte
hdparm -i /dev/sda /dev/sda: HDIO_DRIVE_CMD(identify) failed: Invalid exchange HDIO_GET_IDENTITY failed: Invalid argument
Basta ler o valor de
/sys/block/sdX/removable
.Por exemplo:
/dev/sdc
é uma chave USB (pode ser um cartão SD ou qualquer outra mídia removível).fonte
dmesg
é o método mais fácil:( sendo o nome do seu dispositivo, por exemplo, )
sdX
sda
No comando acima, você verá o seguinte:
fonte
dmesg
lê o buffer de mensagens circulares do kernel para que esta solução funcione apenas relativamente recentemente após uma reinicializaçãoVocê pode usar os comandos abaixo para obter nós de dispositivos SD, USB e SATA.
fonte
/dev/sdX
, como posso saber se é um HDD local ou uma chave USB?” Explique como o OP pode usar seus comandos para fazer isso. determinação. (2) Preferimos respostas que dão comandos e as explicamos sobre respostas que fornecem apenas comandos. Por favor, explique o que você está fazendo. Por favor, não responda nos comentários; edite sua resposta para torná-la mais clara e completa. ... (continua)awk
é uma ferramenta muito poderosa. Muitos iniciantes postam respostas que fazemgrep
ae direcionam sua saídaawk
. Isso raramente é necessário;awk
pode fazer a correspondência de padrões e selecionar a entrada desejada sem a ajuda degrep
. Você tem um pipeline de doisgrep
comandos, canalizadosawk
e, em seguida, um segundoawk
comando. Isso pode ser bastante simplificado; tente por favor. (4) Além disso, para maior clareza, convém mudar`…`
para$(…)
- veja isto , isto e isto .Sou preguiçoso, o inxi me diz isso facilmente:
Acredito que também me diga se é firewire e talvez um outro tipo, mas eu teria que verificar novamente, não os utilizo há algum tempo.
Também me diz usando -p se as partições são remotas, como montagens samba ou nfs.
fonte
Depois de conectar o dispositivo USB, execute
dmesg
em uma janela do console. Você receberá algumas dicas.Por exemplo, ele diz algo como "Dispositivo conectado, armazenamento em massa / dev / sdd".
fonte