Как узнать, какие жесткие диски находятся в системе?

223

Мне нужно знать, какие жесткие диски доступны, включая те, которые не смонтированы и, возможно, не отформатированы. Я не могу найти их dmesgили /var/log/messages(слишком много, чтобы пролистать). Я надеюсь, что есть способ использовать /devили /procузнать эту информацию, но я не знаю как. Я использую Linux.

xenoterracide
источник
В первоначальном вопросе не был указан какой-либо конкретный вариант Unix, и аппаратное управление, очевидно, сильно зависит от варианта.
Жиль
@ gilles Да, я был на работе, когда писал, поэтому я уточнил, когда вернулся домой и подумал об этом.
ксенотеррацид
1
В зависимости от того, что вы делаете, удиски .
Дероберт
2
Я нашел полезную страницу, описывающую много общих аппаратных команд с поиском в Google. К таким дискам относятся lshw(Список оборудования), hwinfo(Информация об оборудовании), lsscsi(Список устройств SCSI), lsusb(Список шин / устройств USB), lsblk(Список блочных устройств) fdisk -lи mount. Более подробная информация на сайте binarytides.com/linux-commands-hardware-info .
Эдвард

Ответы:

182

Это сильно зависит от платформы. Также разные методы могут по-разному относиться к пограничным случаям («поддельные» диски разных типов, тома RAID и т. Д.).

В современных установках udev есть символические ссылки на носители в подкаталогах /dev/disk, которые позволяют искать диск или раздел по серийному номеру ( /dev/disk/by-id/), по UUID ( /dev/disk/by-uuid), по метке файловой системы ( /dev/disk/by-label/) или по аппаратному подключению ( /dev/disk/by-path/).

В Linux 2.6 у каждого диска и дискообразного устройства есть запись в /sys/block. Под Linux с незапамятных времен, диски и разделы перечислены в /proc/partitions. Кроме того , вы можете использовать lshw : lshw -class disk.

Linux также предоставляет lsblkутилиту, которая отображает хорошее древовидное представление томов хранилища (начиная с util-linux 2.19, отсутствует на встроенных устройствах с BusyBox).

Если у вас есть утилита fdiskили disklabelутилита, она может рассказать вам, на каких устройствах она может работать.

Вы найдете названия утилит для многих вариантов Unix в Rosetta Stone для Unix , в частности строки «перечислить конфигурацию оборудования» и «прочитать метку диска».

жилль
источник
11
Ooo; что сайт Rosetta Stone превосходен
Майкл Мрозек
146

lsblkперечислит все блочные устройства. Это хорошо подходит для сценариев:

$ lsblk -io KNAME,TYPE,SIZE,MODEL
KNAME TYPE   SIZE MODEL
sda   disk 149.1G TOSHIBA MK1637GS
sda1  part  23.3G 
sda2  part    28G 
sda3  part  93.6G 
sda4  part   4.3G 
sr0   rom   1024M CD/DVDW TS-L632M

lsblk присутствует в пакете util-linux и поэтому гораздо более универсален, чем предлагаемые альтернативы.

К3 --- СРН
источник
10
Если вам нужны только физические диски, используйте lsblk -d, -dозначает, что сообщение о зависимости не указано.
Coanor
2
Действительно =) $ lsblk -ido KNAME,TYPE,SIZE,MODEL(часть util-linuxкоторого является частью baseна Arch) мгновенно дает запрошенную информацию, и без необходимости быть корнем. Обратите внимание, что он предоставляет модель устройства , а не семейство моделей . smarctl -i /dev/<device>по совету Скиппи, например: «Семейство моделей: Seagate Barracuda 7200.12» (отсутствует в lsblk -ido: «диск 465,8G ST3500418AS»).
tuk0z
68

Как насчет

lshw -class disk
nc3b
источник
3
Неплохо ... Я проверю это дважды, когда выйду, я уверен, что это работает ... к сожалению, это ( lshw) не установлено на сервере, и я подозреваю, что ответ будет, мы не устанавливаем это.
ксенотеррацид
По некоторым причинам, lshw не перечисляет жесткие диски.
Андре ван Шубрук
2
Когда он не запускается с правами root, он не выводит список дисков, но также не выдает ошибку.
Фолькер Сигел
1
bash: lshw: команда не найдена
Antoine
26

hwinfo помогает:

> hwinfo --disk
21: IDE 00.0: 10600 Disk                                        
[Created at block.245]
Unique ID: 3OOL.8MZXfAWnuH8
Parent ID: w7Y8.1T_0outZkp6
SysFS ID: /class/block/sda
SysFS BusID: 0:0:0:0
SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0
Hardware Class: disk
Model: "Hitachi HTS54322"
Vendor: "Hitachi"
Device: "HTS54322"
Revision: "ESBO"
Driver: "ahci", "sd"
Driver Modules: "ahci"
Device File: /dev/sda
Device Files: /dev/sda, /dev/disk/by-id/ata-Hitachi_HTS543225A7A384_E2021342GEPG4J, /dev/disk/by-id/scsi-SATA_Hitachi_HTS5432_E2021342GEPG4J, /dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0, /dev/disk/by-id/wwn-0x5000cca614c6395e
Device Number: block 8:0-8:15
BIOS id: 0x80
Geometry (BIOS EDD): CHS 484521/16/63
Size (BIOS EDD): 488397168 sectors
Geometry (BIOS Legacy): CHS 1023/255/63
Drive status: no medium
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #17 (SATA controller)
> hwinfo --block --short
disk:                                                           
  /dev/sda             Hitachi HTS54322
partition:
  /dev/sda1            Partition
  /dev/sda2            Partition
  /dev/sda3            Partition
  /dev/sda4            Partition
  /dev/sda5            Partition
Мартин Шредер
источник
19

@Giles говорит, что это сильно зависит от платформы. Вот один из таких примеров.

Я использую систему CentOS 5.5. Эта система имеет 4 диска и 3ware RAID-контроллер.

В моем случае lshw -class disk, cat /proc/scsi/scsiи parted --listпоказывает контроллер RAID (3ware 9650SE-4LP). Это не показывает фактические диски:

показывает только 3ware RAID контроллер, который предоставляет том / dev / sda:

# lshw -class disk
  *-disk                  
       description: SCSI Disk
       product: 9650SE-4LP DISK
       vendor: AMCC
       physical id: 0.0.0
       bus info: scsi@0:0.0.0
       logical name: /dev/sda

# cat /proc/scsi/scsi 
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: AMCC     Model: 9650SE-4LP DISK  Rev: 4.06
  Type:   Direct-Access                    ANSI SCSI revision: 05

# parted --list

Model: AMCC 9650SE-4LP DISK (scsi)
Disk /dev/sda: 2000GB

Чтобы увидеть диски, которые лежат внизу, мне пришлось установить утилиту tw_cli из 3ware и спросить сам контроллер.

# tw_cli info c0
...

VPort Status         Unit Size      Type  Phy Encl-Slot    Model
------------------------------------------------------------------------------
p0    OK             u0   931.51 GB SATA  0   -            WDC WD1002FBYS-02A6 
p1    OK             u0   931.51 GB SATA  1   -            WDC WD1002FBYS-02A6 
Стефан Ласевский
источник
13

Поскольку и « Могу ли я посмотреть, какой жесткий диск я установил? » И « Как определить марку и модель моих устройств хранения данных? » Помечены как дубликаты этого вопроса, я удивлен, что никто не упомянул hdparmи smartctl. Рассматривая несколько машин, кажется, что любая из них (если она не обе) часто обнаруживается уже установленной в стандартных (даже старых) дистрибутивах Linux.

# smartctl -i /dev/sda
smartctl 6.1 2013-03-16 r3800 [i686-linux-3.9.9-301.fc19.i686.PAE] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Toshiba 2.5" HDD MK..56GSY
Device Model:     TOSHIBA MK1656GSY
Serial Number:    60PKT43CT
LU WWN Device Id: 5 000039 2919874b6
Firmware Version: LH013D
User Capacity:    160 041 885 696 bytes [160 GB]
Sector Size:      512 bytes logical/physical
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 2.6, 3.0 Gb/s
Local Time is:    Mon Jul 22 11:13:37 2013 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

# hdparm -i /dev/sda

/dev/sda:

 Model=TOSHIBA MK1656GSY, FwRev=LH013D, SerialNo=60PKT43CT
 Config={ Fixed }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
 BuffType=unknown, BuffSize=16384kB, MaxMultSect=16, MultSect=16
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=312581808
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  sdma0 sdma1 sdma2 mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
 AdvancedPM=yes: unknown setting WriteCache=enabled
 Drive conforms to: Unspecified:  ATA/ATAPI-3,4,5,6,7

 * signifies the current active mode

Как обычно, проверьте man-страницу для большего количества вариантов.

Скиппи ле Гран Гуру
источник
Следует отметить, что smartctlспособ, даже работает на Cygwin, +1! Просто зациклите возможные имена устройств и посмотрите, smartctlвернется ли, что привод поддерживает SMART.
Адриан Фрювирт,
12

Я использую Fedora 14 и lshwздесь не доступен (по крайней мере, по умолчанию). Однако в моем случае я использовал fdisk -lкоманду (как пользователь root), чтобы получить следующий вывод:

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 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: 0x0006a697

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    16777215     7875584   8e  Linux LVM

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 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/sdb doesn't contain a valid partition table

Disk /dev/dm-0: 6509 MB, 6509559808 bytes
255 heads, 63 sectors/track, 791 cylinders, total 12713984 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/dm-0 doesn't contain a valid partition table

Disk /dev/dm-1: 1543 MB, 1543503872 bytes
255 heads, 63 sectors/track, 187 cylinders, total 3014656 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/dm-1 doesn't contain a valid partition table
Евгений С
источник
Используйте fdisk -l /dev/sd?или fdisk -l /dev/hd?чтобы не вводить устройства DM.
laebshade
6

Я нашел в другом ответе SE , inxiинструмент, как очень удобно:

inxi -Dxx
Drives:    HDD Total Size: 810.2GB (42.9% used)
           ID-1: /dev/sdc model: ST3160827AS size: 160.0GB serial: 5MT2HMH6
           ID-2: /dev/sdb model: WDC_WD3200JD size: 320.1GB serial: WD-WCAMR1302926
           ID-3: /dev/sda model: ST380817AS size: 80.0GB serial: 4MR2EWBE
           ID-4: /dev/sdd model: ST3250824AS size: 250.1GB serial: 9ND08GKX
Гжегож Вежовецкий
источник
3

Многие из перечисленных команд помогут вам найти диски, которые уже были распознаны системой при загрузке. С современными приводами вы можете найти что-то, что вы вставили, когда машина была запущена и работала (я так и сделал). Мне нравится совет от http://fredericiana.com/2010/06/15/hot-plugging-a-sata-drive-under-linux/ :

Попробуйте выполнить повторное сканирование хостов SCSI (каждый порт SATA отображается как шина SCSI):

echo "0 0 0"> / sys / class / scsi_host / host / scan

... Затем вы можете использовать ваши утилиты Linux, такие как fdisk, чтобы показать вам информацию о найденных дисках.

Майк Швагер
источник
3
sfdisk -l  

предоставит вам подробную информацию об аппаратных / физических дисках, даже если они не смонтированы.

Программа предустановлена ​​на все варианты Linux, которые я использовал, но вы должны иметь права root, чтобы использовать ее.

codeslinger
источник
2

Это сработало для меня:

fdisk -l 2>/dev/null | grep "Disk \/" | grep -v "\/dev\/md" | awk '{print $2}' | sed -e 's/://g'
Альдо Варгас
источник
1

sudo gparted покажет все это в графическом интерфейсе.

(Вы не указали, что вам нужно сделать это в терминале, поэтому мне интересно, почему этого решения не было.)

Ондра Жижка
источник
-1

Чтобы вернуть количество блочных устройств , без причудливых инструментов, неясного синтаксиса или параметров:

 ls /sys/block/* | grep block | grep sd | wc -l

В моих локальных тестовых случаях, 47на моей самой большой военной машине и 1на моем ноутбуке.

Максимум
источник
2
Это на 500% меньше в одной из моих систем (Ubuntu 12.04) и на 200% в другой системе.
Anthon
-1

IMHO, lsblk - это команда, которая наиболее широко доступна в мире Linux (работает даже на таких портах, как Raspbian). Я не хочу никого обидеть, но есть некоторые команды, которые требуют, чтобы вы явно знали имя устройства, чтобы найти его. Например, вы должны знать о существовании sdc для запуска smartctl. Тем не менее, lsblk не универсален - да, на Solaris, но не на hpux. Благодарю.

Прыгающий кролик
источник
2
Помимо упоминания о том, что lsblkтакже доступно в Solaris, это не добавляет больше информации, чем два наиболее популярных ответа. Это было бы лучше оставить как комментарий к unix.stackexchange.com/a/94211/22812
Энтони