리눅스 디스크 풀 상태에서 write시 데이터에 쓰레기 값이..
글쓴이: 06dorae / 작성시간: 화, 2019/03/12 - 4:27오후
OS : CentOS Linux release 7.5.1804
커널 : 3.10.0-693.11.6.el7.x86_64
안녕하세요. 좀 특이한 상황이 나와서 검색어도 잘 안떠오르고 해서...
이렇게 글을 올리게 되었습니다.
상황은
데이터 구조가 특정 구조체(char, int, double, 배열이 포함)를 헤더를 정의하고
헤더 뒤 부터 계속 write하는 형태의 데이터 구조를 작성하는 프로그램이 있습니다.
(정확히는 라이브러리화 되어 있고 해당 함수를 콜하는 프로그램입니다.)
근데 테스트로 계속 write시 디스크 풀까지 가는 상황이 오는데 이때가 문제입니다.
보통 디스크가 풀이 나면 더 이상 write를 하지 못해서 프로그램이 죽거나 해야하는데
계속 write하는 것으로 보입니다. 그래서 해당 데이터를 열어서 출력하는 프로그램으로
데이터를 출력해보면 디스크 풀인 시점부터 쓰레기 값들이 작성되어 있습니다.
이것이 리눅스의 특성인 것인지... 그냥 계속 강제적으로 write하는 것인지..
무엇이 문제인지 찾는 중인데 조언이나 도움을 좀 주시면 감사하겠습니다.
Forums:
cat /dev/zero > ./data.bin
가 종료되는 일 없이 무한하게 수행된다는 것이죠 ?
리눅스는 이런 특성을 가지고 있지 않습니다.
파일 시스템 드라이버의 버그일 가능성도 있고 디스크 드라이버의 버그일 가능성도 있지만 작성하신 프로그램의 버그일 가능성에 비하면 없는 거나 마찬가지라 생각합니다.
음 소스 흐름상 write 함수 콜 후 반환값이 해당
음 소스 흐름상 write 함수 콜 후 반환값이 해당 데이터 사이즈가 아니면 오류로 리턴 하도록 되어있는데
write함수가 디스크 풀 상태에서도 정상 사이즈 리턴하는 것처럼 보이네요. 상황을 만들고 테스트를 더 해봐야겠네요.
aix에선 디스크 풀이면 write 자체를 안한다고 하는데...
세상에 이름을 알린 unix 계열 OS 들이 제공하는
세상에 이름을 알린 unix 계열 OS 들이 제공하는 write() 시스템 콜은
http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html
언저리를 벗어나지 못합니다.
linux 상의 문제는 아니고 파일 시스템의 문제라
linux 상의 문제는 아니고 파일 시스템의 문제라 보입니다. 아마 ext4 로 해 보시면 원하시는 결과가 나오지 않을까 싶습니다.
RHEL/CentOS 7의 커널에서 xfs 상에서 100% 차게 되면 xfs filesystem 오류로 시스템이 먹통이 되는 경우도 많습니다. xfs가 disk full 이 되는 순간에 이상 동작을 하는 것으로 보입니다.
댓글 달기