안녕하세요. 그린주입니다 ๑'ٮ'๑
오늘도 힘차게 시작해보겠습니다!
개요
이번 글에서는 No space left on device 오류 처리 방법을 공유하고자 합니다.
목차
Amazon EBS(Elastic Block Store) 설명
문제 상황
문제 확인
문제 해결
Amazon EBS(Elastic Block Store) 설명
Amazon EBS를 사용하면 스토리지 볼륨을 만들어 Amazon EC2 인스턴스에 연결할 수 있습니다. 볼륨을 연결한 후에는 해당 볼륨 위에 파일 시스템을 생성하거나, 데이터베이스를 실행하거나, 블록 스토리지를 사용하는 것과 같은 방식으로 사용할 수 있습니다.
1. Amazon EBS 볼륨이란?
Amazon EBS 볼륨은 EC2 인스턴스에 장착하여 블록단위로 읽고 쓰는 가상 저장 장치입니다.
볼륨을 인스턴스에 연결하면 물리적 하드 드라이브처럼 사용할 수 있으며, 하나의 인스턴스에 여러 EBS 볼륨을 연결할 수 있습니다.
Amazon EBS는 성능 특성과 가격이 다른 SSD(Solid-State Drive), HDD(Hard Disk Drive) 두 유형을 제공하며, 필요에 맞게 스토리지 성능과 비용을 조정할 수 있습니다.
문제 상황
서버에서 어떤 명령어를 실행했을 때 또는 파일을 작성할 때 아래와 같이 오류가 발생합니다.
No space left on device
문제 확인
inode 또는 파일 시스템에 남은 용량이 없어서 발생한 문제입니다.
문제 해결
해결방법은 두 가지 방법으로 나뉩니다.
df -h 명령어를 확인하여 파일 시스템 용량이 남아있을 경우 1번 공간 확보로, 파일 시스템 용량이 꽉 차 있을 경우 2번 용량 확장으로 이동합니다.
1. inode 용량 확보
공간을 확인하고 필요 없는 파일을 삭제합니다.
inode 란? 리눅스 시스템에서 파일 시스템 관련하여 처리할 때, 리눅스 전용의 index(파일에 대한 정보)를 사용합니다. 이 index를 i-node(index-node)라 부릅니다.
아래 명령어를 확인해보면 어느 파티션 용량이 100% 사용 중일 것입니다.
즉, 더 이상 inode를 쓰지 못해, 장치에 남은 공간이 없음이라는 오류 메시지가 발생한 것입니다.
inode 공간 확인
$ df -i
// 용량을 보기 쉽게 확인
$ df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 483K 304 483K 1% /dev
tmpfs 486K 2 486K 1% /dev/shm
tmpfs 486K 475 486K 1% /run
/dev/nvme0n1p1 15M 347K 15M 3% /
/log/ 2.0G 2.0G 0.0 100% /log
아래 명령어를 사용하여 어느 부분에서 용량을 차지하고 있는지 조회합니다.
용량 확인
$ sudo du -sh *
// 해당 경로 포함하여 용량 확인
$ sudo du -h --max-depth=1
// 폴더별("*" 또는 경로) 용량 sort해서 보기
$ sudo du -hs * | sort -rh | head -5
해당 폴더 또는 파일이 불필요하다면 삭제합니다.
※ 주의 ※
1. 해당 폴더의 경로가 맞는지 확인합니다.
2. 중요한 파일이 있는지 확인 후 삭제합니다.
아래는 전체 파일을 삭제하는 명령어 입니다.
현재 경로를 꼭 확인하시길 바랍니다.
$ sudo rm -f *
삭제 후 inode를 확인해보면 용량이 확보되어있습니다.
이제 정상적으로 명령어나 파일 작성이 가능합니다.
2. AWS 볼륨(파일 시스템) 용량 확장
파일 시스템 용량이 꽉 차 있다면 아래 3단계 과정을 실행합니다.
루트 EBS 볼륨 크기 확장, 루트 파티션(파티션 1) 크기 확장, 파일 시스템 크기 확장
1. 아래 명령어로 루트 파티션 용량이 꽉 찼는지(100%) 확인합니다.
$ df -h
// 각 볼륨의 파일 시스템 용량, 타입 확인
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
...
/dev/nvme0n1p1 xfs 8.0G 8.0G 664K 100% / <<<
2. AWS EC2 콘솔 > EBS 볼륨 크기 수정
1) 크기를 확장할 볼륨을 선택 - 작업 - 볼륨 수정을 차례대로 클릭해줍니다.
2) 확장하고 싶은 크기를 입력해준 뒤에, 수정 버튼을 누르고 예를 클릭합니다.
3) 아래 명령어를 확인해보면 루트 EBS 볼륨의 총공간은 9 GiB로 수정되었습니다.
그리고 아래 보이는 것과 같이 실제 사용하는 루트 파티션(/dev/nvme0n1p1)은 아직 8 GiB에 불과합니다.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 9G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
3. 루트 파티션(파티션 1) 크기 확장
루트 파티션도 확장해줍니다.
$ sudo growpart /dev/nvme0n1 1
1) growpart: command not found라고 나온다면 apt-get install growpart 설치 후 다시 실행합니다.
2) CHANGED 결과만 나온다면 lsblk 명령으로 반영되었는지 확인합니다.
잘 반영되어있다면 파일 시스템 확장으로 이동합니다.
3) 아래와 같이 FAILED 결과가 나온다면 다음 방법으로 시도합니다.
FAILED: failed to dump sfdisk info for /dev/nvme0n1
// 또는
FAILED: failed: sfdisk --list /dev/nvme0n1
EBS 볼륨에서 루트 파티션이나 루트 파일 시스템을 확장할 때 디바이스에 남은 공간 없음 오류를 방지하려면 메모리에 상주하는 임시 파일 시스템인 tmpfs를 사용합니다. tmpfs 파일 시스템을 /tmp 탑재 지점 아래에 탑재한 다음, 루트 파티션 또는 루트 파일 시스템을 확장합니다.
(1) 임시 파일 시스템 tmpfs를 /tmp 탑재 지점에 탑재합니다.
그러면 /tmp에 탑재된 10M tmpfs가 생성됩니다.
$ sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
(2) growpart 명령을 실행하여 루트 파티션 크기를 확장합니다.
$ sudo growpart /dev/nvme0n1 1
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=18870239 end=18874335
루트 파티션 크기를 확장했다면 lsblk 명령을 실행하여 루트 파티션 크기가 9 GiB로 확장되었는지 확인합니다.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 9G 0 disk
├─nvme0n1p1 259:1 0 9G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
4. 파일 시스템 확장
1) XFS 유형
저의 파일 시스템은 XFS 유형이므로 XFS 유형 파일 시스템을 확장합니다.
$ sudo xfs_growfs -d [마운트 위치]
// 예제
$ sudo xfs_growfs -d /
meta-data=/dev/nvme0n1p1 isize=512 agcount=4, agsize=524159 blks
= sectsz=512 sunit=0 blks, lazy-count=1
= crc=1 finobt=1 spinodes=0
data = bsize=4096 blocks=2096635, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 attr=2, projid32bit=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2096635 to 2358779
2) EXT2/EXT3/EXT4 유형
EXT2/EXT3/EXT4 유형일 경우 아래 명령어를 통해 파일 시스템을 확장합니다.
$ sudo resize2fs [장치명]
// 예제
$ sudo resize2fs /dev/nvme0n1p1
파일 시스템을 확장한 후 용량을 확인합니다.
8 GiB에서 9 GiB로 확장된 것을 확인할 수 있습니다.
$ df -h
// 각 볼륨의 파일 시스템 용량, 타입 확인
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
...
/dev/nvme0n1p1 xfs 9.0G 8.0G 1022M 89% / <<<
tmpfs tmpfs 10M 0 10M 0% /tmp
tmpfs를 사용했다면 unmount 명령을 실행하여 tmpfs 파일 시스템의 탑재를 해제합니다.
umount: Mounted: target is busy 오류가 발생할 경우
$ sudo umount /tmp
마무리
이렇게 No space left on device 오류 처리 방법에 대해 적어보았습니다.
다들 성공하셨을까요?? 끝까지 파이팅입니다!
긴 글 봐주셔서 감사합니다!
오늘도 행복한 하루 보내세요 ✿'◡'✿
참고
파일 시스템에 남은 공간 없음 오류가 표시되는 경우 EBS 볼륨의 크기를 늘리려면 어떻게 해야 합니까?
[AWS] EC2 no space left on device 해결 과정
Amazon Elastic Block Store(Amazon EBS)
'🌜 Server > AWS & Linux' 카테고리의 다른 글
AWS RDS 인증 기관(CA) 인증서 업데이트 ( AWS / RDS ) (2) | 2023.10.26 |
---|---|
umount: Mounted: target is busy ( Linux ) (0) | 2022.08.26 |
AWS에서 보안(TLS) 프로토콜 버전 수정(TLS 1.0과 TLS 1.1 비활성화) 및 보안 구성 테스트 방법 ( AWS / EC2 / Load balancers / Qualys ) (0) | 2022.07.04 |
nohup 사용법과 nohup.out 파일 명 변경, 로그 없이, 날짜 별로 rotation 하는 방법 ( Linux ) (4) | 2022.01.27 |
Cron 표현식( Linux ) (0) | 2022.01.27 |