Disk sorunları, sistem yöneticilerinin en sık karşılaştığı ve en çok stres yaratan durumların başında gelir. Sunucunuz yavaşlamaya başladığında, uygulamalar beklenmedik hatalar verdiğinde ya da olay günlüklerinde disk ile ilgili uyarılar görmeye başladığınızda, ilk başvurmanız gereken araçlardan biri chkdsk (Check Disk) komutudur. Bu yazıda, Windows Server ortamında chkdsk’yi etkin biçimde nasıl kullanacağınızı, gerçek dünya senaryolarıyla birlikte ele alacağız.
Chkdsk Nedir ve Ne İşe Yarar?
Chkdsk, Windows işletim sisteminin dosya sistemi bütünlüğünü kontrol eden ve hataları onarabilen yerleşik bir araçtır. Temel olarak iki katmanda çalışır: dosya sistemi mantıksal hataları ve fiziksel disk yüzeyi hataları.
Mantıksal hatalar arasında kayıp kümeler (lost clusters), çapraz bağlantılı dosyalar, hatalı dizin yapıları ve FAT/NTFS meta veri tutarsızlıkları sayılabilir. Fiziksel hatalar ise diskin yüzeyindeki bozuk sektörler anlamına gelir; chkdsk bu sektörleri tespit eder ve işletim sisteminin bu bölgelere veri yazmasını engeller.
Windows Server ortamında, özellikle yoğun I/O işlemi yapan sunucularda (veritabanı sunucuları, dosya sunucuları, Exchange) disk hataları zaman içinde birikerek kritik veri kayıplarına veya sistem çökmelerine yol açabilir. Chkdsk’yi proaktif olarak kullanmak bu riskleri önemli ölçüde azaltır.
Temel Chkdsk Parametreleri
Chkdsk’yi doğru kullanabilmek için parametrelerini iyi bilmeniz gerekir.
- chkdsk [sürücü:]: Belirtilen sürücüyü salt okunur modda tarar, hata onarımı yapmaz
- /f: Dosya sistemi hatalarını onarır (sürücü kilitli değilse)
- /r: Bozuk sektörleri tespit eder ve kurtarılabilir bilgileri okumaya çalışır (/f’yi de kapsar)
- /x: Onarımdan önce sürücüyü zorla kaldırır (unmount), açık dosyaları kapatır
- /b: Daha önce bozuk olarak işaretlenmiş kümeler dahil tüm kümeleri yeniden değerlendirir (yalnızca NTFS)
- /scan: Çevrimiçi (online) tarama başlatır, sistem sürücüsünde yeniden başlatma gerekmez
- /spotfix: Çevrimiçi taramanın ardından tespit edilen sorunları minimum kapalı kalma süresiyle düzeltir
- /perf: Daha fazla sistem kaynağı kullanarak taramayı hızlandırır (diğer parametrelerle birlikte)
- /i: Dizin girişleri arasındaki daha az kapsamlı kontrol yapar (daha hızlı, yalnızca NTFS)
- /c: Döngüsel dizin yapısı kontrolünü atlar (daha hızlı, yalnızca NTFS)
- /l:[boyut]: Log dosyası boyutunu kilobayt cinsinden ayarlar (yalnızca NTFS)
Temel Kullanım Senaryoları
Senaryo 1: Sürücüyü Salt Okunur Modda Tarama
Bir şey yapmadan önce durumu anlamak istiyorsanız, chkdsk’yi parametre vermeden çalıştırın. Bu, hiçbir değişiklik yapmadan mevcut durumu raporlar.
chkdsk D:
Bu komutun çıktısı şöyle görünür:
The type of the file system is NTFS.
Volume label is DataDisk.
WARNING! F parameter not specified.
Running CHKDSK in read-only mode.
Stage 1: Examining basic file system structure ...
294912 file records processed.
File verification completed.
Phase duration (File record verification): 12.50 seconds.
0 large file records processed.
0 bad file records processed.
Stage 2: Examining file name linkage ...
334516 index entries processed.
Index verification completed.
...
Windows has scanned the file system and found no problems.
524,287,999 KB total disk space.
412,048,516 KB in use.
...
Senaryo 2: Sistem Dışı Bir Sürücüde Hata Onarımı
Sistem sürücüsü olmayan bir veri diski için /f parametresiyle anlık onarım yapabilirsiniz. Disk o anda kullanılıyorsa Windows sizi unmount konusunda uyaracaktır.
chkdsk D: /f
Eğer disk başka bir uygulama tarafından kullanılıyorsa şu hatayı alırsınız:
Chkdsk cannot run because the volume is in use by another process.
Would you like to schedule this volume to be checked the next time
the system restarts? (Y/N)
Bu durumda /x parametresiyle zorla unmount edebilirsiniz:
chkdsk D: /f /x
Senaryo 3: Bozuk Sektör Taraması
Fiziksel disk problemlerinden şüpheleniyorsanız /r parametresini kullanın. Bu parametre /f‘yi de içerdiğinden hem mantıksal hataları onarir hem de bozuk sektörleri tespit eder. Ancak uyarı: bu işlem büyük disklerde saatlerce sürebilir.
chkdsk D: /r /x
Gerçek bir senaryodan örnek verecek olursam: Bir müşterinin dosya sunucusunda kullanıcılar rastgele “The parameter is incorrect” hataları almaya başlamıştı. Olay günlüklerinde de Disk ve NTFS kaynaklı hatalar göze çarpıyordu. /r ile yapılan tarama sonucunda birkaç bozuk sektör tespit edildi ve chkdsk bu sektörleri bad cluster listesine ekleyerek dosya sistemi tekrar sağlıklı hale geldi.
Senaryo 4: Sistem Sürücüsünde (C:) Hata Onarımı
Sistem sürücüsü (genellikle C:) çalışırken kilitlenemez. Bu nedenle sistem sürücüsünde onarım yapmak istediğinizde chkdsk, işlemi bir sonraki başlatmaya (boot) planlar.
chkdsk C: /f /r
Komuttan sonra şu mesajı göreceksiniz:
Chkdsk cannot run because the volume is in use by another process.
Would you like to schedule this volume to be checked the next time
the system restarts? (Y/N) Y
This volume will be checked the next time the system restarts.
Windows Server 2012 R2 ve sonrası için /scan ve /spotfix parametrelerini kullanarak sistem sürücüsünde yeniden başlatma ihtiyacını minimize edebilirsiniz:
chkdsk C: /scan
Tarama tamamlandıktan sonra sorunları düzeltmek için:
chkdsk C: /spotfix
/spotfix yalnızca kısa bir süre için volume’ü kilitler, bu da üretim sunucularında kapalı kalma süresini dramatik biçimde azaltır.
PowerShell ile Disk Kontrolü
Windows Server 2012 ve sonrasında PowerShell üzerinden de disk kontrolü yapabilirsiniz. Repair-Volume cmdlet’i chkdsk’nin PowerShell karşılığıdır.
# Salt okunur tarama
Repair-Volume -DriveLetter D -Scan
# Bozuk sektörleri de kontrol et
Repair-Volume -DriveLetter D -OfflineScanAndFix
# Spotfix - minimum kesinti ile onarım
Repair-Volume -DriveLetter D -SpotFix
Tüm sürücüleri toplu olarak kontrol etmek istiyorsanız:
Get-Volume | Where-Object {$_.DriveType -eq "Fixed"} | ForEach-Object {
Write-Host "Scanning drive $($_.DriveLetter)..." -ForegroundColor Yellow
Repair-Volume -DriveLetter $_.DriveLetter -Scan
Write-Host "Drive $($_.DriveLetter) scan completed." -ForegroundColor Green
}
Chkdsk Sonuçlarını Olay Günlüğünden Okuma
Chkdsk çıktısını her zaman anlık olarak göremeyebilirsiniz, özellikle sistem başlangıcında çalışan taramalar için. Bu durumda Olay Görüntüleyici’yi (Event Viewer) kullanabilirsiniz.
# PowerShell ile Chkdsk loglarını görüntüle
Get-WinEvent -LogName "Application" | Where-Object {$_.ProviderName -eq "Microsoft-Windows-Chkdsk"} | Select-Object -First 10 | Format-List TimeCreated, Message
Ya da Wevtutil ile:
wevtutil qe Application /q:"*[System[Provider[@Name='Microsoft-Windows-Chkdsk']]]" /f:text /c:5
Olay ID 26212, chkdsk’nin başarıyla tamamlandığını ve herhangi bir hata tespit etmediğini gösterir. Olay ID 26214 ise hatalar bulunduğunu ve onarım denendiğini belirtir.
Planlı Chkdsk Çalıştırma: Görev Zamanlayıcı ile Otomasyon
Üretim ortamında disk kontrollerini bakım pencerelerinde otomatik olarak çalıştırmak çok daha mantıklıdır. Bunun için bir PowerShell betiği ve Görev Zamanlayıcı kullanabilirsiniz.
# chkdsk_maintenance.ps1
$logPath = "C:LogsChkdskResults_$(Get-Date -Format 'yyyyMMdd_HHmm').txt"
$drives = @("D", "E", "F")
foreach ($drive in $drives) {
$volume = Get-Volume -DriveLetter $drive -ErrorAction SilentlyContinue
if ($volume) {
Write-Output "$(Get-Date) - Scanning drive ${drive}:" | Out-File $logPath -Append
$result = Repair-Volume -DriveLetter $drive -Scan
Write-Output "$(Get-Date) - Drive ${drive}: Result = $result" | Out-File $logPath -Append
if ($result -ne "NoErrorsFound") {
Write-Output "$(Get-Date) - Errors found on ${drive}, attempting SpotFix..." | Out-File $logPath -Append
Repair-Volume -DriveLetter $drive -SpotFix
}
}
}
# Sonucu e-posta ile gönder (isteğe bağlı)
# Send-MailMessage -To "[email protected]" -Subject "ChkDsk Raporu" -Body (Get-Content $logPath -Raw) -SmtpServer "mail.sirket.com"
Bu betiği Görev Zamanlayıcı’ya eklemek için:
schtasks /create /tn "WeeklyDiskCheck" /tr "powershell.exe -ExecutionPolicy Bypass -File C:Scriptschkdsk_maintenance.ps1" /sc weekly /d SUN /st 03:00 /ru SYSTEM
Gerçek Dünya Senaryosu: Exchange Sunucusunda Disk Sorunları
Bir Exchange sunucusunda kullanıcılar e-posta gönderememe ve posta kutularına erişememe şikayetiyle geldi. Önce olay günlüklerine baktık:
Get-EventLog -LogName System -Source "disk" -Newest 20 | Select-Object TimeGenerated, EntryType, Message | Format-List
Günlüklerde Event ID 7 (disk has a bad block) ve Event ID 11 (driver detected a controller error) hataları vardı. Exchange veritabanı diskleri üretimdeydi, dolayısıyla önce /scan ile çevrimiçi tarama başlattık:
chkdsk E: /scan /perf
/perf parametresi taramayı hızlandırdı. Tarama 40 dakikada tamamlandı ve birden fazla bozuk sektör tespit edildi. Bakım penceresinde ise /spotfix ile onarım uygulandı:
chkdsk E: /spotfix
Ancak bu noktada önemli bir hatırlatma: Chkdsk disk sorunlarının semptomlarını giderir ama fiziksel olarak bozulan bir disk için disk değişimi kaçınılmazdır. Bu senaryoda chkdsk sonrası disk sağlığı izlemeye alındı ve kısa süre içinde disk değiştirildi.
Chkdsk Hata Kodları ve Anlamları
Chkdsk komut satırından çalıştırıldığında farklı çıkış kodları (exit code) döndürür. Bu kodları betiklerinizde kontrol edebilirsiniz:
- 0: Hata yok, onarım yapılmadı
- 1: Hatalar bulundu ve onarıldı
- 2: Disk temizleme (cleanup) işlemi gerçekleştirildi (bazı Windows sürümlerinde)
- 3: Hatalar bulundu, onarılamadı ve/veya doğrulanamadı
PowerShell’de çıkış kodunu yakalamak için:
chkdsk D: /f
$exitCode = $LASTEXITCODE
switch ($exitCode) {
0 { Write-Host "Disk temiz, sorun yok." -ForegroundColor Green }
1 { Write-Host "Hatalar bulundu ve onarildi." -ForegroundColor Yellow }
2 { Write-Host "Disk temizleme yapildi." -ForegroundColor Yellow }
3 { Write-Host "Kritik hatalar, onarim basarisiz!" -ForegroundColor Red }
}
Chkdsk Öncesi ve Sonrası Dikkat Edilmesi Gerekenler
Çalıştırmadan Önce
- Yedek alın: Ciddi disk sorunlarında chkdsk bazen veri kaybına yol açabilir.
/fveya/rçalıştırmadan önce mutlaka yedek alın. - Disk kullanımını kontrol edin: Hangi uygulamaların ilgili diski kullandığını belirleyin, gerekirse servisleri durdurun.
- SMART verilerini kontrol edin:
wmic diskdrive get status, model, serialnumberkomutuyla ya da CrystalDiskInfo gibi araçlarla disk sağlığını önceden değerlendirin. - Zaman planlayın:
/rparametresi büyük disklerde çok uzun sürer, 2 TB disk için 4-6 saat normal kabul edilebilir.
Çalıştırdıktan Sonra
- Sonuçları olay günlüğünden doğrulayın
- Bozuk sektör sayısını kaydedin, artış varsa disk değişimini planlayın
- Uygulamaların normal çalışıp çalışmadığını test edin
- Düzenli izleme kurumunu gözden geçirin
Chkdsk ve NTFS vs ReFS
Windows Server 2012 ve sonrasında ReFS (Resilient File System) de kullanılmaktadır. ReFS, geleneksel chkdsk yerine kendi dahili onarım mekanizmasını kullanır. ReFS biçimlendirilmiş bir sürücüde chkdsk çalıştırmaya çalışırsanız hata alırsınız.
# ReFS sürücüsünde bu komut çalışmaz
chkdsk R: /f
# Hata: Chkdsk is not available for RAW drives
# ReFS için doğru yaklaşım
Repair-Volume -DriveLetter R -Scan
ReFS, veri bütünlüğünü her yazma işleminde kontrol eden bir mimariyle tasarlanmıştır. Bu nedenle özellikle Storage Spaces ile birlikte kullanıldığında çok daha dayanıklı bir seçenektir.
Uzak Sunucularda Chkdsk Yönetimi
Birden fazla sunucuyu yönetiyorsanız, her sunucuya RDP ile bağlanmak yerine uzaktan chkdsk çalıştırabilirsiniz.
# Invoke-Command ile uzak sunucuda chkdsk
Invoke-Command -ComputerName FILESERVER01 -ScriptBlock {
$result = Repair-Volume -DriveLetter D -Scan
return "Drive D Scan Result: $result"
}
# Birden fazla sunucuda toplu kontrol
$servers = @("FILESERVER01", "FILESERVER02", "SQLSERVER01")
Invoke-Command -ComputerName $servers -ScriptBlock {
$volumes = Get-Volume | Where-Object {$_.DriveType -eq "Fixed" -and $_.DriveLetter -ne $null}
foreach ($vol in $volumes) {
$result = Repair-Volume -DriveLetter $vol.DriveLetter -Scan
[PSCustomObject]@{
Server = $env:COMPUTERNAME
Drive = $vol.DriveLetter
Result = $result
}
}
}
Yaygın Sorunlar ve Çözümleri
Chkdsk takılı kalıyor gibi görünüyor: Bu normaldir, özellikle /r büyük disklerde yavaş ilerler. Kesmeden önce en az birkaç saat bekleyin. Gerçekten takılıysa disk sürücüsü fiziksel olarak arızalı olabilir.
“Access Denied” hatası: Yönetici yetkileriyle çalışmıyorsunuzdur. CMD veya PowerShell’i “Yönetici olarak çalıştır” seçeneğiyle açın.
“The disk does not have enough space” hatası: NTFS log dosyası için yeterli alan yok. /l: parametresiyle log boyutunu küçültmeyi deneyin.
Sistem sürücüsünde chkdsk boot sırasında çalışmıyor: Registry’de ilgili değeri kontrol edin:
reg query "HKLMSYSTEMCurrentControlSetControlSession Manager" /v BootExecute
Değer autocheck autochk * içermelidir. İçermiyorsa sıfırlayın:
reg add "HKLMSYSTEMCurrentControlSetControlSession Manager" /v BootExecute /t REG_MULTI_SZ /d "autocheck autochk *" /f
Sonuç
Chkdsk, Windows Server yöneticilerinin araç kutusunun vazgeçilmez bir parçasıdır. Basit görünümünün arkasında oldukça güçlü bir onarım motoru barınır. Kritik nokta şudur: chkdsk semptomları giderir, hastalığı değil. Bozuk sektör sayısı giderek artıyorsa, SMART uyarıları geliyorsa ya da chkdsk defalarca hatalar buluyorsa, disk değişimini ertelemeyin.
Üretim ortamlarında şu stratejiyi önerim:
- Haftalık
/scanile çevrimiçi tarama yapın - Aylık bakım penceresinde
/spotfixçalıştırın - Şüpheli durumlarda
/rile kapsamlı taramayı mutlaka yapın ama önce yedek alın - Sonuçları merkezi olarak toplayın ve saklayın, eğilim analizi yapın
Disk sağlığını proaktif olarak yönetmek, gece yarısı panik anlarını önemli ölçüde azaltır. Ve bunu söyleyen biri olarak, o panik anlarını yaşamak hiç keyifli değil.