web-dev-qa-db-fra.com

Trouver tous les périphériques de stockage connectés à une machine Linux

J'ai besoin de trouver tous les périphériques de stockage inscriptibles attachés à une machine donnée, qu'ils soient ou non ils sont montés.

La meilleure façon de procéder consiste à essayer chaque entrée de /dev correspondant à un périphérique inscriptible (hd* and sd*). .....

Existe-t-il une meilleure solution ou devrais-je m'en tenir à celle-ci?

106
warren

/proc/partitions listera tous les périphériques et partitions bloqués reconnus par le système. Vous pouvez ensuite essayer d'utiliser file -s <device> pour déterminer le type de système de fichiers présent sur la partition, le cas échéant.

78
Steve Baker

Vous pouvez toujours utiliser fdisk -l qui semble fonctionner assez bien, même sur des configurations étranges telles que les périphériques EC2 xvda.

Voici un dump pour une instance m1.large:

root@ip-10-126-247-82:~# fdisk -l

Disk /dev/xvda1: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda1 doesn't contain a valid partition table

Disk /dev/xvda2: 365.0 GB, 365041287168 bytes
255 heads, 63 sectors/track, 44380 cylinders, total 712971264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda2 doesn't contain a valid partition table

Disk /dev/xvda3: 939 MB, 939524096 bytes
255 heads, 63 sectors/track, 114 cylinders, total 1835008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda3 doesn't contain a valid partition table

Alors que mount dit:

root@ip-10-126-247-82:~# mount
/dev/xvda1 on / type ext4 (rw)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/Fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/xvda2 on /mnt type ext3 (rw)

Et /proc/partitions dit:

root@ip-10-126-247-82:~# cat /proc/partitions
major minor  #blocks  name

 202        1   10485760 xvda1
 202        2  356485632 xvda2
 202        3     917504 xvda3

Note latérale

Je voudrais bien me connaître comment fdisk -l fonctionne.

70
Maxim Veksler

vous pouvez aussi essayer lsblk ... est en util-linux ... mais j'ai aussi une question

fdisk -l /dev/sdl

pas de résultat

grep sdl /proc/partitions      
   8      176   15632384 sdl
   8      177   15628288 sdl1

lsblk | grep sdl
sdl       8:176  1  14.9G  0 disk  
`-sdl1    8:177  1  14.9G  0 part  

fdisk est bon mais pas si bon ... on dirait qu'il ne peut pas "tout voir"

dans mon exemple particulier, j'ai un bâton avec un lecteur de carte intégré et je ne peux voir que le bâton en utilisant fdisk:

fdisk -l /dev/sdk

Disk /dev/sdk: 15.9 GB, 15931539456 bytes
255 heads, 63 sectors/track, 1936 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xbe24be24

   Device Boot      Start         End      Blocks   Id  System
/dev/sdk1   *        8192    31116287    15554048    c  W95 FAT32 (LBA)

mais pas la carte (carte étant/dev/sdl)

aussi, file -s est inefficace ...

file -s /dev/sdl1
/dev/sdl1: sticky x86 boot sector, code offset 0x52, OEM-ID "NTFS    ", sectors/cluster 8, reserved sectors 0, Media descriptor 0xf8, heads 255, hidden sectors 8192, dos < 4.0 BootSector (0x0)

c'est gentil ... MAIS

fdisk -l /dev/sdb
/dev/sdb1            2048   156301487    78149720   fd  Linux raid autodetect
/dev/sdb2       156301488   160086527     1892520   82  Linux swap / Solaris

file -s /dev/sdb1
/dev/sdb1: sticky \0

pour afficher des informations sur un disque auquel fdisk ne peut pas accéder, vous pouvez utiliser parted:

parted /dev/sdl print

Model: Mass Storage Device (scsi)
Disk /dev/sdl: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  16.0GB  16.0GB  primary  ntfs




arted /dev/sdb print 
Model: ATA Maxtor 6Y080P0 (scsi)
Disk /dev/sdb: 82.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  80.0GB  80.0GB  primary                  raid
 2      80.0GB  82.0GB  1938MB  primary  linux-swap(v1)
35
THESorcerer

ls /sys/block

9
Mihai Limbășan

Utilisation de HAL (noyau 2.6.17 et supérieur):


#! /bin/bash
hal-find-by-property --key volume.fsusage --string filesystem |
while read udi ; do
    # ignore optical discs
    if [[ "$(hal-get-property --udi $udi --key volume.is_disc)" == "false" ]]; then
        dev=$(hal-get-property --udi $udi --key block.device)   
        fs=$(hal-get-property --udi $udi --key volume.fstype) 
        echo $dev": "$fs
    fi 
done
7
ZungBang

Les systèmes linux modernes n’auront normalement des entrées dans/dev que pour les périphériques existants, il est donc préférable de passer par hda * et sda *, comme vous le suggérez.

Sinon, vous pouvez utiliser quelque chose dans/proc. D'un coup d'œil, j'aurais dit que/proc/partitions semble pouvoir faire ce dont vous avez besoin.

4
Mark Baker

libsysfs semble potentiellement utile, mais pas directement à partir d'un script Shell. Il existe un programme fourni avec celui-ci, appelé systool, qui fera ce que vous voulez, bien qu'il soit peut-être plus simple de regarder dans/sys directement plutôt que d'utiliser un autre programme pour le faire à votre place.

2
Mark Baker