Tìm tất cả các thiết bị lưu trữ được gắn vào máy Linux


32

Tôi có nhu cầu tìm tất cả các thiết bị lưu trữ có thể ghi được gắn vào một máy nhất định, cho dù chúng có được gắn hay không.

Cách thức tốt nhất để làm điều này là thử mọi mục nhập /devtương ứng với một thiết bị có thể ghi (hd * và sd *).

Có một giải pháp tốt hơn, hay tôi nên gắn bó với cái này?


làm lại một câu hỏi SO
warren

2
Có lẽ bạn muốn sử dụng udisks?
derobert

Tôi không chỉ đơn thuần muốn tìm những gì đĩa cứng trên một hệ thống - Tôi đang tìm kiếm tất cả các thiết bị lưu trữ
warren

Tôi nghĩ rằng tất cả chúng ta giả định đĩa cứng và tương tự. Bạn thực sự có ý nghĩa gì khác? Giống như, nó nên bao gồm ổ đĩa băng, máy in, vv?
derobert

2
@derobert - vâng, do đó, tiêu đề của "tất cả các thiết bị lưu trữ" :)
warren

Câu trả lời:


47

Nếu chỉ quan tâm đến các thiết bị lưu trữ khối , người ta có thể sử dụng lsblktừ gói linux-linux có sẵn rộng rãi:

$ lsblk -o 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

Nó cho vay chính nó để kịch bản với nhiều cột khác có sẵn.


13

Bạn có thể duyệt qua đầu ra lshwvà trích xuất chi tiết về các thiết bị trong diskhoặc tapelớp (và có thể các storagelớp khác - lớp cung cấp cho bạn chi tiết về bộ điều khiển lưu trữ, scsi, sata, sas, v.v.).

ví dụ

lshw -class disk -class tape

Các -shorttùy chọn cho một bản tóm tắt nhỏ gọn đẹp. ví dụ: trên máy chủ / máy trạm / hộp thí nghiệm zfsonlinux của tôi (không may không có thiết bị băng):

# lshw-class băng-class-class lưu trữ -short
Đường dẫn H / W Mô tả Lớp thiết bị
================================================== =======
/ 0/100/4/0 Bộ điều khiển JMB362 SATA
/ 0/100/5/0 scsi10 Bộ điều khiển JMB362 SATA
/0/100/5/0/0.0.0 / dev / sdc đĩa 120GB Lửa yêu nước
/ 0/100 / b / 0 scsi1 lưu trữ SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon]
/0/100/b/0/0.0.0 / dev / sdd đĩa 1TB WDC WD10EARS-00Y
/0/100/b/0/0.1.0 / dev / sde đĩa 1TB WDC WD10EACS-00Z
/0/100/b/0/0.2.0 / dev / sdf đĩa 1TB WDC WD10EACS-00Z
/0/100/b/0/0.3.0 / dev / sdg đĩa 1TB ST31000528AS
/0/100/b/0/0.4.0 / dev / sdh đĩa 1TB ST31000528AS
/0/100/b/0/0.5.0 / dev / sdi đĩa 1TB ST31000528AS
/0/100/b/0/0.6.0 / dev / sdj đĩa 1TB ST31000528AS
/ 0/100/11 scsi2 lưu trữ Bộ điều khiển SATA SB7x0 / SB8x0 / SB9x0 [Chế độ AHCI]
/ 0/100/11/0 / dev / sda đĩa 128GB Yêu nước Torqx 2
/ 0/100/11/1 / dev / sdb đĩa 1TB ST31000528AS
/ 0/1 lưu trữ scsi11     
/0/1/0.0.0 / dev / sdk Đĩa 1967MB SCSI
/0/1/0.0.1 / dev / sdl Đĩa SCSI
/0/1/0.0.2 / dev / sdm Đĩa SCSI
/0/1/0.0.3 / dev / sdn Đĩa SCSI
/ 0/2 lưu trữ scsi66     
/0/2/0.0.0 / dev / sdo Đĩa SCSI
/ 0/3 lưu trữ scsi67     
/0/3/0.0.0 / dev / sdp Đĩa 4057 MB Đĩa SCSI

Các thiết bị / 0/1 thực sự là một đầu đọc thẻ USB (có thẻ SD 2GB được cắm vào một trong các khe cắm) và thiết bị / 0/2 là điện thoại Android của tôi chỉ cắm để sạc. Thiết bị 0/3 là ổ flash USB 4GB.

lshwcó thể tạo ra văn bản đơn giản, đầu ra html, xml và json. Nó cũng có thể kết xuất các chi tiết phần cứng vào một định dạng cơ sở dữ liệu sqlite.

Nó được đóng gói cho debian và hầu hết các distro khác. Trang chủ và nguồn có tại http://ezix.org/project/wiki/HardwareLiSter


5

Xin vui lòng, hãy thử lệnh này

ls -l /dev /dev/mapper |grep '^b'

Nó sẽ liệt kê cho bạn tất cả các thiết bị khối trong hệ thống của bạn


5

Bạn có thể sử dụng lsblkđể liệt kê tất cả các thiết bị khối, cùng với việc mỗi thiết bị chỉ được đọc hay không.

Sau đó, bạn có thể sử dụng grepawkin tên của các thiết bị khối không chỉ đọc:

lsblk -d -n -oNAME,RO | grep '0$' | awk {'print $1'}

đây là một bản mở rộng tuyệt vời cho câu trả lời
warren

4

lsblk sẽ liệt kê tất cả các thiết bị lưu trữ khối.

fdisk -l sẽ liệt kê tất cả các phân vùng trên tất cả các thiết bị được liệt kê trong /proc/partitions

lshw -short sẽ cung cấp cho bạn thông tin về tất cả các phần cứng (có lẽ ngoại trừ firewire) trên hệ thống.


3

Nếu, theo trả lời của bạn để derobert, bạn đang tìm kiếm cái gì đó danh sách băng ổ đĩa và máy in , bạn có thể quan tâm lsdev, lsusblspci.


Tất nhiên, điều đó sẽ không tìm thấy bộ nhớ gắn trên mạng :-(
derobert

1
Sau đófdisk -l
dấu hai chấm

2

Bạn có thể thử lệnh sau:

file /dev/disk/by-id/* | awk -F'/' 'NR>1{print "\047/dev/"$NF}' | sort | uniq

1
Nó làm gì và làm thế nào để so sánh với các lớp thiết bị khối và băng liệt kê với lshw?
n611x007

2

Bạn có thể sử dụng hwinfo để liệt kê tất cả các đĩa ( tài liệu ).

hwinfo --block --short đưa ra một cái nhìn tổng quan:

disk:
  /dev/sdb             WDC WD3200AAKS-7
  /dev/sda             SAMSUNG HD103UJ
partition:
  /dev/sdb1            Partition
  /dev/sdb2            Partition
  /dev/sda1            Partition
cdrom:
  /dev/sr1             TSSTcorp DVD+-RW TS-H653B
  /dev/sr0             HL-DT-ST DVD-ROM GDRH20N

hwinfo --disk cung cấp thêm chi tiết cho mỗi đĩa.

FYI: trên một số bản phân phối Linux như Ubuntus 14.04 trở lên, hwinfo không có trong kho chính thức .


0

Tôi đã tìm thấy điều đó fdisklsblkkhông có sẵn trong thiết bị đầu cuối ảo cho trình cài đặt Debian. Trong trường hợp này tôi sử dụng blkid, lấy UUID cho các thiết bị lưu trữ khối.


-1

Nếu bạn có ý định với các thiết bị RAID thì bạn sẽ không thể có được kết quả chính xác khi sử dụng hdparm smartctl, v.v. tôi đã từng gỡ lỗi với megacli

    [root@ns3539186 ~]# /opt/megaraid/megacli -LDPDInfo -aAll |grep "Virtual Disks\|RAID Level\|State"
Number of Virtual Disks: 2
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
State               : Optimal
Foreign State: None
Media Type: Solid State Device
Foreign State: None
Media Type: Solid State Device
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
State               : Optimal
Foreign State: None
Foreign State: None

Để lấy số sê-ri của đĩa

[root@ns3539186 ~]# /opt/megaraid/megacli -PDList -aAll | egrep 'Slot\ Number|Device\ Id|Inquiry\ Data|Raw|Firmware\ state' | sed 's/Slot/\nSlot/g' |grep "Da                    ta\|Slot\|Raw"
Slot Number: 0
Raw Size: 447.130 GB [0x37e436b0 Sectors]
Inquiry Data: PHYS733402Z0480BGN  INTEL SSDSC2KB480G7                     SCV10100
Slot Number: 1
Raw Size: 447.130 GB [0x37e436b0 Sectors]
Inquiry Data: PHYS733402YV480BGN  INTEL SSDSC2KB480G7                     SCV10100
Slot Number: 2
Raw Size: 3.638 TB [0x1d1c0beb0 Sectors]
Inquiry Data: K3GJTYMB            HGST HUS726040ALA610                    A5GNT920
Slot Number: 3
Raw Size: 3.638 TB [0x1d1c0beb0 Sectors]
Inquiry Data: K3GHW57B            HGST HUS726040ALA610                    A5GNT920

Trong đầu ra trên Dữ liệu yêu cầu chứa số sê-ri


-1

Dưới đây là một số lệnh tôi đã sử dụng để tìm bộ nhớ cục bộ và chia sẻ.

Đối với lưu trữ cục bộ

lsblk | grep -v '^loop'

Đối với lưu trữ được chia sẻ

findmnt -D | grep -v '^tmpfs' | grep -v '^/'

OR

df -kh | grep -v '^tmpfs' | grep -v '^/'

Tại sao lại đề xuất các công cụ tương tự đã được đề xuất (và được chấp nhận) hơn 6 năm trước?
warren

Bởi vì hệ điều hành đã thay đổi và bây giờ bạn nhận được rất nhiều looptmpfsphân vùng. Vì vậy, tốt hơn để làm sạch đầu ra bằng cách sử dụng grep như trên.
Mian Asbat Ahmad

-3

Điều này sẽ liệt kê tất cả các đĩa của bạn và ổ đĩa gắn kết:

$ df -h

5
Trên thực tế, đó là danh sách các hệ thống tập tin
HalosGhost
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.