Skip to content

101 Sys archit.#

ハードウェア設定の決定と設定#

D-Bus#

  • D-Bus(Desktop Bus)は、プログラム同士が情報を伝達するプロセス間通信機構のひとつ。
  • Linuxではdbus-daemonなどがプロセス間通信の中継を行う。

modprobe#

  • modprobe は依存関係を考慮してカーネルモジュールをロードまたはアンロードするコマンド。
  • modprobeの設定ファイルは「/etc/modprobe.d/」ディレクトリ配下の .conf の拡張子ファイル。
  • modprobeの設定ファイルには主に次のような設定を記述する。
  • options: 各カーネルモジュールのデフォルトパラメータを指定する
  • alias: カーネルモジュールに別名をつける
  • install: 特定のカーネルモジュールのロード時に実行されるコマンドを指定する
  • remove: 特定のカーネルモジュールのアンロード時に実行されるコマンドを指定する
  • blacklist: ロードしたくないカーネルモジュールを指定する
  • 参考:
    root@ubuntu:/etc/modprobe.d# ls -l 
    total 40
    -rw-r--r-- 1 root root 2507 Jul 30  2015 alsa-base.conf
    -rw-r--r-- 1 root root  154 Feb 15  2020 amd64-microcode-blacklist.conf
    -rw-r--r-- 1 root root  325 Mar 12  2020 blacklist-ath_pci.conf
    -rw-r--r-- 1 root root 1518 Mar 12  2020 blacklist.conf
    -rw-r--r-- 1 root root  210 Mar 12  2020 blacklist-firewire.conf
    -rw-r--r-- 1 root root  677 Mar 12  2020 blacklist-framebuffer.conf
    -rw-r--r-- 1 root root  156 Jul 30  2015 blacklist-modem.conf
    lrwxrwxrwx 1 root root   41 Nov  2 17:41 blacklist-oss.conf -> /lib/linux-sound-base/noOSS.modprobe.conf
    -rw-r--r-- 1 root root  583 Mar 12  2020 blacklist-rare-network.conf
    -rw-r--r-- 1 root root  154 Nov 11  2020 intel-microcode-blacklist.conf
    -rw-r--r-- 1 root root  347 Mar 12  2020 iwlwifi.conf
    

USB_device_class#

  • USBデバイスはいくつかのデバイスクラス(種類)に分かれている
  • それぞれのデバイスクラスにはクラスドライバという汎用ドライバが用意されている。
デバイスクラス デバイス
HID(Human Interface Device) キーボード、マウスなど
MassStorage Class ハードディスク、USBメモリーなど
ACM Communication Devie Class モデム、TA(ターミナルアダプタ)など
Audio Class スピーカー、マイクなど

udev(Userspace_DEVice_management)#

  • ホットプラグデバイスの制御はudevによって行われる。
  • udevが使用するデバイス設定情報ファイルは「/etc/udev/rules.d」に配下に格納されている。
  • カーネルはデバイスを検知すると「/sys」配下(sysfsと呼ばれます)の情報を更新しますが、その更新をudevが検知し、/dev以下にデバイスファイルを動的に作成する。
  • デバイスファイル作成時の動作は、「/etc/udev/rules.d」ディレクトリに配置された設定ファイル(拡張子「.rules」)に記述された情報に基づいて行われる。
  • 周辺機器(デバイス)にはコールドプラグデバイスホットプラグデバイスの2つがあります。
  • コールドプラグデバイス
  • システムが停止している状態でのみデバイスの差し替えができるデバイスのことです。システムは起動時にデバイスを認識します。
  • コールドプラグデバイスにはネットワークカード(NIC)などがあります。
  • ホットプラグデバイス
  • システムが起動している状態でもデバイスの差し替えができるデバイスのことです。これらはプラグアンドプレイデバイスとも呼ばれます。
  • ホットプラグデバイスにはUSBやPCカード(PCMCIA)、IEEE1394などがあります。

mass_storage_device#

  • 大量のデータのための記憶装置を「大容量記憶装置(mass storage device)」といいます。OSをインストールして起動ディスクとして使用したり、大容量のデータを保管するために使用
  • 大容量記憶装置の主な種類は以下
  • HDD(Hard Disk Drive)
  • USBフラッシュドライブ(いわゆるUSBメモリ)
  • SSD(Solid State Drive)

設定ファイル・ディレクトリ#

homeディレクトリ#

一般ユーザのホームディレクトリが格納されるディレクト

devディレクトリ#

ハードウェアへのアクセスを抽象化したファイル「デバイスファイル」が格納されているディレクトリ

etcディレクトリ#

システムの設定ファイルなどが格納されているディレクトリ

sbinディレクトリ#

管理用コマンドが格納されているディレクトリ

procディレクトリ#

  • 起動中のプロセスやカーネルが認識しているハードウェアおよびシステムリソースなどの情報が格納されているディレクトリ
  • 以下は「/proc」ディレクトリ配下にある主なファイル。
ファイル名 説明
interrupts IRQに関する情報
ioports I/Oアドレスの情報
**bus/pci/devices ** PCI (Peripheral Components Interconnect) デバイスに関する情報
bus/usb/devices USBデバイスに関する情報
meminfo メモリに関する情報
cpuinfo CPUに関する情報
dma 使用中のDMAチャネルに関する情報
modules ロードされているカーネルモジュールに関する情報
scsi/scsi SCSIデバイスに関する情報

lspciコマンド#

  • lspciコマンド はPCIデバイスに関する情報を表示します。
  • PCI(Peripheral Components Interconnect)デバイスとはPCIバスに接続されたデバイスのことです。
  • PCIデバイスにはネットワークカード(NIC:Network Interface Card)やSCSIカードなどがある
  • lspciコマンドを「-v」オプションをつけて実行すると各PCIデバイスの詳細が表示される
  • lspciコマンドの実行結果から以下のような情報が読み取れる。
  • PCI識別番号 (表示例):00:03.3
  • PCIデバイスの種類 (表示例):Serial controller
  • ベンダー名(ベンダーID) (表示例):Intel Corporation
  • デバイス名 (表示例):Mobile 4 Series Chipset AMT SOL Redirection (rev 07)
  • バスの速度(詳細表示のみ) (表示例):66MHz
  • IRQ番号(詳細表示のみ) (表示例):17
  • I/Oポートアドレス(詳細表示のみ) (表示例):1830

  • lspci - v表示例

    root@ubuntu:/proc# lspci -v
    00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
        Subsystem: VMware Virtual Machine Chipset
        Flags: bus master, medium devsel, latency 0
        Kernel driver in use: agpgart-intel
    
    00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01) (prog-if 00 [Normal decode])
        Flags: bus master, 66MHz, medium devsel, latency 0
        Bus: primary=00, secondary=01, subordinate=01, sec-latency=64
        I/O behind bridge: [disabled]
        Memory behind bridge: [disabled]
        Prefetchable memory behind bridge: [disabled]
    
    00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
        Subsystem: VMware Virtual Machine Chipset
        Flags: bus master, medium devsel, latency 0
    
    00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) (prog-if 8a [ISA Compatibility mode controller, supports both channels switched to PCI native mode, supports bus mastering])
        Subsystem: VMware Virtual Machine Chipset
        Flags: bus master, medium devsel, latency 64
        Memory at 000001f0 (32-bit, non-prefetchable) [virtual] [size=8]
        Memory at 000003f0 (type 3, non-prefetchable) [virtual]
        Memory at 00000170 (32-bit, non-prefetchable) [virtual] [size=8]
        Memory at 00000370 (type 3, non-prefetchable) [virtual]
        I/O ports at 1060 [virtual] [size=16]
        Kernel driver in use: ata_piix
        Kernel modules: pata_acpi
    
    00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
        Subsystem: VMware Virtual Machine Chipset
        Flags: medium devsel, IRQ 9
        Kernel modules: i2c_piix4
    
    00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10)
        Subsystem: VMware Virtual Machine Communication Interface
        Flags: bus master, medium devsel, latency 64, IRQ 16
        I/O ports at 1080 [size=64]
        Memory at febfe000 (64-bit, non-prefetchable) [size=8K]
        Capabilities: [40] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [58] MSI-X: Enable+ Count=2 Masked-
        Kernel driver in use: vmw_vmci
        Kernel modules: vmw_vmci
    
    00:0f.0 VGA compatible controller: VMware SVGA II Adapter (prog-if 00 [VGA controller])
        Subsystem: VMware SVGA II Adapter
        Flags: bus master, medium devsel, latency 64, IRQ 16
        I/O ports at 1070 [size=16]
        Memory at e8000000 (32-bit, prefetchable) [size=128M]
        Memory at fe000000 (32-bit, non-prefetchable) [size=8M]
        Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
        Capabilities: [40] Vendor Specific Information: Len=00 <?>
        Capabilities: [44] PCI Advanced Features
        Kernel driver in use: vmwgfx
        Kernel modules: vmwgfx
    
    00:10.0 SCSI storage controller: Broadcom / LSI 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
        Subsystem: VMware LSI Logic Parallel SCSI Controller
        Flags: bus master, medium devsel, latency 64, IRQ 17
        I/O ports at 1400 [size=256]
        Memory at feba0000 (64-bit, non-prefetchable) [size=128K]
        Memory at febc0000 (64-bit, non-prefetchable) [size=128K]
        Expansion ROM at c0008000 [virtual] [disabled] [size=16K]
        Capabilities: [f8] PCI Advanced Features
        Kernel driver in use: mptspi
        Kernel modules: mptspi
    
    ... <<< snip >>> ...
    
    02:00.0 USB controller: VMware USB1.1 UHCI Controller (prog-if 00 [UHCI])
        DeviceName: usb
        Subsystem: VMware USB1.1 UHCI Controller
        Physical Slot: 32
        Flags: bus master, medium devsel, latency 64, IRQ 18
        I/O ports at 2080 [size=32]
        Capabilities: [40] PCI Advanced Features
        Kernel driver in use: uhci_hcd
    
    02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
        DeviceName: Ethernet0
        Subsystem: VMware PRO/1000 MT Single Port Adapter
        Physical Slot: 33
        Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 19
        Memory at fd5c0000 (64-bit, non-prefetchable) [size=128K]
        Memory at fdff0000 (64-bit, non-prefetchable) [size=64K]
        I/O ports at 2000 [size=64]
        Expansion ROM at fd500000 [virtual] [disabled] [size=64K]
        Capabilities: [dc] Power Management version 2
        Capabilities: [e4] PCI-X non-bridge device
        Kernel driver in use: e1000
        Kernel modules: e1000
    
    02:02.0 Multimedia audio controller: Ensoniq ES1371/ES1373 / Creative Labs CT2518 (rev 02)
        DeviceName: sound
        Subsystem: Ensoniq Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI]
        Physical Slot: 34
        Flags: bus master, medium devsel, latency 64, IRQ 16
        I/O ports at 2040 [size=64]
        Capabilities: [40] PCI Advanced Features
        Kernel driver in use: snd_ens1371
        Kernel modules: snd_ens1371
    
    02:03.0 USB controller: VMware USB2 EHCI Controller (prog-if 20 [EHCI])
        DeviceName: ehci
        Subsystem: VMware USB2 EHCI Controller
        Physical Slot: 35
        Flags: bus master, fast devsel, latency 64, IRQ 17
        Memory at fd5ef000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [40] PCI Advanced Features
        Kernel driver in use: ehci-pci
    
    02:05.0 SATA controller: VMware SATA AHCI controller (prog-if 01 [AHCI 1.0])
        DeviceName: sata0
        Subsystem: VMware SATA AHCI controller
        Physical Slot: 37
        Flags: bus master, 66MHz, fast devsel, latency 64, IRQ 56
        Memory at fd5ee000 (32-bit, non-prefetchable) [size=4K]
        Expansion ROM at fd510000 [virtual] [disabled] [size=64K]
        Capabilities: [40] Power Management version 3
        Capabilities: [48] MSI: Enable+ Count=1/1 Maskable- 64bit+
        Capabilities: [60] SATA HBA v1.0
        Capabilities: [70] PCI Advanced Features
        Kernel driver in use: ahci
        Kernel modules: ahci
    

lsmodコマンド#

ロードされているカーネルモジュールに関する情報を表示する。

  • lsmod 表示例
    root@ubuntu:/proc# lsmod
    Module                  Size  Used by
    binfmt_misc            24576  1
    rfcomm                 81920  4
    ... <<< snip >>> ...
    e1000                 143360  0
    scsi_transport_spi     32768  1 mptspi
    pata_acpi              16384  0
    i2c_piix4              28672  0
    usbhid                 57344  0
    hid                   135168  2 usbhid,hid_generic
    

lsusb#

USBデバイスに関する情報を表示します。

  • lsusb 表示例
    root@ubuntu:/proc# lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 009: ID 0e0f:0008 VMware, Inc. VMware Virtual USB Mouse
    Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
    Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    

/proc/bus/usb/devicesファイル#

  • 接続されたUSBデバイスの情報は「/proc/bus/usb/devices」ファイルで確認できる
  • lsusbコマンドでも確認できる

/proc/meminfoファイル#

  • メモリの使用状況は「/proc/meminfo」ファイルで確認できる
  • proc/meminfoファイル表示例
    root@ubuntu:/# cat /proc/meminfo
    MemTotal:        8112832 kB
    MemFree:         2522160 kB
    MemAvailable:    5069600 kB
    Buffers:          284124 kB
    Cached:          2501032 kB
    SwapCached:            0 kB
    Active:          1677372 kB
    Inactive:        2614020 kB
    Active(anon):       2540 kB
    Inactive(anon):  1880140 kB
    Active(file):    1674832 kB
    Inactive(file):   733880 kB
    Unevictable:          16 kB
    Mlocked:              16 kB
    SwapTotal:        945416 kB
    SwapFree:         945416 kB
    Dirty:               216 kB
    Writeback:             0 kB
    AnonPages:       1506268 kB
    Mapped:           812712 kB
    Shmem:            376428 kB
    KReclaimable:     444368 kB
    Slab:             552688 kB
    SReclaimable:     444368 kB
    SUnreclaim:       108320 kB
    KernelStack:       13504 kB
    PageTables:        22992 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:     5001832 kB
    Committed_AS:    5856424 kB
    VmallocTotal:   34359738367 kB
    VmallocUsed:       62300 kB
    VmallocChunk:          0 kB
    Percpu:           130048 kB
    HardwareCorrupted:     0 kB
    AnonHugePages:         0 kB
    ShmemHugePages:        0 kB
    ShmemPmdMapped:        0 kB
    FileHugePages:         0 kB
    FilePmdMapped:         0 kB
    HugePages_Total:       0
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    Hugetlb:               0 kB
    DirectMap4k:      431936 kB
    DirectMap2M:     7956480 kB
    DirectMap1G:     2097152 kB
    

/proc/scsi/scsiファイル#

  • SCSIデバイスに関する情報は「/proc/scsi/scsi」ファイルで確認できる
  • /proc/scsi/scsiファイル表示例
    root@ubuntu:/# cat proc/scsi/sci
    cat: proc/scsi/sci: No such file or directory
    root@ubuntu:/# cat proc/scsi/scsi
    Attached devices:
    Host: scsi32 Channel: 00 Id: 00 Lun: 00
      Vendor: VMware,  Model: VMware Virtual S Rev: 1.0 
      Type:   Direct-Access                    ANSI  SCSI revision: 02
    Host: scsi3 Channel: 00 Id: 00 Lun: 00
      Vendor: NECVMWar Model: VMware SATA CD01 Rev: 1.00
      Type:   CD-ROM                           ANSI  SCSI revision: 05
    

/proc/dmaファイル#

  • デバイスが使用中のDMAチャネルに関する情報は「/proc/dma」ファイルで確認できる。
  • DMAとは、CPUを介することなくメインメモリと周辺機器の間で直接的に情報転送を行う方式のこと。
  • DMAチャネルは周辺機器がDMAのコントローラ(制御装置)に対して情報転送を要求するために使用する通信経路のこと。
  • 表示例
    root@ubuntu:/# cat /proc/dma
     4: cascade
    

/proc/ioportsファイル#

  • I/Oポートアドレスの情報は「/proc/ioports」ファイルで確認できる。
  • I/Oポートアドレスとは周辺機器(デバイス)とCPUがデータをやり取りする際に使用する16ビットのアドレスのこと
  • 「/proc/ioports」ファイルでは、どのデバイスにどのI/Oポートアドレスが割り当てられているのかが確認できる。
  • 表示例
    root@ubuntu:/# cat /proc/ioports
    0000-0cf7 : PCI Bus 0000:00
      0000-001f : dma1
      0020-0021 : PNP0001:00
        0020-0021 : pic1
      0040-0043 : timer0
      0050-0053 : timer1
      0060-0060 : keyboard
      0061-0061 : PNP0800:00
      0064-0064 : keyboard
      0070-0071 : rtc0
      0080-008f : dma page reg
      00a0-00a1 : PNP0001:00
        00a0-00a1 : pic2
      00c0-00df : dma2
      00f0-00ff : fpu
      0170-0177 : 0000:00:07.1
        0170-0177 : ata_piix
      01f0-01f7 : 0000:00:07.1
        01f0-01f7 : ata_piix
      0376-0376 : 0000:00:07.1
        0376-0376 : ata_piix
      03c0-03df : vga+
      03f6-03f6 : 0000:00:07.1
        03f6-03f6 : ata_piix
      03f8-03ff : serial
      04d0-04d1 : PNP0001:00
      0cf0-0cf1 : pnp 00:00
    0cf8-0cff : PCI conf1
    0d00-feff : PCI Bus 0000:00
      1000-103f : 0000:00:07.3
        1000-103f : pnp 00:00
          1000-1003 : ACPI PM1a_EVT_BLK
          1004-1005 : ACPI PM1a_CNT_BLK
          1008-100b : ACPI PM_TMR
          100c-100f : ACPI GPE0_BLK
          1010-1015 : ACPI CPU throttle
      1040-104f : 0000:00:07.3
        1040-104f : pnp 00:00
      1060-106f : 0000:00:07.1
        1060-106f : ata_piix
      1070-107f : 0000:00:0f.0
        1070-107f : vmwgfx probe
      1080-10bf : 0000:00:07.7
        1080-10bf : vmw_vmci
      1400-14ff : 0000:00:10.0
      2000-3fff : PCI Bus 0000:02
        2000-203f : 0000:02:01.0
          2000-203f : e1000
        2040-207f : 0000:02:02.0
          2040-207f : Ensoniq AudioPCI
        2080-209f : 0000:02:00.0
          2080-209f : uhci_hcd
      4000-4fff : PCI Bus 0000:03
      5000-5fff : PCI Bus 0000:0b
      6000-6fff : PCI Bus 0000:13
      7000-7fff : PCI Bus 0000:1b
      8000-8fff : PCI Bus 0000:04
      9000-9fff : PCI Bus 0000:0c
      a000-afff : PCI Bus 0000:14
      b000-bfff : PCI Bus 0000:1c
      c000-cfff : PCI Bus 0000:05
      d000-dfff : PCI Bus 0000:0d
      e000-efff : PCI Bus 0000:15
      fce0-fcff : pnp 00:06
    

/proc/interruptsファイル#

  • IRQに関する情報は「/proc/interrupts」ファイルで確認できます。
  • IRQ(Interrupt ReQuest)とは、マウスやキーボードなどの周辺機器(デバイス)からCPUへの割り込み要求のこと。
  • 表示例
    root@ubuntu:/# cat /proc/interrupts
                CPU0       CPU1       
       0:          4          0   IO-APIC    2-edge      timer
       1:      12949       5701   IO-APIC    1-edge      i8042
       8:          1          0   IO-APIC    8-edge      rtc0
       9:          0          0   IO-APIC    9-fasteoi   acpi
      12:      72612      71636   IO-APIC   12-edge      i8042
      14:          0          0   IO-APIC   14-edge      ata_piix
      15:          0          0   IO-APIC   15-edge      ata_piix
      16:      41049      67535   IO-APIC   16-fasteoi   vmwgfx, snd_ens1371
      17:      78997      66845   IO-APIC   17-fasteoi   ehci_hcd:usb1, ioc0
      18:        236        668   IO-APIC   18-fasteoi   uhci_hcd:usb2
      19:     120573      53192   IO-APIC   19-fasteoi   ens33
      24:          0          0   PCI-MSI 344064-edge      PCIe PME, pciehp
      25:          0          0   PCI-MSI 346112-edge      PCIe PME, pciehp
      26:          0          0   PCI-MSI 348160-edge      PCIe PME, pciehp
      27:          0          0   PCI-MSI 350208-edge      PCIe PME, pciehp
      28:          0          0   PCI-MSI 352256-edge      PCIe PME, pciehp
      29:          0          0   PCI-MSI 354304-edge      PCIe PME, pciehp
      30:          0          0   PCI-MSI 356352-edge      PCIe PME, pciehp
      31:          0          0   PCI-MSI 358400-edge      PCIe PME, pciehp
      32:          0          0   PCI-MSI 360448-edge      PCIe PME, pciehp
      33:          0          0   PCI-MSI 362496-edge      PCIe PME, pciehp
      34:          0          0   PCI-MSI 364544-edge      PCIe PME, pciehp
      35:          0          0   PCI-MSI 366592-edge      PCIe PME, pciehp
      36:          0          0   PCI-MSI 368640-edge      PCIe PME, pciehp
      37:          0          0   PCI-MSI 370688-edge      PCIe PME, pciehp
      38:          0          0   PCI-MSI 372736-edge      PCIe PME, pciehp
      39:          0          0   PCI-MSI 374784-edge      PCIe PME, pciehp
      40:          0          0   PCI-MSI 376832-edge      PCIe PME, pciehp
      41:          0          0   PCI-MSI 378880-edge      PCIe PME, pciehp
      42:          0          0   PCI-MSI 380928-edge      PCIe PME, pciehp
      43:          0          0   PCI-MSI 382976-edge      PCIe PME, pciehp
      44:          0          0   PCI-MSI 385024-edge      PCIe PME, pciehp
      45:          0          0   PCI-MSI 387072-edge      PCIe PME, pciehp
      46:          0          0   PCI-MSI 389120-edge      PCIe PME, pciehp
      47:          0          0   PCI-MSI 391168-edge      PCIe PME, pciehp
      48:          0          0   PCI-MSI 393216-edge      PCIe PME, pciehp
      49:          0          0   PCI-MSI 395264-edge      PCIe PME, pciehp
      50:          0          0   PCI-MSI 397312-edge      PCIe PME, pciehp
      51:          0          0   PCI-MSI 399360-edge      PCIe PME, pciehp
      52:          0          0   PCI-MSI 401408-edge      PCIe PME, pciehp
      53:          0          0   PCI-MSI 403456-edge      PCIe PME, pciehp
      54:          0          0   PCI-MSI 405504-edge      PCIe PME, pciehp
      55:          0          0   PCI-MSI 407552-edge      PCIe PME, pciehp
      56:      30973      28659   PCI-MSI 1130496-edge      ahci[0000:02:05.0]
      57:       6104       9003   PCI-MSI 129024-edge      vmw_vmci
      58:          0          0   PCI-MSI 129025-edge      vmw_vmci
     NMI:          0          0   Non-maskable interrupts
     LOC:    6249888    5695834   Local timer interrupts
     SPU:          0          0   Spurious interrupts
     PMI:          0          0   Performance monitoring interrupts
     IWI:          0          0   IRQ work interrupts
     RTR:          0          0   APIC ICR read retries
     RES:       7280      10181   Rescheduling interrupts
     CAL:     976368    1008261   Function call interrupts
     TLB:     228703     237095   TLB shootdowns
     TRM:          0          0   Thermal event interrupts
     THR:          0          0   Threshold APIC interrupts
     DFR:          0          0   Deferred Error APIC interrupts
     MCE:          0          0   Machine check exceptions
     MCP:        386        387   Machine check polls
     ERR:          0
     MIS:          0
     PIN:          0          0   Posted-interrupt notification event
     NPI:          0          0   Nested posted-interrupt event
     PIW:          0          0   Posted-interrupt wakeup event
    root@ubuntu:/# 
    

/proc/cmdlineファイル#

  • ブートローダからカーネルに渡されたパラメータは「/proc/cmdline」ファイルで確認できる
  • 表示例
    root@ubuntu:/home/omron# cat /proc/cmdline
    BOOT_IMAGE=/boot/vmlinuz-5.8.0-53-generic root=UUID=ff7068f8-21a9-4edc-85be-3e49311ec193 ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet
    

システムの起動#

systemd#

  • systemdSysVinitを置き換える新しいinitの仕組み。
  • systemdでは以下のデーモンプロセスが連携して動作。
プロセス名 機能
systemd systemd の本体となるプロセスで、initの代わりに常駐します
systemd-journald systemdが制御する、各サービスが出力するログを扱う。
systemd-logind システムへのログイン、起動停止、電源ボタン操作などを管理。
systemd-udevd 従来のudevdに代わり、デバイスの動的変更、検出を行います。
  • systemdで扱う処理はUnitという単位で管理。
  • Unitは設定ファイルであり、Unitの設定に従ってsystemd自体が処理を実行する。
  • SysVinitのようにスクリプトを実行するわけではない点が異なる。
  • Unitには各機能ごとに拡張子が割り当てられており、拡張子を見ることでどういった機能のためのUnitかが判別できる。
拡張子 機能
.device 各種デバイスを管理するUnit
.mount ファイルシステムのマウントを管理するunit
.service サービスを制御するUnit
.swap スワップ領域を管理するUnit
.target 複数のサービスを一つのグループにするためのUnit
  • SysVinitではプロセスをPIDによって管理していましたが、systemdではcgroupsという Linuxカーネルの機能によってプロセスのリソースを管理できる。
  • systemdUpstartと同様、各サービスを並列起動することができる。
  • そのため、順次起動していくSysVinitに比べ、高速なシステム起動や停止が行える。
  • システム起動時に最初に実行されるUnitは「/etc/systemd/system/default.target
  • default.target」をSysVinitでのランレベルに相当するUnitへのシンボリックリンクとして作成することで、サービス群を起動できるようになります。
  • シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクのこと。
  • シンボリックリンクが持っている情報は「元ファイル(ディレクトリ)がどこにあるのか」というパス情報のみ。
  • シンボリックリンクを作成するにはlnコマンドに「-s」オプションを付加して作成する
  • 例: *ln -s 元ファイル リンクファイル

SysVinitのランレベルとsystemdのターゲットの対応表

ランレベル ターゲット 意味
0 poweroff.target システムをシャットダウンし、電源を切ります。
1 rescue.target レスキューシェルを設定します。
2,3,4 multi-user.target 非グラフィカルなマルチユーザーシステムを設定します。
5 graphical.target グラフィカルなマルチユーザーシステムを設定します。
6 reboot.traget システムをシャットダウンして再起動します。

参考:SysV ランレベルと systemd ターゲットの比較

これらのターゲットは「/lib/systemd/system」配下に格納されています。 また、SysVinitとの関連がわかりやすいように、runlevel0.target〜runlevel6.targetまでの シンボリックリンクも用意されています。

また、systemdが動作するシステムにおいて、起動時のターゲットを指定するカーネルパラメータは systemd.unit です。 systemd.unit パラメータの値に起動時のターゲットを指定します。ターゲット名は .target を省略することができます。

  • systemdの動作するシステムにおいて、サーバとして動作させるのに適切な起動時のターゲット

    • runlevel3.target
    • multi-user.target

    Tip

    サーバとして動作させる際は、ランレベル3(multi-user.target)を指定します。ランレベル5でも必要なサービスを起動させることは可能ですが、グラフィカルログインやデスクトップを制御するプロセスも起動させるため、サーバとして稼働するには無駄なリソースを使用してしまいます。

  • 参考:/lib/systemd/system

root@ubuntu:/lib/systemd/system# ls -l
total 1260
... <<< snip >>> ...
lrwxrwxrwx 1 root root   16 Sep  7 11:37  default.target -> graphical.target
... <<< snip >>> ...
-rw-r--r-- 1 root root  598 Apr  1  2020  graphical.target
drwxr-xr-x 2 root root 4096 Nov  2 21:01  graphical.target.wants
... <<< snip >>> ...
-rw-r--r-- 1 root root  532 Apr  1  2020  multi-user.target
drwxr-xr-x 2 root root 4096 Nov  2 21:01  multi-user.target.wants
... <<< snip >>> ...
-rw-r--r-- 1 root root  592 Apr  1  2020  poweroff.target
drwxr-xr-x 2 root root 4096 Feb  9  2021  poweroff.target.wants
... <<< snip >>> ...
-rw-r--r-- 1 root root  583 Apr  1  2020  reboot.target
drwxr-xr-x 2 root root 4096 Feb  9  2021  reboot.target.wants
... <<< snip >>> ...
-rw-r--r-- 1 root root  788 Sep  7 11:37  rescue.service
-rw-r--r-- 1 root root  492 Apr  1  2020  rescue.target
drwxr-xr-x 2 root root 4096 Nov  2 21:01  rescue.target.wants
... <<< snip >>> ...
lrwxrwxrwx 1 root root   15 Sep  7 11:37  runlevel0.target -> poweroff.target
lrwxrwxrwx 1 root root   13 Sep  7 11:37  runlevel1.target -> rescue.target
drwxr-xr-x 2 root root 4096 Apr 22  2020  runlevel1.target.wants
lrwxrwxrwx 1 root root   17 Sep  7 11:37  runlevel2.target -> multi-user.target
drwxr-xr-x 2 root root 4096 Apr 22  2020  runlevel2.target.wants
lrwxrwxrwx 1 root root   17 Sep  7 11:37  runlevel3.target -> multi-user.target
drwxr-xr-x 2 root root 4096 Apr 22  2020  runlevel3.target.wants
lrwxrwxrwx 1 root root   17 Sep  7 11:37  runlevel4.target -> multi-user.target
drwxr-xr-x 2 root root 4096 Apr 22  2020  runlevel4.target.wants
lrwxrwxrwx 1 root root   16 Sep  7 11:37  runlevel5.target -> graphical.target
drwxr-xr-x 2 root root 4096 Apr 22  2020  runlevel5.target.wants
lrwxrwxrwx 1 root root   13 Sep  7 11:37  runlevel6.target -> reboot.target
... <<< snip >>> ...
  • 参考:/etc/systemd
    root@ubuntu:/etc/systemd# ls -l
    total 48
    -rw-r--r--  1 root root 1042 Apr 22  2020 journald.conf
    -rw-r--r--  1 root root 1042 Apr 22  2020 logind.conf
    drwxr-xr-x  2 root root 4096 Apr 22  2020 network
    -rw-r--r--  1 root root  584 Apr  1  2020 networkd.conf
    -rw-r--r--  1 root root  529 Apr  1  2020 pstore.conf
    -rw-r--r--  1 root root  642 Jan  6  2021 resolved.conf
    -rw-r--r--  1 root root  790 Apr  1  2020 sleep.conf
    drwxr-xr-x 21 root root 4096 Nov 12 01:17 system
    -rw-r--r--  1 root root 1759 Apr 22  2020 system.conf
    -rw-r--r--  1 root root  604 Apr 22  2020 timesyncd.conf
    drwxr-xr-x  4 root root 4096 Nov  2 17:51 user
    -rw-r--r--  1 root root 1185 Apr 22  2020 user.conf
    root@ubuntu:/etc/systemd# 
    

systemctlコマンド#

  • 各サービスの稼働状況や起動設定を管理するにはsystemctlコマンドを使用
  • systemctlコマンドの書式は以下のとおりです。
  • systemctl サブコマンド [ Unit名 ]
サブコマンド 用途
disable サービスの自動起動を無効にする
enable サービスの自動起動を有効にする
get-default 自動起動時のターゲットを表示する
halt システムを停止しhalt状態にする
is-active サービスが稼働しているかを表示する
list-unit-files すべてのUnit定義ファイルを一覧表示する
reboot システムを再起動する
reload サービスの設定ファイルを再読込する
restart サービスを再起動する
set-default 次回起動時のターゲットを設定する
start サービスを起動する
status サービスの状態を表示する
stop サービスを停止する
poweroff システムを停止し電源を切断する
  • 参考:systemctl get-dafault
    起動時にGUIを指定している

    root@ubuntu:/# systemctl get-default
    graphical.target
    

  • (例):httpdサービスが稼働しているかを確認する

    • systemctl is-active httpd
    • 表示例
      root@ubuntu:/# systemctl is-active vsfpd
      inactive
      
  • (例):systemdが稼働するシステムにおいて、システム起動時にhttpdサービスが自動起動しないようにする

    • systemctl disable httpd
  • (例):systemdが稼働するシステムにおいてmysqldサービスを起動

    • systemctl start mysqld
  • (例):systemctlコマンドを使って、postfixサービスに設定ファイルを再読み込みする

    • systemctl reload postfix

systemctl_list-unit-files#

利用可能なユニットの一覧を表示するにはlist-unit-filesサブコマンドを使用

  • 表示例
    root@ubuntu:/home/omron# systemctl list-unit-files
    UNIT FILE                                  STATE           VENDOR PRESET
    proc-sys-fs-binfmt_misc.automount          static          enabled      
    -.mount                                    generated       enabled      
    boot-efi.mount                             generated       enabled      
    dev-hugepages.mount                        static          enabled      
    dev-mqueue.mount                           static          enabled      
    media-floppy0.mount                        generated       enabled   
    ...
    <<< snip >>>
    ...
    
    snapd.snap-repair.timer                    enabled         enabled      
    systemd-tmpfiles-clean.timer               static          enabled      
    ua-messaging.timer                         enabled         enabled      
    
    358 unit files listed.
    

journalctlコマンド#

  • systemdの動作するシステムではsystemd-journaldデーモンを動作させ、ログの一元管理を行います。
  • systemd-journaldはsystemdから起動したプロセスの標準出力やsyslogへのログメッセージをバイナリ形式で記録します。
  • systemd-journaldが書き込むログファイルはバイナリ形式のため、catコマンドなどで中を表示することが出来ません
  • systemd-journaldのログを表示するには journalctlコマンドを使用します。
  • journalctlコマンドの「-k」オプション、または「--dmesg」オプションで、dmesgコマンドと同じ情報(起動時にカーネルが出力したメッセージ)が出力されます。

  • journalctlコマンド表示例

    root@ubuntu:/# journalctl
    -- Logs begin at Tue 2021-11-02 18:01:46 PDT, end at Sat 2021-11-20 05:05:38 PST. --
    Nov 02 18:01:46 ubuntu kernel: Linux version 5.11.0-38-generic (buildd@lgw01-amd64-041) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #42~20.04.1>
    Nov 02 18:01:46 ubuntu kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-5.11.0-38-generic root=UUID=743075e2-ad08-48a1-bf07-27166c8f69c6 ro find_preseed=/preseed.cfg auto noprompt pri>
    Nov 02 18:01:46 ubuntu kernel: KERNEL supported cpus:
    Nov 02 18:01:46 ubuntu kernel:   Intel GenuineIntel
    Nov 02 18:01:46 ubuntu kernel:   AMD AuthenticAMD
    Nov 02 18:01:46 ubuntu kernel:   Hygon HygonGenuine
    Nov 02 18:01:46 ubuntu kernel:   Centaur CentaurHauls
    Nov 02 18:01:46 ubuntu kernel:   zhaoxin   Shanghai  
    Nov 02 18:01:46 ubuntu kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
    ...
    <<< snip >>>
    ...
    Nov 20 05:06:23 ubuntu systemd-resolved[771]: Using degraded feature set (UDP) for DNS server 192.168.6.2.
    Nov 20 05:06:28 ubuntu systemd-resolved[771]: Using degraded feature set (TCP) for DNS server 192.168.6.2.
    Nov 20 05:06:32 ubuntu systemd-resolved[771]: Using degraded feature set (UDP) for DNS server 192.168.6.2.
    Nov 20 05:06:42 ubuntu systemd-resolved[771]: Using degraded feature set (TCP) for DNS server 192.168.6.2.
    Nov 20 05:06:42 ubuntu systemd-resolved[771]: Using degraded feature set (UDP) for DNS server 192.168.6.2.
    Nov 20 05:06:47 ubuntu systemd-resolved[771]: Using degraded feature set (TCP) for DNS server 192.168.6.2.
    Nov 20 05:06:47 ubuntu systemd-resolved[771]: Using degraded feature set (UDP) for DNS server 192.168.6.2.
    lines 43765-43803/43803 (END)
    

dmesgコマンド#

起動時にカーネルが出力したメッセージは、後からdmesgコマンドで確認できます。

  • dmesg表示例
    root@ubuntu:/home/omron# dmesg
    [    0.000000] Linux version 5.8.0-53-generic (buildd@lcy01-amd64-012) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #60~20.04.1-Ubuntu SMP Thu May 6 09:52:46 UTC 2021 (Ubuntu 5.8.0-53.60~20.04.1-generic 5.8.18)
    [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.8.0-53-generic root=UUID=ff7068f8-21a9-4edc-85be-3e49311ec193 ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet
    [    0.000000] KERNEL supported cpus:
    [    0.000000]   Intel GenuineIntel
    [    0.000000]   AMD AuthenticAMD
    [    0.000000]   Hygon HygonGenuine
    [    0.000000]   Centaur CentaurHauls
    [    0.000000]   zhaoxin   Shanghai  
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
    ...
    <<< snip >>>
    ...
    [  110.216321] systemd-rc-local-generator[3003]: /etc/rc.local is not marked executable, skipping.
    [  110.666083] systemd-rc-local-generator[3025]: /etc/rc.local is not marked executable, skipping.
    

dmesg --clear#

dmesgコマンドはカーネルが出力するメッセージが格納されるリングバッファの内容を出力します。 リングバッファはマシンの再起動やシャットダウンによってリセットされますが、 運用中に一杯になると古い情報から上書きされていきます。手動でリングバッファの内容をクリアするには、 rootユーザで「dmesg --clear」を実行します。

root@ubuntu:/home/omron# dmesg --clear
root@ubuntu:/home/omron# 
root@ubuntu:/home/omron# dmesg
root@ubuntu:/home/omron#  # clear されたため表示されない

SysVinit#

  • SysVinitによる一般的な起動順序は以下の通り
  • initが/etc/inittabファイルを読み込む
  • initが/etc/rc.sysinitスクリプトを読み込む
  • initが/etc/rcスクリプトを実行する
  • /etc/rcスクリプトが「/etc/rc<ランレベル>.d」ディレクトリ以下のスクリプトを実行する

  • SysVinitでは、システムの起動時やランレベルの変更時にinitが「/etc/inittab」(デフォルトのランレベルの設定を行うことができるファイルは)を参照し、ランレベルに応じたスクリプトを実行して各種サービスを順に起動/停止していきます。

  • SysVinitの設定ファイル「/etc/inittab」ファイルは通常Linuxシステムの起動時に読み込まれます。
  • initまたはtelinitコマンドに「q」か「Q」オプションを指定して実行すると、「/etc/inittab」を再読み込みさせ即座に変更を反映させることができます。参考:telinitコマンド
  • 各ランレベルに応じたスクリプトは「/etc/rc[0-6].d」に入っています。
    • スクリプトのファイル名(実際はシンボリックリンク)は次の規則で命名します。
    • 例)K01smartd
      • 1文字目:S(Start: サービスを起動)、K(Kill: サービスを停止)
      • 数字:実行優先順位。若番のものが先に実行される
      • サービス名:任意の名前をつける
      • 参考:ランレベル3で実行されるスクリプト(「/etc/rc3.d」ディレクトリ)
        root@ubuntu:/etc# ls rc3.d
        K01speech-dispatcher  S01dbus             S01plymouth
        S01acpid              S01gdm3             S01pulseaudio-enable-autospawn
        S01anacron            S01grub-common      S01rsync
        S01apport             S01inetutils-inetd  S01rsyslog
        S01avahi-daemon       S01irqbalance       S01saned
        S01bluetooth          S01kerneloops       S01spice-vdagent
        S01console-setup.sh   S01lvm2-lvmpolld    S01unattended-upgrades
        S01cron               S01openbsd-inetd    S01uuidd
        S01cups               S01open-vm-tools    S01vsftpd
        S01cups-browsed       S01openvpn          S01whoopsie
        

Note

SysVinit を使用していないシステムでは、/etc/inittabファイルは存在しないか、あっても何も記述されていません。

  • すでにマルチユーザモードで起動しているシステムを、メンテナンスのためにシングルユーザモードに変更する際のコマンド
    • init s
    • telinit 1
    • telinit S

runlevelコマンド#

  • 現在および1つ前のランレベルを調べることができるコマンド
  • 表示例
    root@ubuntu:/etc/systemd/system# runlevel
    N 5
    

Upstart#

  • UpstartはSysVinitを改善した新しい仕組みです。Red Hat Enterprise Linux(RHEL)やUbuntuに採用されていましたが、現在はsystemdへの置き換えが進められています。
  • Upstartではバックグラウンドで動作するデーモンプロセス(サービス)や、一度だけ実行させたい処理(タスク)を「ジョブ」と呼び、ジョブ単位で起動処理の管理を行います。
  • Upstartは各ジョブの実行に必要な前提条件を「イベント」で管理し、前提条件がすべて成立した時点でジョブを実行します。
  • SysVinitのように順次起動していくのと異なり、サービスの起動に必要な条件が成立した時点で起動処理が行われるため不要な待機時間がなくなります。
  • また、各ジョブの実行がパラレル(並列)に行われるため、関連のない独立したサービスは同時に起動させることができます。
  • イベントはシステム上の変化を検知するだけではなく、initctlコマンドで発行することもできます。
  • Upstartは「/etc/event.d/rc-default」ファイルの「telinit 2」の部分を編集することでデフォルトのランレベルを設定できます。
  • ただし、UpstartはSysVinitと互換性があるため、「/etc/inittab」ファイルを新規に作成し、先述のSysVinitの場合と同じように記述することで デフォルトのランレベルを設定することもできます。その場合、「/etc/inittab」ファイルのランレベルが優先されます

log#

/var/log/messagesファイル#

カーネルのログが記録されるなど、Linuxでメインで使用されるログファイル

/var/log/secureファイル#

セキュリティに関するログが記録されるファイル

/var/log/maillogファイル#

メールに関するログが記録される

Linuxの起動順序#

  1. 電源投入
  2. BIOS/UEFIの起動
  3. ブートローダ(GRUB,GRUB2..)
  4. カーネル(vmlinuz)とinitramfs(初期RAMディスク)の読み込み
  5. カーネルの実行
  6. initramfs(初期RAMディスク)の実行
  7. initの実行(SysVinit,Systemd..)

用語解説#

BIOS(Basic_I/O_System)#

最もハードウェアに近い部分を司るシステムで、物理的なハードウェア(マザーボード)上に書き込まれています。
コンピュータの電源を入れると、まずBIOSが起動し、記憶装置(HDD)等に関して最低限の認識をして起動デバイスの優先順位を決定します。
その後、優先順位に従って各デバイスの先頭セクタにある**MBR**(ブート用の特殊領域。ブートローダが格納されている)を読み込み、
得られたブートローダに制御をします。ブートローダが得られない場合は次のデバイスのMBRを読み込みます。
起動デバイスの優先順位は、BIOSセットアップ画面で任意の順序に設定変更できます。BIOSセットアップ画面はコンピュータの起動時に特定のキー
(DEL、F2など)を押すことで呼び出せます。
最近のシステムでは**UEFI(Unified Extensible Firmware Interface)**への移行が進んでいます。

BIOSが古い場合、大容量の記憶装置(HDD)を正常に認識できない(実際より少ない容量を認識するなど)場合があります。
BIOSをアップデートすることで、この問題を解消できることがあります。

ブートローダ#

Linuxシステムでは**GRUB**が該当します。
MBRに格納されている第一段階部分と、記憶装置内の別の場所に格納されている第二段階部分があります。
このように分かれている理由は、MBRには厳しいサイズ制限があるためです。
ブートローダは記憶装置内のカーネルをロードし、カーネルに制御を移す役割を果たします。
第一段階のブートローダはMBRの先頭**446**バイトの領域にインストールされます。

init#

最初に起動されるプロセスで、PID(プロセス ID)は必ず<font color='Red'>**1**です。
「SysVinit」と呼ばれる従来のinitプログラムを採用しているシステムでは、「/sbin/init」が起動されます。
initプロセスは設定ファイル「/etc/inittab」の記述に基づいて、自動起動するべきプロセスを立ちあげるなど、アプリケーションレベルの初期化を行います。
以降、initプロセスは全てのプロセスの先祖(直接・間接的な呼び出し元)として存在し続けます。
なお、最近のシステムではinitプログラムとして、初期化処理を高速化した**Upstart**やs**ystemd**を採用している場合があります。
その場合は基本的に「**/etc/inittab**」ファイルは使用されません。

UEFI#

**UEFI**(Unified Extensible Firmware Interface)は、IntelがBIOS(Basic I/O System)を置き換えるために考案したEFIの統一仕様です。
GUIでの操作をサポートしていたり、ファームウェアが使用可能なメモリ量の上限が緩和されているなど、BIOSよりも高機能化しています。  
**ESP**(EFIシステムパーティション)はUEFIシステムにおいて、物理的なマシンを起動し、ファームウエアが読み込まれた後、
その後の起動シーケンスで最初にアクセスされる領域になります。ESPは「**/boot/efi**」にマウントされます。  
また、**GPT**(GUID Partition Table)形式のHDDからの起動をサポートしています。GPTは、BIOSで起動ディスクとしてサポート
しているMBR形式のパーティションテーブルの上限2.2TB(2TiB: テビバイト)という制約を大幅に超える、9.4ZB(8ZiB: ゼビバイト)
までのHDDを管理することができるパーティションテーブルの形式です。3TBを超える大容量HDDを起動ディスクとして使用する場合はUEFIと
GPTを使用する必要があります。ただし、Linuxの場合GRUB2 ブートローダがGPTをサポートしているため、BIOSからGRUBローダーをロード
できればGPT形式のハードディスクからの起動は可能です。  
※ZB(ゼタバイト)とは、1GB(ギガバイト)x 1000(テラ) x 1000(ペタ)x 1000(エクサ)x 1000(ゼタ)のサイズのことです。

カーネル#

カーネルは起動されると、高度にハードウェアを認識・制御し、ルートファイルシステムのマウントなど様々な初期化処理を行います。  
ブートローダはカーネルと初期RAMディスク(**initramfs**)の内容をメモリ上に展開し、カーネルはメモリ上に展開された初期RAMディスク内の、

ファイルシステムへアクセスするために必要なドライバやスクリプトを使用してルートファイルシステムをマウントします。その後、initという 特別な最初のプロセスをルートファイルシステムから起動します。
SysVinit」と呼ばれる従来のinitプログラムを採用しているシステムでは、initプロセスとして「/sbin/init」が起動されます。 なお、カーネルはブートローダの次に起動されます。

初期RAMディスク#

ブートローダはカーネルと初期RAMディスク(**initramfs**)の内容をメモリ上に展開し、カーネルはメモリ上に展開された
初期RAMディスク内の、ファイルシステムへアクセスするために必要なドライバやスクリプトを使用してルートファイルシステムを
マウントします。その後、**init**という特別な最初のプロセスを**ルートファイルシステム**から起動します。
カーネルイメージと、カーネルのバージョンに対応する初期RAMディスクは「**/boot**」ディレクトリに格納されます。
初期RAMディスクは展開してイメージ内のディレクトリ・ファイルを参照することができます。

[参考:初期RAMディスクについて](https://my1cdlinux.eksd.jp/createbootablelivecd_aboutinitrd.html)  
> 初期RAMディスクとは、Linuxシステムの起動の途中で一時的に利用される小さなルートファイルシステムのことです。
> 
> 初期RAMディスクには、/bin /lib /dev などのディレクトリがあり、それぞれのディレクトリには必要最低限のコマンドやデバイスファイルなどが含まれています。 
> つまり、初期RAMディスクは、小さなLinuxシステムであるともいえます。



* 参考:bootディレクトリ
    ``` 
    root@ubuntu:/# ls -l /boot/
    total 183180
    -rw-r--r-- 1 root root   253986 Sep 28 08:37 config-5.11.0-38-generic
    -rw-r--r-- 1 root root   254083 Oct 26 08:50 config-5.11.0-40-generic
    drwx------ 2 root root     4096 Dec 31  1969 efi
    drwxr-xr-x 4 root root     4096 Nov 20 23:28 grub
    lrwxrwxrwx 1 root root       28 Nov 11 05:17 initrd.img -> initrd.img-5.11.0-40-generic
    -rw-r--r-- 1 root root 53049869 Nov 12 01:12 initrd.img-5.11.0-38-generic
    -rw-r--r-- 1 root root 99844928 Nov 20 23:29 initrd.img-5.11.0-40-generic
    lrwxrwxrwx 1 root root       28 Nov 11 05:17 initrd.img.old -> initrd.img-5.11.0-38-generic
    -rw-r--r-- 1 root root   182704 Aug 18  2020 memtest86+.bin
    -rw-r--r-- 1 root root   184380 Aug 18  2020 memtest86+.elf
    -rw-r--r-- 1 root root   184884 Aug 18  2020 memtest86+_multiboot.bin
    -rw------- 1 root root  5837807 Sep 28 08:37 System.map-5.11.0-38-generic
    -rw------- 1 root root  5860664 Oct 26 08:50 System.map-5.11.0-40-generic
    lrwxrwxrwx 1 root root       25 Nov 11 05:17 vmlinuz -> vmlinuz-5.11.0-40-generic
    -rw------- 1 root root 10138464 Sep 28 08:39 vmlinuz-5.11.0-38-generic
    -rw------- 1 root root 11741600 Oct 26 08:56 vmlinuz-5.11.0-40-generic
    lrwxrwxrwx 1 root root       25 Nov 11 05:17 vmlinuz.old -> vmlinuz-5.11.0-38-generic
    ```

* 参考:lsinitrdコマンドによるinitrd.imgの確認
    ``` 
    root@ubuntu:/# lsinitrd boot/initrd.img-5.11.0-40-generic
    Image: boot/initrd.img-5.11.0-40-generic: 96M
    ========================================================================
    Version: 

    Arguments: 
    dracut modules:
    ========================================================================
    drwxr-xr-x   3 root     root            0 Dec 17  2019 .
    drwxr-xr-x   3 root     root            0 Dec 17  2019 kernel
    drwxr-xr-x   3 root     root            0 Dec 17  2019 kernel/x86
    drwxr-xr-x   2 root     root            0 Dec 17  2019 kernel/x86/microcode
    -rw-r--r--   1 root     root        30546 Dec 17  2019 kernel/x86/microcode/AuthenticAMD.bin
    ========================================================================
    ```

    !!! Tip
        Ubuntu ではlsinitrdコマンドの使用には apt install dracut-core にてパッケージのinstall が必要。

  * 参考:/boot/grub/grub.cfg  
    GRUBやGRUB2のブートローダ設定ファイルを見ると、実際に指定されていることが分かる  
    ```
    root@ubuntu:/boot/grub# cat grub.cfg  | grep initrd
    if [ "${initrdfail}" = 2 ]; then
       set initrdfail=
    elif [ "${initrdfail}" = 1 ]; then
          set initrdfail=2
    function initrdfail {
          if [ -z "${initrdfail}" ]; then
            set initrdfail=1
          save_env initrdfail
        initrd  /boot/initrd.img-5.11.0-40-generic
            initrd  /boot/initrd.img-5.11.0-40-generic
            initrd  /boot/initrd.img-5.11.0-40-generic
            initrd  /boot/initrd.img-5.11.0-38-generic
            initrd  /boot/initrd.img-5.11.0-38-generic
    ```

ACPI#

  • Advanced Configuration and Power Interface の略
  • コンピュータの電源管理や構成に関する規格
  • OS上でシャットダウンや再起動などを行う際の命令は、ACPIイベントとして通知
  • acpidデーモンはACPIイベントを監視し、イベントに対応する処理を実行

ランレベル/ブートターゲットの変更#

ランレベル#

  • Linuxではランレベルと呼ばれるいくつかの動作モードがあります。
  • ランレベル毎にどのようなサービスを起動するか、起動しないかを決定できる。
  • Linuxのランレベルの種類と内容は以下の通り
ランレベル Red Hat Enterprise Linux、CentOS、Fedora Ubunts、Debian GNU/Linux
0 停止 停止
1 シングルユーザモード シングルユーザモード
2 マルチユーザモード(テキストログイン、NFSサーバは停止) マルチユーザモード
3 マルチユーザモード(テキストログイン) マルチユーザモード
4 未使用 マルチユーザモード
5 マルチユーザーモード(グラフィカルログイン) マルチユーザモード
6 再起動 再起動
S or s シングルユーザーモード シングルユーザモード

Note

  • Linuxのディストリビューションによってランレベルの定義は異なります。Debian系の場合はランレベル2~5(マルチユーザモード)を区別しません
  • デフォルトのランレベルは「/etc/inittab」ファイルのinitdefautの行で設定できます。
  • 例)デフォルトのランレベルを5に設定する場合 id:5:initdefault:

Warnig

デフォルトのランレベルに0または6を設定してはいけません。設定すると、起動してもすぐに停止または、再起動を繰り返してしまいます。

  • システム起動時に最初に実行されるUnitは「/etc/systemd/system/default.target」です。
  • default.targetをSysVinitでのランレベルに相当するUnitへのシンボリックリンクとして作成することで、 期待するサービス群を起動できるようになります。
  • (例):systemdが稼働するシステムにおいて、次回起動時にグラフィカルログインさせるようにする
    • rm -f /etc/systemd/system/default.target
    • ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target

Tip

シンボリックリンクは上書きできないので、変更する際には事前に削除する必要があります。

shutdown#

  • shutdownコマンドの書式と主なオプションは以下のとおり
  • shutdown [オプション] 時間 [メッセージ]
オプション 説明
-h システム停止
-r システム再起動
-k シャットダウンは行わず、ログイン中の全ユーザーにメッセージを送る
-c 実行中のシャットダウンをキャンセル

「時間」は以下のように指定します。

  • HH:MM HH時MM分に実行 (例)shutdown -h 23:00
  • +M M分後に実行 (例) (shutdownss -h +60) 
  • now 今すぐに実行

メッセージを指定する場合は以下のようにします。
例)メッセージを表示し、5分後にシステムを停止する場合
shutdown -h +5 "Shutting down in 5 minutes"

再起動関連コマンド#

  1. telinit 6
  2. shutdown -r now
  3. systemctl reboot
  4. systemctl start reboot.target

wallコマンド#

ログイン中の全ユーザーにメッセージを送信するコマンド