서버엔지니어를 위한 서버트러블 슈팅 미리보기-
파일I/o문제해결 Case 실습 inode full /No space left on device
안녕하세요 리얼리눅스입니다. 서버 트러블 슈팅 서버엔지니어 커리큘럼의 맨 마지막에 있는거죠
마지막에 있는 만큼 이거를 먼저 들으시면 조금 어려우실 수가 있어요
그리고 준비가 어느 정도 되어 있지 않다면이거를 하는 게 조금 버거우실 수 있다 라는 거
참고로 알고 계셔야 되겠습니다 물론 커리큘럼 앞에 있는 것을모두 다 들어야 되나요? 그렇지는 않아요
아무래도 물론 세밀한 부분들에 대해서 고민되는 거라면카카오톡을 통해서 이 커리큘럼을 수강해도 되는 상황인지
나의 상황에 대해서 내가 알고 있는 것을어느 정도 얘기를 해주시면서
상담을 해보는 것도 괜찮을 것 같습니다.
일단은 기본적으로 시스템핵심 정리는 스킵을 안 하는 게 좋습니다
시스템에 핵심정리까지는 최대한 일단 알고 있어야 되고 우리는 기초적인 부분들도 당연히 알고는 있어야 돼요
그 두 부분이 제가 봤을 때 가장 필수적인 부분이기 때문에 그런 부분들이 없는 상태에서
넘어왔을 때는 이 수업이 의미가 없어요
왜냐하면 원래 어떻게 도는지를 모르고 리눅스의 기초,기본적인 부분들을 다룰 줄 모르는데
트러블슈팅으로 넘어봤자 안 됩니다
문제 해결을 하는 거는 가장 마지막 단계에요 그래서 그거를 참고로 이해하시면 좋을 것 같고요
수강하시기 전에 고민이 되시면 언제든지 카카오톡으로 상담해주시면 좋을 것 같습니다.
서버 트러블 슈팅 내용은 이렇게 4회차로 구성이 되어 있고 서버엔지니어 입장에서 트러블슈팅을 할 때
리눅스의 문제를 어떻게 전략적으로 진단하고 분석하고 검증할 건지
그리고 또 어떻게 해결할 것인지 이런 부분에 대한 전략의 대해서 길게 다루고 있습니다.
리눅스 문제해결 전략(진단, 분석, 검증 등) 이런 부분이 제가 생각했을 때는
트러블슈팅커리큘럼의 가장 핵심이 되는 부분입니다
이런 내용들은 어디서 알려주는 곳 진짜 보기 힘드실 거예요
정말 힘들 겁니다 이런 내용들은요
단순히 리눅스에 대한 문제 해결 전략이라고 보기에도 좀 지금은 어려워요
물론 리눅스에 특화해서 모든 것들이 다 정리했습니다
하지만 이 문제 해결이라고 하는 것은 사실 세상 어느 곳에 있어서도 다 문제 해결이라는 포인트들이 다 들어가죠
뭔가 형사가 범인을 잡을 때도 문제를 해결하는 과정이 될 수가 있겠고요 수사 과정들 이런 것들과 굉장히 유사해요
결국에는 맥락들 겉에 피상적으로 드러나는 1차원적인 어떤 결과를 보고 접근하는 게 아니라
그 내부 왜?라는 질문을 반복해서 던지면서 루트코즈 라고 하죠
핵심 원인을 찾아내는 그런 과정인 건데 그런 전반적인 원리는 결국에는 다 똑같아요
결국에는 그 세상 모든 문제들을 해결할 때 이런 전략들이 필요합니다
하지만 그걸 너무도 추상적으로 얘기해버리게 되면 우리가 또 이제 논리수업도 아니고
리눅스 수업이기 때문에 리눅스에 조금 더 특화해서 그런 부분들을 가져가면서
그러니까 전반적으로 문제 해결이라는 것을 우리가 어떻게 바라봐야 되냐, 문제라는 걸 어떻게 바라봐야 되느냐
이런 핵심적인 사고 원리들을 하나씩 하나씩 다 세워서 볼 거예요.
그래서 그 전략들을 틀을 만들고 나면 제가 장담을 드리지만 이 문제 해결에 대한 접근 방법이 굉장히 좋아지실 겁니다
문제 해결에 접근하실 때 스스로 어떤 사고 방식으로 접근을 하는 게 순차적으로 접근하는게 좋을지
이런 부분들이 많이 느껴지실 겁니다
그리고 더 나아가서는 리눅스 이상으로 다른 문제 해결을 하실 때도 분명히 도움이 될 거라고 생각이 들어요
그래서 그 부분은 좀 많이 강조해서 말씀을 드렸고요 그 이외에도 여러 가지 뭐
패키지 문제를 굉장히 많이 만나는 거죠
파일,메모리 문제들 그리고 네트워크문제들 이런 부분들도
각각 핵심적으로 리눅스에서 알아야 되는 구조들을 먼저 설명을 해요
그런데 이건 요약 설명입니다
그래서 여기서 모든 개념들을 공부하시려면 안돼요
여기 정리하는 곳입니다 여기서는요 오히려 이 내용들을 쭉 들었을 때 좀 빠르거든요
내용들을 압축적으로 요약돼 있는 걸 쭉 들었을 때 그게 들어와야 돼요 검증하는 거죠 정리를 하는 겁니다
그런데 만약에 거기서 이제 빈틈이 나왔다 그러면 그거를 채우면 되는거죠 그렇죠
나중에 채우면 되는 거고 그래서 그런 거를 요약하고 정리하고 검증하는 단계라고 보셔야 돼요
이런 내용들은 개념이 다 들어 있는 게 아닙니다 물론 다 들어있기는 해요 굉장히 빠르고 압축적이기 때문에
이걸로 정리를 하기에는 좀 엄청 힘들 수 있다라는 거 이해를 하셔야 되는 거고요
파일, 네트워크 이런 것들은 모니터링 하는 방법부터 시작을 해서 진단이라든지 분석 검증하는 것들도
굉장히 많이 다루게 되고요
그리고 가장 다양한 문제해결 케이스들을 예시를 들면서 이 문제를 내가 실제로 만났으면 어떻게 접근하고
어떻게 해결하는 게 좋을까 어디서 멘탈이 나갈 수 있을까 이런 부분들에 대해서도 함께 많이 이야기를 해볼 예정이에요
그래서 서버트러블슈팅은 여기까지 설명을 드리도록 하겠습니다
파일 I/O 문제 해결 케이스들을 한번 다뤄보도록 하겠습니다
몇 가지 다뤄볼거고요
자 먼저 첫번째로 것은 inode full 문제를 한번 다뤄볼 겁니다
물론 우리가 inode가 꽉 찼다라고 하는 그 문제에 상황을 재현해 보면서 갈건데 이거를 원인을 모른다는 전제로
한 번 살펴보면 문제 해결하는 과정에서 우리가 착각하는 포인트들이 있을 수 있거든요
그리고 또 이런 부분들은 우리가 조금 혼란스러운 현상이 벌어질 수가 있어요
일단 한번 다수의 파일을 생성하면서 한번 이 현상 한번 만들어 보도록 하겠습니다
many_file_test라는 거를 여기 밑에 보이는 발표자 노트에 있는 내용을 잘 복사하셔가지고 생성을 해보도록 하겠습니다
이거를 열어서 생성을 하면 되겠고요 파일을 이제 이백만개 정도를 생성할 거거든요
굉장히 많죠 그래서 이거를 컴파일에서 만들건데 파일 이제 굉장히 많기 때문에 그냥 현재 폴더에 그대로 만들기는 좀 그렇고 폴더를 하나 생성을 해가지고 한번 만들어 보도록 하겠습니다
mkdir에서 test_files해놓고 test_files로 들어간 다음에 여기서 gcc로 컴파일을 할 건데
바이너리 명칭으로 할 거고요
그리고 또 소스코드를 기준으로 컴파일해볼 겁니다. 일단은 폴더상에는 파일이 바이너리 하나예요
그런데 이것이 파일을 이백만개 만들 거란 말이에요
그래서 이것을 시행 해보도록 하겠습니다. 시간이 좀 걸리고요
아마 이제 중간에 fail이 좀 날 겁니다 그럼 일단은 쭉 실행을 해볼 거고요
쭉 실행을 하고 결과가 나오면 fail되고 멈추는데 그 산간에 만들어진 파일들은 유지가 되요
일단은 지금 생성 중이고요 조금 오래 걸리죠 파일이 워낙 많다 보니까 그래서 아마 일단 결과에서 ls를 했을 때도
결과가 굉장히 많이 나오는 것을 볼 수가 있을 거예요
그래서 우선은 조금 기다려 보고 이렇게 해서 지금 일단 fail까지 나고 이제 ls를 하면 결과가 너무 많아요
파일이 너무 많기 때문에 그래서 이렇게 ls했을 때 그 결과를 쭉 한번 확인해 볼 수가 있죠
굉장히 오래 걸립니다. 너무 많아가지고 이렇게 해서 지금 파일이 엄청나게 많죠 이렇게 확인을 해봤고요 이 상황에서 새로운 파일을 내가 생성을 한다 이러면 이렇게 공간이 없다 라는 에러가 뜨게 되거든요
보통은 이런 에러가 떴을 때 이걸 구글링 해보시면 디스크 용량에 대한 문제 라고 얘기를 할 수가 있어요
그래서 우리가 또 이거는 많이 보는 에러메시지 다 보니까 자연스럽게 어떻게 보냐면 이렇게 확인을 합니다
그런데 이걸 보고 굉장히 혼동스러울 수 있다는 얘기에요
무슨 말이냐면 파일이 생성 안되네
그런데 그 에러메시지가 공간이 없다
(No space left on device)라는 메세지가 나는 거예요
그러면 당연히 디스크 공간을 확인할 수 있을 거고 윈도우로 따지면 C드라이브, D드라이브 공간이 몇 퍼센트를 차지 하는지 이런 걸 보잖아요
지금 이걸 보면 65%를 쓰고 있고 사용 가능한 공간이 6G 씩 나 있어요
그런데 공간이 없대요 이러니까 이제 굉장히 혼란스러울 수 있다
그러면 이게 도대체 뭐가 문제냐라고 얘기를 해 볼 수가 있는데요
여기서 이제 적어놓은 것처럼 문제의 원인이 결국에 Inodes를 생성할 수 있는 한계치가 사실 있는데
그것보다 더 많은 파일들이 생성이 되서 이제 꽉 찼기 때문에 더 이상 생성을 할 수 없는 그런 현상인 거죠
만약에 그 부분을 확인을 한다면 df -i 옵션을 넣어서 본다면 I 노드를 중심적으로 보면서 Inodes를 기준으로 100%를 찬것을 볼 수가 있어요
그래서 이런 문제들도 문제의 어떤 에러메시지만 가지고 본다면 그냥 디스크 공간이 없으니까 그게 문제겠지
이런 생각을 할 수가 있는데 디스크 공간이 없다 라고 표현하는 것도 어떻게 보면 파일을 다루기 위해서는
Inodes그 단위로 파일을 관리를 해야 되기 때문에 쓸 수 있는 Inodes가 없다면 더이상 파일을 다룰 수가 없다라는 얘기로 귀결이 되거든요 그러면 결론적으로는 같은 에러메시지를 뿜을 수 있는 거죠
그래서 뭔가 이 결과와 현상에 너무 집착하면 안돼요
이 현상이 곧 원인을 직접적으로 나타내는 경우도 있지만 그런 1차원적인 문제들은 정말 금방 해결이 됩니다
우리가 이렇게 교육까지 들어가면서 우리가 공부를 하는 이유 중에 하나는 이 문제 상황들이 이 문제에
그 현상과 결과만으로는 바로 진입을 하고 해결할 수가 없기 때문인 거죠
그런 경우들은 결국에 이 문제 현상들은 현상이나 결과라고 생각을 하고요
이게 만들어지기까지 전체 과정과 그리고 또 이 부분이 1차원적으로 만들어진 게 아니라 이 베일에 싸인
내부적인 원인이 핵심 루트코즈 라고 얘기하죠 핵심 원인이 따로 있을 수 있다라는 부분들을 고려하면서
접근하는 게 굉장히 중요해요
그래서 첫시간에 배운 내용이 어떻게 보면 제일 중요합니다
우리 물론 케이스 들을 다루고 공부할 수 있어요 그런데 이거는 결국에는 지식에 불과합니다
어떤 사례들을 통해서 노하우가 쌓이고 경험이 쌓이는 것도 물론 당연히 중요해요 하지만
문제 해결하는 기본적인 사고방식 기본적인 접근 방식의 뼈대가 어느 정도 만들어져 있지 않으면
아무리 노하우가 생긴다고 하더라도 멘탈이 나가는 건 매 한가지에요
그냥 계속 안 된다 라는 얘기만 반복을 하게 돼요
나중에 멘탈이 나가서 그냥 아무것도 안 된다라고 얘기하는 경우도 있어요
그런데 결국에는 문제들은 다 해결이 됩니다
물론 정말 불가능한 문제들도 있긴 하겠지만 웬만한 리눅스 소프트웨어에 있는 문제들은 다 해결이 가능해요
그런데 그 부분을 우리가 파헤쳐서 하나씩 하나씩 살펴보면서 정리를 할 수 있는지 이런 것부터가 굉장히 중요한 포인트가 되는 거죠
그런 것들을 하지 않고 그냥 이렇게도 해보고 저렇게도 해보고 얻어걸려서 되면은 물론 다행히 될 수도 있겠지만
그렇다고 하더라도 또 어떻게 왜 해결이 됐는지도 모르면 또 다른 문제, 비슷한 문제 또 봉착할 수 있다 라는 거 항상 생각해야 되는거죠..
* 리얼리눅스 홈페이지 바로가기 https://reallinux.co.kr/
'리눅스 이야기' 카테고리의 다른 글
내가 코딩을 배운다면?? (IT직종의 전망, 취직 관련) (0) | 2023.11.28 |
---|---|
Address already in use (Bind failed) 문제 해결방법 (1) | 2023.11.27 |
도커 / k8s / 클라우드(AWS) 네트워크 완전 정복 미리보기 -리눅스 네트워크 I/O 과정 (0) | 2023.09.11 |
도커/쿠버네티스 기초 미리보기-Docker 구조(dockerd/containerd/runc) (0) | 2023.09.11 |
시스템 핵심정리 미리보기-시스템 메모리 사용량 확인하기 (0) | 2023.09.11 |