日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
【Debian參考手冊】第?3?章?系統(tǒng)初始化

目錄

創(chuàng)新互聯(lián)長期為成百上千家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為中山企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設,中山網(wǎng)站改版等技術(shù)服務。擁有十載豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

3.1. 啟動過程概述
3.1.1. 第一階段:UEFI
3.1.2. 第二階段:引載加載程序
3.1.3. 第三階段:迷你 Debian 系統(tǒng)
3.1.4. 第四階段:常規(guī) Debian 系統(tǒng)
3.2. Systemd 初始化
3.2.1. 主機名
3.2.2. 文件系統(tǒng)
3.2.3. 網(wǎng)絡接口初始化
3.3. 內(nèi)核消息
3.4. 系統(tǒng)消息
3.5. 系統(tǒng)管理
3.6. 其它系統(tǒng)監(jiān)控
3.7. 定制 systemd
3.7.1. 套接字激活
3.8. udev 系統(tǒng)
3.8.1. 內(nèi)核模塊初始化

作為系統(tǒng)管理員,粗略地了解 Debian 系統(tǒng)的啟動和配置方式是明智的。盡管準確的細節(jié)在安裝的軟件包及對應的文檔中,但這些知識對我們大多數(shù)人來說都是必須掌握的。

下面是 Debian 系統(tǒng)初始化的要點概述。由于 Debian 系統(tǒng)在不斷發(fā)展,您應該參考最新的文檔。

  • Debian Linux 內(nèi)核手冊 是關于 Debian 內(nèi)核的主要信息來源。

  • bootup(7) 介紹了基于 systemd 的系統(tǒng)啟動流程。(近期的 Debian)

  • boot(7) 介紹了基于 UNIX System V Release 4 的系統(tǒng)啟動流程。(舊版的 Debian)

3.1. 啟動過程概述

計算機系統(tǒng)從上電事件到能為用戶提供完整的操作系統(tǒng)(OS)功能為止,需要經(jīng)歷幾個階段的啟動過程。

為簡便起見,筆者將討論范圍限定在具有默認安裝的典型 PC 平臺上。

典型的啟動過程像是一個四級的火箭。每一級火箭將系統(tǒng)控制權(quán)交給下一級。

  • 第 3.1.1 節(jié) “第一階段:UEFI”

  • 第 3.1.2 節(jié) “第二階段:引載加載程序”

  • 第 3.1.3 節(jié) “第三階段:迷你 Debian 系統(tǒng)”

  • 第 3.1.4 節(jié) “第四階段:常規(guī) Debian 系統(tǒng)”

當然,這些階段可以有不同的配置。比如,你編譯了自己的內(nèi)核,則可能會跳過迷你 Debian 系統(tǒng)的步驟。因此,在讀者親自確認之前,請勿假定自己系統(tǒng)的情況也是如此。

3.1.1. 第一階段:UEFI

Unified Extensible Firmware Interface (UEFI) 統(tǒng)一可擴展固件接口 定義了啟動管理器作為 UEFI 規(guī)范的一部分。當一個計算機打開電源,啟動管理器是啟動流程的第一階段,它檢查啟動配置并基于啟動配置的設置,執(zhí)行特定的操作系統(tǒng)引導加載程序或操作系統(tǒng)內(nèi)核(通常是引導加載程序)。啟動配置通過變量存儲在 NVRAM,變量包括指示操作系統(tǒng)引導加載程序或操作系統(tǒng)內(nèi)核的文件系統(tǒng)路徑的變量。 EFI system partition (ESP) EFI 系統(tǒng)分區(qū) 是一個數(shù)據(jù)存儲設備分區(qū),在計算機里用來遵照 UEFI 規(guī)范。當計算機打開電源時,由 UEFI 固件來訪問,它存儲了 UEFI 應用程序和這些應用程序運行所需要的文件,包括操作系統(tǒng)的引導加載程序。(在老的 PC 系統(tǒng),存放在 MBR 里的 BIOS 可以用來代替。)

3.1.2. 第二階段:引載加載程序

引導加載程序是啟動過程的第二階段,由 UEFI 啟動。引導加載程序?qū)⑾到y(tǒng)內(nèi)核映像和 initrd 映像加載到內(nèi)存并將控制權(quán)交給它們。initrd 映像是根文件系統(tǒng)映像,其支持程度依賴于所使用的引導加載程序。

Debian 系統(tǒng)通常使用 Linux 內(nèi)核作為默認的系統(tǒng)內(nèi)核。當前的 5.x Linux 內(nèi)核的 initrd 映像在技術(shù)上是 initramfs(初始 RAM 文件系統(tǒng))映像。

有許多引導加載程序和配置選項存在。

表 3.1. 引導加載程序列表

軟件包 流行度 大小 initrd 引導加載程序 說明
grub-efi-amd64 I:236 158 支持 GRUB UEFI 可智能識別磁盤分區(qū)和文件系統(tǒng),例如 vfat、ext4…(UEFI)
grub-pc V:25, I:737 533 支持 GRUB 第 2 版 可智能識別磁盤分區(qū)和文件系統(tǒng),例如 vfat、ext4…(BIOS)
grub-rescue-pc V:0, I:1 6476 支持 GRUB 第 2 版 此為 GRUB 第 2 版的可引導修復映像(CD 和軟盤)(PC / BIOS 版本)
lilo V:0, I:1 697 支持 Lilo 依賴于數(shù)據(jù)在硬盤上的扇區(qū)位置。(較老)
syslinux V:3, I:43 344 支持 Isolinux 可識別 ISO9660 文件系統(tǒng)。引導 CD 使用此項。
syslinux V:3, I:43 344 支持 Syslinux 可識別 MSDOS 文件系統(tǒng)(FAT)。引導軟盤使用此項。
loadlin V:0, I:0 90 支持 Loadlin 新系統(tǒng)從 FreeDOS 或 MSDOS 中啟動。
mbr V:0, I:6 50 不支持 Neil Turton 的 MBR 此為取代 MSDOS MBR 的自由軟件。只可識別硬盤分區(qū)。

警告

假如沒有從 grub-rescue-pc 軟件包中的映像制作出來的可引導修復盤(U盤、CD 或軟盤),請勿玩弄引導加載程序。即使硬盤上沒有可正常工作的引導加載程序,可引導修復盤也能引導你的系統(tǒng)。

GRUB 2 的菜單配置文件位于 /boot/grub/grub.cfg,它的菜單條目的關鍵部分看起來像:

menuentry 'Debian GNU/Linux' ... {
        load_video
        insmod gzio
        insmod part_gpt
        insmod ext2
        search --no-floppy --fs-uuid --set=root fe3e1db5-6454-46d6-a14c-071208ebe4b1
        echo    'Loading Linux 5.10.0-6-amd64 ...'
        linux   /boot/vmlinuz-5.10.0-6-amd64 root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.10.0-6-amd64
}

對于這部分的 /boot/grub/grub.cfg,這個菜單條目的意義如下。

表 3.2. /boot/grub/grub.cfg 文件上面部分菜單條目意義

設置
GRUB2 模塊加載 gzio, part_gpt, ext2
使用的根文件系統(tǒng)分區(qū) UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 指定的分區(qū)標識
內(nèi)核鏡像文件在根文件系統(tǒng)中的路徑 /boot/vmlinuz-5.10.0-6-amd64
使用的內(nèi)核啟動參數(shù) "root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet"
initrd 鏡像文件在根文件系統(tǒng)中的路徑 /boot/initrd.img-5.10.0-6-amd64

提示

通過設置在 /etc/default/grubGRUB_BACKGROUND 變量指向到圖像文件,或者把圖像文件本身放入 /boot/grub/,你能夠定制 GRUB 的啟動圖像。

參見 “info grub” 及 grub-install(8)。

3.1.3. 第三階段:迷你 Debian 系統(tǒng)

迷你 Debian 系統(tǒng)是啟動流程的第三階段,由引導加載程序啟動。它會在內(nèi)存中運行系統(tǒng)內(nèi)核和根文件系統(tǒng)。這是啟動流程的一個可選準備階段。

注意

“迷你 Debian 系統(tǒng)”是筆者自創(chuàng)的術(shù)語,用于在本文檔中描述啟動流程的第三個階段。這個系統(tǒng)通常被稱為 initrd 或 initramfs 系統(tǒng)。內(nèi)存中類似的系統(tǒng)在 Debian 安裝程序中使用。

/init 程序是內(nèi)存中的根文件系統(tǒng)上執(zhí)行的第一個程序。這個程序在用戶空間把內(nèi)核初始化,并把控制權(quán)交給下一階段。迷你 Debian 系統(tǒng)能夠在主引導流程之前添加內(nèi)核模塊或以加密形式掛載根文件系統(tǒng),使引導流程更加靈活。

  • 如果 initramfs 是由 initramfs-tools 創(chuàng)建,則"/init" 程序是一個 shell 腳本程序。

    • 通過給內(nèi)核添加 “break=init" 等啟動參數(shù),你可以中斷這部分啟動流程以獲取 root shell。更多中斷條件請參見 ”/init“ 腳本。這個 shell 環(huán)境已足夠成熟,你可通過它很好地檢查機器的硬件。

    • 迷你 Debian 系統(tǒng)中可用的命令是精簡過的,且主要由一個稱為 busybox(1) 的 GNU 工具提供。

  • 如果 initramfs 是由 dracut 創(chuàng)建,則 "/init" 程序是一個二進制 systemd 程序。

    • 迷你 Debian 系統(tǒng)中可用的命令是一個精簡過的 systemd(1) 環(huán)境。

小心

當在一個只讀的根文件系統(tǒng)上時,使用 mount 命令需要添加 -n 選項。

3.1.4. 第四階段:常規(guī) Debian 系統(tǒng)

常規(guī) Debian 系統(tǒng)是啟動流程的第四階段,由迷你 Debian 系統(tǒng)啟動。迷你 Debian 系統(tǒng)的內(nèi)核在此環(huán)境下繼續(xù)運行。根文件系統(tǒng)將由內(nèi)存切換到實際的硬盤文件系統(tǒng)上。

init 程序是系統(tǒng)執(zhí)行的第一個程序(PID=1),它啟動其它各種程序以完成主引導流程。init 程序的默認路徑是 ”/sbin/init“,但可通過內(nèi)核啟動參數(shù)修改,例如 ”init=/path/to/init_program"。

在 Debian 8 jessie(2015 年發(fā)布)版本后,"/sbin/init" 是一個到 "/lib/systemd/systemd" 的符號鏈接。

提示

你的系統(tǒng)中實際使用的 init 命令可以使用 “ps --pid 1 -f” 命令確認。

表 3.3. Debian 系統(tǒng)啟動工具列表

軟件包 流行度 大小 說明
systemd V:849, I:941 16625 基于事件且支持并發(fā)的 init(8) 守護進程(可替代 sysvinit
systemd-sysv V:820, I:939 147 systemd 需用的用以代替 sysvinit 的手冊頁和符號鏈接
init-system-helpers V:687, I:952 133 sysvinitsystemd 之間進行轉(zhuǎn)換的幫助工具
initscripts V:64, I:238 172 用于初始化和關閉系統(tǒng)的腳本
sysvinit-core V:7, I:8 279 類 System V 的 init(8) 工具
sysv-rc V:127, I:251 82 類 System V 的運行級別修改機制
sysvinit-utils V:403, I:999 81 類 System V 的實用工具(startpar(8),bootlogd(8),……)
lsb-base V:895, I:999 49 Linux 標準規(guī)范 3.2 版的 init 腳本功能
insserv V:153, I:248 153 利用 LSB init.d 腳本依賴性來組織啟動步驟的工具
uswsusp V:1, I:5 714 使用 Linux 提供的用戶態(tài)軟件 suspend 的工具
kexec-tools V:1, I:7 289 用于 kexec(8) 重啟(熱啟動)的 kexec 工具
systemd-bootchart V:0, I:1 128 啟動流程性能分析器
bootchart2 V:0, I:0 NOT_FOUND 啟動流程性能分析器
pybootchartgui V:0, I:0 NOT_FOUND 啟動流程性能分析器(可視化)
mingetty V:0, I:3 38 僅包含控制臺的 getty(8)
mgetty V:0, I:0 315 可智能調(diào)制解調(diào)的 getty(8) 替代品

提示

有關啟動流程加速的最新信息,請參見 Debian 維基:啟動流程加速詞條。

3.2. Systemd 初始化

本節(jié)描述系統(tǒng)是怎樣通過 PID=1systemd(1) 程序來啟動(即初始化進程)。

systemd 初始化進程基于單元配置文件 (參見 systemd.unit(5)) 來并行派生進程,這些單元配置文件使用聲明樣式來書寫,代替之前的類 SysV 的過程樣式。這些單元配置文件從下面的一系列路徑來加載 (參見 systemd-system.conf(5)) :

派生的進程被放在一個單獨的 Linux control groups,在單元后命名,它們屬于一個私有的 systemd 層級結(jié)構(gòu)(參見 cgroups 和 第 4.7.4 節(jié) “Linux 安全特性”)。

單元配置文件從下列一系列路徑中加載(參見 systemd-system.conf(5)):

  • "/lib/systemd/system": OS 默認配置文件

  • "/etc/systemd/system": 系統(tǒng)管理員的配置文件,它將忽略操作系統(tǒng)默認的配置文件

  • "/run/systemd/system": 運行時產(chǎn)生的配置文件,它將忽略安裝的配置文件

他們的相互依賴關系通過"Wants=", "Requires=", "Before=", "After=", … 等指示來配置,(參見 systemd.unit(5) 里的 "MAPPING OF UNIT PROPERTIES TO THEIR INVERSES")。 資源控制也是被定義 (參見 systemd.resource-control(5)).

根據(jù)單元配置文件的后綴來區(qū)分它們的類型:

  • *.service 描述由 systemd 控制和監(jiān)管的進程.參見 systemd.service(5).

  • *.device 描述在 sysfs(5) 里面作為 udev(7) 設備樹展示的設備。參見 systemd.device(5).

  • *.mount 描述由 systemd 控制和監(jiān)管的文件系統(tǒng)掛載點。參見 systemd.mount(5).

  • *.automount 描述由 systemd 控制和監(jiān)管的文件系統(tǒng)自動掛載點。參見 systemd.automount(5).

  • *.swap 描述由 systemd 控制和監(jiān)管的 swap 文件或設備。參見 systemd.swap(5).

  • *.path 描述被 systemd 監(jiān)控的路徑,用于基于路徑的活動。參見 systemd.path(5).

  • *.socket 描述被 systemd 控制和監(jiān)管的套接字,用于基于套接字的活動。參見 systemd.socket(5).

  • *.timer 描述被 systemd 控制和監(jiān)管的計時器,用于基于時間的活動。參見 systemd.timer(5).

  • *.slice 管理 cgroups(7) 的資源。參見 systemd.slice(5).

  • *.scope 使用 systemd 的總線接口來程序化的創(chuàng)建,用以管理一系列系統(tǒng)進程。 參見 systemd.scope(5).

  • *.target 把其它單元配置文件分組,在啟動的時候,來創(chuàng)建同步點。參見systemd.target(5).

系統(tǒng)啟動時(即,init),systemd 進程會嘗試啟動"/lib/systemd/system/default.target(通常是到"graphical.target"的符號鏈接)。首先,一些特殊的 target 單元(參見 systemd.special(7)),比如 "local-fs.target"、"swap.target"和"cryptsetup.target"會被引入以掛載文件系統(tǒng)。之后,其它 target 單元也會根據(jù)單元依賴關系而被引入。詳細情況,請閱讀 bootup(7)。

systemd 提供向后兼容的功能。在 "/etc/init.d/rc[0123456S].d/[KS]name" 里面的 SysV 風格的啟動腳本仍然會被分析;telinit(8) 會被轉(zhuǎn)換為 systemd 的單元活動請求。

小心

模擬的運行級別 2 到 4 全部被符號鏈接到了相同的“multi-user.target”。

3.2.1. 主機名

內(nèi)核維護系統(tǒng)主機名。在啟動的時候,通過 systemd-hostnamed.service 啟動的系統(tǒng)單位設置系統(tǒng)的主機名,此主機名保存在 "/etc/hostname"。這個文件應該包含系統(tǒng)主機名,而不是全稱域名。

不帶參數(shù)運行 hostname(1) 命令可以打印出當前的主機名。

3.2.2. 文件系統(tǒng)

硬盤和網(wǎng)絡文件系統(tǒng)的掛載選項可以在 "/etc/fstab" 中設置,參見 fstab(5) 和 第 9.6.7 節(jié) “通過掛載選項優(yōu)化文件系統(tǒng)”。

加密文件系統(tǒng)的配置設置在“/etc/crypttab”中。參見 crypttab(5)

軟 RAID 的配置 mdadm(8) 設置在 "/etc/mdadm/mdadm.conf". 參見 mdadm.conf(5).

警告

每次啟動的時候,在掛載了所有文件系統(tǒng)以后,"/tmp", "/var/lock", 和 "/var/run" 中的臨時文件會被清空。

3.2.3. 網(wǎng)絡接口初始化

對于使用 systemd 的現(xiàn)代 Debian 桌面系統(tǒng),網(wǎng)絡接口通常由兩個服務進行初始化:lo 接口通常在“networking.service”處理,而其它接口則由“NetworkManager.service”處理。

參見 第 5 章 網(wǎng)絡設置 來獲取怎樣來配置它們的信息。

3.3. 內(nèi)核消息

在控制臺上顯示的內(nèi)核錯誤信息,能夠通過設置他們的閾值水平來配置。

# dmesg -n3

表 3.4. 內(nèi)核錯誤級別表

錯誤級別值 錯誤級別名稱 說明
0 KERN_EMERG 系統(tǒng)不可用
1 KERN_ALERT 行為必須被立即采取
2 KERN_CRIT 危險條件
3 KERN_ERR 錯誤條件
4 KERN_WARNING 警告條件
5 KERN_NOTICE 普通但重要的條件
6 KERN_INFO 信息提示
7 KERN_DEBUG debug 級別的信息

3.4. 系統(tǒng)消息

systemd 下, 內(nèi)核和系統(tǒng)的信息都通過日志服務 systemd-journald.service (又名 journald)來記錄,放在"/var/log/journal"下的不變的二進制數(shù)據(jù),或放在"/run/log/journal/"下的變化的二進制數(shù)據(jù).這些二進制日志數(shù)據(jù),可以通過 journalctl(1) 命令來訪問。例如,你可以顯示從最后一次啟動以來的日志,按如下所示:

$ journalctl -b

表 3.5. 典型的 journalctl 命令片段列表

操作 命令片段
查看從最后一次啟動開始的系統(tǒng)服務和內(nèi)核日志 "journalctl -b --system"
查看從最后一次啟動開始的當前用戶的服務日志 "journalctl -b --user"
查看從最后一次啟動開始的 "$unit" 工作日志 "journalctl -b -u $unit"
查看從最后一次啟動開始的 "$unit"的工作日志 ("tail -f" 式樣) "journalctl -b -u $unit -f"

systemd 下,系統(tǒng)日志工具 rsyslogd(8) 可以被卸載。如果安裝了它,它會改變它的行為來讀取易失性二進制日志數(shù)據(jù)(代替在 systemd 之前默認的 "/dev/log")并創(chuàng)建傳統(tǒng)的永久性 ASCII 系統(tǒng)日志數(shù)據(jù)。"/etc/default/rsyslog" 和 "/etc/rsyslog.conf" 能夠自定義日志文件和屏幕顯示。參見 rsyslogd(8) 和 rsyslog.conf(5),也可以參見第 9.3.2 節(jié) “日志分析”。

3.5. 系統(tǒng)管理

systemd 不僅僅提供系統(tǒng)初始化,還用 systemctl(1) 命令提供通用的系統(tǒng)管理操作。

表 3.6. 典型的 systemctl 命令片段列表

操作 命令片段
列出所有 target 單元配置 "systemctl list-units --type=target"
列出所有 service 單元配置 "systemctl list-units --type=service"
列出所有單元配置類型 "systemctl list-units --type=help"
列出內(nèi)存中所有 socket 單元 "systemctl list-sockets"
列出內(nèi)存中所有 timer 單元 "systemctl list-timers"
啟動 "$unit" "systemctl start $unit"
停止 "$unit" "systemctl stop $unit"
重新加載服務相關的配置 "systemctl reload $unit"
停止和啟動所有 "$unit" "systemctl restart $unit"
啟動 "$unit" 并停止所有其它的 "systemctl isolate $unit"
轉(zhuǎn)換到 "圖形" (圖形界面系統(tǒng)) "systemctl isolate graphical"
轉(zhuǎn)換到 "多用戶" (命令行系統(tǒng)) "systemctl isolate multi-user"
轉(zhuǎn)換到 "應急模式" (單用戶命令行系統(tǒng)) "systemctl isolate rescue"
向"$unit"發(fā)送殺死信號 "systemctl kill $unit"
檢查"$unit"服務是否是活動的 "systemctl is-active $unit"
檢查"$unit"服務是否是失敗的 "systemctl is-failed $unit"
檢查"$unit|$PID|device"的狀態(tài) "systemctl status $unit|$PID|$device"
顯示"$unit|$job"的屬性 "systemctl show $unit|$job"
重設失敗的"$unit" "systemctl reset-failed $unit"
列出所有單元服務的依賴性 "systemctl list-dependencies --all"
列出安裝在系統(tǒng)上的單元文件 "systemctl list-unit-files"
啟用 "$unit" (增加符號鏈接) "systemctl enable $unit"
禁用 "$unit" (刪除符號鏈接) "systemctl disable $unit"
取消遮掩 "$unit" (刪除到 "/dev/null" 的符號鏈接) "systemctl unmask $unit"
遮掩 "$unit" (增加到 "/dev/null" 的符號鏈接) "systemctl mask $unit"
獲取默認的 target 設置 "systemctl get-default"
設置默認 target 為"graphical" (圖形系統(tǒng)) "systemctl set-default graphical"
設置默認的 target 為"multi-user" (命令行系統(tǒng)) "systemctl set-default multi-user"
顯示工作環(huán)境變量 "systemctl show-environment"
設置環(huán)境變量 "variable" 的值為 "value" "systemctl set-environment variable=value"
取消環(huán)境變量 "variable" 的設置 "systemctl unset-environment variable"
重新加載所有單元文件和后臺守護進程(daemon) "systemctl daemon-reload"
關閉系統(tǒng) "systemctl poweroff"
關閉和重啟系統(tǒng) "systemctl reboot"
掛起系統(tǒng) "systemctl suspend"
休眠系統(tǒng) "systemctl hibernate"

這里, 上面例子中的"$unit",可以是一個單元名(后綴.service.target 是可選的),或者,在很多情況下,也可以是匹配的多個單元 (shell 式樣的全局通配符"*", "?", "[]",通過使用 fnmatch(3) ,來匹配目前在內(nèi)存中的所有單元的基本名稱).

上面列子的系統(tǒng)狀態(tài)改變命令,通常是通過"sudo"來處理,用以獲得需要的系統(tǒng)管理權(quán)限。

"systemctl status $unit|$PID|$device" 的輸出使用有顏色的點("●")來概述單元狀態(tài),讓人看一眼就知道。

  • 白色的 "●" 表示一個 "不活動"或"變?yōu)椴换顒又?的狀態(tài)。

  • 紅色的 "●"表示“失敗”或者“錯誤”狀態(tài)。

  • 綠色"●"表示“活動”、“重新加載中”或“激活中”狀態(tài)。

3.6. 其它系統(tǒng)監(jiān)控

這里是 systemd 下其它零星的監(jiān)控命令列表。請閱讀包括 cgroups(7) 在內(nèi)的相關的 man 手冊頁。

表 3.7. systemd 下其它零星監(jiān)控命令列表

操作 命令片段
顯示每一個初始化步驟所消耗的時間 "systemd-analyze time"
列出所有單元的初始化時間 "systemd-analyze blame"
加載"$unit"文件并檢測錯誤 "systemd-analyze verify $unit"
簡潔的顯示用戶調(diào)用會話的運行時狀態(tài)信息 "loginctl user-status"
簡潔的顯示調(diào)用會話的運行時狀態(tài)信息 "loginctl session-status"
跟蹤 cgroups 的啟動過程 "systemd-cgls"
跟蹤 cgroups 的啟動過程 "ps xawf -eo pid,user,cgroup,args"
跟蹤 cgroups 的啟動過程 讀取 "/sys/fs/cgroup/systemd/" 下的 sysfs

3.7. 定制 systemd

3.7.1. 套接字激活

使用默認安裝,通過 systemd 啟動的過程中,在 network.target 啟動后,很多網(wǎng)絡服務 (參見 第 6 章 網(wǎng)絡應用)作為后臺守護進程(daemon)啟動。 "sshd" 也不列外。讓我們修改為按需啟動"sshd" 作為一個定制化的例子。

首先,禁用系統(tǒng)安裝的服務單元。

 $ sudo systemctl stop sshd.service
 $ sudo systemctl mask sshd.service

傳統(tǒng) Unix 服務的按需套接字激活(on-demand socket activation)系統(tǒng)由 inetd (或 xinetd)超級服務來提供。在 systemd 下, 相同功能能夠通過增加*.socket*.service 單元配置文件來啟用。

sshd.socket 用來定義一個監(jiān)聽的套接字

[Unit]
Description=SSH Socket for Per-Connection Servers

[Socket]
ListenStream=22
Accept=yes

[Install]
WantedBy=sockets.target

sshd@.service 作為 sshd.socket 匹配的服務文件

[Unit]
Description=SSH Per-Connection Server

[Service]
ExecStart=-/usr/sbin/sshd -i
StandardInput=socket

然后重新加載。

 $ sudo systemctl daemon-reload

3.8. udev 系統(tǒng)

從 Linux 內(nèi)核 2.6 版開始,udev 系統(tǒng) 提供了自動硬件發(fā)現(xiàn)和初始化機制。(參見 udev(7)).在內(nèi)核發(fā)現(xiàn)每個設備的基礎上,udev 系統(tǒng)使用從 sysfs 文件系統(tǒng) (參見 第 1.2.12 節(jié) “procfs 和 sysfs”)的信息啟動一個用戶進程,使用 modprobe(8) 程序 (參見 第 3.8.1 節(jié) “內(nèi)核模塊初始化”)加載支持它所要求的內(nèi)核模塊, 創(chuàng)建相應的設備節(jié)點。

提示

如果由于某些理由,"/lib/modules/kernel-version/modules.dep"沒有被 depmod(8) 正常生成,模塊可能不會被 udev 系統(tǒng)按期望的方式加載。執(zhí)行"depmod -a" 來修復它。

"/etc/fstab"里面的掛載規(guī)則,設備節(jié)點不必需是靜態(tài)的。你能夠使用 UUID 來掛載設備,來代替"/dev/sda"之類的設備名. 參見 第 9.6.3 節(jié) “使用 UUID 訪問分區(qū)”.

由于 udev 系統(tǒng)是一個正在變化的事物,我在其它文檔進行了詳細描述,在這里只提供了最少的信息。

3.8.1. 內(nèi)核模塊初始化

通過 modprobe(8) 程序添加和刪除內(nèi)核模塊,使我們能夠從用戶進程來配置正在運行的 Linux 內(nèi)核。udev 系統(tǒng)(參見 第 3.8 節(jié) “udev 系統(tǒng)”)自動化它的調(diào)用來幫助內(nèi)核模塊初始化。

下面的非硬件模塊和特殊的硬件驅(qū)動模塊,需要被預先加載,把它們在"/etc/modules"文件里列出 (參見 modules(5)).

  • TUN/TAP 模塊提供虛擬的 Point-to-Point 網(wǎng)絡設備 (TUN) 和虛擬的 Ethernet 以太網(wǎng)網(wǎng)絡設備 (TAP),

  • netfilter 模塊提供 netfilter 防火墻能力(iptables(8), 第 5.6 節(jié) “Netfilter 網(wǎng)絡過濾框架”),

  • watchdog timer 驅(qū)動模塊。

modprobe(8) 程序的配置文件是按 modprobe.conf(5)的說明放在"/etc/modprobes.d/" 目錄下,(如果你想避免自動加載某些內(nèi)核模塊,考慮把它們作為黑名單放在"/etc/modprobes.d/blacklist" 文件里.)

"/lib/modules/version/modules.dep" 文件由 depmod(8) 程序生成,它描述了 modprobe(8) 程序使用的模塊依賴性.

注意

如果你在啟動時出現(xiàn)模塊加載問題,或者 modprobe(8)時出現(xiàn)模塊加載問題, "depmod -a" 可以通過重構(gòu)"modules.dep"來解決這些問題。

modinfo(8) 程序顯示 Linux 內(nèi)核模塊信息。

lsmod(8) 程序以好看的格式展示"/proc/modules"的內(nèi)容,顯示當前內(nèi)核加載了哪些模塊。

提示

你能夠精確識別你系統(tǒng)上的硬件。 參見第 9.5.3 節(jié) “硬件識別”.

你可以在啟動時配置硬件來激活期望的硬件特征。參見 第 9.5.4 節(jié) “硬件配置”.

你可以重新編譯內(nèi)核來增加你的特殊設備的支持。參見 第 9.10 節(jié) “內(nèi)核”.


網(wǎng)站名稱:【Debian參考手冊】第?3?章?系統(tǒng)初始化
分享網(wǎng)址:http://m.5511xx.com/article/cdcgsjc.html