LabHub
学习 学习路径 课程

存储与挂载

追踪容量与 inode

在 LabHub 中继续学习

한국어 원문으로 표시합니다.

목표

dfdu 가 서로 다른 답을 하는 상황을 직접 만들고, inode 소비와 희소 파일과 하드 링크가 용량 계산에 미치는 영향을 확인합니다.

왜 중요한가

df 는 파일시스템에게 묻고 du 는 디렉터리를 걸어다니며 셉니다. 그래서 이름이 없어진 파일(rm 했지만 프로세스가 열고 있는)은 df 에는 잡히고 du 에는 안 잡힙니다. 두 값이 어긋나는 것 자체가 강력한 단서입니다. 그리고 그 파일을 복구하려면 프로세스를 재기동하기 전에 /proc/PID/fd 에서 복사해야 합니다 — 재기동하는 순간 기회가 사라집니다. 용량이 급해도 첫 행동은 복사입니다.

단계

  1. /root/usage 디렉터리를 만들고, df -h 출력을 /root/usage/df-block.txt 로, df -i 출력을 /root/usage/df-inode.txt 로 저장하세요.
  2. /root 아래에서 깊이 1까지의 디렉터리 크기를 큰 순서로 정렬해 /root/usage/du-top.txt 로 저장하세요.
  3. /root/usage/many 아래에 빈 파일 3000개를 만들고, 그 디렉터리의 파일 개수를 숫자 한 줄로 /root/usage/filecount.txt 에 적으세요.
  4. /root/usage/sparse.img 를 100MiB 희소 파일로 만들고, 논리 크기실제 점유를 각각 한 줄씩(바이트 단위, 논리가 먼저) /root/usage/sparse.txt 에 적으세요. 두 값이 달라야 합니다.
  5. 삭제됐지만 열려 있는 파일을 만드세요. /root/usage/ghost.log 에 5MiB 이상을 쓰고, 그 파일을 계속 열어 두는 프로세스를 백그라운드로 띄운 뒤, 파일 이름을 지우세요. 그리고 그 프로세스의 /proc/<PID>/fd 목록에서 (deleted) 가 보이는 줄을 /root/usage/deleted.txt 로 저장하세요.
  6. /root/usage/orig.dat 에 1MiB 를 쓰고 하드 링크 /root/usage/link.dat 를 만드세요. 두 파일의 inode 번호와 링크 수를 /root/usage/hardlink.txt<inode> <링크수> 형식으로 각각 한 줄씩 적으세요. 두 줄의 inode 가 같아야 합니다.
  7. /root/usage 아래에서 크기가 1MiB 이상인 파일을 크기 내림차순으로 <바이트> <경로> 형식으로 /root/usage/big.txt 에 저장하세요.
  8. /root/usage/report.txt 를 다음 4줄로 만드세요. FILES=<3번 값> / SPARSE_DIFF=yes / GHOST_PID=<5번에서 파일을 열고 있는 프로세스의 PID> / SAME_INODE=yes

참고

블록과 inode 사용량

/root/usage 디렉터리를 만들고, df -h 출력을 /root/usage/df-block.txt 로, df -i 출력을 /root/usage/df-inode.txt 로 저장하세요.

df 에는 사람이 읽기 좋은 단위 옵션과 inode 를 보는 옵션이 따로 있습니다.

큰 디렉터리 찾기

/root 아래에서 깊이 1까지의 디렉터리 크기를 큰 순서로 정렬해 /root/usage/du-top.txt 로 저장하세요.

깊이를 제한하면 위에서부터 좁혀 들어갈 수 있습니다. 다른 파일시스템으로 넘어가지 않는 옵션도 함께 쓰세요.

작은 파일 대량 생성

/root/usage/many 아래에 빈 파일 3000개를 만들고, 그 디렉터리의 파일 개수를 숫자 한 줄로 /root/usage/filecount.txt 에 적으세요.

파일 개수를 세는 것과 inode 사용량을 보는 것은 다릅니다. 생성 전후를 비교하세요.

희소 파일의 두 가지 크기

/root/usage/sparse.img 를 100MiB 희소 파일로 만들고, 논리 크기실제 점유를 각각 한 줄씩(바이트 단위, 논리가 먼저) /root/usage/sparse.txt 에 적으세요. 두 값이 달라야 합니다.

du 는 기본적으로 실제 점유를 셉니다. 논리 크기를 보려면 별도 옵션이 필요합니다.

삭제된 열린 파일 재현

삭제됐지만 열려 있는 파일을 만드세요. /root/usage/ghost.log 에 5MiB 이상을 쓰고, 그 파일을 계속 열어 두는 프로세스를 백그라운드로 띄운 뒤, 파일 이름을 지우세요. 그리고 그 프로세스의 /proc/<PID>/fd 목록에서 (deleted) 가 보이는 줄을 /root/usage/deleted.txt 로 저장하세요.

파일을 열어 둔 프로세스를 백그라운드로 유지한 뒤 이름만 지우세요. /proc 아래 fd 심링크에 표시가 남습니다.

하드 링크와 du

/root/usage/orig.dat 에 1MiB 를 쓰고 하드 링크 /root/usage/link.dat 를 만드세요. 두 파일의 inode 번호와 링크 수를 /root/usage/hardlink.txt<inode> <링크수> 형식으로 각각 한 줄씩 적으세요. 두 줄의 inode 가 같아야 합니다.

같은 inode 를 가리키는 이름이 여러 개일 때 du 가 몇 번 세는지 확인하세요. 링크 수는 stat 으로 봅니다.

큰 파일 목록

/root/usage 아래에서 크기가 1MiB 이상인 파일을 크기 내림차순으로 <바이트> <경로> 형식으로 /root/usage/big.txt 에 저장하세요.

find 의 -size 는 단위 접미사를 받습니다. 크기와 경로를 함께 출력하려면 -printf 를 쓰세요.

용량 조사 보고서

/root/usage/report.txt 를 다음 4줄로 만드세요. FILES=<3번 값> / SPARSE_DIFF=yes / GHOST_PID=<5번에서 파일을 열고 있는 프로세스의 PID> / SAME_INODE=yes

앞 단계 결과를 키=값으로 모읍니다. 삭제된 열린 파일의 크기는 /proc 경로로 stat 하면 나옵니다.