웹사이트 검색

Linux에서 부팅 문제를 확인하고 해결하는 방법


Linux 시스템은 너무 빨리 부팅되어 대부분의 출력이 너무 빨리 스크롤되어 콘솔로 전송된 텍스트(서비스가 시작됨을 표시)를 읽을 수 없습니다. 따라서 부팅 문제/오류를 관찰하는 것은 우리에게 다소 어려운 일이 됩니다.

이 기사에서는 Linux 시스템 부팅 프로세스의 여러 단계를 간략하게 설명한 다음 부팅 문제(조사할 파일 또는 시스템 부팅 메시지를 보는 명령)를 설정하고 근본 원인을 파악하는 방법을 알아봅니다.

Linux 부팅 프로세스 요약

요약하자면, 전원 켜기 버튼을 누르면 마더보드에 통합된 프로그램인 BIOS(기본 입출력 시스템)가 전원 켜기를 수행합니다. >POST(전원 자체 테스트) – 디스크, RAM(Random Access Memory), 키보드 등과 같은 하드웨어를 검사합니다. 오류(하드웨어 누락/오작동)가 발생하면 화면에 보고됩니다.

POST 중에 BIOS는 부팅 장치, 즉 시동할 디스크(일반적으로 첫 번째 하드 디스크이지만 DVD, USB로 구성할 수도 있음)도 찾습니다. , 네트워크 카드 등).

그런 다음 시스템은 디스크에 연결하고 부트 로더(446바이트 크기)를 저장하는 마스터 부트 레코드(512바이트 크기)를 검색하고 나머지 공간은 디스크 파티션에 대한 정보를 저장합니다. (최대 4개) 및 MBR 자체.

권장 읽기: 최고의 Linux 부트 로더 4가지

부트 로더는 커널 및 initrd 파일(초기화 램 디스크 – 마운트된 루트 파일 시스템 및 /에 저장된 모듈/드라이버에 대한 커널 액세스를 제공합니다)을 식별하고 지정하고 로드합니다. lib 디렉터리), 일반적으로 파일 시스템의 /boot 디렉터리에 저장됩니다.

커널이 로드된 후 PID 1을 사용하는 첫 번째 프로세스인 init(또는 최신 Linux 배포판에서는 systemd)를 실행하며, 이는 차례로 시스템의 다른 모든 프로세스를 시작합니다. 이는 시스템 종료 시 실행되는 마지막 프로세스이기도 합니다.

Linux 부팅 문제 또는 오류 메시지를 찾는 방법

앞서 언급했듯이 Linux 부팅 프로세스는 빠르게 진행되므로 콘솔로 전송된 대부분의 출력을 명확하게 읽을 수도 없습니다.

따라서 부팅 문제/오류를 기록하려면 시스템 관리자가 특정 명령과 함께 특정 중요한 파일을 조사해야 합니다. 여기에는 다음이 포함됩니다.

/var/log/boot.log – 시스템 부팅 메시지 기록

이것은 아마도 시스템 부팅 중에 펼쳐진 모든 내용을 보기 위해 조사하고 싶은 첫 번째 파일일 것입니다.

부팅하는 동안 화면에 표시되는 출력을 따르려고 애쓰는 대신 부팅 프로세스가 완료된 후 이 파일을 확인하여 부팅 문제/오류를 확인하고 해결하는 데 도움을 받을 수 있습니다.

해당 목적을 위해 다음과 같이 cat 명령을 사용합니다(아래는 이 파일의 샘플입니다).

cat /var/log/boot.log
[  OK  ] Started Load/Save RF Kill Switch Status.
[ TIME ] Timed out waiting for device dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.device.
[DEPEND] Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c208ed615.
[DEPEND] Dependency failed for Swap.
[  OK  ] Reached target System Initialization.
[  OK  ] Listening on UUID daemon activation socket.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Listening on CUPS Scheduler.
[  OK  ] Started Daily apt activities.
[  OK  ] Reached target Timers.
[  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[  OK  ] Started ACPI Events Check.
[  OK  ] Started Trigger resolvconf update for networkd DNS.
[  OK  ] Started CUPS Scheduler.
[  OK  ] Reached target Paths.
[  OK  ] Listening on D-Bus System Message Bus Socket.
[  OK  ] Listening on ACPID Listen Socket.
         Starting Console System Startup Logging...
[  OK  ] Listening on Cockpit Web Service Socket.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
         Starting LSB: Set the CPU Frequency Scaling governor to "ondemand"...
[  OK  ] Started ACPI event daemon.
[  OK  ] Started mintsystem.service.
         Starting Detect the available GPUs and deal with any system changes...
         Starting LSB: daemon to balance interrupts for SMP systems...
         Starting Bluetooth service...
[  OK  ] Started ClamAV virus database updater.
         Starting LSB: Starts syslogd...
[  OK  ] Started Regular background program processing daemon.
         Starting Modem Manager...
         Starting Accounts Service...
......

위 출력에서 아래 줄에 표시된 부팅 문제가 있음을 확인할 수 있습니다.

[DEPEND] Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c208ed615.
[DEPEND] Dependency failed for Swap.

문제: 스왑 파티션에 문제가 있습니다. 시스템이 스왑 파일/장치/파티션을 읽지 못했거나 존재하지 않습니다.

free 명령으로 시스템이 스왑 공간을 사용하고 있는지 확인해 보겠습니다.

free

total        used        free      shared  buff/cache   available
Mem:        3742792     2421060      433696      287376      888036      967000
Swap:             0           0           0

또는 swapon 명령을 실행하여 시스템 스왑 공간 사용량 요약을 볼 수도 있습니다(어떤 출력도 얻지 못함).

swapon -s

Linux에서 스왑 공간을 생성하면 이 문제를 해결할 수 있습니다.

참고: 이 파일의 내용은 시스템 종료 시 지워집니다. 새로 부팅할 때 새 데이터가 해당 파일에 저장됩니다.

/var/log/messages – 일반 시스템 로그

이 파일은 시스템 부팅 중에 기록되는 메시지를 포함하여 일반 시스템 메시지를 저장합니다.

이를 보려면 다음을 입력하십시오.

cat /var/log/messages
Jun  4 13:04:44 tecmint syslogd (GNU inetutils 1.9.4): restart
Jun  4 13:19:55 tecmint -- MARK --
Jun  4 13:39:55 tecmint -- MARK --
Jun  4 13:59:55 tecmint -- MARK --
Jun  4 14:19:55 tecmint -- MARK --
Jun  4 14:20:17 tecmint vmunix: [ 4945.388740] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388837] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388903] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388930] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.389334] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.389402] pcieport 0000:00:1c.0: BAR 15: assigned [mem 0xdfa00000-0xdfbfffff 64bit pref]
.....

이 파일은 비교적 길기 때문에 이와 같이 more 명령(퍼센트도 표시)을 사용하여 페이지에서 볼 수 있습니다.

more /var/log/messages

/var/log/messages의 내용은 이전 파일과 달리 종료 시 지워지지 않습니다. 여기에는 부팅 메시지뿐만 아니라 다른 시스템 활동과 관련된 메시지도 포함되어 있기 때문입니다. 따라서 오래된 파일은 아래와 같이 나중에 검사할 수 있도록 압축되어 시스템에 보관됩니다.

ls -l message*

-rw-r--r-- 1 root root 1206127 Jun 10 14:20 messages
-rw-r--r-- 1 root root 1419494 Jun  4 13:00 messages.1
-rw-r--r-- 1 root root  153011 May 28 09:30 messages.2.gz

dmesg – 커널 메시지 표시

dmesg 명령은 부팅 프로세스가 완료되면 커널에 전달된 명령줄 옵션과 같은 작업을 표시할 수 있습니다. 감지된 하드웨어 구성 요소, 새 USB 장치가 추가될 때의 이벤트 또는 NIC(네트워크 인터페이스 카드) 오류와 같은 오류 및 드라이버가 네트워크에서 감지된 링크 활동이 없다고 보고하는 등 다양한 기능이 있습니다.

dmesg
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=57b36d48-1938-43c2-bf85-e97bc9f423ea ro quiet splash
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000008ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000000090000-0x00000000000bffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000020200000-0x0000000040003fff] usable
[    0.000000] BIOS-e820: [mem 0x0000000040004000-0x0000000040004fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000040005000-0x0000000080b2ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000080b30000-0x0000000080d31fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000080d32000-0x00000000ce3eefff] usable
[    0.000000] BIOS-e820: [mem 0x00000000ce3ef000-0x00000000ce5eefff] type 20
[    0.000000] BIOS-e820: [mem 0x00000000ce5ef000-0x00000000daeeefff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000daeef000-0x00000000daf9efff] ACPI NVS
....

Journalctl – Systemd Journal의 내용 쿼리

이는 최신 시스템 및 서비스 관리자인 systemd를 사용하는 최신 Linux 배포판에서 유용합니다. 그 아래에서 시스템 로깅은 다양한 구성 요소에 의해 기록된 모든 메시지의 중앙 위치인 저널 구성 요소를 통해 수행됩니다.

이러한 메시지에는 커널 및 부팅 메시지가 포함됩니다. syslog 또는 다양한 서비스의 메시지. 출력을 읽고 관심 있는 행(터미널 텍스트 색상 설정에 따라 빨간색 선으로 표시된 오류)을 식별하여 부팅 메시지를 검토하고 부팅 문제를 확인하는 데 사용할 수 있습니다.

journalctl
Jun 13 16:35:32 tecmint mtp-probe[963]: checking bus 2, device 5: "/sys/devices/pci0000:00/0000:00:1d.0/u
Jun 13 16:35:32 tecmint mtp-probe[963]: bus: 2, device: 5 was not an MTP device
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: Timed out waiting for device dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d
Jun 13 16:35:54 tecmint systemd[1]: Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c2
Jun 13 16:35:54 tecmint systemd[1]: Dependency failed for Swap.
Jun 13 16:35:54 tecmint systemd[1]: swap.target: Job swap.target/start failed with result 'dependency'.
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: Reached target System Initialization.
Jun 13 16:35:54 tecmint systemd[1]: Started ACPI Events Check.
Jun 13 16:35:54 tecmint systemd[1]: Listening on CUPS Scheduler.
Jun 13 16:35:54 tecmint systemd[1]: Starting Console System Startup Logging...
Jun 13 16:35:54 tecmint systemd[1]: Started Daily Cleanup of Temporary Directories.

위는 /var/log/boot.log를 확인하여 이미 식별한 오류(스왑 파티션 오류)를 보여주는 명령 출력의 샘플입니다. 더 많은 출력 라인을 보려면 [Enter] 버튼을 누르기만 하면 됩니다.

또한 일반적인 시스템 및 서비스 관리자와 관련된 Linux 시스템 부팅 및 서비스 관리에 대한 유용한 가이드를 확인하세요.

  1. RHEL 7의 프로세스 관리: 부팅, 종료 및 그 사이의 모든 것
  2. 시스템 시작 프로세스 및 서비스 관리(SysVinit, Systemd 및 Upstart)
  3. 'init'와 'systemd' 뒤에 숨겨진 이야기: 'init'를 'systemd'로 바꿔야 하는 이유

이 기사에서는 Linux 시스템 부팅 프로세스의 다양한 단계를 간략하게 설명하고 부팅 문제를 설정하고 해결하는 방법을 배웠습니다. 이 가이드에 대한 의견을 추가하려면 아래 의견 양식을 사용하십시오.