Linux Booting

yoni·2023년 4월 18일

Linux

목록 보기
13/16

System Boot Method

V init

  • 커널에 의해 init 프로그램이 제일 먼저 실행 (pid=1)
    • init process: 순차처리
  • 부팅 속도가 빨라지지 않음 -> Upstart로 변경

Upstart

  • 마찬가지로 init process 사용
  • 사실 이전과 큰 차이가 없다.

Systemd

  • CentOS 7,8버전에 해당

  • init process가 아닌, systemd process를 통해서 다른 process를 관리 처리하겠다고 변경

  • 순차처리가 아닌, 병렬처리(Parallel) -> 부팅 속도 빨라짐

    • 즉, systemd가 여러 process를 병렬로 처리하여 속도의 향상
    • 만약 의존성 관계가 있으면 tree형태로 처리
      [root@station14 ~]# pstree -p
      systemd(1)─┬─NetworkManager(871)─┬─dhclient(938)
               │                     ├─{NetworkManager}(913)
               │                     └─{NetworkManager}(915)
               ├─abrt-watch-log(821)
               ├─abrt-watch-log(857)
               ├─abrtd(819)
               ├─accounts-daemon(830)─┬─{accounts-daemon}(841)
               │                      └─{accounts-daemon}(844)
               ├─acpid(868)
               ├─at-spi-bus-laun(1895)─┬─dbus-daemon(1900)───{dbus-daemon}(1901)
               │                       ├─{at-spi-bus-laun}(1896)
               │                       ├─{at-spi-bus-laun}(1897)
               │                       └─{at-spi-bus-laun}(1899)
               ├─at-spi2-registr(1903)─┬─{at-spi2-registr}(1904)
               │                       └─{at-spi2-registr}(1905)
               ├─atd(1146)
               ├─auditd(775)─┬─audispd(788)─┬─sedispatch(795)
               │             │              └─{audispd}(796)
               │             └─{auditd}(787)
               ├─automount(7447)─┬─{automount}(7448)
               │                 ├─{automount}(7449)
               │                 ├─{automount}(7452)
               │                 ├─{automount}(7455)
               │                 ├─{automount}(7456)
               │                 └─{automount}(7457)
               ├─avahi-daemon(839)───avahi-daemon(845)
               ├─caribou(1993)─┬─{caribou}(1996)
               │               └─{caribou}(1999)
               ├─chronyd(846)
               ├─colord(1485)─┬─{colord}(1488)
               │              └─{colord}(1490)
               ├─crond(1144)
               ├─cupsd(1121)
               ├─dbus-daemon(1724)───{dbus-daemon}(1725)
               ├─dbus-daemon(810)───{dbus-daemon}(813)
               ├─dbus-launch(1723)
               ├─dconf-service(2384)─┬─{dconf-service}(2385)
               │                     └─{dconf-service}(2386)
               ├─dnsmasq(1353)───dnsmasq(1354)
               ├─evolution-calen(2155)─┬─{evolution-calen}(2160)
               │                       ├─{evolution-calen}(2162)
               │                       ├─{evolution-calen}(2163)
               │                       ├─{evolution-calen}(2164)
               │                       └─{evolution-calen}(2167)
               ├─evolution-sourc(1964)─┬─{evolution-sourc}(1965)
               │                       └─{evolution-sourc}(1966)
               ├─gconfd-2(2318)
               ├─gdm(1143)─┬─Xorg(1398)─┬─{Xorg}(1399)
               │           │            ├─{Xorg}(1400)
               │           │            └─{Xorg}(1401)
               │           ├─gdm-session-wor(1696)─┬─gnome-session(1716)─┬─abrt-applet(2043)─┬─{abrt-applet+
               │           │                       │                     │                   └─{abrt-applet+
               │           │                       │                     ├─gnome-settings-(1912)─┬─{gnome-s+
               │           │                       │                     │                       ├─{gnome-s+
               │           │                       │                     │                       ├─{gnome-s+
               │           │                       │                     │                       └─{gnome-s+
               │           │                       │                     ├─gnome-shell(1928)─┬─firefox(2261+
               │           │                       │                     │                   ├─ibus-daemon(+
               │           │                       │                     │                   ├─{gnome-shell+
               │           │                       │                     │                   ├─{gnome-shell+
               │           │                       │                     │                   ├─{gnome-shell+
               │           │                       │                     │                   ├─{gnome-shell+
               │           │                       │                     │                   └─{gnome-shell+
               │           │                       │                     ├─gnome-software(2052)─┬─{gnome-so+
               │           │                       │                     │                      ├─{gnome-so+
               │           │                       │                     │                      └─{gnome-so+
               │           │                       │                     ├─nautilus(2026)─┬─{nautilus}(2028+
               │           │                       │                     │                ├─{nautilus}(2029+
               │           │                       │                     │                └─{nautilus}(2068+
               │           │                       │                     ├─seapplet(2032)
               │           │                       │                     ├─ssh-agent(1883)
               │           │                       │                     ├─tracker-extract(2046)─┬─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       └─{tracker+
               │           │                       │                     ├─tracker-miner-a(2047)─┬─{tracker+
               │           │                       │                     │                       └─{tracker+
               │           │                       │                     ├─tracker-miner-f(2050)─┬─{tracker+
               │           │                       │                     │                       ├─{tracker+
               │           │                       │                     │                       └─{tracker+
               │           │                       │                     ├─tracker-miner-u(2051)─┬─{tracker+
               │           │                       │                     │                       └─{tracker+
               │           │                       │                     ├─{gnome-session}(1906)
               │           │                       │                     ├─{gnome-session}(1907)
               │           │                       │                     └─{gnome-session}(1908)
               │           │                       ├─{gdm-session-wor}(1697)
               │           │                       └─{gdm-session-wor}(1698)
               │           ├─{gdm}(1179)
               │           ├─{gdm}(1180)
               │           └─{gdm}(1397)
               ├─gnome-keyring-d(1706)─┬─{gnome-keyring-d}(1707)
               │                       ├─{gnome-keyring-d}(1920)
               │                       ├─{gnome-keyring-d}(1921)
               │                       └─{gnome-keyring-d}(1922)
               ├─gnome-shell-cal(1957)─┬─{gnome-shell-cal}(1960)
               │                       ├─{gnome-shell-cal}(1962)
               │                       ├─{gnome-shell-cal}(1977)
               │                       ├─{gnome-shell-cal}(1978)
               │                       └─{gnome-shell-cal}(2153)
               ├─gnome-terminal-(16364)─┬─bash(16372)───pstree(7971)
               │                        ├─gnome-pty-helpe(16371)
               │                        ├─{gnome-terminal-}(16365)
               │                        ├─{gnome-terminal-}(16366)
               │                        └─{gnome-terminal-}(16367)
               ├─goa-daemon(1969)─┬─{goa-daemon}(1970)
               │                  ├─{goa-daemon}(1972)
               │                  └─{goa-daemon}(1973)
               ├─goa-identity-se(1976)─┬─{goa-identity-se}(1981)
               │                       ├─{goa-identity-se}(1982)
               │                       └─{goa-identity-se}(1983)
               ├─gpm(823)
               ├─gsd-printer(1932)─┬─{gsd-printer}(1933)
               │                   └─{gsd-printer}(1934)
               ├─gssproxy(869)─┬─{gssproxy}(885)
               │               ├─{gssproxy}(886)
               │               ├─{gssproxy}(887)
               │               ├─{gssproxy}(888)
               │               └─{gssproxy}(889)
               ├─gvfs-afc-volume(2011)─┬─{gvfs-afc-volume}(2012)
               │                       ├─{gvfs-afc-volume}(2013)
               │                       └─{gvfs-afc-volume}(2015)
               ├─gvfs-goa-volume(2017)─┬─{gvfs-goa-volume}(2018)
               │                       └─{gvfs-goa-volume}(2019)
               ├─gvfs-gphoto2-vo(2022)─┬─{gvfs-gphoto2-vo}(2023)
               │                       └─{gvfs-gphoto2-vo}(2025)
               ├─gvfs-mtp-volume(2006)─┬─{gvfs-mtp-volume}(2007)
               │                       └─{gvfs-mtp-volume}(2009)
               ├─gvfs-udisks2-vo(2001)─┬─{gvfs-udisks2-vo}(2002)
               │                       └─{gvfs-udisks2-vo}(2003)
               ├─gvfsd(1792)─┬─{gvfsd}(1793)
               │             └─{gvfsd}(1794)
               ├─gvfsd-fuse(1797)─┬─{gvfsd-fuse}(1800)
               │                  ├─{gvfsd-fuse}(1801)
               │                  ├─{gvfsd-fuse}(1804)
               │                  ├─{gvfsd-fuse}(1805)
               │                  └─{gvfsd-fuse}(1811)
               ├─gvfsd-metadata(6761)─┬─{gvfsd-metadata}(6762)
               │                      └─{gvfsd-metadata}(6763)
               ├─gvfsd-recent(2717)─┬─{gvfsd-recent}(2718)
               │                    └─{gvfsd-recent}(2719)
               ├─gvfsd-trash(2094)─┬─{gvfsd-trash}(2097)
               │                   └─{gvfsd-trash}(2098)
               ├─ibus-x11(1951)─┬─{ibus-x11}(1958)
               │                └─{ibus-x11}(1959)
               ├─irqbalance(817)
               ├─ksmtuned(882)───sleep(7962)
               ├─libvirtd(1131)─┬─{libvirtd}(1184)
               │                ├─{libvirtd}(1185)
               │                ├─{libvirtd}(1186)
               │                ├─{libvirtd}(1187)
               │                ├─{libvirtd}(1188)
               │                ├─{libvirtd}(1189)
               │                ├─{libvirtd}(1190)
               │                ├─{libvirtd}(1191)
               │                ├─{libvirtd}(1192)
               │                ├─{libvirtd}(1193)
               │                ├─{libvirtd}(1204)
               │                ├─{libvirtd}(1205)
               │                ├─{libvirtd}(1206)
               │                ├─{libvirtd}(1207)
               │                ├─{libvirtd}(1208)
               │                └─{libvirtd}(2862)
               ├─lsmd(836)
               ├─lvmetad(571)
               ├─master(1275)─┬─cleanup(7944)
               │              ├─local(7946)
               │              ├─pickup(7941)
               │              ├─qmgr(1277)
               │              └─trivial-rewrite(7945)
               ├─mcelog(870)
               ├─mission-control(1986)─┬─{mission-control}(1990)
               │                       ├─{mission-control}(1994)
               │                       └─{mission-control}(1995)
               ├─packagekitd(1554)─┬─{packagekitd}(1560)
               │                   └─{packagekitd}(1561)
               ├─polkitd(801)─┬─{polkitd}(808)
               │              ├─{polkitd}(814)
               │              ├─{polkitd}(815)
               │              ├─{polkitd}(816)
               │              └─{polkitd}(820)
               ├─qemu-kvm(7074)─┬─{qemu-kvm}(7099)
               │                ├─{qemu-kvm}(7100)
               │                ├─{qemu-kvm}(7101)
               │                └─{qemu-kvm}(7970)
               ├─rngd(838)
               ├─rsyslogd(1117)─┬─{rsyslogd}(1133)
               │                └─{rsyslogd}(1134)
               ├─rtkit-daemon(809)─┬─{rtkit-daemon}(858)
               │                   └─{rtkit-daemon}(859)
               ├─smartd(798)
               ├─sshd(1118)
               ├─systemd-journal(550)
               ├─systemd-logind(800)
               ├─systemd-machine(7075)
               ├─systemd-udevd(590)
               ├─tracker-store(2038)─┬─{tracker-store}(2042)
               │                     ├─{tracker-store}(2044)
               │                     ├─{tracker-store}(2045)
               │                     ├─{tracker-store}(2054)
               │                     ├─{tracker-store}(2055)
               │                     ├─{tracker-store}(2056)
               │                     └─{tracker-store}(2057)
               ├─tuned(1119)─┬─{tuned}(1215)
               │             ├─{tuned}(1216)
               │             ├─{tuned}(1217)
               │             └─{tuned}(1218)
               ├─udisksd(1576)─┬─{udisksd}(1579)
               │               ├─{udisksd}(1581)
               │               ├─{udisksd}(1602)
               │               └─{udisksd}(1606)
               ├─upowerd(1454)─┬─{upowerd}(1455)
               │               └─{upowerd}(1456)
               ├─virt-manager(2752)─┬─{virt-manager}(2756)
               │                    ├─{virt-manager}(2757)
               │                    ├─{virt-manager}(2758)
               │                    ├─{virt-manager}(2759)
               │                    ├─{virt-manager}(7103)
               │                    └─{virt-manager}(7104)
               ├─virtlogd(2776)───{virtlogd}(2778)
               ├─wpa_supplicant(1546)
               └─xinetd(1122)

    systemd

    • system 뿐만 아니라 service까지 관리
    • daemon
    • systemd 를 관리하는 컨트롤러 : systemctl
    • systemd의 핵심 키워드 :
      • 1) target : run level
      • 2) unit : script

    runlevel

    • 비슷한 작업을 하는 unit들(script들)의 묶음 : target
    • 즉, runlevel == target
    • Runlevel-Target
      • 0-poweroff.target -> halt
      • 1-rescue.target -> Single-user mode
      • 2-multi-user.target -> Full multi-user without networking
      • 3-multi-user.target -> Full multi-user with text mode login
      • 4-multi-user.target -> custom or local
      • 5-graphical.target -> Full multi-user with graphical login
      • 6-reboot.target -> reboot
    [root@localhost]# who -r
            run-level 5  2023-04-17 11:17
    [root@localhost]# runlevel
    N 5
    
    > runlevel 3으로 변경
    [root@localhost]# init 3
    [root@localhost]# runlevel
    5 3
    
    > runlevel 1으로 변경
    [root@localhost]# init 1
    [root@localhost]# runlevel
    3 1
    
    [root@localhost]# runlevel
    [root@localhost]# systemctl isolate graphical.target
    [root@localhost]# who -r
            run-level 5  2023-04-18 11:01	last=1

default boot target 확인 가능
[root@localhost] systemctl get-default

default boot target 설정 가능
[root@localhost] systemctl set-default multi-user.target

재부팅해보자 (reboot, or init 6 입력)

부트로더 : 커널 & 램디스크 로딩

  • GRUB
  1. 커널 & 램디스크를 메모리로 로딩
  2. systemd가
  3. systemd에 의해 나머지 process들이 병렬로 처리
  • 단계

    • 부트로더 설정파일

      • linux16 행 -> 커널 관련 설정
        • utf-8뒤에 rd.break 추가 : 커널 램디스크 로딩되자마자 멈춘다.
      • initrd16 행 -> 램디스크 관련 설경
    • root 디렉토리 변경

      • mount -o rw,remount /sysroot
      • chroot /sysroot
      • ls --- 평소에 보던 root 디렉토리가 출력됨.
    • passwd -- 비밀번호 변경

    • 장애처리 복구

      • vi /etc/fstab -> LVM관련 실습 코드 삭제 (부팅 지연된 이유:LVM 다 삭제했는데 fstab에는 남아있어서 부팅하기 전에 계속 시도하는 것)
    • 세팅했던 내용이 적용될 수 있도록 해당 파일 꼭 작성 필요함.

      • touch /.autorelabel

부팅과 서비스

  • Listing and Service (system 부팅 시 service 활성화되는지 아닌지 목록 확인)

    • systemctl list-unit-files --type=service
      • static -> 특정 서비스에 종속되어 있는 것
  • Start and Stop Service

    • service 서비스명 start|stop|status
    • /etc/init.d/스크립트명
  • Enabling and Disablig a service

    • chkconfig 서비스명 on|off
    • ntsysv
    • setup

Booting Linux on PC

  1. 전원 ON
  2. ROM : BIOS/UEFI
  3. 부트로더의 커널, 램디스크 로딩
  • 부팅매체 : 하드디스크 드라이브 (HDD)
    • MBR, GPT -> 부트로더(lilo, GRUB(v1.x,v2.x))
    • 부트로더의 역할 : 커널 & 램디스크를 메모리로 로딩 (-> systemd, init)
  1. systemd 실행 후, 여러 프로세스 병렬 처리

부트로더가 깨졌을 때

grub2-install /dev/vda
실행 시, 부트로더 다시 install

부트로더 다시 설정해야할 때

  • 가정
    • LAN 카드이름 : eth(x) -> en(o|s|pxsx)
    • 카드 이름이 바뀌어서 변경해야할 경우?
  1. 템플릿 파일 편집: /etc/defaults/grub
  2. grub2-mkconifg를 통해
  3. /boot/grub2grub.cfg(BIOS/MBR boot) 또는 /boot/efi/EFI/distro.grub.cfg(UEFI/GPT boot) 에 반영

vi /etc/default/grub

grub2-mkconfig -o /boot/grub2/grub.cfg

> 재부팅 후 ifconfig로 inet6 부분 삭제 확인

> 커널에 전달된 명령어 조회 가능
cat /proc/cmdline 

RAM disk


[root@station14 ~]# ls -l /boot
total 119432
-rw-r--r--. 1 root root   137701 Jun 30  2017 config-3.10.0-514.26.1.el7.x86_64
drwxr-xr-x. 2 root root       27 Apr  8 05:27 grub
drwx------. 6 root root      111 Apr  8 05:41 grub2
-rw-------. 1 root root 64540882 Apr  8 05:37 initramfs-0-rescue-2544d59d80f44d02b6ae0264364abe2e.img
-rw-------. 1 root root 33206678 Apr  8 05:41 initramfs-3.10.0-514.26.1.el7.x86_64.img
-rw-r--r--. 1 root root 10210059 Apr  8 05:36 initrd-plymouth.img
-rw-r--r--. 1 root root   277955 Jun 30  2017 symvers-3.10.0-514.26.1.el7.x86_64.gz
-rw-------. 1 root root  3114429 Jun 30  2017 System.map-3.10.0-514.26.1.el7.x86_64
-rwxr-xr-x. 1 root root  5397328 Apr  8 05:37 vmlinuz-0-rescue-2544d59d80f44d02b6ae0264364abe2e
-rwxr-xr-x. 1 root root  5397328 Jun 30  2017 vmlinuz-3.10.0-514.26.1.el7.x86_64

[root@station14 ~]# rm -f /boot/initramfs-3.10.0-514.26.1.el7.x86_64.img 

[root@station14 ~]# dracut --regenerate-all

[root@station14 ~]# ls -l /boot/
total 117028
-rw-r--r--. 1 root root   137701 Jun 30  2017 config-3.10.0-514.26.1.el7.x86_64
drwxr-xr-x. 2 root root       27 Apr  8 05:27 grub
drwx------. 6 root root      111 Apr  8 05:41 grub2
-rw-------. 1 root root 64540882 Apr  8 05:37 initramfs-0-rescue-2544d59d80f44d02b6ae0264364abe2e.img
-rw-------. 1 root root 30745655 Apr 18 14:00 initramfs-3.10.0-514.26.1.el7.x86_64.img
-rw-r--r--. 1 root root 10210059 Apr  8 05:36 initrd-plymouth.img
-rw-r--r--. 1 root root   277955 Jun 30  2017 symvers-3.10.0-514.26.1.el7.x86_64.gz
-rw-------. 1 root root  3114429 Jun 30  2017 System.map-3.10.0-514.26.1.el7.x86_64
-rwxr-xr-x. 1 root root  5397328 Apr  8 05:37 vmlinuz-0-rescue-2544d59d80f44d02b6ae0264364abe2e
-rwxr-xr-x. 1 root root  5397328 Jun 30  2017 vmlinuz-3.10.0-514.26.1.el7.x86_64

[root@station14 ~]# mkdir /tmp/ram

[root@station14 ~]# cd /tmp/ram/

[root@station14 ram]# /lib/dracut/skipcpio /boot/initramfs-3.10.0-514.26.1.el7.x86_64.img | zcat | cpio -icdmu
131313 blocks

[root@station14 ram]# ls
bin  etc   lib    proc  run   shutdown  sysroot  usr
dev  init  lib64  root  sbin  sys       tmp      var

> target들 간의 연간관계 확인
[root@station14 ram]# systemctl list-dependencies
default.target
● ├─accounts-daemon.service
● ├─gdm.service
● ├─network.service
● ├─rtkit-daemon.service
● ├─systemd-readahead-collect.service
● ├─systemd-readahead-replay.service
● ├─systemd-update-utmp-runlevel.service
● └─multi-user.target
●   ├─abrt-ccpp.service
●   ├─abrt-oops.service
●   ├─abrt-vmcore.service
●   ├─abrt-xorg.service
●   ├─abrtd.service
●   ├─acpid.service
●   ├─atd.service
●   ├─auditd.service
●   ├─autofs.service
●   ├─avahi-daemon.service
●   ├─brandbot.path
●   ├─chronyd.service
●   ├─crond.service
●   ├─cups.path
lines 1-23...skipping...

local bootup script support

[root@station14 ram]# cat -n /etc/rc.local 
     1	#!/bin/bash
     2	# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
     3	#
     4	# It is highly advisable to create own systemd services or udev rules
     5	# to run scripts during boot instead of using this file.
     6	#
     7	# In contrast to previous versions due to parallel execution during boot
     8	# this script will NOT be run after all other services.
     9	#
    10	# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
    11	# that this script will be executed during boot.
    12	
    13	touch /var/lock/subsys/local


[root@station14 ram]# vi /etc/rc.local 
      1 #!/bin/bash
      2 # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
      3 #
      4 # It is highly advisable to create own systemd services or udev rules
      5 # to run scripts during boot instead of using this file.
      6 #
      7 # In contrast to previous versions due to parallel execution during boot
      8 # this script will NOT be run after all other services.
      9 #
     10 # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
     11 # that this script will be executed during boot.
     12 
     13 touch /var/lock/subsys/local
     14 rdate -s time.bora.net    -- 부팅할 때 time.bora.net과 시간동기화
     
[root@station14 ram]# chmod +x /etc/rc.d/rc.local 

[root@station14 ram]# ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Apr  8 05:28 /etc/rc.local -> rc.d/rc.local

부팅 장애 발생 시킨 후, 장애 해결해보기

@@Physical computer
[root@station14 ~]# cd /var/lib/libvirt/images/
[root@station14 images]# ll
total 6385268
-rw-------. 1 root root  1074135040 Apr 17 10:52 vm1-1.qcow2
-rw-------. 1 root root  1074135040 Apr 17 09:59 vm1-2.qcow2
-rw-------. 1 root root  1074135040 Apr 17 11:11 vm1-3.qcow2
-rw-------. 1 root root  1074135040 Apr 17 11:11 vm1-4.qcow2
-rw-------. 1 qemu qemu  1074135040 Apr 18 14:18 vm1-5.qcow2
-rw-------. 1 qemu qemu  1074135040 Apr 18 14:18 vm1-6.qcow2
-rw-------. 1 qemu qemu  1074921472 Apr 18 14:18 vm1-7.qcow2
-rw-------. 1 qemu qemu  1074135040 Apr 18 14:18 vm1-8.qcow2
-rw-------. 1 qemu qemu 22654550016 Apr 18 14:19 vm1.qcow2
[root@station14 images]# wget http://59.29.224.181/CentOS.iso
--2023-04-18 14:20:02--  http://59.29.224.181/CentOS.iso
Connecting to 59.29.224.181:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1020264448 (973M) [application/octet-stream]
Saving to: ‘CentOS.iso’

100%[============================================================>] 1,020,264,448 4.28MB/s   in 2m 42s 

2023-04-18 14:22:43 (6.01 MB/s) - ‘CentOS.iso’ saved [1020264448/1020264448]


@@ Virtual Machine
> 부트로더 손상시키기 
dd if=/dev/zero of=/dev/vda bs=64 count=1



profile
study log

0개의 댓글