101.1 レッスン 1
Certificate: |
LPIC-1 |
---|---|
Version: |
5.0 |
Topic: |
101 システムアーキテクチャ |
Objective: |
101.1 ハードウェア設定の決定と構成 |
Lesson: |
1 of 1 |
はじめに
コンピュータ黎明期から、ビジネスコンピュータやパーソナルコンピュータのメーカーは、さまざまなハードウェアパーツをマシンに組み込んできました。そして、オペレーティングシステムはそれらのパーツをサポートする必要がありました。しかし、オペレーティングシステム開発者にとっては、命令セットやデバイス通信の業界での標準が確立されない限り、これらのサポートはとても困難なものでした。オペレーティングシステムは、アプリケーションに提供する標準化された抽象化レイヤーと同様に、ハードウェアが標準化されることによって、特定のハードウェアモデルに限定されないシステムの作成と保守が容易になりました。ただし、統合された基盤となるハードウェアの複雑さによっては、正常にインストールして正しく機能させるために、オペレーティングシステムの公開について調整する必要があります。
これらの調整の一部は、オペレーティングシステムがインストールされていなくても実行できます。ほとんどのマシンでは、マシンの電源を入れたときに実行できる構成ユーティリティがあります。2000年代半ばまで、構成ユーティリティとしてはBIOS(Basic Input/Output System :バイオス)が実装されていました。これは、x86マザーボードにある基本的な構成機能を含む標準化されたファームウェアです。2000年代の初めから10年間かけて、x86アーキテクチャに基づくマシンは、BIOSをUEFI(Unified Extensible Firmware Interface)と呼ばれる新しい実装に置き換え始めました。UEFIは、(ハードウェアの)識別、テスト、構成、およびファームウェアのアップグレードのためのより高度な機能を備えています。この大きな変化にもかかわらず、どちらの実装も同じ基本的な機能を満たしているので、未だにどちらもBIOSと呼ぶことが珍しくありません。
Note
|
BIOSとUEFIの類似点と相違点の詳細については、後のレッスンで説明します。 |
デバイスのアクティベーション
システム構成ユーティリティは、コンピュータの電源を入れたときに、特定のキーを押すと表示されます。どのキーを押すかはメーカーによって異なりますが、通常はDelか、F2やF12などのファンクションキーです。使用するキーの組み合わせは、電源を入れた時に画面に表示されることが多くなっています。
BIOSセットアップユーティリティでは、認識している周辺機器の有効化と無効化、自己診断プログラムの実行、IRQ(割り込み要求)やDMA(ダイレクトメモリアクセス)などのハードウェア設定の変更が可能です。最近のマシンではこれらの設定を変更する必要はほとんどありませんが、特定の問題に対処するために調整が必要になる場合があります。たとえば、デフォルト値よりも速いデータ転送速度と互換性のあるRAMテクノロジを利用するために、(RAMの)製造元が指定した値に変更すると良いでしょう。一部のCPUには、特定のオペレーティングシステムでは必要とされない機能を備えており、それを無効化する機能を(BIOSが)提供します。無効にした機能は、既知のバグを含むCPU機能も無効にできるため、消費電力を削減し、システムの保護を強化できます。
マシンに多くのストレージデバイスが装備されている場合、ブートローダーが格納されているストレージデバイスを、ブート順序リストの一番最初のエントリとして定義することが重要です。間違ったデバイスをブート順序リストに指定すると、オペレーティングシステムがロードされない場合があります。
Linuxでのデバイス検査
正しく識別されたデバイスとそれに必要となるソフトウェアコンポーネントを関連付けるのは、オペレーティングシステムの役割です。ハードウェアが期待どおりに機能しない場合は、問題が発生している箇所を正確に特定することが重要です。一部のハードウェアがオペレーティングシステムによって検出されない場合、そのパーツ(またはそれが接続されているポート)に欠陥がある可能性があります。ハードウェアパーツが正しく検出されても正常に動作しない場合は、オペレーティングシステム側に問題がある可能性があります。したがって、ハードウェア関連の問題に対処する際の最初のステップの1つは、オペレーティングシステムがデバイスを正しく検出しているかどうかを確認することです。 Linuxシステムでハードウェアリソースを識別する基本的な方法が2つあります。特殊なコマンドを使用する方法と、特殊なファイルシステムから特定のファイルを読み出す方法です。
調査のためのコマンド
Linuxシステムにおいて、接続されているデバイスを識別するための2つの重要なコマンドがあります:
lspci
-
PCI(Peripheral Component Interconnect)バスに現在接続されているすべてのデバイスを表示します。 PCIデバイスには、ディスクコントローラのようにマザーボードに接続されたコンポーネントと、外部グラフィックカードのようにPCIスロットに取り付けられた拡張カードがあります。
lsusb
-
現在マシンに接続されているUSB(Universal Serial Bus)デバイスを一覧表示します。USB機器にはあらゆる機能を実現するものが存在しますが、主には入力デバイス(キーボード、ポインティングデバイス)やリムーバブルストレージメディアを接続するために使用されます。
コマンド lspci
および lsusb
は、オペレーティングシステムによって識別されたすべてのPCIおよびUSBデバイスのリストを出力します。ただし、すべてのハードウェアパーツには、対応するデバイスを制御するためのソフトウェアコンポーネントが必要であるため、デバイスはまだ完全に動作していない可能性があります。このソフトウェアコンポーネントは kernel module と呼ばれ、公式のLinuxカーネルの一部である場合も、他のソースから追加される場合もあります。
ハードウェアデバイスに関係するLinuxカーネルモジュールは、他のオペレーティングシステムと同様に ドライバ とも呼ばれます。ただし、Linux用のドライバは、デバイスの製造元から提供されるとは限りません。一部のメーカーは個別にインストールする独自のバイナリドライバを提供していますが、多くのドライバは独立した開発者によって作成されています。例えば、以前はWindowsで動作するパーツに、Linux用のドライバがない場合がありましたが、現在では、Linuxベースのオペレーティングシステムは強力なハードウェアサポートを備えており、ほとんどのデバイスが簡単に動作します。
ハードウェアに直接関連するコマンドは、実行するためにroot権限を必要とします。ユーザー権限で実行した時には限られた情報しか表示しないことが多いため、rootとしてログインするか、 sudo
を使用してコマンドを実行する必要があります。
たとえば、コマンド lspci
の次の例は、いくつかの識別されたデバイスを示しています。
$ lspci 01:00.0 VGA compatible controller: NVIDIA Corporation GM107 [GeForce GTX 750 Ti] (rev a2) 04:02.0 Network controller: Ralink corp. RT2561/RT61 802.11g PCI 04:04.0 Multimedia audio controller: VIA Technologies Inc. ICE1712 [Envy24] PCI Multi-Channel I/O Controller (rev 02) 04:0b.0 FireWire (IEEE 1394): LSI Corporation FW322/323 [TrueFire] 1394a Controller (rev 70)
コマンド lspci
の出力は数十行になる可能性があるため、前の例と次の例には表示の一部を示しています。各行の先頭にある16進数は、対応するPCIデバイスの一意のアドレスです。コマンド lspci
に、-s
オプションとPCIアドレス、-v
オプション を指定すると、特定のデバイスに関する詳細な情報を表示します。
$ lspci -s 04:02.0 -v 04:02.0 Network controller: Ralink corp. RT2561/RT61 802.11g PCI Subsystem: Linksys WMP54G v4.1 Flags: bus master, slow devsel, latency 32, IRQ 21 Memory at e3100000 (32-bit, non-prefetchable) [size=32K] Capabilities: [40] Power Management version 2 kernel driver in use: rt61pci
アドレス 04:02.0
にあるデバイスの詳細が出力されました。デバイス名が Ralink corp. RT2561/RT61 802.11g PCI
のネットワークコントローラです。 Subsystem
は、デバイスのブランドとモデル — Linksys WMP54G v4.1
— を示しており、診断の際に役立ちます。
kernel driver in use
の行で、対応するカーネルモジュール rt61pci
が分かります。表示された情報から、以下の事柄が分かります:
-
デバイスが識別されました。
-
一致するカーネルモジュールがロードされました。
-
デバイスは使用できる状態になっているようです。
指定されたデバイスでどのカーネルモジュールが使用されているかを確認する別の方法は、オプション -k
です。これは、 lspci
の最新バージョンで使用できます。
$ lspci -s 01:00.0 -k 01:00.0 VGA compatible controller: NVIDIA Corporation GM107 [GeForce GTX 750 Ti] (rev a2) kernel driver in use: nvidia kernel modules: nouveau, nvidia_drm, nvidia
選択したデバイスであるNVIDIA GPUボードの場合、lspci
は、行 kernel driver in use: nvidia
に、使用中のモジュールの名前が nvidia
であることを示し、行 kernel modules: nouveau, nvidia_drm, nvidia
に、関連するすべてのカーネルモジュールをリスト表示します。
コマンド lsusb
は lspci
に似ていますが、PCIではなくUSBの情報をリスト表示します。
$ lsusb Bus 001 Device 029: ID 1781:0c9f Multiple Vendors USBtiny Bus 001 Device 028: ID 093a:2521 Pixart Imaging, Inc. Optical Mouse Bus 001 Device 020: ID 1131:1001 Integrated System Solution Corp. KY-BT100 Bluetooth Adapter Bus 001 Device 011: ID 04f2:0402 Chicony Electronics Co., Ltd Genius LuxeMate i200 Keyboard Bus 001 Device 007: ID 0424:7800 Standard Microsystems Corp. Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
コマンド lsusb
は、使用可能なUSBチャネルとそれらに接続されているデバイスを表示します。 lspci
と同様に、-v
オプションはより詳細な情報を出力します。-d
オプションにIDを指定することにより、検査対象のデバイスを指定します。
$ lsusb -v -d 1781:0c9f Bus 001 Device 029: ID 1781:0c9f Multiple Vendors USBtiny Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.01 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x1781 Multiple Vendors idProduct 0x0c9f USBtiny bcdDevice 1.04 iManufacturer 0 iProduct 2 USBtiny iSerial 0 bNumConfigurations 1
-t
オプションを使用すると、コマンド lsusb
は現在のUSBデバイスマッピングを階層ツリーとして表示します。
$ lsusb -t /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/3p, 480M |__ Port 2: Dev 11, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 11, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 3: Dev 20, If 0, Class=Wireless, Driver=btusb, 12M |__ Port 3: Dev 20, If 1, Class=Wireless, Driver=btusb, 12M |__ Port 3: Dev 20, If 2, Class=Application Specific Interface, Driver=, 12M |__ Port 1: Dev 7, If 0, Class=Vendor Specific Class, Driver=lan78xx, 480M |__ Port 2: Dev 28, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 3: Dev 29, If 0, Class=Vendor Specific Class, Driver=, 1.5M
すべてのデバイスに、対応するモジュールが関連付けられているとは限りません。ある種のデバイスでは、モジュールの仲介なしで、アプリケーションが直接デバイスと通信することができます。とはいえ、 lsusb -t
の出力には重要な情報があります。一致するモジュールが存在する場合、その名前が Driver=btusb
のようにデバイス行の最後に表示されます。デバイス Class
行には、Human Interface Device
、Wireless
、Vendor Specific Class
、Mass Storage
などの一般的なカテゴリが表示されます。前のリストにあるモジュール btusb
を使用しているデバイスを確認するには、 lsusb
コマンドの -s
オプションに Bus
と Dev
の両方の番号を指定します。
$ lsusb -s 01:20 Bus 001 Device 020: ID 1131:1001 Integrated System Solution Corp. KY-BT100 Bluetooth Adapter
標準的なLinuxシステムには、大量のカーネルモジュールがロードされているのが一般的です。kmod
パッケージによって提供されるコマンドを使用すると、それらを調べることができます。このパッケージは、Linuxカーネルモジュールに対する、追加、削除、表示、プロパティの確認、依存関係やエイリアスの解決など、一般的なタスクを処理するツールのセットです。たとえば、 lsmod
コマンドは、現在ロードされているすべてのモジュールを表示します。
$ lsmod Module Size Used by kvm_intel 138528 0 kvm 421021 1 kvm_intel iTCO_wdt 13480 0 iTCO_vendor_support 13419 1 iTCO_wdt snd_usb_audio 149112 2 snd_hda_codec_realtek 51465 1 snd_ice1712 75006 3 snd_hda_intel 44075 7 arc4 12608 2 snd_cs8427 13978 1 snd_ice1712 snd_i2c 13828 2 snd_ice1712,snd_cs8427 snd_ice17xx_ak4xxx 13128 1 snd_ice1712 snd_ak4xxx_adda 18487 2 snd_ice1712,snd_ice17xx_ak4xxx microcode 23527 0 snd_usbmidi_lib 24845 1 snd_usb_audio gspca_pac7302 17481 0 gspca_main 36226 1 gspca_pac7302 videodev 132348 2 gspca_main,gspca_pac7302 rt61pci 32326 0 rt2x00pci 13083 1 rt61pci media 20840 1 videodev rt2x00mmio 13322 1 rt61pci hid_dr 12776 0 snd_mpu401_uart 13992 1 snd_ice1712 rt2x00lib 67108 3 rt61pci,rt2x00pci,rt2x00mmio snd_rawmidi 29394 2 snd_usbmidi_lib,snd_mpu401_uart
コマンド lsmod
の出力は、次の3つのカラムに分かれています。
Module
-
モジュール名
Size
-
モジュールが占有するRAMの量。(バイト単位)
Used by
-
依存するモジュール。
以下に示すオーディオデバイスなど一部のモジュールでは、正しく動作するために別のモジュールを必要とします。
$ lsmod | fgrep -i snd_hda_intel snd_hda_intel 42658 5 snd_hda_codec 155748 3 snd_hda_codec_hdmi,snd_hda_codec_via,snd_hda_intel snd_pcm 81999 3 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel snd_page_alloc 13852 2 snd_pcm,snd_hda_intel snd 59132 19 snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_hda_codec_via,snd_pcm,snd_seq,snd_hda_codec,snd_hda_intel,snd_seq_device
3番目のカラム Used by
は、最初のカラムのモジュールが正しく機能するために必要なモジュールを示しています。接頭辞 snd
が付いたLinuxサウンドアーキテクチャの多くのモジュールは相互に依存しています。システムに発生している問題を探すときは、現在ロードされているいずれかのモジュールをアンロードすると便利な場合があります。modprobe
コマンドは、カーネルモジュールのロードとアンロードの両方に使用できます。モジュールとその関連モジュールをアンロードするには、コマンド modprobe -r
を使用しますが、実行中のプロセスがモジュールを使用している場合にはエラーになります。たとえば、モジュール snd-hda-intel
(HDA Intelオーディオデバイス用のモジュール)と、サウンドシステムに関連するその他のモジュールをアンロードするには、次のようにします。
# modprobe -r snd-hda-intel
modprobe
コマンドは、システムの実行中にカーネルモジュールをロードおよびアンロードするだけでなく、カーネルのロード時にモジュールのパラメータを変更することができます。これは、コマンドにオプションを渡すこととそれほど変わりません。各モジュールは所定のパラメータを受け入れますが、ほとんどの場合はデフォルト値が推奨され、追加のパラメータは必要ありません。ただし、場合によっては、パラメータを使用してモジュールの動作を変更し、適切に機能させる必要があります。
コマンド modinfo
にモジュール名のみを引数として与えると、指定されたモジュールの説明、ファイル、作成者、ライセンス、ID、依存関係、および使用可能なパラメータを表示します。モジュールをカスタマイズするパラメータを永続化するには、ファイル /etc/modprobe.conf
またはディレクトリ /etc/modprobe.d/
にある接尾辞 .conf
の個々のファイルに記入します。-p
オプションを指定すると、modinfo
コマンドは使用可能なすべてのパラメータを表示して終了します(何もしません)。
# modinfo -p nouveau vram_pushbuf:Create DMA push buffers in VRAM (int) tv_norm:Default TV norm. Supported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J, hd480i, hd480p, hd576i, hd576p, hd720p, hd1080i. Default: PAL NOTE Ignored for cards with external TV encoders. (charp) nofbaccel:Disable fbcon acceleration (int) fbcon_bpp:fbcon bits-per-pixel (default: auto) (int) mst:Enable DisplayPort multi-stream (default: enabled) (int) tv_disable:Disable TV-out detection (int) ignorelid:Ignore ACPI lid status (int) duallink:Allow dual-link TMDS (default: enabled) (int) hdmimhz:Force a maximum HDMI pixel clock (in MHz) (int) config:option string to pass to driver core (charp) debug:debug string to pass to driver core (charp) noaccel:disable kernel/abi16 acceleration (int) modeset:enable driver (default: auto, 0 = disabled, 1 = enabled, 2 = headless) (int) atomic:Expose atomic ioctl (default: disabled) (int) runpm:disable (0), force enable (1), optimus only default (-1) (int)
上記のサンプル例は、NVIDIA GPUカードのプロプラエタリなドライバーの代わりになる Nouveau Project が提供するカーネルモジュールである nouveau
で使用可能なすべてのパラメータを示しています。たとえば、オプション modeset
を使用すると、ディスプレイの解像度と深度をユーザー空間ではなくカーネル空間に設定することができます。ファイル /etc/modprobe.d/nouveau.conf
に options nouveau modeset=0
を追加すると、カーネルによるモード設定が無効になります。
モジュールが問題を引き起こしている場合は、ファイル /etc/modprobe.d/blacklist.conf
を使用してモジュールのロードを禁止できます。たとえば、モジュール nouveau
が自動的にロードされることを防ぐには、ファイル /etc/modprobe.d/blacklist.conf
に行 blacklist nouveau
を追加します。システムに(プロプラエタリナな)専用モジュール nvidia
がインストールされており、デフォルトモジュールである nouveau
を無効にする場合には、この操作を行います。
Note
|
システムにすでに存在するデフォルトの |
カーネル情報ファイルとデバイスファイル
コマンド lspci
、lsusb
、および lsmod
は、オペレーティングシステムが認識しているハードウェア情報を読み取るためのフロントエンドとして機能します。この種の情報は、ディレクトリ /proc
および /sys
内の特別なファイルに保存されます。これらのディレクトリはディスク上には存在せず、カーネルが使用するメモリ上に作成される、疑似的なファイルシステムへのマウントポイントです。このようなファイルシステムは疑似ファイルシステムと呼ばれ、ストレージ上に保存されることはなく、システムの実行中にのみ存在します。 /proc
ディレクトリには、実行中のプロセスとハードウェアリソースに関する情報を含むファイルが含まれています。ハードウェアを検査するための /proc
内の重要なファイルには次のようなものがあります:
/proc/cpuinfo
-
オペレーティングシステムによって検出されたCPUに関する詳細情報。
/proc/interrupts
-
CPU毎のIOデバイスが使用する割り込み番号のリスト。
/proc/ioports
-
現在登録されている入出力ポート領域のリスト。
/proc/dma
-
使用中の登録済みDMA(ダイレクトメモリアクセス)チャネルのリスト。
/sys
ディレクトリ内のファイルは、/proc
内のファイルと同様の役割を持っています。ただし、/sys
ディレクトリはハードウェアに関連するデバイス情報とカーネルデータを格納するという目的に特化しており、/proc
ディレクトリは実行中のプロセスとさまざまなカーネルの構成データに関する情報も含んでいます。
標準的なLinuxシステムにおいて、デバイスに直接関連するもう1つのディレクトリに /dev
があります。 /dev
内のすべてのファイルは、システムデバイス、特にストレージデバイスに関連付けられています。たとえば、マザーボードの最初のIDEチャネルに接続されているレガシーIDEハードドライブは、ファイル /dev/hda
で表されます。このディスク内のすべてのパーティションは、/dev/hda1
、/dev/hda2
のように(末尾の数字で)表されます。
リムーバブルデバイスは udev サブシステムによって処理されて、それぞれに対応するデバイスが /dev
に作成されます。Linuxカーネルはハードウェアイベントを検出して、udevプロセスに引き渡します。その後、udevプロセスはデバイスを識別し、事前定義されたルールを使ってデバイスに対応するファイルを /dev
に動的に作成します。
現在のほとんどのLinuxディストリビューションでは、電源投入時にすでに存在するデバイス(coldplug)と、システムの実行中に追加されるデバイス(hotplug)の識別と構成をudevが担当します。 Udevは、/sys
にマウントされたハードウェア関連情報の疑似ファイルシステムである SysFS を利用しています。
Note
|
ホットプラグは、USBデバイスが挿入されたときなど、システムの実行中のデバイスの検出と構成を意味する用語です。バージョン2.6以降のLinuxカーネルはホットプラグをサポートしており、ほとんどのシステムバス(PCI、USBなど)がデバイスの接続または切断時にホットプラグイベントを生成できるようになっています。 |
新しいデバイスが検出されると、udevはディレクトリ /etc/udev/rules.d/
に保存されている事前定義されたルールから一致するものを検索します。ほとんどの重要なルールはディストリビューションに含まれていますが、新しいルールを追加することもできます。
ストレージデバイス
デバイスから読み取られたブロック単位のデータを、さまざまなサイズや位置のバッファを経由して読み書きすることから、Linuxではストレージデバイスをブロックデバイスと呼びます。すべてのブロックデバイスは、 /dev
ディレクトリ内のファイルに関連付けられており、そのファイルの名前はデバイス種別(IDE、SATA、SCSIなど)とそのパーティションを示します。たとえば、CD/DVDやフロッピーディスクは /dev
内のファイルに関連付けられます。2番目のIDEチャネルに接続されたCD/DVDドライブは /dev/hdc
に関連付けられます。(/dev/hda
と /dev/hdb
は最初のIDEチャネルのマスターデバイスとスレーブデバイス用に予約されています)。古いフロッピーディスクは /dev/fd0
、/dev/fd1
などに関連付けられます。
Linuxカーネルバージョン2.4以降、ほとんどのストレージデバイスは、ハードウェア種別に関係なく、SCSIデバイスであるかのように表記されるようになりました。 IDE、SSD、およびUSBブロックデバイスのプレフィックスは sd
になります。 IDEディスクの場合も sd
プレフィックスが使用されますが、ドライブがマスターかスレーブかによって3番目の文字が選択されます(最初のIDEチャネルでは、マスターは sda
、スレーブは sdb
になります)。パーティションは数値で表記されます。最初に見つけたブロックデバイスの1番目と2番目のパーティションには /dev/sda1
と /dev/sda2
が使用され、2番目に見つけたブロックデバイスの1番目と2番目のパーティションには /dev/sdb1
、/dev/sdb2
が使われます。このパターンの例外は、メモリカード(SDカード)とNVMeデバイス(PCI Expressバスに接続されたSSD)です。SDカードの場合、最初に見つけたデバイスの1番目と2番目のパーティションに /dev/mmcblk0p1
と /dev/mmcblk0p2
が使用され、2番目に見つけたデバイスの1番目と2番目のパーティションに /dev/mmcblk1p1
と /dev/mmcblk1p2
が使われます。NVMeデバイスは、/dev/nvme0n1p1
や /dev/nvme0n1p2
のように、プレフィックス nvme
を使います。
演習
-
システムに2番目のSATAディスクを追加した後、オペレーティングシステムが起動できないとします。すべての部品に欠陥がないことをが判明している場合、このエラーの原因は何でしょうか?
-
新しく購入したデスクトップコンピュータのPCIバスに接続されている外部ビデオカードが、実際に製造元によって宣伝されているものであることを確認したいが、コンピュータケースを開くと保証が無効になるとします。オペレーティングシステムによって検出されたビデオカードの詳細を一覧表示するには、どのコマンドを使用しますか?
-
次の行は、コマンド
lspci
によって生成される出力の一部です。03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2208 [Thunderbolt] (rev 05)
このデバイスで使用されているカーネルモジュールを調べるコマンドは何ですか?
-
システム管理者は、
bluetooth
カーネルモジュールのさまざまなパラメータを、システムを再起動せずに試してみたいと考えています。しかしながら、modprobe -r bluetooth
を使用してモジュールをアンロードしようとすると、次のエラーが発生します。modprobe: FATAL: Module bluetooth is in use.
このエラーの原因として考えられることは何ですか?
発展演習
-
時代遅れの接続方法で制御コンピューターと通信する装置など、実稼働環境でレガシーマシンを見つけることは珍しくありません。そういった古いマシンには、特別な注意を払う必要がある特徴があります。たとえば、古いBIOSファームウェアを搭載した一部のx86サーバーは、キーボードが検出できない場合は起動しません。このような問題を回避する方法は何でしょう?
-
ARMアーキテクチャに基づくシングルボードコンピュータなど、x86以外のさまざまなコンピュータアーキテクチャでも、Linuxカーネルを中心に構築されたオペレーティングシステムを利用できます。注意深いユーザーは、Raspberry Piのようなマシンには
lspci
コマンドがないことに気付くでしょう。x86マシンとの違いは何でしょうか? -
多くのネットワークルーターには、USBハードドライブなどの外部デバイスの接続を可能にするUSBポートがあります。これらのほとんどはLinuxベースのオペレーティングシステムを使用していますが、ルーターに一般的なブロックデバイスが存在しない場合に、外付けUSBハードドライブは
/dev/
ディレクトリでどのように名付けられますか? -
2018年に、Meltdown というハードウェアの脆弱性が発見されました。これは、多くのアーキテクチャのほぼすべてのプロセッサに影響します。 最近のバージョンのLinuxカーネルは、使用中のシステムに脆弱性があるか否かを通知できます。どうするとこの情報を得ることができますか?
まとめ
このレッスンでは、主にx86アーキテクチャにおいてLinuxカーネルがハードウェアリソースを扱う方法に関する一般的な概念を説明しました。このレッスンでは、次のトピックを取り上げました:
-
BIOSないしUEFI構成ユーティリティでの設定が、オペレーティングシステムがハードウェアを扱う方法にどのような影響を与えるか。
-
標準的なLinuxシステムに備わったツールを使用して、ハードウェアに関する情報を取得する方法。
-
ファイルシステム内で、固定的な記憶装置と取り外し可能な記憶装置を識別する方法。
以下のコマンドと手順を取り上げました:
-
検出されたハードウェアを調査するコマンド:
lspci
とlsusb
。 -
カーネルモジュールを管理するコマンド:
lsmod
とmodprobe
。 -
ハードウェアに関連する特殊ファイル:
/dev/
ディレクトリと、疑似ファイルシステム/proc/
と/sys/
にあるファイル。
演習の解答
-
システムに2番目のSATAディスクを追加した後、オペレーティングシステムが起動できないとします。すべての部品に欠陥がないことをが判明している場合、このエラーの考えられる原因は何でしょうか?
BIOSセットアップユーティリティで、ブートデバイスの順序を設定します。設定しないとBIOSがブートローダーを実行できないことがあります。
-
新しく購入したデスクトップコンピュータのPCIバスに接続されている外部ビデオカードが、実際に製造元によって宣伝されているものであることを確認したいが、コンピュータケースを開くと保証が無効になるとします。オペレーティングシステムによって検出されたビデオカードの詳細を一覧表示するには、どのコマンドを使用しますか?
lspci
コマンドで、PCIバスに接続されているすべてのデバイスに関する詳細情報を一覧表示します。 -
次の行は、コマンド
lspci
によって生成される出力の一部です。03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 2208 [Thunderbolt] (rev 05)
このデバイスで使用されているカーネルモジュールを調べるコマンドは何ですか?
lspci -s 03:00.0 -v
ないしlspci -s 03:00.0 -k
コマンド -
システム管理者は、
bluetooth
カーネルモジュールのさまざまなパラメータを、システムを再起動せずに試してみたいと考えています。しかしながら、modprobe -r bluetooth
を使用してモジュールをアンロードしようとすると、次のエラーが発生します。modprobe: FATAL: Module bluetooth is in use.
このエラーの原因として考えられることは何ですか?
モジュール
bluetooth
が、実行中のプロセスによって使用されている。
発展演習の解答
-
時代遅れの接続方法で制御コンピューターと通信する装置など、実稼働環境でレガシーマシンを見つけることは珍しくありません。そういった古いマシンには、特別な注意を払う必要がある特徴があります。たとえば、古いBIOSファームウェアを搭載した一部のx86サーバーは、キーボードが検出できない場合は起動しません。このような問題を回避する方法は何でしょう?
BIOS構成ユーティリティで、キーボードが見つからない場合にコンピュータをロックする、というオプションを無効にします。
-
ARMアーキテクチャに基づくシングルボードコンピュータなど、x86以外のさまざまなコンピュータアーキテクチャでも、Linuxカーネルを中心に構築されたオペレーティングシステムを利用できます。注意深いユーザーは、Raspberry Piのようなマシンには
lspci
コマンドがないことに気付くでしょう。x86マシンとの違いは何でしょうか?多くのx86マシンとは異なり、Raspberry PiのようなARMベースのコンピューターにはPCIバスがないので、
lspci
コマンドは無意味です。 -
多くのネットワークルーターには、USBハードドライブなどの外部デバイスの接続を可能にするUSBポートがあります。これらのほとんどはLinuxベースのオペレーティングシステムを使用していますが、ルーターに一般的なブロックデバイスが存在しない場合に、外付けUSBハードドライブは
/dev/
ディレクトリでどのように名付けられますか?最新のLinuxカーネルはUSBハードドライブをSATAデバイスとして扱います。したがって、ブロックデバイスがシステムに存在しない場合には、USBドライブに対応するファイルは
/dev/sda
になります。 -
2018年に、Meltdown というハードウェアの脆弱性が発見されました。これは、多くのアーキテクチャのほぼすべてのプロセッサに影響します。 最近のバージョンのLinuxカーネルは、使用中のシステムに脆弱性があるか否かを通知できます。どうするとこの情報を得ることができますか?
/proc/cpuinfo
ファイルには、bugs:cpu_meltdown
のように、対応するCPUの既知のバグを示す行があります。