블로그 이미지
OSSW(Open Source System SoftWare

calendar

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Notice

1. 에러 메시지:

kernel: NOHZ: local_softirq_pending 100

 

2. 원인:

- 시스템이 어떤 소프트웨어 interrupt 를 처리하는 대신 CPU sleep 상태로 만드는 것

- 메시지 마지막의 숫자는 hexadecimal 로 표현되며, ‘100’ HRTIMER_SOFTIRQ 를 의미

- HRTIMER_SOFTIRQ High Resolution Timer(HRT) 에 대한 소프트웨어 interrupt(HRT에 대한 상세정보는 아래 참조 URL 참고)

- 커널 버전 2.6.22 이후부터 add debug 메시지

 

3. 조치 방안:

- /etc/grub.conf 파일에 nohz=off 옵션을 설정하여 disable 가능(, 커널 버전 2.6.32-431.el6 보다 상위 버전에서만 가능)

- 단순 정보성 메시지이므로 조치 필요 없음

 

4. 참조 URL:

http://kb.sp.parallels.com/en/119599

https://access.redhat.com/solutions/62637

http://studyfoss.egloos.com/viewer/5268468

 

posted by 박현명

1. 에러 메시지:

JBD: barrier-based sync failed on xvda1-8 - disabling barriers

 

2. 원인:

- RedHat 이나 CentOS 등의 Linux 계열에서는 journaling 파일시스템을 사용하는데, journaling 파일시스템 중 ext4 파일시스템에는 기본적으로 Write Barrier 라는 커널 매커니즘이 enable 되어 있음(barrier=1)

- ext3 파일시스템은 Write Barrier 기능을 사용 가능하나, 기본 disable 되어 있어 위와 같은 메시지가 발생하지 않음

- Write Barrier 는 파일시스템의 메타데이터가 올바르게 기록되고 디스크에 제대로(심지어 디스크 전원이 나갈 지라도) 반영되게 하기 위한 커널 매커니즘

- 스토리지 드라이버나 스토리지 디바이스가 transaction barrier 를 지원하지 않을 때 위와 같은 메시지 발생

- 메시지의 의미: 커널이 barrier disable 하고 barrier=0 인 상태처럼 write 를 실행

 

3. 조치 방안:

- 단순 경고성 메시지이므로 조치 필요 없음

- RHEL 6 에서는 barrier 기능 disable 을 추천하지 않음. Write Barrier 기능으로 인한 성능 저하는 약 3% 정도이며, 그 기능을 disable 하는 것보다 enable 했을 때의 성능 benefit 이 더 큼

- nobarrier 옵션은 VM(Virtual Machine) 에서 구성된 스토리지에서는 사용되지 않음

 

4. 참조 URL:

http://www.novell.com/support/kb/doc.php?id=3907838

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/writebarrieronoff.html

http://lunatine.tistory.com/8

http://community.arm.com/groups/processors/blog/2011/04/11/memory-access-ordering-part-2--barriers-and-the-linux-kernel

http://se.uzoogom.com/m/post/204

posted by 박현명

1. 에러 메시지:

daemon[PID]: warning: can't get client address: Connection reset by peer


2. 원인:

- C/S 구조에서의 TCP 통신은 기본적으로 3-way handshake 방식을 통해 서로 세션을 연결하게 되는데, SYN/ACK 시퀀스가 Connection 이 완료되기 전에 torn down(해체) 되어 daemon source system 을 확인할 수 없을 때 발생


- unauthorized user  daemon 을 통해 해당 시스템에 접근하려 했다가 정상적인 절차로 Connection 이 맺어지기 전에 세션이 terminate 되면 발생

- 서버에서 취약점 확인을 위한 스캔 시 발생


3. 조치 방안:

- 단순 경고성 메시지이므로 조치 필요 없음


4. 참조 URL:

http://www.linuxvoodoo.com/resources/security/enemy2

http://h30499.www3.hp.com/t5/System-Administration/warning-can-t-get-client-address-Connection-reset-by-peer/td-p/4397085#.VFq0_fmDDNA

posted by 박현명

1. segfault 의미

- segmentation fault

- the application is trying to access a memory area that belongs to the OS or some other program. The memory management unit in the CPU stops the operation and triggers an exception. The standard segfault exception handler in the kernel kills the program.

- the program probably tried to use an uninitialized pointer, which has a value NULL


2. segfault 예

- scagent[1569]: segfault at 7f2ecca29fc8 ip 00000039ff64432a sp 00007f2ecca29fd0 error 6 in libc-2.12.so[39ff600000+18a000]

- epi_alert_svr[26620]: segfault at 0 ip 00000000004142db sp 00002af6e33efd20 error 4 in epi_alert_svr[400000+1c000]


3. segfault 원인

- 잘못된 메모리 공간에 쓰기 시도(허용되지 않은 메모리 영역에 접근을 시도, 허용되지 않은 방법으로 메모리 영역에 접근을 시도). 예를 들어, 읽기 전용 영역에 어떤 내용을 쓰려고 시도하거나, 운영 체제에서 사용하는 영역에 다른 내용을 덮어쓰려 하는 경우

- 메모리 문제

- 하드디스크에 배드 섹터가 있어도 발생

- 개발 소스 아키텍처 관련 문제


4. segfault 항목의 의미

- ip(rip): instruction pointer. ie. where the code which is trying to do this lives

- sp(rsp): stack pointer

- at: address. (it's likely that 10 and 11 are offsets from a pointer we expect to be set to a valid value but which is instead pointing to 0)

- error: value of page fault error code, ie. last error code which was reported by a syscall

- [39ff600000+18a000]: starting address and size of virtual memory area where offending object was mapped at the time of crash


5. segfault error 넘버의 의미

- 4: The cause was a user-mode read resulting in no page being found.(also known as a null pointer dereference)

     4 is EINTR (interrupted system call)

- 6: The cause was a user-mode write resulting in no page being found.


6. segfault 조치 방법

If possible, have your application developer produce a version of the application that includes debug information. If the application is compiled using gcc, this is as simple as adding the "-g" option to the compilation commands. 


Before starting the application, run "ulimit -c unlimited". This allows the segfault handler to produce a core dump file when the segfault handler is triggered. This file contains all the memory used by the application, so it might be very big.


Then your application developer needs to run a debugger program on the application and the core file. If the application was compiled with debug information, the debugger can identify exactly on what line of the source code the error happened. The developer can also use the debugger to examine the values of any variables at the time of the error. The debugger has many other features which might be useful too. If your developer does not know how to use a debugger, he/she should definitely learn it.


For Linux, the most common debugger program is named "gdb" and it is available in most Linux distributions. It is usually in the "development tools" category of the distribution's package collection.


7. 참조 URL

- http://rgeissert.blogspot.kr/2013/07/explaining-segmentation-fault-errors.html

- http://rgeissert.blogspot.kr/p/segmentation-fault-error.html

- http://stackoverflow.com/questions/2549214/interpreting-segfault-messages

- http://adnoctum.tistory.com/387

posted by 박현명

1. 메시지:

init: Trying to re-exec init


2. 원인:

This message is a normal side effect of running the prelink command, which is used to prelink ELF shared libraries and binaries to speed up startup. If init's cache needs to be updated as a result, prelink will call telinit u, which will request init to re-execute itself. This causes the trying to re-exec init message.  Prelink is often run from /etc/cron.daily, which by default is run at 4:02 a.m. each day.

--> prelink 커맨드는 부팅 시 speed up을 위해 ELF 공유 라이브러리와 바이너리 파일들을 prelink 하기 위해 사용되는 것으정상적인 메시지이다. 만일 init 의 cache 가 업데이트될 필요가 있다면, prelink는 telinit u 를 호출할 것이고 이것은 syslog에 'Trying to re-exec init' 메시지 로깅을 야기할 것이다. prelink 는 /etc/cron.daily 파일로 인해 수행되며, 매일 새벽 4시경에 수행되도록 기본 설정되어 있다.


3. 조치 방안:

   - 조치 필요 없음


4. 참조 URL:

http://h20565.www2.hp.com/portal/site/hpsc/template.PAGE/public/kb/docDisplay?docId=mmr_kc-0102577&ac.admitted=1412563300611.876444892.492883150


posted by 박현명

1. 에러 메시지:

kernel: type=1101 audit(1412069761.325:844941): user pid=23092 uid=0 auid=4294967295 msg='PAM: accounting acct="sysadm" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'

kernel: type=1103 audit(1412069761.325:844942): user pid=23092 uid=0 auid=4294967295 msg='PAM: setcred acct="sysadm" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'


2. 현상:

   - Linux auditd 데몬을 disable 시켰음에도 불구하고 해당 데몬과 관련한 로그가 /var/log/messages 파일에 지속적으로 로깅됨


3. 조치 방안:

   - /etc/audit/audit.rules 파일의 '-D' 옵션을 '-e 0' 으로 변경

[root@ktdsoss01 ~]# cat /etc/audit/audit.rules

# This file contains the auditctl rules that are loaded

# whenever the audit daemon is started via the initscripts.

# The rules are simply the parameters that would be passed

# to auditctl.


# First rule - delete all

-e 0


# Increase the buffers to survive stress events.

# Make this bigger for busy systems

-b 320


# Feel free to add below this line. See auditctl man page


4. 참조 URL:

http://www.vickysguide.com/audit-still-logging-even-when-stoped/


posted by 박현명

1. 에러 메시지:

kernel: type=1400 audit(1404149145.749:40): avc:  denied  { write } for  pid=438 comm="ifconfig" path="/tmp/edscan.lck" dev=xvda3 ino=390926 scontext=system_u:system_r:ifconfig_t:s0 tcontext=system_u:object_r:initrc_tmp_t:s0 tclass=file


2. 원인:

- SELinux 설정값이 enforcing 으로 되어 있을 때 발생하는 메시지


3. 조치 방안:

- setenforce 명령 실행

  # setenforce 0         // SELinux 데몬 끄기(setenforce 1 은 켜기)

- 위 명령이 정상 수행되지 않을 경우, /etc/sysconfig/selinux 파일의 SELINUX 항목 값을 확인한 후, disabled 로 변경하고 OS reboot

[root@ktdsoss01 ~]# vi /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of these two values:

#     targeted - Targeted processes are protected,

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted 


4. 참조 URL:

https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details

http://www.linuxtopia.org/online_books/rhel5/rhel5_administration/rhel5_ch-selinux.html

http://www.oss.kr/?mid=oss_repository9&document_srl=7701&sort_index=readed_count&order_type=desc


posted by 박현명

1. 에러 메시지:

ntpd[pid]: frequency error 510 PPM exceeds tolerance 500 PPM


2. 원인 & 상세 설명:

- CloudStack XEN 가상화 환경에서 기본적으로 DomU(Guest VM) 에서의 clock Dom0(Control Domain 또는 cnode) clock 에 동기화되도록 설정되어 있음

- 하지만, xen.independent_wallclock 값이 ‘0’으로 설정되어 있으면 Dom0 에 독립적으로 clock 이 동작

0 = The clock will NOT be sync with the host.

1 = The clock will be sync with the host.

- 독립적으로 clock 이 동작하려는 상황에서 ntp 데몬을 통해 시간을 동기화하려고 하니 위와 같은 에러 메시지 발생


3. 조치 방안:

- OS 커널 파라미터(sysctl)xen.independent_wallclock 값 확인하여 해당 값이 ‘0’ 으로 설정되어 있으면 ‘1’로 변경

# sysctl –a | grep xen.independent_wallclock

# vi /etc/sysctl.conf

xen.independent_wallclock = 1

# sysctl –p

- 변경된 파라미터 적용을 위해 NTP 데몬 재시작

# service ntpd restart


4. 참조 URL:

http://docs.vmd.citrix.com/XenServer/4.0.1/guest/ch04s06.html

https://community.rackspace.com/products/f/25/t/650

http://www.itechlounge.net/2014/03/linux-guest-vm-time-sync-with-xen-host/


posted by 박현명

netstat 과 관련하여 글 올립니다.

아시다시피 netstat 은 해당 명령을 수행하는 서버가 다른 시스템과 어떤 서비스 또는 포트로 연결되어 있는지를 확인하는 명령어입니다.

알아두면 매우 유용한 명령어이므로 netstat의 각 상태값에 대한 정의, 옵션 등에 대해 정리합니다.



1. netstat 상태값

 state

 description

 CLOSED

 완전히 연결이 종료된 상태

 CLOSING

 흔하지 않으나 주로 확인 메시지가 전송 도중 유실된 상태

 CLOSE_WAIT

 TCP 연결이 상위 응용프로그램 레벨로부터 연결 종료를 기다리는 상태

 Passive Close 하는 쪽에서 프로그램이 소켓을 종료시키는 것을 기다리기 위한 상태. 가령, 소켓 프로그래밍 시 TCP connection 을 close 함수로 명시적으로 끊어주지 않으면 CLOSE_WAIT 상태로 영원히 남을 수 있고 이는 resource leak 으로 이어짐

 ESTABLISHED

 서버와 클라이언트 간에 세션 연결이 성립되어 통신이 이루어지고 있는 상태(클라이언트가 서버의 SYN을 받아서 세션이 연결된 상태)

 FIN_WAIT1

 클라이언트가 서버에게 연결을 끊고자 요청하는 상태(FIN을 보낸 상태)

 FIN_WAIT2 

 서버가 클라이언트로부터 연결 종료 응답을 기다리는 상태(서버가 클라이언트로부터 최초로 FIN을 받은 후, 클라이언트에게 ACK을 주었을 때)

 LAST_ACK

 호스트가 원격지 호스트의 연결 종료 요구 승인을 기다리는 상태(서버가 클라이언트에게 FIN을 보냈을 때의 상태)

 LISTEN

 서버의 데몬이 떠 있어서 클라이언트의 접속 요청을 기다리고 있는 상태(Windows에선 LISTENING)

 SYN_SENT

 클라이언트가 서버에게 연결을 요청한 상태

 SYN_RECEIVED

 서버가 클라이언트로부터 접속 요구(SYN)을 받아 클라이언트에게 응답(SYN/ACK)을 하였지만, 아직 클라이언트에게 확인 메시지(ACK)는 받지 못한 상태

 TIME_WAIT

 연결은 종결되었지만 (분실되었을지 모를 느린 세그먼트를 위해) 당분간 소켓을 열어놓은 상태. 기본값은 120(초). Active Close 하는 쪽의 마지막 ACK가 유실되었을 때, Passive Close 하는 쪽은 자신이 보낸 FIN에 대한 응답을 받지 못했으므로 FIN을 재전송함. 이 때 TCP는 connection 정보를 유지하고 있고 ACK를 다시 보낼 수 있음



2. TCP flag

 TCP flag

description 

 SYN

 Synchronization. 세션을 설정하는 데 사용되며 초기에 시퀀스 번호를 임의로 생성하여 보냄. 100% 는 아니지만 대부분 클라이언트 측에서 보내는 flag 

 ACK

 Acknowledgement. 받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK을 보냄.

 ACK 의 번호와 응답을 통해 보낸 패킷에 대한 손실을 판단하여 재전송하거나 다음 패킷을 전송

 FIN

 Finish. 세션을 종료시키는 데 사용되며, 보낸 사람이 더 이상 보낼 데이터가 없음을 보여줌

 RST

 Reset. 재설정을 하는 과정이며, 양방향에서 동시에 일어나는 중단 작업. 비정상적인 세션 연결 끊기에 해당함

 PSH

 Push. 대화형 트래픽에서 사용되며, 버퍼가 채워지기를 기다리지 않고 데이터를 전달. 데이터는 버퍼링 없이 바로 위 Layer 가 아닌 7 Layer의 응용프로그램으로 바로 전달

 URG

 Urgent. Urgent pointer 가 유효한 것인지를 나타냄. Urgent pointer 란 전송하는 데이터 중에서 긴급히 전달해야 할 내용이 있을 경우에 사용


3. 옵션

 option

 description

 -a

 모든 연결 및 수신 대기 포트 표시

 -c

 현재 실행 명령을 매 초마다 실행

 -l

 listen 하고 있는 포트만 보여줌

 -i

 네트워크 트래픽 정보 모니터링

 -t

 tcp로 연결된 포트를 보여줌

 -u

 ucp로 연결된 포트를 보여줌

 -n

 주소나 포트 형식을 숫자로 표현

 -p [프로토콜]

 해당 프로토콜을 사용하고 있는 프로그램명을 보여줌

 -r

 라우팅 테이블을 보여줌

 -s

 프로토콜별 통계 정보



4. 모드

 mode

 description

 Active Open

 connect()를 호출하는 쪽. 즉, SYN 세그먼트를 전송한 쪽. 종종 클라이언트가 되지만, 100% 클라이언트라고 할 수는 없음

 Passive Open

 accept()를 호출하는 쪽. 일반적으로 서버의 역할. 이 역시 100% 서버라고 단정지을 수 없음

 Active Close

 close()를 처음 호출한 쪽. FIN 세그먼트를 전송한 쪽. 클라이언트, 서버 관계 없이 어느 쪽이든 다 active close 할 수 있음

 Passive Close

 FIN 세그먼트를 받는 쪽

 MSL

 Maximum Segment Lifetime. 세그먼트가 네트워크 내에서 폐기되기 전까지 살아남을 수 있는 시간


감사합니다.

posted by 박현명

#!/bin/bash


outDir=/home/NETSTAT


if [ ! -d ${outDir} ]; then       // outDir 변수로 지정한 디렉토리가 존재하지 않을 경우, 디렉토리를 생성한다.

mkdir -p ${outDir}

fi


idx=1


outFile=${outDir}/netstat_`hostname`_`date +%y%m%d`.log


if [ ! -f ${outFile} ]; then       // outFile 변수로 지정한 파일이 존재하지 않을 경우, 컬럼명을 탭 간격을 주고 outFile 에 프린팅한다.

printf "CLOSED\\tCLOSING\\tCLOSE_WAIT\\tESTABLISHED\\tFIN_WAIT1\\tFIN_WAIT2\\tLAST_ACK\\tLISTEN\\tSYN_SENT\\tSYN_RECEIVED\\tTIME_WAIT\\n" > ${outFile}

fi


while [ 1 ]; do


CLOSED=0

CLOSING=0

CLOSE_WAIT=0

ESTABLISHED=0

FIN_WAIT1=0

FIN_WAIT2=0

LAST_ACK=0

LISTEN=0

SYN_SENT=0

SYN_RECEIVED=0

TIME_WAIT=0           // netstat 상태값들을 기본 0 으로 모두 초기화

netState=`netstat -na | grep tcp | awk '{print $6}' | sort | uniq -c`    // 이 명령에 의해 뿌려지는 값들을 


* netstat 명령 수행 결과 예시

# netstat -na | grep tcp | awk '{print $6}' | sort | uniq -c

      1 CLOSE_WAIT

     31 CLOSING

    234 ESTABLISHED

     15 FIN_WAIT1

     59 FIN_WAIT2

     21 LAST_ACK

     10 LISTEN

     33 SYN_RECV

   1109 TIME_WAIT

--> 첫 번째 열은 명령 수행 시점의 netstat 상태값의 개수, 두 번째 열은 netstat 상태값


for tmp in ${netState} ; do        // 하나씩 tmp 변수에 담아

remNum=`expr ${idx} % 2`      // idx 변수값을 2로 나눈 나머지(remNum)가

if [ ${remNum} -ne 0 ]; then      // 0 이 아니면(for문이 홀수번째로 수행된 거라면.. 즉, netstat 상태값의 개수가 tmp 변수에 넘어온 거라면)

sockNum=${tmp}              // netstat 상태값의 개수를 sockNum 변수에 담고

else          // 그렇지 않으면(for문이 짝수번째로 수행된 거라면.. 즉, netstat 상태값이 tmp 변수에 넘어온 거라면)

state=${tmp}                   // netstat 상태값을 state 변수에 담고

case ${state} in               // state 변수의 값에 따라 앞서 홀수번째에 세팅되었던 sockNum 값을 각 상태값에 맞게 할당

"CLOSED")

CLOSED=${sockNum}

;;

"CLOSING")

CLOSING=${sockNum}

;;

"CLOSE_WAIT")

CLOSE_WAIT=${sockNum}

;;

"ESTABLISHED")

ESTABLISHED=${sockNum}

;;

"FIN_WAIT1")

FIN_WAIT1=${sockNum}

;;

"FIN_WAIT2")

FIN_WAIT2=${sockNum}

;;

"LAST_ACK")

LAST_ACK=${sockNum}

;;

"LISTEN")

LISTEN=${sockNum}

;;

"SYN_SENT")

SYN_SENT=${sockNum}

;;

"SYN_RECEIVED")

SYN_RECEIVED=${sockNum}

;;

"TIME_WAIT")

TIME_WAIT=${sockNum}

;;

esac

fi

idx=$((idx+1))

done


printf "${CLOSED}\\t${CLOSING}\\t${CLOSE_WAIT}\\t\\t${ESTABLISHED}\\t\\t${FIN_WAIT1}\\t\\t${FIN_WAIT2}\\t\\t${LAST_ACK}\\t\\t${LISTEN}\\t${SYN_SENT}\\t\\t${SYN_RECEIVED}\\t\\t${TIME_WAIT}\\n" >> ${outFile}         // while 문의 결과에 따라 할당된 변수들을 outFile 에 프린트


sleep 10

done


위와 같이 Shell Script 를 작성한 후, crontab에 아래와 같이 설정합니다.

# crontab -l

* * * * * /home/mon_netstat.sh >& /dev/null


감사합니다.


posted by 박현명

시스템에 할당되어 있는 PCI Slot의 사용내역을 확인하는 스크립트 입니다.

 

SLot별로 어떤 Device가 연결되어 있는지 직관적으로 파악이 가능합니다.

 

 

1. 스크립트 (slot.sh)

-----------------------------------------------------------------

#!/bin/sh

 

cnt=1

 

NET_DIR="/sys/class/net"

DISK_DIR="/sys/class/scsi_disk"

TAPE_DIR="/sys/class/scsi_tape"

 

clear

echo "#######################################"

echo -n "HOSTNAME :"

hostname

dmidecode | grep "Product Name"

echo "#######################################"

 

for i in `dmidecode | grep Bus | grep -v Type | sed -e 's/0000://' | sed -e 's/\.0//' | awk '{print $3}'`

do

    BUS=`lspci | grep $i`

    echo ">> Slot"$cnt " " $BUS

 

    ls -al $NET_DIR | grep $i | awk '{print " " $9}'

    ls -al $DISK_DIR | grep $i | awk '{print " " $9}'

    ls -al $TAPE_DIR | grep $i | awk '{print " " $9}' | grep nst

 

    cnt=$(($cnt+1))

done

------------------------------------------------------------------

 

 

2. 수행결과

 

 

 

#######################################

HOSTNAME :OOO DB1

Product Name: ProLiant DL380p Gen8

#######################################

>> Slot1 04:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01) 04:00.1 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)

eth8

eth9

>> Slot2 07:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01) 07:00.1 Ethernet controller: Intel Corporation I350 Gigabit N etwork Connection (rev 01)

eth0

eth1

>> Slot3 0a:00.0 Fibre Channel: Emulex Corporation Saturn-X: LightPulse Fibre Channel Host Adapter (rev 03) 0a:00.1 Fibre Channel: Emulex Corporation Saturn-X : LightPulse Fibre Channel Host Adapter (rev 03)

nst0

nst1

nst2

nst3

nst4

>> Slot4 21:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01) 21:00.1 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)

eth10

eth11

>> Slot5 24:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01) 24:00.1 Ethernet controller: Intel Corporation I350 Gigabit N etwork Connection (rev 01)

eth2

eth3

>> Slot6 27:00.0 Fibre Channel: Emulex Corporation Saturn-X: LightPulse Fibre Channel Host Adapter (rev 03) 27:00.1 Fibre Channel: Emulex Corporation Saturn-X : LightPulse Fibre Channel Host Adapter (rev 03)

nst5

nst6

nst7

nst8

nst9

>> Slot7 03:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01) 03:00.1 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01) 03:00.2 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01) 03:00.3 Ethe rnet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)

eth4

eth5

eth6

eth7

>> Slot8 02:00.0 RAID bus controller: Hewlett-Packard Company Device 323b (rev 01)

 

 

 

by 이찬호

posted by DB,MW,OS OSSW(Open Source System SoftWare

inode를 통한 파일 삭제 방법에 대해 글 올립니다.

간혹 시스템을 운영 또는 관리하면서 파일 등을 생성하다가 타이핑 또는 copy&paste 상의 오류로 인해 아래와 같은 당황스런 상황을 겪으실 텐데요.

[root@ktdsoss01 tmp]# ll

total 28

-rwxr-xr-x. 1 root root  451 Jul  1 19:06 check_filesize.sh

drwx------. 2 gdm  gdm  4096 Apr 16 13:35 orbit-gdm

-rw-------. 1 root root 4096 Jun 25 16:09 perf-vdso.so-cub1DC

drwx------. 2 gdm  gdm  4096 Apr 16 13:34 pulse-QsuJaVkv9Zam

drwx------. 2 soya soya 4096 Apr 10 05:03 pulse-fc3LQ3hmuoZ7

drwx------. 2 root root 4096 Apr 15 19:31 pulse-xZomMcZuYo4E

drwxr-xr-x. 3 root root 4096 Apr 16 22:30 vmware

-rw-r--r--. 1 root root    0 Jul  4 18:43 ??????


눈에 보이는 것과 동일한 문자를 타이핑하여 rm 명령을 사용해도 파일이 삭제가 안되는 황당한 경우를 한 번씩은 겪어 보셨을 겁니다.(아닌가요....?;;;;)

이럴 때 inode 라는 것을 사용하면 되는데요.

inode 란 UNIX나 LINUX와 같은, 모든 것이 파일 단위로 운영되는 시스템들에서 파일이 생성될 때마다 함께 생성되는, 파일에 대한 정보를 가진 메타 파일이라고 생각하시면 됩니다.(자세한 내용은 구글링을 통해..;;)

이러한 inode 는 우리가 흔히 사용하는 ls 명령어에 -i 옵션만 주시면 다음과 같이 확인하실 수 있습니다.

[root@ktdsoss01 tmp]# ls -ali

total 56

523265 drwxrwxrwt. 11 root root 4096 Jul  4 18:43 .

     2 dr-xr-xr-x. 32 root root 4096 Apr 16 16:19 ..

523267 drwxrwxrwt.  2 root root 4096 Apr 16 13:34 .ICE-unix

523270 -r--r--r--.  1 root root   11 Apr 16 13:34 .X0-lock

523271 drwxrwxrwt.  2 root root 4096 Apr 16 13:34 .X11-unix

523313 drwx------.  2 root root 4096 Apr 15 19:31 .esd-0

523294 drwx------.  2 soya soya 4096 Apr 10 05:03 .esd-500

523274 -rwxr-xr-x.  1 root root  451 Jul  1 19:06 check_filesize.sh

523275 drwx------.  2 gdm  gdm  4096 Apr 16 13:35 orbit-gdm

523266 -rw-------.  1 root root 4096 Jun 25 16:09 perf-vdso.so-cub1DC

523285 drwx------.  2 gdm  gdm  4096 Apr 16 13:34 pulse-QsuJaVkv9Zam

523286 drwx------.  2 soya soya 4096 Apr 10 05:03 pulse-fc3LQ3hmuoZ7

523287 drwx------.  2 root root 4096 Apr 15 19:31 pulse-xZomMcZuYo4E

523297 drwxr-xr-x.  3 root root 4096 Apr 16 22:30 vmware

523268 -rw-r--r--.  1 root root    0 Jul  4 18:43 ??????


위에서 ?????? 라고 잘못 생성된 파일의 inode는 523268 이며, 이 파일을 지우는 방법은 다음의 명령어 한 줄이면 됩니다.

[root@ktdsoss01 tmp]# find . -inum 523268 -exec rm {} \;


앞으로 위와 같은 상황이 닥쳤을 때,


당황하지 않고~

inode 정보를 확인한 후~

find 명령에 inum과 exec 옵션을 사용하면~

빡!!

끝!!


이상입니다.

감사합니다.

posted by 박현명
prev 1 2 3 4 next