2014. 1. 2. 09:23

[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

~$