MySQL 에서 날짜를 query 하고, 한달이 지난 데이터는 삭제하기!

날짜를 .. Query! 아래는 로그뷰어를 이용한 로그관리의 예시입니다.

Select date_add(date_format( now() , “%Y-%m-%d %k:%i:%s”), interval -30 day) ;

이렇게하면오늘보다 30이전날짜를있다!

select * from SystemEvents where ReceivedAt < date_add(date_format( now() , “%Y-%m-%d %k:%i:%s”), interval -40 day);

## SystemEvents 라는테이블에 ReceivedAt 이라는 column 데이터가현재시각보다 40이전데이터보다작은값만쿼리한다!

꿀팁!!! 이걸 Mysql bash돌리고싶을때는오뜨케하징?????

참고 : -e 옵션을통해서명령어를수행할때는더블쿼테이션 (“) 싱글쿼테이션 (‘) 으로치환하여사용하며, query뒷절의세미클론 (;) 뺍니다.

# mysql -uroot -p암호 Syslog -e “select * from SystemEvents where ReceivedAt < date_add(date_format( now() , ‘%Y-%m-%d %k:%i:%s’), interval -30 day)”

나는이렇게썻다?

Syslog 디비에시스템로그를저장하고, My.cnf 설정에 mysql Query 로그를남기도록설정하고.

log=/var/log/mysql/my.log

아래와같이로그를한달지난로그는 ReceivedAt 테이블의시간을참고하여, 삭제대상이되는컬럼을조회하고파일로남긴뒤

해당컬럼을삭제하고, 그다음 mysql 쿼리로그를메일로발생하여확인하였음.

 

#!/bin/sh

today=`date +%Y%m%d`

/usr/bin/mysql -u아이디 -p비밀번호 Syslog -e “select * from SystemEvents where ReceivedAt < date_add(date_format( now() , ‘%Y-%m-%d %k:%i:%s’), interval -30 day)” >> /tmp/log_data_$today.log

sleep 1;

#mysql log delete

echo “” > /var/log/mysql/my.log

## delete

/usr/bin/mysql -u아이디 -p비밀번호 Syslog -e “delete from SystemEvents where ReceivedAt < date_add(date_format( now() , ‘%Y-%m-%d %k:%i:%s’), interval -30 day)”

cat /var/log/mysql/my.log | mail -s “[SyslogDB] delete $today DATA query result” pajuguy@nate.com

이러면 DB 가 계속 쌓여도, 30일 지나면 삭제되니까 유지관리가 편하다.?

MySQL 의 root 계정을 변경하고 권한을 주는 방법

루트패스워드변경

mysql 서버에 패스워드 없이 로그인 하게되면 서버에 만들어진 데이터베이스나 테이블

기타 이곳에 저장된 자료가 외부인에게 노출될 수 있다. 따라서 이러한 보안을 목적으로

root 패스워드를 지정하면 mysql 서버를 안전하게 보호할 수 있다.

 

mysql> use mysql;

mysql> update user set password=password(‘패쓰워드’) where user=’root’;

Query OK, 2 rows affected (0.03 sec)

Rows matched: 2 Changed: 2 Warnings: 0

mysql> flush privileges; <— 적용

flush privileges; 를 하지 않으면 mysql에서 빠져나와서 root 로그인이 안된다.

확인한다.

mysql> select host, user, password from user;

+—————————————————————-+

| Host user password |

+—————————————————————-+

| localhost root 2e01146f5c065853 |

| localhost.localdomain root 2e01146f5c065853 |

+—————————————————————-+

 

 

 

 

#유저 추가.

INSERT INTO mysql.user (host,user,password) VALUES (‘%’,’root’,password(‘*2E71CAC033CBFF15613A02B9F655E72B4910D937’));

#개별 DB 에 테이블 에 맞게 계정 추가 

mysql> insert into USERTABLE (id,passwd,priviledge,name,email) values (‘SUNGHO’,’c4ca4238a0b923820dcc509a6f75849b’,3,’HongSungho’,’hongsungho@email.com’);

 

# 5.x 버전에서부터추가된보안관련사항,  ssl_cipher 관련입력값이없으면, 유저생성이안된다. 아래처럼해주길; 보안관련필드에빈값 ‘ ‘ 넣어줌.

insert into user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject ) values(‘localhost’,’사용자명’,password(‘비밀번호’),”,”,”);

 

Grant all privileges on *.* to ‘USER’@’LOCALHOST or IP or %’ identified by ‘PASSWORD’ with grant option;

 

 

# 모든 권한 주귀..

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’;

 

# 모든 권한을 주는 바른 예

grant all privileges on *.* to ‘root’@’%’ identified by ‘암호’;

 

# HONG DB읽기권한만을가진 sungho 라는 유저를생성하는바른

Grant select on HONG.* to ‘sungho’@’%’ identified by ‘암호’;

# HONG DB에 readerhong 계정으로 10.0.0.10 주소를 갖는 서버만 접속 가능하고, 읽기 권한만 설정하는 예;
Grant select on HONG.* to ‘readerhong’@’10.0.0.10’ identified by ‘암호’;

# 이미 생성되어 있는 sungho 계정의 경우는 % 로 모든곳에서 접근이 가능하다.
# 보안을 위해서 로컬 호스트로만 접근이 가능하도록 설정을 변경하는 방법
update user set host=’localhost’ where host=% and user=’sungho’;

 

 

# 적용

FLUSH PRIVILEGES;

MySQL 테이블 값을 넣고 조회하기.

아래와 같이 이용합니다.

show databases;
# 데이터베이스 조회

use DBNAME;
# 사용 할 DB를 선택

show tables;
# DB 내 테이블 확인

desc TABLENAME;
# 테이블 필드의 타입을 조회합니다.

insert into TABLENAME value (‘123456’);
# 테이블에 123456 이라는 값을 입력한다.

select * from TABLENAME;
# 테이블의 모든 내용을 조회한다.

select * from TABLENAME where 필드명=’검색값’;
# 검색값으로 조회한다.
# 예를 들어 sungho_test 테이블에 name field 가 sungho 인 녀석을 조회하는 경우는
# select * from sungho_test where name=’sungho’; 를 선택하면 된다.
# 이중에서 name 필드가 sungho인 사람들의 name, age, address 값 만을 조회하고 싶다면
# select name, age, address from sungho_test where name=’sungho’; 가 된다. ^^

사용자 삽입 이미지

winrm 을 이용해서 리눅스 머신에서 윈도우 서버 관리!

WinRM 을 통해서 리눅스머신에서 윈도우서버로 원격 명령을 날리는 방법에 대해 간략하게 기술한다.

윈도우 서버에서 먼저 winrm 에 대한 설정을 진행해준다.

winrm quickconfig 커멘드를 사용하면 (run as administrator)
해당 서비스를 사용할 수 있도록 설정이 가능하다. (사용여부 y로 물어봄)

winrm 서비스가 사용가능하게 되면 다음과 같이 winrm 의 config를 확인할 수 있다.

winrm g winrm/config

이중 config 하위에 service 항목중 Auth와 AllowUnencryypted 는 기본설정이 false 로 되어있는데,
이부분을 true (사용) 으로 변경해주는 설정을 한다. (Basic 인증방식 사용)

winrm s winrm/config/service/auth @{Basic=”true”}

winrm s winrm/config/service @{AllowUnencrypted=”true”}

이후에 리눅스머신에서 winrm을 통해 plaintext를 통한 계정정보 입력을 통하여, 서버에 커멘드를 실행할 수 있다.
참고로 powershell에서도 아래와 같은 커멘드로 활성화 할 수 있다.

Set-item WSMan:\localhost\service\auth\basic “true” -force

Set-Item WSMan:\localhost\Service\AllowUnencrypted “true” -force

윈도우 서버에서 위와 같은 설정이 완료 되면 quickconfig를 통해서 허용 되었겠지만,
http 프로토콜로 5985 포트를 이용해서 접근하게 된다. 스위치에 Access List 를 관리한다면, 허용해줄것~

linux 관리머신에서 winrm 을 이용하기 위해 WinRM for Ruby 라이브러리를 설치한다.
(1.9 버전 이상의 ruby를 설치하여야 하고, gem install winrm (git 저장소 https://github.com/zenchild/WinRM) 으로 설치하고, WinRM 라이브러리를 이용해 서버 제어 스크립트를 생성한다.

예시 ) test.rb

 require ‘winrm’

endpoint = ‘http://10.0.0.1:5985/wsman’

winrm = WinRM::WinRMWebService.new(endpoint, :plaintext, :user =>

‘계정’, :pass => ‘암호’, :basic_auth_only => true )

winrm.cmd(‘ipconfig /all & dir c:\\‘) do |stdout, stderr|

    STDOUT.print stdout

    STDERR.print stderr

end

위와 같이 간단한 루비스크립트를 생성하고,
/usr/bin/ruby test.rb 를 실행하게 되면, 10.0.0.1 IP를 갖는 원격지 윈도우 서버에서
ipconfig /all 커멘드와 dir c:\ 라는 커멘드를 실행하여, 결과값 (Standard Output) 을 알려준다.

해당 방법은 원격지에서 WinRM을 통한 command를 실행시키는 방식으로
관리서버에서는 동시 다수 서버에 명령어를 전달하고, 다수의 서버에서는 개별적으로 해당 명령을 실행하기 때문에 서버 관리에 매우 유용하다.

NETSTAT 를 이용한 통계 확인

netstat -s -p [프로토콜]

netstat -s 는 netstat -netstat 로 쳐도 동일!!

C:\Users\hong.sungho>netstat -sn -p tcp

 

IPv4에 대한 TCP 통계

 

  활성 열기                           = 1046883

  수동 열기                           = 13021

  실패한 연결 시도                    = 308348

  다시 설정된 연결                      = 122594

  현재 연결                           = 26

  받은 세그먼트                       = 17804809

  보낸 세그먼트                       = 22197839

  재전송된 세그먼트                   = 959005

 

활성 연결

 

  프로토콜  로컬 주소           외부 주소              상태

  TCP    10.0.0.235:2869     10.0.0.166:57978    TIME_WAIT

  TCP    10.0.0.235:50204    112.0.0.88:80       ESTABLISHED

  TCP    10.0.0.235:50292    180.0.0.177:8001     SYN_SENT

  TCP    127.0.0.1:65299        127.0.0.1:65298        ESTABLISHED

 

TCP 패러미터 튜닝을 통한 접속 수 증가 방법

====== 윈도우에서 TCP 파라미터 튜닝 ======

결국 윈도우에서 TCP 연결의 개수를 최대한 늘이기 위한 방법은 TcpTimedWaitDelay, MaxUserPort, MaxFreeTcbs, MaxHashTableSize 파라미터를 늘여주는 것이다.

Windows에서 TcpTimedWaitDelay를 설정

TCP 파라미터는 물론 플랫폼 별로 많은 파라미터가 존재하지만, Windows에서의 TcpTimedWaitDelay 와 Solaris의 tcp_time_wait_interval 은 동일한

파라미터로서, 커넥션이 종료 되었을 때 TIME_WAIT 상태로 머물게 되는 시간을 설정한다.

이 값의 디폴트는 4분으로 짧은 시간에 많은 클라이언트가 접속을 하면 네트웍(Network) 퍼포먼스에 영향을 줄 수 있기 때문에 60초로 제한을 두도록

권고한다.

레지스트리 위치 : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

유효한 범위 : 0\30~300초

값 이름 : TcpTimedWaitDelay

값 종류: DWORD

기본값: 240초

추천 값: 60

TCPFinWait2Delay

이 레지스트리 값은 해당 종료 (s, SD_SEND) 함수를 호출한 후 닫으려면 강제로 TCP 연결 전에 대기하는 초 수를 제어합니다.

레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

값 이름: TCPFinWait2Delay

값 종류: REG_DWORD

기본 값: 240 초

추천 값: 60초(개인적으로 30초도 좋을 듯)

MaxUserPort

서버에 연결되는 Port의 숫자가 5000개 이상 (Exchange 60000) 될 경우 서버에서 네트워크 장애가 발생될 수 있음.

일반적으로 WAS와 연결되는 Windows 서버나 Exchange 서버에서 주로 발생됨.

레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

유효한 범위: 5000~65534

값 이름 : MaxUserPort

값 종류: DWORD

기본값: 5000

추천 값: 65534

MaxFreeTcbs

시스템이 TCP 연결 유지를 위해 생성하는 TCP Control Blocks(TCBs)의 숫자를 결정한다. 하나의 연결은 하나의 블록을 요구하기 때문에, 이 값은 TCP가 동시에 몇 개의 연결을 처리할 수 있느냐를 결정하게 된다. 모든 블록이 사용 중인 상황에서 새로운 연결이 들어오게 되면, TCP는 TIME_WAIT 상태인 연결 중에 하나를 강제로 끊어버리고, 블록을 해제한 후, 그 블록을 새로운 연결에 사용하게 된다.

보통 TCP는 TcpTimedWaitDelay에 지정되어 있는 시간이 지나지 않은 경우, 연결을 해제하지도 않고, 그 연결에 사용된 자원을 재사용하지도 않는다. 이 시간은 보통 TIME_WAIT 또는 2MSL (2 x maximum segment lifetime) 상태라고 불린다. 하지만 시스템이 매우 많은 연결을 받아들여 자원이 바닥날 상황에 이르면, TcpTimedWaitDelay에 지정된 시간이 아직 남아있는 경우에도 연결에 할당되어 있는 자원을 해제하게 된다.

레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

유효한 범위: 1–0xFFFFFFFF

값 이름 : MaxFreeTcbs

값 종류: DWORD

기본값: 0x1388 (십진값으로 5000)

추천 값: 2000

MaxHashTableSize

TCP Control block이 저장되는 해쉬 테이블의 크기를 결정한다.

 

TCP는 컨트롤 블록들을 빠르게 검색하기 위해 해쉬 테이블에다 저장한다. 만일 시스템이 동시에 생성할 수 있는 TCB의 숫자를 변경한다면(MaxFreeTcbs 값을 변경한다면), 이 항목의 값 또한 그에 비례해서 변경해줘야한다.

 

이 항목의 값은 반드시 2의 승수여야한다. 만일 2의 승수를 입력하지 않는다면, 시스템은 자동으로 입력한 수보다 큰 2의 승수 중에 가장 작은 것을 찾아 사용한다. 즉 128 * (시스템 cpu 개수)의 제곱

예를 들어 cpu 4장이라면, 128 * 4^2 = 2048

최대 값은 0x10000 (65,536)입니다. 연결 부하가 클 것으로 예상되는 대규모 서버에서는 최대 값을 설정하는 것이 권장됩니다. 이 테이블은 페이지 안 되는 풀을 사용하므로 서버의 가용한 페이지 안 되는 풀이 많지 않거나 연결 부하가 크지 않은 경우에는 이 값을 너무 크게 설정하면 안 된다는 사실을 명심하십시오.

레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

유효한 범위: 64 ~ 65536

값 이름 : MaxHashTableSize

값 종류: DWORD

기본값: 512

추천 값: 2048

KeepAliveTime

TCP-HandShake를 통해 연결이 되면 해당 세션은 연결이 유지되어집니다.

하지만, 일정 시간동안 Connection에 대해 실제 통신이 없는 경우 Session관리를 위해

특정 시간이 지나면 해당 Session을 OS에서 끊게 됩니다.

NT에서 해당 역활을 해주는 것은 KeepAliveInterval에 설정되어진 값에 의해 결정되게 됩니다.

KeepAliveTime을 통해 해당 시간만큼 ACK(응답)이 없는 경우 Session이 종료되어집니다.

레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

유효한 범위: 0x1–0xFFFFFFFF ms

값 이름 : KeepAliveTime

값 종류: DWORD

기본값: 7,200,000 ms –> 2hr

추천 값: 1800000 ms –>30분

 

참고:

윈도우에서 TCP/IP 파라미터

http://technet.microsoft.com/en-us/library/cc739819(WS.10).aspx

TCP 동시 연결 수를 최대한 늘이기위한 파라미터

http://lishiqiang2003.wordpress.com/2010/12/24/configure-the-max-limit-for-concurrent-tcp-connections/

 

원본 위치 <http://blog.naver.com/PostView.nhn?blogId=sugyoo&logNo=20119781609&redirect=Dlog&widgetTypeCall=true>

 

특정 포트 세션 수 기록하기.

:: 날짜, 시간구하기

for /f “tokens=2-3 delims=/ ” %%i in (‘date/t’) do @set DT=%%i%%j

for /f “tokens=1-3 delims=: ” %%i in (‘time/t’) do @set tm=[%%i:%%j %%k]

 

:: 1004포트로 establish 세션과, 5050 모든세션 (close wait포함) 구해서텍스트로임시저장

cmd /c netstat -ant | find “1004” | find /c “ESTA”  > c:\esta.txt

cmd /c netstat -ant | find /c “1004” > C:\all.txt

 

:: 세션수임시저장한텍스트를로그형식으로저장

for /f %%s in (c:\esta.txt) do SET EST=%%s

for /f %%g in (c:\all.txt) do SET ALL=%%g

 

echo %tm%       Est_count : %EST%  >> C:\Users\Administrator\Desktop\Est_count\est_session_%DT%.txt

echo %tm%       all_count : %ALL%  >> C:\Users\Administrator\Desktop\Est_count\all_session_%DT%.txt

 

echo.

로그나 파일을 메일로 쏴보자!

리눅스를 운영하다 보면, 상태 확인이나 체크등을 위해서 로컬에 로그를 남기는 일이 많다.

이런 경우에 매번 터미널 접속을 해서 확인하기 귀찮으니, 스케쥴등을 이용해서 메일로 발송해보자.

메일 발송의 경우는 local에 postfix 등을 이용해서 발송하면된다~

내 로컬에서 어떤 MTA (mail Transfer Agent) 가 설정된지 확인은

# alternatives –display mta

라는 명령어를 이용하면 확인 가능하다.

 [root@bbunbro ~]# alternatives –display mta
mta – status is manual.
 link currently points to /usr/sbin/sendmail.postfix
/usr/sbin/sendmail.sendmail – priority 90
 slave mta-pam: /etc/pam.d/smtp.sendmail
 slave mta-mailq: /usr/bin/mailq.sendmail
 slave mta-newaliases: /usr/bin/newaliases.sendmail
 slave mta-rmail: /usr/bin/rmail.sendmail
 slave mta-sendmail: /usr/lib/sendmail.sendmail
 slave mta-mailqman: /usr/share/man/man1/mailq.sendmail.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.sendmail.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.sendmail.5.gz
 slave mta-sendmailman: /usr/share/man/man8/sendmail.sendmail.8.gz
/usr/sbin/sendmail.postfix – priority 30
 slave mta-pam: /etc/pam.d/smtp.postfix
 slave mta-mailq: /usr/bin/mailq.postfix
 slave mta-newaliases: /usr/bin/newaliases.postfix
 slave mta-rmail: /usr/bin/rmail.postfix
 slave mta-sendmail: /usr/lib/sendmail.postfix
 slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
 slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
Current `best’ version is /usr/sbin/sendmail.sendmail.

혹시 로컬에 postfix가 설치되어 있지 않다면, postfix를 설치하고,
메일 발송을 위해서 mailx 패키지를 설치한다.

이후에 로그를 보내는 방법은 아래와 같다.

cat /log/20141204_test.log | mail -s “Sending MAIL to my email” pajuguy@nate.com -c pajuguy@gmail.com

이후 발송된 메일을 확인해보면 pajuguy@nate.com 으로 (참조 : gmail)
Sending MAIL to my email 이라는 제목으로 발송된 20141204_test.log 의 내용을 확인할 수 있다.

리눅스 컨트롤러 확인하는 방법

리눅스 컨트롤러 확인

dmesg 를 통해서 일일히 찾는 방법도 존재하지만,
bridge, IDE interface, VGA compatible controller 등을 확인할시에는

# lspci 명렁을 통해서 확인하면 편리하다

자세하게 보고싶은 경우는 -vvv 옵션을 준다.

 [nic2hong@bbunbro ~]$ sudo lspci -vvv
00:00.0 Host bridge: Intel Corporation 440FX – 82441FX PMC [Natoma] (rev 02)
        Subsystem: Red Hat, Inc Qemu virtual machine
        Physical Slot: 0
        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: 0

00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
        Subsystem: Red Hat, Inc Qemu virtual machine
        Physical Slot: 1
        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

00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] (prog-if 80 [Master])
        Subsystem: XenSource, Inc. Device 0001
        Physical Slot: 1
        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
        Region 0: [virtual] Memory at 000001f0 (32-bit, non-prefetchable) [size=8]
        Region 1: [virtual] Memory at 000003f0 (type 3, non-prefetchable)
        Region 2: [virtual] Memory at 00000170 (32-bit, non-prefetchable) [size=8]
        Region 3: [virtual] Memory at 00000370 (type 3, non-prefetchable)
        Region 4: I/O ports at c100 [size=16]

00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 01)
        Subsystem: Red Hat, Inc Qemu virtual machine
        Physical Slot: 1
        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: 0
        Interrupt: pin A routed to IRQ 9

00:02.0 VGA compatible controller: Cirrus Logic GD 5446 (prog-if 00 [VGA controller])
        Subsystem: XenSource, Inc. Device 0001
        Physical Slot: 2
        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: 0
        Region 0: Memory at f0000000 (32-bit, prefetchable) [size=32M]
        Region 1: Memory at f3000000 (32-bit, non-prefetchable) [size=4K]
        Expansion ROM at <unassigned> [disabled]

00:03.0 Unassigned class [ff80]: XenSource, Inc. Xen Platform Device (rev 01)
        Subsystem: XenSource, Inc. Xen Platform Device
        Physical Slot: 3
        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: 0
        Interrupt: pin A routed to IRQ 28
        Region 0: I/O ports at c000 [size=256]
        Region 1: Memory at f2000000 (32-bit, prefetchable) [size=16M]
        Kernel driver in use: xen-platform-pci