[Linux/Ubuntu 시스템 관리] Boot process 관리하기
시스템이 시작되면, BIOS에서 보통 이동식 drive에 disk가 있는지 확인하고, 없다면, 첫번째 부트 가능한 harddisk의 master boot record (MBR)을 찾는다. 이때, 대부분의 linux system에서 boot process 제어는 boot loader에서 처리된다.
ubuntu를 포함한 대부분의 linux system에서는 Grand Unified Boot Loader (GRUB)가 기본으로 사용된다. GRUB는 LILO를 대체하였다.
일단, boot loader에 의해 linux system이 선택되었다면, boot loader는 kernel을 load한다. 이때, kernel은 hard drive의 root file system을 mount할 필요가 있는데, 이는 적합한 storage driver (block device kernel module)을 요구한다. 이 driver는 hard drive에 위치해 있으며, block device module이 포함된 간단한 initial ramdisk (initrd)가 boot loader에 의해 mount된다. 이것이 root file system을 읽도록 linux kernel을 사용가능하게 해준다. 그 이후, init process는 run level에 따라 system service를 시작한다.
GRUB Boot Loader 사용하기
ubuntu 9.10 이후에 grub는 ext4 파일 시스템 지원등으로 인해 grub2가 사용된다. 그래서 기존에 사용되던 menu.lst(/boot/rub/menu.lst)는 사용되지 않는다. grub 관련 설정은 /etc/default/grub 이고, 해당 파일을 수정하면, sudo update-grub를 실행한다. 해당 파일은 대략 다음과 같다.
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
///
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
우선, 해당 설정 파일의 문서는 info 명령으로 확인 가능하다.
~$ info -f grub -n 'Simple configuration'
각각의 항목별 의미는 다음과 같은데, A=B로 설정된다. 값에 특수 문자나 공백이 포함된 경우, A="hello, world"와 같이 따옴표로 지정해야 한다. 값이 0인 경우 unset을 의미할 수 있다.
GRUB_DEFAULT
0부터 시작되는 기본으로 고려될 목록 번호. 기본값 0.
만일 값이 saved, 즉, GRUB_DEFAULT=saved로 되어 있으면, GRUB_SAVEDEFAULT, grub-set-default, 혹은 grub-reboot 값이 참조된다.
GRUB_SAVEDEFAULT
'true'인 경우, 선택된 항목이 다음 사용의 default 항목으로 설정되기 위해 저장된다. GRUB_DEFAULT=saved인 경우 사용된다.
GRUB_TIMEOUT
메뉴 선택까지 timeout 초. 기본값 5. 0인 경우 menu를 보여주기전 선택됨. -1은 무한 대기.
GRUB_HIDDEN_TIMEOUT
메뉴 표시전 키를 누를때 까지 기다릴 시간. 키를 누르게 되면 메뉴가 표시된다. 누르지 않으면 바로 부팅 단계로 진행된다. 기본값 0.
GRUB_HIDDEN_TIMEOUT_QUIET
GRUB_HIDDEN_TIMEOUT과 결합되어 사용된다. 'true'인 경우, 키 입력을 기다리기 위한 count down 정보가 축약된다. 기본값 0.
GRUB_DEFAULT_BUTTON
GRUB_TIMEOUT_BUTTON
GRUB_HIDDEN_TIMEOUT_BUTTON
GRUB_BUTTON_CMOS_ADDRESS
vender를 위한 power button을 위해 마련되었다. _BUTTON을 제외한 부분의 변수와 연결되어 사용된다.
GRUB_DISTRIBUTOR
배포자를 표기한다.
GRUB_TERMINAL_INPUT
terminal input device를 선택한다. 공백으로 여러개 선택 가능하다.
platform의 기본 terminal input을 기본값으로 사용한다.
console : PC BIOS와 EFI console
serial : serial terminal
ofconsole : Open Firmware console
at_keyboard : PC AT keyboard (Coreboot에 유용) 혹은 usb_keyboard : HID Boot Protocol USB keyboard
GRUB_TERMINAL_OUTPUT
terminal output device를 선택한다. 공백으로 여러개 선택 가능하다.
platform의 기본 terminal input을 기본값으로 사용한다.
console : PC BIOS와 EFI console
serial : serial terminal
gfxterm : graphic mode output
ofconsole : Open Firmware console
vga_text : VGA text output (Coreboot에 유용)
GRUB_TERMINAL
만일 set되었다면, GRUB_TERMINAL_INPUT과 GRUB_TERMINAL_OUTPUT 값을 덮어쓴다.
GRUB_SERIAL_COMMAND
serial console 사용시 serial port를 설정하는 명령
GRUB_CMDLINE_LINUX
linux kernel을 위한 menu 항목을 추가하는데 필요한 command line arguments
GRUB_CMDLINE_LINUX_DEFAULT
GRUB_DISABLE_RECOVERY의 값이 true가 아니라면, 두개의 menu 항목이 추가된다. 하나는 기본 항목이고 나머지 하나는 보구 모드 항목이다. GRUB_CMDLINE_LINUX 이후의 기본 메뉴 항목에 추가될 command line arguments를 지정한다.
GRUB_CMDLINE_NETBSD
GRUB_CMDLINE_NETBSD_DEFAULT
GRUB_CMDLINE_LINUX와 GRUB_CMDLINE_LINUX_DEFAULT와 동일하되 linux kernel이 아닌 NetBSD를 위한 값이다.
GRUB_CMDLINE_XEN
GRUB_CMDLINE_XEN_DEFAULT
GRUB_CMDLINE_LINUX와 GRUB_CMDLINE_LINUX_DEFAULT와 동일하되 Linux와 Xen을 위한 값이다.
GRUB_DISABLE_LINUX_UUID
보통 grub-mkconfig는 menu 항목을 universally-unique identifiers (UUID)를 만들어 구별하는데, root=UUID=...와 같은 형태로 구성된다. 이것이 훨씬 더 신뢰가 높지만, 몇몇 경우에는 적합하지 않을 수 있다. 이러한 UUID 기능을 사용하지 않으려면 'true'로 설정한다.
GRUB_DISABLE_RECOVERY
'true'로 설정된다면 복구 menu 항목은 비활성된다.
GRUB_VIDEO_BACKEND
'gfxterm' graphical terminal이 사용되거나 혹은 GRUB_GFXPAYLOAD_LINUX가 설정되어 있기 때문에, graphical video가 요구된다. 그러면 grub-mkconfig는 가능한 GRUB video driver를 load하고 가장 적합한 것을 사용한다. 만일 이러한 이유를 무시하려면 해당 옵션을 설정한다.
grub-install이 실행된후 /boot/grub/video.lst에 가능한 video driver가 들어간다.
GRUB_GFXMODE
'gfxterm' graphical terminal의 해상도를 설정한다. 기본은 'auto'이며, 이는 가장 적합한 해상도를 선택하려고 할 것이다.
GRUB_BACKGROUND
'gfxterm' graphical terminal의 배경 image를 설정한다. .png .tga .jpg .jpeg가 가능하며, 화면 크기에 맞게 늘어난다.
GRUB_THEME
'gfxterm' graphical terminal에 사용할 테마를 선택한다.
GRUB_GFXPAYLOAD_LINUX
'text'로 설정하면 normal text mode로 boot를 진행한다.
'keep'으로 설정하면 GRUB_GFXMODE를 사용한 graphic mode를 유지한다.
'폭x높이'['x깊이']로 설정하면 특정 graphic mode로 동작하며, ',' 나 ';'로 연결하여 여러개를 지정할 수 있다.
graphic card나 다른 이유로 boot 과정에 문제가 있다면, 'text'로 지정하기 바란다.
GRUB_DISABLE_OS_PROBER
'grub-mkconfig'는 'os-prober'를 사용하는데, 다른 OS 설치여부를 확인하고 menu 항목을 추가 생성하는 일을 한다. 이러한 기능을 사용하지 않으려면 'true'로 설정한다.
GRUB_INIT_TUNE
GRUB 시작시 소리를 발생한다. 화면 확인이 어려울때 유용할 수 있다.
GRUB_BADRAM
RAM의 잘못된 영역을 거른다.
이런 grub 설정 파일을 수정하였다면, 다음과 같이 업데이트한다.
~$ sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.38-8-generic
Found initrd image: /boot/initrd.img-2.6.38-8-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Microsoft Windows XP Professional on /dev/sda1
done
~$
Initial ramdisk (initrd) 수정하기
initrd는 /boot에 위치하며, initrd.img-2.6.38-8-generic 형태의 이름을 가지고 있다. 만일 해당 파일이 손상되거나 새로운 block device driver를 추가해야 한다면, mkinitrd 명령을 실행한다. 우선 initrd-tools 설치가 되어야 하며, initrd 파일의 복사가 필요하다.
$ sudo apt-get install initrd-tools
...
$ sudo mkinitrd -o /boot/ initrd.img-2.6.38-8-generic
...
새로운 kernel version으로 교체하려면, 아래와 같이 현재 실행되는 kernel version을 사용한다.
$ sudo mkinitrd -o /boot/initrd.img-`uname -r` `uname -r`
Starrtup과 Run Level 제어하기
run level은 시스템 관리를 위해 서비스 시작시 그 실행을 몇개의 단계로 구분한 것을 말한다.
Run Level |
이름 |
설명 |
0 |
halt |
시스템 종료. run level을 0으로 변경하면 시스템 종료됨. |
1 |
single user mode |
시스템 복원, 관리자 권한 shell. 파일 시스템 점검 및 암호 변경 |
2 |
multi user mode(Not NTS) |
네트워크를 사용하지 않는 멀티 유저 |
3 |
full multi user mode |
일반적인 멀티 유저 |
4 |
unused |
임의 정의 가능 |
5 |
X11 |
run level 3 + GUI |
6 |
reboot |
시스템 재부팅 |
kernel이 시작되었다면, init process에 system 제어권을 넘긴다. init process는 첫 running process로, PID가 1이다. /etc/inittab 파일에 기반하여 startup process, default run level, 그리고 run level에 맞게 실행될 init script등을 확인한다.
(참고) 최근의 ubuntu에서는 /etc/inittab 파일이 존재하지 않는다. upstart라는 이벤트 기반의 기존의 init 작업들을 대체하고 있다. 자세한건 upstart를 참고하기 바란다.
default run level은 일반적으로 desktop에서는 5, server system에서는 3으로 되어 있다(telinit 명령).
다음과 같이 현재의 run level을 확인할 수 있다.
앞의 N은 이전의 run level이 없다는 뜻이다.
~$ runlevel
N 2
~$
run level 변경은 아래와 같이 한다. (재부팅)
~$ sudo init 6
서비스 제어하기
다음과 같이 service 상태 확인을 할 수 있다.
(생각보단 정확한 수치가 나오지 않는다. 대신 목록을 구할 수 있다.)
~$ service --status-all
[ ? ] acpi-support
[ ? ] acpid
[ ? ] alsa-restore
[ ? ] alsa-store
[ ? ] anacron
[ + ] apparmor
[ ? ] apport
[ ? ] atd
[ ? ] avahi-daemon
[ ? ] binfmt-support
[ - ] bluetooth
[ - ] bootlogd
[ - ] brltty
[ ? ] console-setup
[ ? ] cron
[ ? ] cups
[ ? ] dbus
[ ? ] dmesg
[ ? ] dns-clean
[ ? ] failsafe-x
[ ? ] gdm
[ - ] grub-common
[ ? ] hostname
[ ? ] hwclock
[ ? ] hwclock-save
[ ? ] irqbalance
[ - ] kerneloops
[ ? ] killprocs
[ ? ] module-init-tools
[ ? ] network-interface
[ ? ] network-interface-security
[ ? ] network-manager
[ ? ] networking
[ ? ] ondemand
[ ? ] pcmciautils
[ ? ] plymouth
[ ? ] plymouth-log
[ ? ] plymouth-splash
[ ? ] plymouth-stop
[ ? ] plymouth-upstart-bridge
[ ? ] pppd-dns
[ ? ] procps
[ + ] pulseaudio
[ ? ] rc.local
[ - ] rsync
[ ? ] rsyslog
[ + ] saned
[ ? ] sendsigs
[ ? ] setvtrgb
[ ? ] speech-dispatcher
[ ? ] stop-bootlogd
[ ? ] stop-bootlogd-single
[ ? ] sudo
[ - ] sysstat
[ ? ] udev
[ ? ] udev-fallback-graphics
[ ? ] udev-finish
[ ? ] udevmonitor
[ ? ] udevtrigger
[ ? ] ufw
[ ? ] umountfs
[ ? ] umountnfs.sh
[ ? ] umountroot
[ ? ] unattended-upgrades
[ - ] urandom
[ - ] x11-common
~$
위 서비스들은 아래의 항목과 연관이 있다.
~$ ls /etc/init.d
acpid hwclock-save rsyslog
acpi-support irqbalance saned
alsa-restore kerneloops sendsigs
...
halt README x11-common
hostname reboot
hwclock rsync
~$
dbus의 서비스 상태를 알아본다.
~$ service dbus status
dbus start/running, process 880
~$
--status-all에서는 [ ? ]로 표기되었지만, 개별 항목으로 질의시 시작되고 있음이 확인된다.
anacron 서비스의 시작, 종료, 재시작은 다음과 같다.
~$ service anacron status
anacron stop/waiting
~$ sudo service anacron start
anacron start/running, process 3939
~$ sudo service anacron restart
anacron start/running, process 3946
~$ sudo service anacron stop
anacron stop/waiting
~$ service anacron status
anacron stop/waiting
~$
kernel 정보
다음과 같이 kernel release 정보를 구한다.
~$ uname -r
2.6.38-8-generic
~$ uname -a
Linux greenfish-virtual-machine 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686 i686 i386 GNU/Linux
~$
-a를 이용하여 모든 정보를 확인할 수 있다.
kernel ring buffer를 통한 kernel 로그는 다음과 같이 확인한다.
주로, hardware등 kernel의 에러 로그를 확인하는데 사용된다.
~$ dmesg | less
다음과 같은 로그 내용을 확인한다.
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 2.6.38-8-generic (buildd@vernadsky) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu3) ) #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 (Ubuntu 2.6.38-8.42-generic 2.6.38.2)
[ 0.000000] BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000ca000 - 00000000000cc000 (reserved)
[ 0.000000] BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 - 000000001fef0000 (usable)
[ 0.000000] BIOS-e820: 000000001fef0000 - 000000001feff000 (ACPI data)
[ 0.000000] BIOS-e820: 000000001feff000 - 000000001ff00000 (ACPI NVS)
[ 0.000000] BIOS-e820: 000000001ff00000 - 0000000020000000 (usable)
[ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
[ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[ 0.000000] BIOS-e820: 00000000fffe0000 - 0000000100000000 (reserved)
[ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled in hardware: non-PAE kernel!
[ 0.000000] NX (Execute Disable) protection: approximated by x86 segment limi
:
다음과 같이 직접 읽을 수 있다.
~$ sudo cat /var/log/syslog* | less
다음과 같이 출력된다. (syslog, syslog.0, ... 등의 파일을 순차적으로 출력할 수 있다.)
Jul 3 13:17:06 greenfish-virtual-machine kernel: imklog 4.6.4, log source = /proc/kmsg started.
Jul 3 13:17:06 greenfish-virtual-machine rsyslogd: [origin software="rsyslogd" swVersion="4.6.4" x-pid="751" x-info="http://www.rsyslog.com"] (re)start
Jul 3 13:17:06 greenfish-virtual-machine rsyslogd: rsyslogd's groupid changed to 103
Jul 3 13:17:06 greenfish-virtual-machine rsyslogd: rsyslogd's userid changed to 101
Jul 3 13:17:06 greenfish-virtual-machine rsyslogd-2039: Could no open output pipe '/dev/xconsole' [try http://www.rsyslog.com/e/2039 ]
Jul 3 13:17:06 greenfish-virtual-machine kernel: [ 0.000000] Initializing cgroup subsys cpuset
Jul 3 13:17:06 greenfish-virtual-machine kernel: [ 0.000000] Initializing cgroup subsys cpu
Jul 3 13:17:06 greenfish-virtual-machine kernel: [ 0.000000] Linux version 2.6.38-8-generic (buildd@vernadsky) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu3) ) #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 (Ubuntu 2.6.38-8.42-generic 2.6.38.2)
Jul 3 13:17:06 greenfish-virtual-machine kernel: [ 0.000000] BIOS-provided physical RAM map:
Jul 3 13:17:06 greenfish-virtual-machine kernel: [ 0.000000] BIOS-e820: 000
:
다음과 같이 로드된 모듈을 구할 수 있다.
~$ lsmod
Module Size Used by
binfmt_misc 13213 1
vmhgfs 53736 0
vsock 39001 0
acpiphp 23425 0
vesafb 13449 1
snd_ens1371 24722 2
gameport 15027 1 snd_ens1371
snd_ac97_codec 105614 1 snd_ens1371
ac97_bus 12642 1 snd_ac97_codec
snd_pcm 80244 2 snd_ens1371,snd_ac97_codec
snd_seq_midi 13132 0
snd_rawmidi 25269 2 snd_ens1371,snd_seq_midi
snd_seq_midi_event 14475 1 snd_seq_midi
snd_seq 51291 2 snd_seq_midi,snd_seq_midi_event
snd_timer 28659 2 snd_pcm,snd_seq
snd_seq_device 14110 3 snd_seq_midi,snd_rawmidi,snd_seq
snd 55295 11 snd_ens1371,snd_ac97_codec,snd_pcm,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
soundcore 12600 1 snd
snd_page_alloc 14073 1 snd_pcm
joydev 17322 0
ppdev 12849 0
vmci 59861 2 vmhgfs,vsock
i2c_piix4 13095 0
parport_pc 32111 1
shpchp 32345 0
vmw_balloon 12729 0
psmouse 73312 0
serio_raw 12990 0
lp 13349 0
parport 36746 3 ppdev,parport_pc,lp
usbhid 41704 0
hid 77084 1 usbhid
floppy 60032 0
BusLogic 26456 2
vmxnet 20715 0
vmw_pvscsi 18144 0
vmxnet3 44517 0
~$
모듈의 정보는 다음과 같이 확인한다.
~$ modinfo snd_pcm
filename: /lib/modules/2.6.38-8-generic/kernel/sound/core/snd-pcm.ko
license: GPL
description: Midlevel PCM code for ALSA.
author: Jaroslav Kysela <perex@perex.cz>, Abramo Bagnara <abramo@alsa-project.org>
srcversion: 00979A7ED7E0ABD4D1B71CA
depends: snd,snd-page-alloc,snd-timer
vermagic: 2.6.38-8-generic SMP mod_unload modversions 686
parm: preallocate_dma:Preallocate DMA memory when the PCM devices are initialized. (int)
parm: maximum_substreams:Maximum substreams with preallocated DMA memory. (int)
~$
다음과 같이 로드 가능한 모듈을 구할 수 있다.
~$ modprobe -l
...
misc/vmblock.ko
misc/vsock.ko
misc/vmhgfs.ko
~$ modprobe -l | grep c-qcam
kernel/drivers/media/video/c-qcam.ko
~$
아래와 같이 모듈을 로드한다.
~$ sudo modprobe c-qcam
~$
다음과 같이 로드됨이 확인된다.
~$ lsmod
Module Size Used by
c_qcam 17825 0
v4l2_common 16757 1 c_qcam
...
아래와 같이 언로드한다.
~$ sudo modprobe -r c-qcam
~$
언로드가 확인되었다.
~$ lsmod
Module Size Used by
binfmt_misc 13213 1
vmhgfs 53736 0
vsock 39001 0
...
~$
Hardware 정보
다음과 같이 PCI 디바이스 정보를 구할 수 있다.
~$ lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10)
00:0f.0 VGA compatible controller: VMware SVGA II Adapter
00:10.0 SCSI storage controller: BusLogic BT-946C (BA80C30) [MultiMaster 10] (rev 01)
00:11.0 PCI bridge: VMware PCI bridge (rev 02)
00:15.0 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.1 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.2 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.3 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.4 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.5 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.6 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.7 PCI bridge: VMware PCI Express Root Port (rev 01)
00:16.0 PCI bridge: VMware PCI Express Root Port (rev 01)
00:16.1 PCI bridge: VMware PCI Express Root Port (rev 01)
00:16.2 PCI bridge: VMware PCI Express Root Port (rev 01)
00:16.3 PCI bridge: VMware PCI Express Root Port (rev 01)
00:16.4 PCI bridge: VMware PCI Express Root Port (rev 01)
00:16.5 PCI bridge: VMware PCI Express Root Port (rev 01)
00:16.6 PCI bridge: VMware PCI Express Root Port (rev 01)
00:16.7 PCI bridge: VMware PCI Express Root Port (rev 01)
00:17.0 PCI bridge: VMware PCI Express Root Port (rev 01)
00:17.1 PCI bridge: VMware PCI Express Root Port (rev 01)
00:17.2 PCI bridge: VMware PCI Express Root Port (rev 01)
00:17.3 PCI bridge: VMware PCI Express Root Port (rev 01)
00:17.4 PCI bridge: VMware PCI Express Root Port (rev 01)
00:17.5 PCI bridge: VMware PCI Express Root Port (rev 01)
00:17.6 PCI bridge: VMware PCI Express Root Port (rev 01)
00:17.7 PCI bridge: VMware PCI Express Root Port (rev 01)
00:18.0 PCI bridge: VMware PCI Express Root Port (rev 01)
00:18.1 PCI bridge: VMware PCI Express Root Port (rev 01)
00:18.2 PCI bridge: VMware PCI Express Root Port (rev 01)
00:18.3 PCI bridge: VMware PCI Express Root Port (rev 01)
00:18.4 PCI bridge: VMware PCI Express Root Port (rev 01)
00:18.5 PCI bridge: VMware PCI Express Root Port (rev 01)
00:18.6 PCI bridge: VMware PCI Express Root Port (rev 01)
00:18.7 PCI bridge: VMware PCI Express Root Port (rev 01)
02:00.0 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB
02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)
02:02.0 Multimedia audio controller: Ensoniq ES1371 [AudioPCI-97] (rev 02)
02:03.0 USB Controller: VMware USB2 EHCI Controller
~$
-v를 추가하여 자세한 정보를 확인할 수 있다.
~$ 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
Kernel modules: shpchp
...
02:03.0 USB Controller: VMware USB2 EHCI Controller (prog-if 20 [EHCI])
Subsystem: VMware USB2 EHCI Controller
Physical Slot: 35
Flags: bus master, fast devsel, latency 64, IRQ 17
Memory at d8900000 (32-bit, non-prefetchable) [size=4K]
Kernel driver in use: ehci_hcd
~$
-vv면 좀더 많은 정보가 확인된다.
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
Subsystem: VMware Virtual Machine Chipset
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
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])
Control: I/O+ Mem+ BusMaster+ SpecCycle+ MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap- 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Bus: primary=00, secondary=01, subordinate=01, sec-latency=64
Secondary status: 66MHz+ FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B+
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Kernel modules: shpchp
...
02:03.0 USB Controller: VMware USB2 EHCI Controller (prog-if 20 [EHCI])
Subsystem: VMware USB2 EHCI Controller
Physical Slot: 35
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64 (1500ns min, 63750ns max)
Interrupt: pin A routed to IRQ 17
Region 0: Memory at d8900000 (32-bit, non-prefetchable) [size=4K]
Kernel driver in use: ehci_hcd
dmidecode를 통해 hardware component 정보를 표시한다. BIOS에서 지원되는 기술도 포함된다.
~$ sudo dmidecode
# dmidecode 2.9
SMBIOS 2.4 present.
364 structures occupying 16052 bytes.
Table at 0x000E0010.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Phoenix Technologies LTD
Version: 6.00
Release Date: 06/02/2011
Address: 0xEA170
Runtime Size: 89744 bytes
ROM Size: 64 kB
Characteristics:
ISA is supported
PCI is supported
PC Card (PCMCIA) is supported
PNP is supported
APM is supported
BIOS is upgradeable
BIOS shadowing is allowed
ESCD support is available
Boot from CD is supported
Selectable boot is supported
EDD is supported
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
ACPI is supported
Smart battery is supported
BIOS boot specification is supported
Function key-initiated network boot is supported
Targeted content distribution is supported
BIOS Revision: 4.6
Firmware Revision: 0.0
...
Handle 0x0169, DMI type 33, 31 bytes
64-bit Memory Error Information
Type: OK
Granularity: Unknown
Operation: Unknown
Vendor Syndrome: Unknown
Memory Array Address: Unknown
Device Address: Unknown
Resolution: Unknown
Handle 0x016A, DMI type 126, 4 bytes
Inactive
Handle 0x016B, DMI type 127, 4 bytes
End Of Table
~$
다음과 같이 hdparam을 통해 hard disk 정보를 보고 변경할 수 있다. (주의 : 설정변경으로 인해 hard disk의 data에 damage를 줄 수 있다)
~$ sudo hdparm /dev/sdb
/dev/sdb:
HDIO_DRIVE_CMD(identify) failed: Invalid argument
readonly = 0 (off)
readahead = 256 (on)
geometry = 5221/255/63, sectors = 83886080, start = 0
~$
Hard disk의 identification 정보를 자세히 볼 수 있는데, 아래는 현재 지원되는 hard disk가 아니다.
~$ sudo hdparm -I /dev/sda
/dev/sda:
HDIO_DRIVE_CMD(identify) failed: Invalid argument
~$