윈도우 C 드라이브가 갑자기 꽉 찼을 때, 무엇이 차지하는지 찾는 순서 (지우기 전에 읽기만 하는 방법)
C 드라이브가 갑자기 꽉 찼다면, 무엇이든 지우기 전에 어디가 큰지부터 재야 합니다. 순서는 세 단계입니다. 먼저 남은 공간을 보고, 큰 폴더를 위에서부터 한 단계씩 내려가며 찾고, 마지막으로 가장 큰 파일 몇 개를 봅니다. 이 글의 명령은 모두 읽기만 합니다. 파일을 지우거나 옮기거나 바꾸지 않습니다.
대부분은 임시 폴더, 프로그램이 남긴 작업 폴더, 프로그램 캐시에서 용량이 나옵니다. 어느 쪽인지는 컴퓨터마다 달라서, 재 보기 전에는 알 수 없습니다.
1단계 여유 공간 확인
PowerShell(시작 메뉴에서 "PowerShell"을 검색하면 나옵니다)에 아래 글을 붙여 넣고 Enter를 누르면 C 드라이브의 사용량과 여유가 GB 단위로 나옵니다.
Get-PSDrive C | Select-Object Name, @{n='Used(GB)';e={[math]::Round($_.Used/1GB,2)}}, @{n='Free(GB)';e={[math]::Round($_.Free/1GB,2)}}
이 PC에서 나온 출력입니다.
Name Used(GB) Free(GB)
---- -------- --------
C 181.25 12.95
Free(GB)가 남은 공간입니다. 이 값을 적어 두세요. 나중에 무언가 지운 뒤에 얼마나 늘었는지 비교할 수 있습니다.
설정 앱으로 보는 방법도 있습니다. 설정 > 시스템 > 저장소에서 임시 파일을 확인하고 지우는 방법을 Microsoft가 저장 공간 센스를 사용하여 드라이브 공간 관리 문서에서 안내합니다. 어느 폴더가 큰지 알아야 하면 아래 단계로 넘어갑니다.
2단계 큰 폴더 찾기
폴더별 크기를 바로 보여 주는 기본 명령이 없어서 짧은 스크립트(명령을 모아 둔 파일)를 하나 씁니다. 메모장에 아래 내용을 붙여 넣고 folder_sizes.ps1이라는 이름으로 저장하세요. 저장 위치는 바탕화면처럼 쉬운 곳이면 됩니다.
# 읽기 전용: 지정한 폴더 바로 아래 폴더들의 크기를 큰 순서로 보여 줍니다.
param([Parameter(Mandatory)][string]$Path, [int]$Top = 10)
$rows = foreach ($d in Get-ChildItem -LiteralPath $Path -Directory -Force -ErrorAction SilentlyContinue | Where-Object { -not ($_.Attributes -band [IO.FileAttributes]::ReparsePoint) }) {
$sum = 0L; $n = 0
Get-ChildItem -LiteralPath $d.FullName -Recurse -File -Force -ErrorAction SilentlyContinue |
ForEach-Object { $sum += $_.Length; $n++ }
[pscustomobject]@{ Folder = $d.Name; GB = [math]::Round($sum/1GB,2); Files = $n }
}
$rows | Sort-Object GB -Descending | Select-Object -First $Top | Format-Table -AutoSize
이 스크립트는 폴더 안의 파일 크기를 더하기만 합니다. 쓰는 곳도 없고 지우는 줄도 없습니다.
PowerShell을 열고 저장한 폴더로 이동한 다음 아래처럼 실행합니다. 처음 실행하면 "이 시스템에서 스크립트를 실행할 수 없으므로 … 파일을 로드할 수 없습니다"라는 오류가 나올 수 있습니다. 윈도우 기본 설정이 스크립트 실행을 막아 두었기 때문입니다. 설정을 바꾸지 않고 이번 한 번만 허용하는 방법이 -ExecutionPolicy Bypass입니다. 창을 닫으면 원래대로 돌아갑니다. 자세한 설명은 about_Execution_Policies 문서에 있습니다.
powershell -ExecutionPolicy Bypass -File .\folder_sizes.ps1 "C:\" -Top 6
이 PC에서 약 2분 반이 걸렸고(파일이 많은 C 드라이브 전체라서 오래 걸립니다), 결과는 이랬습니다. 이 글의 출력에서 특정 프로그램을 알 수 있는 폴더 이름은 괄호로 가렸습니다.
Folder GB Files
------ -- -----
Program Files 60.26 396132
Windows 34.64 149168
Users 22.64 158066
Program Files (x86) 10.64 22363
ProgramData 6.58 5842
(프로그램 작업 폴더) 1.16 27
다음은 가장 큰 Users 안으로 내려갑니다. 그 안에 내 계정 폴더가 있습니다. 내 계정 폴더(C:\Users\내이름)를 넣고 같은 명령을 다시 실행합니다.
powershell -ExecutionPolicy Bypass -File .\folder_sizes.ps1 "C:\Users\내이름" -Top 5
Folder GB Files
------ -- -----
AppData 14.33 102400
.cache 2.07 22455
(개발 도구 A) 1.66 8012
(개발 도구 B) 1.3 7516
.local 1.23 7
AppData가 압도적으로 큽니다. 프로그램들이 설정과 임시 데이터를 쌓아 두는 곳입니다. 한 번 더 내려가서 C:\Users\내이름\AppData\Local을 재면 이렇게 나옵니다.
Folder GB Files
------ -- -----
Packages 2.01 14874
Temp 1.77 14102
Microsoft 1.45 6971
(프로그램 C) 0.93 7575
(프로그램 D) 0.83 9607
이렇게 한 단계씩 내려가면서 가장 큰 폴더를 따라가는 것이 이 방법의 전부입니다. 이름이 낯설면 폴더 이름과 프로그램 이름으로 검색해 어느 프로그램의 것인지부터 알아보세요. 어느 프로그램의 것인지 모르는 폴더는 지우지 마세요.
합계가 맞지 않을 수 있습니다
위 결과에서 C:\ 아래 폴더 크기를 모두 더하면 약 136GB인데, 1단계의 사용량은 181GB입니다. 45GB가 비는 셈입니다. 관리자가 아닌 계정은 일부 폴더를 읽지 못하고, 이 스크립트는 읽지 못한 폴더를 조용히 건너뛰기 때문입니다. 이 PC에서는 며칠 전 관리자 권한으로 같은 측정을 했을 때 합계가 사용량과 맞았고, 일반 권한이 못 읽은 몫이 Windows, Users, Program Files 폴더 안쪽에 있었습니다. 숨은 파일이 따로 있던 것이 아니었습니다.
그래서 이 글의 방법은 "어느 폴더가 큰가"의 순서를 알려 주는 데는 충분하지만, 합계를 정확히 맞추는 용도는 아닙니다.
같은 폴더를 두 번 세는 경우
내 계정 폴더 안에는 Local Settings, Application Data 같은 이름이 보일 수 있습니다. 실제 폴더가 아니라 AppData 쪽으로 연결해 둔 바로가기(Junction)입니다. 위 스크립트에서 Where-Object { ... ReparsePoint ... } 부분이 이런 폴더를 건너뛰게 합니다. 이 부분이 없으면 같은 14GB가 AppData, Local Settings로 두 번 잡힙니다. 이 PC에서 확인한 바로가기 가운데 세 개입니다.
Name LinkType
---- --------
Application Data Junction
Cookies Junction
Local Settings Junction
3단계 가장 큰 파일 보기
폴더 단위로 좁혔으면 안에서 파일 몇 개가 대부분을 차지하는지 봅니다. 메모장에 아래를 붙여 biggest_files.ps1로 저장합니다.
# 읽기 전용: 지정한 폴더 안의 가장 큰 파일 5개를 보여 줍니다.
param([string]$Path = "$env:LOCALAPPDATA\Temp")
[Console]::OutputEncoding = [Text.Encoding]::UTF8
Get-ChildItem -LiteralPath $Path -Recurse -File -Force -ErrorAction SilentlyContinue |
Sort-Object Length -Descending | Select-Object -First 5 `
@{n='MB';e={[math]::Round($_.Length/1MB)}}, @{n='LastWrite';e={$_.LastWriteTime.ToString('yyyy-MM-dd')}}, FullName |
Format-Table -AutoSize | Out-String -Width 300
powershell -ExecutionPolicy Bypass -File .\biggest_files.ps1
경로를 주지 않으면 임시 폴더(Temp)를 봅니다. 이 PC에서는 위 2단계에서 Temp가 1.77GB였는데, 그중 이 두 파일이 1.2GB를 넘었습니다(사용자 이름과 프로그램 이름은 가렸고, 나머지 3줄은 10MB짜리라 뺐습니다).
MB LastWrite FullName
-- --------- --------
1015 2026-11-05 C:\Users\<사용자>\AppData\Local\Temp\<도구 A>\02f25702da550b6c\b6e7ffe6-6aad-48bc-bcd2-dd5dc61144da\tasks\bwx7i2psw.output
228 2026-11-03 C:\Users\<사용자>\AppData\Local\Temp\nsfFBE2.tmp\old-install\<프로그램>.exe
MB 열이 크기이고, LastWrite는 마지막으로 고쳐진 날입니다. 첫 줄은 어떤 도구가 작업 기록을 한 파일에 계속 이어 쓴 것으로 보이고(추정), 두 번째 줄은 프로그램 설치가 끝난 뒤 남은 .tmp 폴더의 파일입니다. 이렇게 크기 하나가 폴더 용량의 대부분을 차지하는 일은 흔합니다. 폴더 이름만 봐서는 알 수 없고 파일을 하나씩 봐야 보입니다.
지우기 전에 확인할 것
이 글에서 지우는 명령은 알려 드리지 않습니다. 무엇을 지울지는 위 결과를 보고 직접 정하시는 것이 맞고, 지울 때는 아래를 먼저 확인하세요.
- 파일 탐색기에서 지우면 휴지통으로 가지만, 휴지통이 꺼져 있거나 PowerShell 등에서 지우면 되돌릴 수 없습니다.
Program Files,Windows,ProgramData안의 폴더는 직접 지우지 마세요. 프로그램이 작동하지 않거나 윈도우 업데이트가 실패할 수 있습니다. 프로그램은 설정 > 앱에서 제거하는 것이 안전합니다.- 프로그램 캐시(
npm-cache,pip같은 이름)는 보통 다음 사용 때 다시 받지만, 다시 받는 데 시간이 걸리고 인터넷이 없으면 그 프로그램이 일을 못 할 수 있습니다. - 임시 폴더에 있는 파일은 지금 실행 중인 프로그램이 쓰고 있을 수 있습니다. 프로그램을 닫은 뒤에 보세요. 아직 쓰는 중이면 삭제가 거부됩니다. 거부되는 파일을 어느 프로그램이 잡고 있는지는 파일이 다른 프로세스에서 사용 중이라 삭제·저장이 안 될 때, 잡고 있는 프로그램 찾는 법 글에서 다룹니다.
- 문서, 사진, 다운로드 폴더의 내 파일은 위 방법으로 큰 것이 보여도 임시 파일이 아닙니다. 다른 드라이브(D, 외장 하드 등)로 옮기거나 백업한 뒤에 정리하세요.
가장 안전한 정리는 설정 > 시스템 > 저장소의 "임시 파일"에서 윈도우가 안전하다고 분류한 항목을 확인하고 지우는 것입니다. 목록에 다운로드처럼 내 파일이 들어 있는 항목이 있으면 체크를 확인하고 진행하세요. 메뉴 이름이 다르면 "저장소 임시 파일 삭제"로 검색해 보시면 됩니다.
이 PC에서 겪은 사례
이 글을 준비한 PC에서 며칠 전 C 드라이브 여유가 1.19GB까지 줄었습니다(194.21GB 중 193.01GB 사용). 같은 날 네 시간 사이에 0.5GB가 줄기도 해서 급하게 원인을 찾았습니다.
- 위와 같은 순서로 폴더별 크기를 재서 지워도 되는 후보를 표로 정리했습니다. 임시 폴더와 설치 찌꺼기 8곳, 합계 약 1.26GB였습니다.
- 그 방법만으로는 여유가 겨우 두 배가 되는 정도라서 더 큰 후보를 찾았습니다. 사용자 폴더 안에 작업용으로 만든
.tmp폴더 하나가 10.66GB(파일 약 36만 7천 개)였고, 이것을 지우고 나서야 여유가 11.95GB가 되었습니다. - 한 가지 더 있었습니다. 그날은 PC 메모리 부족 오류도 같이 났습니다. 재부팅하자 메모리 여유가 3.1GB에서 23.7GB로 늘었습니다. C 드라이브 용량과는 별개 문제였습니다.
폴더 크기를 잴 때 파일이 36만 개쯤 되면 오래 걸립니다. 앞의 C:\ 전체 측정이 2분 반 걸린 것도 같은 이유입니다. 메모리가 부족한 상태에서 측정 명령이 강제 종료되는 일도 있었으니, 측정이 멈추면 먼저 재부팅하고 다시 해 보세요.
정리
Get-PSDrive C ...로 여유를 확인하고 숫자를 적어 둡니다.folder_sizes.ps1로C:\,C:\Users\내이름,AppData\Local순서로 가장 큰 폴더를 따라 내려갑니다.biggest_files.ps1로 큰 파일 몇 개가 용량을 차지하는지 봅니다.- 지우기 전에 어느 프로그램의 것인지 확인합니다. 모르면 지우지 않습니다.