2010年6月22日 星期二

查看 Linux / Ubuntu 下的硬體資訊

參照這篇這篇的回答, 學到一些看硬體資訊的好工具。 serverfault.com 果然是系統管理員的好朋友啊。

dmidecode 超級好用, 而且 Linux 都可使用, 配合 -t 會只顯示細部資訊, 像是:
  • dmidecode -t processor: 明白是幾 CPU 幾 core, 有無 hyperthead。
  • dmidecode -t cache: 查詢 L1, L2, L3 cache 的大小。
  • dmidecode -t memory: 知道插了幾張 RAM 卡, 各張卡大小為何。
  • dmidecode -t slot: 查詢有那些插槽可用, 像是有幾個 PCI Express x16, 有幾個 PCI 32 bits 等。各個 slot 會顯示有無插卡。
  • dmidecode -t system: 主機的廠商。比方說買 Dell 的電腦, 可從這裡看到主機型號和序號。
  • dmidecode -t baseboard: 顯示 on-board 的設備, 像是網卡、音效卡之類的。
其它幾個被提到的指令有 lspci 和 lsusb, 和檔案 /proc/cpuinfo 和 /proc/meminfo。可以看到不同細節。lspci -vv 和 lspci -nn 不錯用。有人提到查 driver 時可配合它使用。之後有需求時再試吧。Ubuntu 另有 lshw 會顯示詳細資訊, 不過用 dmidecode 就解決我原本的疑問了, 沒有仔細試它。

待查事項: 
  • 目前還不知道要怎麼查那個 slot 上插的是什麼卡。比方說 dmidecode -t slot 顯示 PCI Express x16 和 x8 各插了一張卡, 而 lspci 會列出各張卡的詳細資訊。但是要怎麼知道那張槽是插那張卡呢?

2 則留言:

  1. 1. dmidecode 需要 root 權限來讀取 /dev/mem,在應用程式或 script 內建議改用 /sys/devices/virtual/dmi/id/board_vendor 等 kernel 提供虛擬檔案。(kernel 的 dmi decode 程式碼經過較多實戰考驗)

    2. Windows上, WMI 子系統提供的眾多 API 內:
    http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx
    有些可讀 dmi 資訊

    3. dmi 規格只有 x86 PC 才有實作:
    http://en.wikipedia.org/wiki/Desktop_Management_Interface
    譬如在 Intel Mac 或 IBM 的 PPC server 上面有別的 API 可讀等價資訊 (EFI(?),Open Firmware等)。ARM 或 MIPS embedded device 差異大。

    4. dmidecode -t slot 有列出 PCI bus address (形如:domain:bus:slot:function):
    Bus Address: 0000:00:1c.0
    傳給 lspci 即可:
    lspci -s 0000:00:1c.0
    00:1c.0 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 1 (rev 06)

    回覆刪除
  2. 喔喔, 多謝提供相關資訊, 看來讀硬體資訊仍無統一簡單的好方法。

    1.
    官網和 man page 也有提到 dmidecode 錯的情況比對的情況多。不過大廠如 IBM、Dell 的支援好像比較好, 至少在我用的 Dell 機器上看來沒問題。

    我看了一下 /sys/devices/virtual/dmi/id/ 下的檔案, 在我的機器上內容和 dmidecode 輸出相同, 權限管理方面, 重要的資訊如序號則需要 root 權限才能讀。

    4.
    可惜我用的情況 dmidecode -t slot 沒輸出 bus address。

    回覆刪除

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...