Menemukan semua perangkat penyimpanan yang terpasang pada mesin Linux


32

Saya memiliki kebutuhan untuk menemukan semua perangkat penyimpanan yang dapat ditulis yang terpasang pada mesin yang diberikan, apakah mereka sudah terpasang atau tidak.

Cara tolol untuk melakukan ini adalah dengan mencoba setiap entri /devyang sesuai dengan perangkat yang dapat ditulisi (hd * dan sd *).

Apakah ada solusi yang lebih baik, atau saya harus tetap dengan ini?


mengajukan kembali pertanyaan SO
warren

2
Mungkin Anda ingin menggunakan udisk?
derobert

Saya tidak hanya ingin menemukan hard disk apa yang ada di sistem - Saya mencari semua perangkat penyimpanan
warren

Saya pikir kita semua mengasumsikan hard disk dan sejenisnya. Apakah Anda benar-benar bermaksud sesuatu yang lain? Seperti, haruskah itu termasuk tape drive, printer, dll?
derobert

2
@derobert - ya, maka judul "semua perangkat penyimpanan" :)
warren

Jawaban:


47

Jika seseorang hanya tertarik pada perangkat penyimpanan blok , seseorang dapat menggunakan lsblkdari paket util-linux yang tersedia secara luas:

$ 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

Itu cocok untuk scripting dengan banyak kolom lain yang tersedia.


13

Anda dapat menjelajah melalui output lshwdan mengekstrak detail tentang perangkat di kelas diskatau tape(dan mungkin yang lain - storagekelas memberi Anda rincian tentang pengontrol penyimpanan, scsi, sata, sas, dll).

misalnya

lshw -class disk -class tape

The -shortpilihan memberikan ringkasan kompak bagus. mis. di server zfsonlinux saya di rumah / workstation / kotak percobaan (sayangnya tidak ada perangkat tape):

# lshw -class tape -class disk -class storage -short
Jalur H / W Deskripsi Kelas Perangkat
================================================== =======
/ 0/100/4/0 penyimpanan JMB362 SATA Controller
/ 0/100/5/0 scsi10 storage JMB362 SATA Controller
/0/100/5/0/0.0.0 / dev / sdc disk 120GB Patriot Wildfire
/ 0/100 / b / 0 penyimpanan scsi1 SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon]
/0/100/b/0/0.0.0 / dev / sdd disk 1TB WDC WD10EARS-00Y
/0/100/b/0/0.1.0 / dev / sde disk 1TB WDC WD10EACS-00Z
/0/100/b/0/0.2.0 / dev / sdf disk 1TB WDC WD10EACS-00Z
/0/100/b/0/0.3.0 / dev / sdg disk 1TB ST31000528AS
/0/100/b/0/0.4.0 / dev / sdh disk 1TB ST31000528AS
/0/100/b/0/0.5.0 / dev / sdi disk 1TB ST31000528AS
/0/100/b/0/0.6.0 / dev / sdj disk 1TB ST31000528AS
/ 0/100/11 penyimpanan scsi2 SB7x0 / SB8x0 / SB9x0 Pengontrol SATA [mode AHCI]
/ 0/100/11/0 / dev / sda disk 128GB Patriot Torqx 2
/ 0/100/11/1 / dev / sdb disk 1TB ST31000528AS
/ 0/1 scsi11 penyimpanan     
/0/1/0.0.0 / dev / sdk disk 1967MB SCSI Disk
/0/1/0.0.1 / dev / sdl disk SCSI Disk
/0/1/0.0.2 / dev / sdm disk SCSI Disk
/0/1/0.0.3 / dev / sdn disk SCSI Disk
/ 0/2 scsi66 penyimpanan     
/0/2/0.0.0 / dev / sdo disk SCSI Disk
/ 0/3 scsi67 penyimpanan     
/0/3/0.0.0 / dev / sdp disk SC57 Disk 4057MB

Perangkat / 0/1 sebenarnya adalah pembaca kartu USB (ada kartu SD 2GB yang terhubung ke salah satu slot), dan perangkat / 0/2 adalah ponsel android saya yang terhubung hanya untuk pengisian daya. Perangkat 0/3 adalah USB flash drive 4GB.

lshwdapat menghasilkan teks biasa, html, xml, dan output json. Itu juga dapat membuang detail perangkat keras ke dalam format database sqlite.

Dikemas untuk debian dan sebagian besar distro lainnya. Halaman beranda dan sumbernya ada di http://ezix.org/project/wiki/HardwareLiSter


5

Tolong, coba perintah ini

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

Ini akan mencantumkan Anda semua perangkat blokir di sistem Anda


5

Anda dapat menggunakan lsblkuntuk mencantumkan semua perangkat blok, bersama dengan apakah setiap perangkat hanya dibaca atau tidak.

Anda kemudian dapat menggunakan grepdan awkuntuk mencetak nama-nama perangkat blok yang tidak hanya dibaca:

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

ini merupakan perluasan yang luar biasa dari jawaban
warren

4

lsblk akan mencantumkan semua perangkat penyimpanan blok.

fdisk -l akan mencantumkan semua partisi di semua perangkat yang terdaftar di /proc/partitions

lshw -short akan memberi Anda informasi tentang semua perangkat keras (kecuali mungkin firewire) pada sistem.


3

Jika, sesuai respons Anda terhadap derobert, Anda mencari sesuatu yang mencantumkan drive tape dan printer , Anda mungkin tertarik lsdev, lsusbdan lspci.


Tentu saja, itu akan gagal menemukan penyimpanan yang terhubung ke jaringan :-(
derobert

1
Kemudianfdisk -l
titik dua

2

Anda dapat mencoba perintah berikut:

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

1
apa fungsinya dan bagaimana itu dibandingkan dengan daftar blok dan tape kelas perangkat dengan lshw?
n611x007

2

Anda dapat menggunakan hwinfo untuk mendaftar semua disk ( dokumentasi ).

hwinfo --block --short memberikan gambaran:

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 memberikan lebih banyak detail untuk setiap disk.

FYI: pada beberapa distribusi Linux seperti Ubuntus 14.04 dan lebih tinggi, hwinfo tidak ada dalam repositori resmi .


0

Saya telah menemukan itu fdiskdan lsblktidak tersedia di terminal virtual untuk penginstal Debian. Dalam hal ini saya gunakan blkid, yang mendapat UUID untuk perangkat penyimpanan blok.


-1

Jika Anda bermaksud perangkat RAID maka Anda tidak akan bisa mendapatkan hasil yang benar menggunakan hdparm smartctl dll karena alat semacam ini mencari / dev yang merupakan tingkat OS jika Anda ingin tahu tentang Tingkat Hardware maka Anda perlu memiliki alat seperti megacli saya digunakan untuk debug dengan 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

Untuk mendapatkan nomor seri disk

[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

Dalam output di atas Data Permintaan berisi nomor seri


-1

Berikut adalah beberapa perintah yang saya gunakan untuk menemukan penyimpanan lokal dan bersama.

Untuk penyimpanan lokal

lsblk | grep -v '^loop'

Untuk penyimpanan bersama

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

OR

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

Mengapa menyarankan alat yang sama sudah disarankan (dan diterima) 6+ tahun yang lalu?
warren

Karena OS berubah dan sekarang Anda mendapatkan banyak loopdan tmpfspartisi. Jadi lebih baik untuk membersihkan output menggunakan grep seperti di atas.
Mian Asbat Ahmad

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.