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 表示例
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のコントローラ(制御装置)に対して情報転送を要求するために使用する通信経路のこと。
- 表示例
/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」ファイルで確認できる
- 表示例
システムの起動#
systemd#
- systemdはSysVinitを置き換える新しい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カーネルの機能によってプロセスのリソースを管理できる。
- systemdはUpstartと同様、各サービスを並列起動することができる。
- そのため、順次起動していく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を指定している -
(例):httpdサービスが稼働しているかを確認する
systemctl is-active httpd
- 表示例
-
(例):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つ前のランレベルを調べることができるコマンド
- 表示例
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の起動順序#
- 電源投入
- BIOS/UEFIの起動
- ブートローダ(GRUB,GRUB2..)
- カーネル(vmlinuz)とinitramfs(初期RAMディスク)の読み込み
- カーネルの実行
- initramfs(初期RAMディスク)の実行
- 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"
再起動関連コマンド#
- telinit 6
- shutdown -r now
- systemctl reboot
- systemctl start reboot.target
wallコマンド#
ログイン中の全ユーザーにメッセージを送信するコマンド