Disk alanı her zaman bir sysadmin’in baş ağrısı olmuştur. Özellikle Windows Server ortamlarında log dosyaları, yedek arşivler ve uygulama verileri zamanla birikince depolama maliyetleri ciddi boyutlara ulaşabiliyor. İşte tam bu noktada NTFS’in yerleşik sıkıştırma özelliği ve bunu yönetmek için kullanılan compact komutu devreye giriyor. Sanallaştırma veya pahalı storage çözümlerine gerek kalmadan, işletim sisteminin sunduğu bu özelliği doğru kullanmak ciddi alan tasarrufu sağlayabiliyor.
NTFS Sıkıştırma Nedir, Nasıl Çalışır?
NTFS sıkıştırma, dosyaların disk üzerinde sıkıştırılmış şekilde saklanmasını sağlayan bir dosya sistemi özelliğidir. Buradaki en önemli nokta şu: sıkıştırma tamamen şeffaf bir şekilde çalışır. Yani bir uygulama dosyayı okurken sıkıştırılmış olduğunu bilmek zorunda değildir. Windows, dosyayı okuma esnasında otomatik olarak açar, yazma esnasında tekrar sıkıştırır.
Teknik olarak NTFS, dosyaları 16 cluster’lık bloklar halinde sıkıştırır. LZ77 algoritmasını kullanır. Sıkıştırma oranı dosyanın içeriğine göre büyük farklılıklar gösterir. Metin dosyaları, log dosyaları ve XML tabanlı içerikler mükemmel sıkıştırma oranları sunarken, zaten sıkıştırılmış olan ZIP, JPEG veya MP4 gibi dosyalar neredeyse hiç küçülmez.
Dikkat edilmesi gereken önemli bir nokta: NTFS sıkıştırması CPU kullanımını artırır. Her okuma/yazma işleminde sıkıştırma/açma overhead’i oluşur. Bu yüzden yoğun I/O gerektiren veritabanı dosyaları üzerinde kullanmak genellikle önerilmez. Ama arşiv niteliğindeki veriler, eski log klasörleri veya az erişilen dosyalar için son derece verimlidir.
compact Komutuna Giriş
compact, Windows’un yerleşik komut satırı aracıdır ve NTFS sıkıştırmasını yönetmek için kullanılır. Grafik arayüzden de sıkıştırma ayarlanabilir ama bir sysadmin olarak script yazabilmek, toplu işlem yapabilmek ve durumu hızlıca sorgulamak için komut satırı çok daha güçlüdür.
Komutun temel sözdizimi şöyledir:
compact [/C | /U] [/S[:dir]] [/A] [/I] [/F] [/Q] [/EXE[:algoritma]] [dosya...]
Temel Parametreler
- /C: Belirtilen dosya veya klasörü sıkıştırır
- /U: Belirtilen dosya veya klasörün sıkıştırmasını kaldırır (uncompress)
- /S: Alt klasörler dahil işlem yapar, isteğe bağlı olarak hedef dizin belirtilebilir
- /A: Gizli ve sistem dosyalarını da dahil eder
- /I: Hata oluşsa bile işlemi sürdürür (ignore errors)
- /F: Zaten sıkıştırılmış dosyaları da zorla yeniden sıkıştırır (force)
- /Q: Sadece özet bilgi gösterir, sessiz mod
- /EXE: Executable dosyalar için özel sıkıştırma algoritması belirler (XPRESS4K, XPRESS8K, XPRESS16K, LZX)
- /CompactOs: İşletim sistemi dosyalarını sıkıştırır veya durumu sorgular
Temel Kullanım Örnekleri
Mevcut Durumu Sorgulamak
Bir klasörün sıkıştırma durumunu görmek için parametre vermeden komutu çalıştırmak yeterlidir:
compact C:IISLogs
Bu komut çıktısında hangi dosyaların sıkıştırılmış, hangilerinin sıkıştırılmamış olduğunu ve toplam kazanımı göreceksiniz. Örnek çıktı şuna benzer:
C:IISLogs içindeki dosyaların listeleniyor
2 dosyası [C]ompressed, 15 dosyası Not compressed
512.340 toplam bayt, 201.847 sıkıştırılmış.
Tek Bir Dosyayı Sıkıştırmak
compact /C C:Logsuygulama_log_2023.txt
Bu komut sadece belirtilen tek dosyayı sıkıştırır. Hızlı ve temiz bir işlem.
Bir Klasörü Alt Klasörlerle Birlikte Sıkıştırmak
Gerçek dünyada en sık kullanılan senaryo budur. Bir klasörü ve içindeki tüm alt klasörlerle dosyaları sıkıştırmak:
compact /C /S C:ArşivLogs
/S parametresi alt dizinlere de iner. Eğer farklı bir başlangıç dizini belirtmek isterseniz:
compact /C /S:C:ArşivLogs
Sıkıştırmayı Kaldırmak
Performans sorunları yaşadığınızda veya sıkıştırılmış bir klasörü artık açık tutmak istediğinizde:
compact /U /S C:VeritabaniYedekler
Gerçek Dünya Senaryoları
Senaryo 1: IIS Log Klasörünü Sıkıştırmak
Web sunucusu yönetirken IIS logları inanılmaz hızda büyür. Özellikle yoğun trafikli bir sitede günlük log dosyası 500 MB’ı geçebilir. Bu loglar genellikle sorun giderme amacıyla tutulur ama sürekli erişim gerekmez. Sıkıştırma bu senaryo için biçilmiş kaftandır.
compact /C /S /I /Q "C:inetpublogsLogFiles"
/I parametresi sayesinde erişim izni olmayan dosyalarda hata alıp işlem durmaz. /Q ile de ekrana uzun liste yerine özet bilgi gelir. Bu komutu Görev Zamanlayıcı’ya ekleyerek her ay otomatik çalıştırabilirsiniz.
Senaryo 2: Eski Yedek Arşivlerini Sıkıştırmak
Birçok ortamda 6 aydan eski yedek dosyaları “ihtiyacımız olursa” düşüncesiyle tutulur ama neredeyse hiç erişilmez. Bu dosyaları sıkıştırmak disk alanında ciddi tasarruf sağlar.
Şöyle bir PowerShell + compact kombinasyonu kullanabilirsiniz:
forfiles /P "D:Yedekler" /S /D -180 /C "cmd /c compact /C /I /Q @path"
Bu komut 180 günden eski olan her dosyayı sıkıştırır. forfiles aracı tarih filtrelemesi yaparak compact‘ı tetikler.
Senaryo 3: Toplu Sıkıştırma ve Raporlama
Bir script içinde sıkıştırma öncesi ve sonrası alan kullanımını raporlamak istiyorsanız:
@echo off
echo Sıkıştırma öncesi durum:
compact /S "D:ArşivData" | findstr "toplam"
echo.
echo Sıkıştırma başlatılıyor...
compact /C /S /I /Q "D:ArşivData"
echo.
echo Sıkıştırma sonrası durum:
compact /S "D:ArşivData" | findstr "toplam"
echo İşlem tamamlandı.
Senaryo 4: Windows Server’da Disk Doluluk Kriziyle Başa Çıkmak
Gece yarısı alarm geldi, C sürücüsü yüzde 95 dolu. Monitoringiniz çığlık atıyor. Hızlıca log klasörlerini sıkıştırmak için:
compact /C /S /I /Q /A "C:WindowsLogs"
/A parametresiyle gizli ve sistem dosyaları da dahil edilir. Bu komut Windows’un kendi log klasörüne uygulanabilir, ancak çalışan servislerin aktif olarak yazdığı dosyalar anlık olarak sıkıştırılamayabilir. Bu nedenle /I parametresi kritiktir.
/EXE Parametresi: Modern Sıkıştırma Algoritmaları
Windows 10 ve Server 2016 ile birlikte compact komutuna yeni bir özellik eklendi: çalıştırılabilir dosyalar için özel sıkıştırma algoritmaları. Bu özellik özellikle disk alanı sınırlı ortamlarda, terminal serverlarda ve VDI altyapılarında çok işe yarar.
Kullanılabilir algoritmalar:
- XPRESS4K: En hızlı algoritma, düşük sıkıştırma oranı
- XPRESS8K: Orta hız, orta sıkıştırma oranı
- XPRESS16K: Daha yüksek sıkıştırma, biraz daha yavaş
- LZX: En yüksek sıkıştırma oranı, en yavaş okuma performansı
Örnek kullanım:
compact /EXE:LZX /C /S "C:Program FilesUygulamaAdi"
Bu komut ilgili klasördeki tüm executable ve DLL dosyalarını LZX algoritmasıyla sıkıştırır. Microsoft’un CompactOS teknolojisinin de arkasında bu mekanizma var.
Önemli not: /EXE ile sıkıştırılan dosyalar standart NTFS sıkıştırmasından farklı çalışır. Bu dosyalar sadece okunurken açılır, yazılırken sıkıştırılmaz. Yani salt okunur uygulama dosyaları için ideal, aktif yazılan veriler için uygun değil.
CompactOS ile İşletim Sistemi Sıkıştırması
Disk alanı gerçekten kritik bir sorunsa ve Windows Server kurulu bir sistemde alan kazanmak istiyorsanız:
compact /CompactOs:query
Bu komut sistemin şu anki durumunu sorgular. Sıkıştırmayı aktif etmek için:
compact /CompactOs:always
Geri almak için:
compact /CompactOs:never
Bu özelliği production sunucularında dikkatli kullanın. Disk I/O performansını olumsuz etkileyebilir. Daha çok test ortamları, az yüklü sunucular veya depolama alanı çok kısıtlı sistemler için düşünülmeli.
Sıkıştırma Oranlarını Analiz Etmek
Hangi klasörlerin sıkıştırmadan en çok fayda sağlayacağını anlamak için önce analiz yapmak gerekir. compact’ı sıkıştırma yapmadan sadece bilgi toplamak amacıyla kullanabilirsiniz:
compact /S "D:Veriler" 2>nul
Daha detaylı bir analiz için şu yaklaşımı kullanabilirsiniz:
@echo off
setlocal
set hedef=D:Arşiv
echo %hedef% klasörü analiz ediliyor...
echo.
compact /S "%hedef%" | findstr /C:"toplam bayt"
echo.
echo Sıkıştırma için uygun klasörler:
dir /S /A:D "%hedef%" | findstr "DIR"
endlocal
Sık Karşılaşılan Sorunlar ve Çözümleri
“Erişim Reddedildi” Hatası
Sistem dosyaları veya başka bir süreç tarafından kilitlenen dosyalarda bu hatayı alırsınız. Çözüm:
compact /C /S /I "C:HedefKlasor"
/I parametresi hataları atlayarak devam eder. Ya da komutu yönetici olarak çalıştırdığınızdan emin olun.
Veritabanı Dosyalarında Dikkat
SQL Server, MySQL veya başka bir veritabanının data dosyaları üzerinde kesinlikle NTFS sıkıştırması kullanmayın. Microsoft bu konuda açık bir şekilde uyarıyor. MDF, LDF, NDF uzantılı dosyalar sıkıştırmadan muaf tutulmalı. Bunu dışlamak için:
compact /C /S /I /Q "D:Veriler" *.log *.txt *.xml
Uzantı bazlı filtreleme yaparak sadece istediğiniz dosya türlerini sıkıştırabilirsiniz.
Sıkıştırma Yavaş İlerliyorsa
Büyük klasörlerde compact işlemi saatler sürebilir. Arka planda çalışmasını sağlamak için:
start /low compact /C /S /I /Q "D:BüyükArşiv"
start /low komutu işlemi düşük öncelikle başlatır, sunucu performansını olumsuz etkilemez.
Görev Zamanlayıcı ile Otomatikleştirme
Gerçek bir sysadmin manuel iş yapmaz, her şeyi otomatize eder. Aylık log sıkıştırma görevi oluşturmak için önce bir batch dosyası hazırlayın:
@echo off
:: Aylık Log Sıkıştırma Görevi
:: Yönetici olarak çalıştırılmalı
set LogDir=C:inetpublogsLogFiles
set RaporDosya=C:ScriptsRaporlarsikistirma_%date:~-4,4%%date:~-7,2%%date:~0,2%.txt
echo Tarih: %date% Saat: %time% > %RaporDosya%
echo Hedef: %LogDir% >> %RaporDosya%
echo. >> %RaporDosya%
echo Önce durum: >> %RaporDosya%
compact /S "%LogDir%" | findstr "toplam" >> %RaporDosya%
compact /C /S /I /Q "%LogDir%"
echo. >> %RaporDosya%
echo Sonra durum: >> %RaporDosya%
compact /S "%LogDir%" | findstr "toplam" >> %RaporDosya%
echo Tamamlandı. >> %RaporDosya%
Bu scripti C:Scriptssikistir.bat olarak kaydedin. Ardından Görev Zamanlayıcı’ya eklemek için:
schtasks /create /tn "Aylik Log Sikistirma" /tr "C:Scriptssikistir.bat" /sc monthly /d 1 /st 02:00 /ru SYSTEM /f
Her ayın 1’inde gece 02:00’da SYSTEM hesabıyla otomatik olarak çalışır.
Sıkıştırmanın Performansa Etkisini İzlemek
Sıkıştırma uyguladıktan sonra sistemi izlemek önemlidir. Özellikle CPU kullanımının artıp artmadığına bakmalısınız. Bunun için Performance Monitor’ü kullanabilir ya da hızlı bir kontrol için:
typeperf "Processor(_Total)% Processor Time" -si 5 -sc 12
Bu komut 5 saniyede bir, 12 ölçüm yaparak CPU kullanımını gösterir. Sıkıştırılmış klasörlere yoğun erişim başladığında bu değerin nasıl değiştiğini gözlemleyin. Eğer belirgin bir artış varsa, sıkıştırmayı kaldırmanız gerekebilir.
Hangi Dosyalar Sıkıştırılmalı, Hangileri Sıkıştırılmamalı?
Sıkıştırmaya uygun dosya türleri:
- Log dosyaları (.log, .txt, .evt)
- XML ve JSON yapılandırma dosyaları
- Eski arşiv verileri
- Raporlar ve dökümanlar
- Kaynak kod dosyaları
Sıkıştırmadan kaçınılacak dosya türleri:
- Veritabanı data dosyaları (.mdf, .ldf, .ndf)
- Zaten sıkıştırılmış dosyalar (.zip, .gz, .7z, .jpg, .mp4)
- Sürekli yazılan ve yüksek I/O gerektiren dosyalar
- Sanal makine disk dosyaları (.vhd, .vmdk)
- Exchange veritabanı dosyaları
Sonuç
compact komutu, Windows Server yöneticilerinin cephaneliğinde hak ettiği değeri görmeyen ama son derece güçlü bir araç. Özellikle log yönetimi, arşiv dosyaları ve uygulama dizinlerinde doğru uygulandığında ek maliyet olmadan önemli disk alanı tasarrufu sağlıyor.
Özetlemek gerekirse: Log klasörleri ve arşiv dizinleri için çekinmeden kullanın, veritabanı dosyalarına uzak durun, her zaman /I parametresini ekleyin ve otomasyonu ihmal etmeyin. Bir de şunu unutmayın: sıkıştırma uygulamadan önce mutlaka bir yedek alın veya en azından mevcut durumu kaydedin.
Storage krizlerinde hızlı aksiyon almanızı sağlayan bu araç, aynı zamanda uzun vadeli kapasite planlaması için de size değerli veri sunar. Sistemlerinize compact /S komutuyla bir bakın, ne kadar gizli alan kazanabileceğinizi görünce şaşırabilirsiniz.