Qual é a melhor maneira de obter informações sobre as unidades atualmente não desmontadas?


38

Primeiro, a situação: eu tenho um computador Linux com dois compartimentos de unidade eSATA que aceitam unidades SSD removíveis. Estou tentando escrever um pequeno aplicativo GUI que facilite a montagem / desmontagem / formato / backup / etc do usuário das unidades que ele coloca nessas baias.

Tudo funciona principalmente. Um pequeno problema, no entanto, é que eu não sei como encontrar informações sobre o que há nas unidades inseridas até que as unidades tenham sido montadas com sucesso.

Por exemplo, se o usuário inserir uma unidade que não consigo montar (por exemplo, porque não está formatada ou formatada com um sistema de arquivos inesperado), tudo o que meu aplicativo pode dizer sobre "Unidade falhou em montar".

Isso não é muito satisfatório, porque se a unidade não estiver formatada, o usuário provavelmente desejará formatá-la ... mas se a unidade contiver dados de um sistema de arquivos não reconhecido, provavelmente o usuário NÃO desejará formatá-la .... ou pelo menos, quero poder avisá-lo de que, ao fazer isso, ele estará apagando dados potencialmente valiosos.

Portanto, minha pergunta é: existe algum método para consultar algumas informações básicas (especialmente do tipo sistema de arquivos) de uma unidade que não exija que a unidade já esteja montada? Ou preciso apenas tentar montá-lo com vários sistemas de arquivos conhecidos até que uma das tentativas de montagem seja bem-sucedida e fornecer uma vaga mensagem de "tenha cuidado" se nenhum deles conseguir?

Caso isso ocorra, os caminhos que eu uso para montar as unidades nos compartimentos são:

/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

Respostas:


55

Se as unidades estiverem desmontadas, há várias coisas que você pode fazer.

Você pode usar um comando como fdisk -lou sfdisk -lpara listar as partições. Apenas o tipo de partição pode fornecer algumas informações úteis se as partições estiverem configuradas corretamente.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

Se estiver presente no seu sistema, você pode usar o comando vol_idem uma partição para retornar alguns detalhes úteis (parte do pacote udev no Debian). Isso geralmente diz qual sistema de arquivos está sendo realmente usado.

# 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=

O comando lshw -class diskfornecerá alguns detalhes sobre o tipo de unidade. Você pode usar isso se tiver curiosidade sobre o número de série real da unidade.

# 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

Se você tem certeza de que existe um sistema de arquivos específico como o ext2 / 3, pode usar a ferramenta tune2fs específica do sistema de arquivos para examinar mais detalhes.

# 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

Outra ferramenta útil é o 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  

Se você partiu o instalado, pode executar um 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 qualquer forma, depois que eu sugiro que você dê uma olhada no udev ou na fonte separada .


12
'vol_id' foi renomeado 'blkid', para qualquer um que tropeçar nessa grande resposta.
22813 Dave S.

lsblk -i -o kname,mountpoint,fstype,size,maj:min,name,state,rm,rota,ro,type,label,model,serial
sjas

resposta maravilhosa !!
Sufiyan Ghori

5

Outro comando útil é blkid: ele retorna informações semelhantes, vol_idmas também pode verificar todos os dispositivos no sistema, em vez de exigir a passagem de um dispositivo.

Para forçar blkida varredura de todos os dispositivos em vez de usar as informações em cache, execute blkid -c /dev/null(você precisa de permissão de leitura nos dispositivos de bloco, normalmente precisará executá-la como raiz)


Um usuário anônimo queria adicionar: tudo isso é útil, mas 'vol-id' agora foi substituído inteiramente por 'blkid'; nem o SuSE nem o Debian têm 'vol-id' em seus repositórios. Executar a whereis blockidpartir da linha de comando (ou man blockid), você encontrará se está carregado. Executar como root: blkid /dev/sdb1gives (por exemplo): /dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat"A página de manual também vale a pena ver.
Chris S

1

Aqui está uma sugestão da IBM: SCSI - Hot add, remove, rescan de dispositivos SCSI: Rescan de um dispositivo SCSI . Isso examinará novamente o endereço SCSI para novos dispositivos e você poderá ler as informações em / var / log / messages. Algumas outras ferramentas de disco também funcionarão sem você montar a unidade.

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

Na verdade, tentei algo diferente ontem, e funcionou (sistema RHEL4):

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

0

Uma visão geral simples de todas as partições encontradas pelo kernel fornece

cat /proc/partitions
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.