3

bashを使用してハードドライブのさまざまなモデル名を取得したいと思います。

次のようにhwinfoを使用して、1つしかない場合はそれを実行できます。

hwinfo --ide|grep Model|sed -ne '/Model/s/.*Model: "\([^"]*\)".*/\1/p'

しかし、複数ある場合、これは明らかに失敗します。複数のハードドライブがある場合の通常のhwinfo出力の1つは、次のとおりです。

[faidoc@Delorean ~]$ hwinfo --ide
11: IDE 200.0: 10600 Disk                                       
  [Created at block.245]
  Unique ID: 3OOL.XFCtBh10jZ2
  Parent ID: qnJ_.3_X41NtKT36
  SysFS ID: /class/block/sda
  SysFS BusID: 2:0:0:0
  SysFS Device Link: /devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0
  Hardware Class: disk
  Model: "VBOX HARDDISK"
  Vendor: "VBOX"
  Device: "HARDDISK"
  Revision: "1.0"
  Serial ID: "VBfa9b1456-03d78f51"
  Driver: "ahci", "sd"
  Driver Modules: "ahci"
  Device File: /dev/sda
  Device Files: /dev/sda, /dev/disk/by-id/ata-VBOX_HARDDISK_VBfa9b1456-03d78f51
  Device Number: block 8:0-8:15
  BIOS id: 0x80
  Geometry (Logical): CHS 1305/255/63
  Size: 20971520 sectors a 512 bytes
  Capacity: 10 GB (10737418240 bytes)
  Config Status: cfg=new, avail=yes, need=no, active=unknown
  Attached to: #10 (SATA controller)

12: IDE 300.0: 10600 Disk
  [Created at block.245]
  Unique ID: WZeP.0xN7VsONW+D
  Parent ID: qnJ_.3_X41NtKT36
  SysFS ID: /class/block/sdb
  SysFS BusID: 3:0:0:0
  SysFS Device Link: /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0
  Hardware Class: disk
  Model: "VBOX HARDDISK"
  Vendor: "VBOX"
  Device: "HARDDISK"
  Revision: "1.0"
  Serial ID: "VB350f9911-48221ae2"
  Driver: "ahci", "sd"
  Driver Modules: "ahci"
  Device File: /dev/sdb
  Device Files: /dev/sdb, /dev/disk/by-id/ata-VBOX_HARDDISK_VB350f9911-48221ae2
  Device Number: block 8:16-8:31
  BIOS id: 0x81
  Geometry (Logical): CHS 2349/255/63
  Size: 37748736 sectors a 512 bytes
  Capacity: 18 GB (19327352832 bytes)
  Config Status: cfg=new, avail=yes, need=no, active=unknown
  Attached to: #10 (SATA controller)

すべてのドライブは、たとえば「11:」または「12:」で始まっているので、一度に1つずつ取得できれば、それが解決策になります。

何か案は?

ありがとう

4

3 に答える 3

3

あなたはで情報を得ることができます:

hdparm -i /dev/sda | grep -i model

または、モデル名だけが必要な場合:

hdparm -i /dev/sda | perl -n -e 'print "$1\n" if (m/model=(.+?),/i);'
于 2012-10-25T22:25:04.157 に答える
0

ここに役立つかもしれない簡単で汚いawk声明があります:

hwinfo --ide | awk '{ if($2=="IDE"){ide=$3} if($1=="Model:"){print "IDE " ide $0} }'

基本的に、各行の 2 番目の単語でパターン "IDE" を検索します。見つかった場合は、行の 3 番目の単語を「ide」という名前の変数に格納します。

次に、各行の最初の単語で "Model:" を検索します。見つかった場合は、以前に保存した IDE とモデル名を含む行全体を出力します。

そのため、出力に名前と IDE の場所が表示されます。

IDE 200.0:  Model: "VBOX HARDDISK"
IDE 300.0:  Model: "VBOX HARDDISK"

接続されているディスクの数に関係なく動作するはずです。

于 2012-10-25T22:45:10.967 に答える
0

どちらが必要かがわかっている場合、非常に簡単な方法は次のとおりですgrep -A8 -E '^11:'

hwinfo --ide|grep -A8 -E '^11:'|grep Model|sed -ne '/Model/s/.*Model: "\([^"]*\)".*/\1/p'

上の -A フラグはgrep、一致した行だけでなく、一致の「後」にある行もグラブします。

「前」の -B と「コンテキスト」の -C もあります。

于 2012-10-25T22:23:36.467 に答える