SSD Nodes Learn 🎉 VPS $5.50/aydan başlayan
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-08-15

Ubuntu /boot dizini nasıl temizlenir ve yer açılır

Eski linux-image paketleri nedeniyle dolan /boot dizini apt hatalarına yol açar. Sistemde çalışan çekirdeği koruyarak kullanılmayan sürümleri güvenle nasıl kaldıracağınızı öğrenin.

Neden /boot dizini eski çekirdeklerle dolduğunda apt çalışmayı durdurur

Ubuntu üzerinde her çekirdek güncellemesi, /boot dizinine yeni bir dosya seti yazar ve öncekileri olduğu gibi bırakır. Bu nedenle küçük boyutlu /boot bölümü dolar ve apt kurulum işlemini tamamlayamaz. Onarım iki aşamalıdır. Sunucudaki hangi paketlerin çekirdek olduğunu ve hangisiyle sistemin başlatıldığını belirleyin, ardından geri kalanları apt autoremove --purge ile kaldırın.

Sıralama önemlidir. Çalışan çekirdek, kesinlikle kaldırmamanız gereken pakettir ve sunucu halihazırda apt komutunun hiç çalışmadığı bir durumda olabilir. Önce tanı koyun.

Hatanın gerçekte nasıl göründüğü

Bir çekirdek sürümü, /boot dizinine iki büyük dosya yükler: sıkıştırılmış çekirdek (vmlinuz-<version>) ve initramfs (başlangıç RAM dosya sistemi, initrd.img-<version>; çekirdeğin gerçek kök dizini bağlamadan önce açtığı küçük arşiv). initramfs, kurulum sırasında makinenizde oluşturulur; bu nedenle kurulum işlemi yalnızca indirme bant genişliğine değil, aynı zamanda boş disk alanına da ihtiyaç duyar. Yeterli alan kalmadığında, oluşturma işlemi başarısız olur ve paket kurulumunu da beraberinde durdurur.

update-initramfs: Generating /boot/initrd.img-6.8.0-64-generic
gzip: stdout: No space left on device
E: mkinitramfs failure gzip 1
update-initramfs: failed for /boot/initrd.img-6.8.0-64-generic with 1.
dpkg: error processing package linux-image-6.8.0-64-generic (--configure):
 installed linux-image-6.8.0-64-generic package post-installation script subprocess returned error exit status 1

Sürüm dizgisi size özel olacaktır. Sıkıştırıcı adı /etc/initramfs-tools/initramfs.conf içindeki COMPRESS= değerinden gelir; bu nedenle yeni bir imaj zstd ismini kullanırken, eski bir imaj gzip ismini kullanabilir. Bu sorunu tanımlayan iki satır No space left on device ve altındaki dpkg: error processing package satırıdır.

Bundan sonra paket, yapılandırması yarım kalmış şekilde bekler. Daha sonraki her apt çalıştırması paketi tekrar yapılandırmaya çalışır, aynı şekilde başarısız olur ve E: Sub-process /usr/bin/dpkg returned an error code (1) ile sona erer. Disk alanının ötesinde önemli olan kısım budur: unattended-upgrades kendi zamanlayıcısında çalışır, aynı hataya takılır ve durur. Sunucu sağlıklı görünür ancak sessizce güvenlik yamalarını uygulamayı bırakır. Bu durum ayrıca, denediğiniz ilgisiz herhangi bir kurulumun da aynı satırla başarısız olacağı anlamına gelir; suç, o sırada eklemeye çalıştığınız şeye atılır. Bu yüzden Ubuntu üzerinde başarısız olan bir Tailscale kurulumu konusunu öncelikle bir apt hatası olarak okumakta fayda vardır. Eğer apt update bu aşamaya gelmeden başarısız olursa, bu ayrı bir sorundur ve genellikle deb822 kaynak geçişinden sonra oluşan yinelenen girdi ile ilgilidir.

/boot dizininin ayrı bir bölüm olup olmadığının kontrol edilmesi

Herhangi bir şeyi silmeden önce, gerçekte ne kadar alan açacağınızı tespit edin.

findmnt /boot
findmnt -T /boot
df -h /boot /

İlk komut, yalnızca /boot kendi bağlama noktası (mount point) ise bir satır yazdırır. İkinci komut ise her zaman çıktı verir ve /boot dizinini gerçekten barındıran dosya sistemini belirtir. Eğer bu komutlar / ile aynı dosya sistemini işaret ediyorsa, /boot kök dosya sistemi üzerinde sadece bir dizindir ve kendi başına dolması mümkün değildir: kök dosya sisteminiz doludur ve eski çekirdekler bu doluluğun nedenlerinden sadece biridir. Bu durumda, /var/cache/apt/archives altındaki indirilen .deb dosyalarını temizleyen sudo apt clean komutu size yer açacaktır. Gerçek bir /boot bölümüne sahip bir makinede ise apt clean komutu orada hiçbir alan açmaz, çünkü önbellek farklı bir dosya sisteminde yer alır.

Şimdi üzerinde çalışacağınız rakamı elde edin.

df -h /boot
ls -lh /boot/vmlinuz-$(uname -r) /boot/initrd.img-$(uname -r)

Avail sütununu bu iki dosyanın boyutuyla karşılaştırın. initrd dosyası daha büyük olandır. Bir sonraki çekirdek güncellemesi, yaklaşık olarak aynı boyutta başka bir çift dosya için alana ihtiyaç duyar; bu nedenle eğer Avail mevcut initrd dosyasından daha küçükse, bir sonraki güncelleme şimdiden başarısız olacaktır.

Çalışan çekirdeği bulma

uname -r
cat /var/run/reboot-required.pkgs

uname -r, halihazırda bellekte yüklü olan çekirdeğin sürüm dizgisini yazdırır. Bu dizgiyi bir yere kopyalayın. Bu, dokunmamanız gereken tek sürümdür.

İkinci dosya yalnızca bir paket yeniden başlatma istediğinde mevcuttur. İçindeki bir linux-image satırı, diskte daha yeni bir çekirdeğin yüklü olduğunu ancak makine paket yüklendiğinden beri yeniden başlatılmadığı için kullanılmadığını gösterir. Mümkünse temizlik yapmadan önce yeniden başlatın. apt, çalışan çekirdeği ve en yenisini korur; bu nedenle eski bir çekirdek üzerinde çalışırken temizlik yapmak, ihtiyacınız olandan bir fazla sürümü sabit tutmanıza neden olur.

Çekirdek paketlerini listeleyin ve durumlarını okuyun

dpkg --list | grep -E 'linux-(image|modules|headers|tools)' | awk '{print $1, $2}'

İlk alan, dpkg'nin durum kodudur. ii, paketin yüklü ve yapılandırılmış olduğu anlamına gelir. iF, paketin yüklü ancak kısmen yapılandırılmış olduğunu belirtir; yukarıdaki başarısız yükseltme işleminin geride bıraktığı durum tam olarak budur. rc, paketin kaldırıldığını ancak yapılandırma dosyalarının diskte kaldığını gösterir; bu durum /boot üzerinde yer kaplamaz ve güvenle temizlenebilir (purge).

İkinci alan, paketin türünü belirtir. linux-image-6.8.0-64-generic gibi içinde sürüm numarası barındıran bir isim, belirli bir çekirdek sürümüdür. linux-image-generic, linux-headers-generic veya linux-generic gibi sürüm içermeyen isimler ise meta paketlerdir. Bunlar çekirdek içermez. Tek görevleri, en yeni sürümdeki çekirdeğe bağımlı olmaktır; böylece apt upgrade yeni çekirdekleri sisteme çeker. Bir meta paketi kaldırmak, makinenin çekirdek güncellemelerini almasını durdurur ve sonrasında sizi uyaran hiçbir mekanizma yoktur.

Aileler şu şekilde ayrılır: linux-image-*, sıkıştırılmış çekirdeği /boot içinde tutar. linux-modules-* ve linux-modules-extra-*, sürücüleri /lib/modules altında barındırır. linux-headers-*, derleme başlıklarını (headers) /usr/src altında tutar; bu da başlıkları temizlemenin kök dosya sisteminde yer açacağı, /boot alanında ise yer açmayacağı anlamına gelir. Sorununuz dolu bir /boot bölümü ise, odaklanmanız gereken paketler imaj paketleridir.

ls -1 /boot/vmlinuz-*
ls -1 /lib/modules/

Bu iki liste birbiriyle ve dpkg --list çıktısıyla uyumlu olmalıdır. /lib/modules içinde bulunan ancak yüklü paketler arasında karşılığı olmayan bir dizin, dosyaların elle silinmesi sonucu geride kalmış bir kalıntıdır.

apt hangi çekirdeklerin tutulacağına nasıl karar verir

apt autoremove, korumalı olarak değerlendirdiği bir çekirdeği kaldırmayacaktır; korumalı küme, o an çalışmakta olduğunuz çekirdeği de içerir. Tutma politikası Ubuntu sürümleri arasında değişiklik gösterdiğinden, herhangi bir yerde yazılı olan bir sayıya güvenmek yerine kendi makinenizdeki ayarları okuyun.

apt-config dump | grep -i -e neverautoremove -e versionedkernel
ls -l /etc/apt/apt.conf.d/01autoremove /etc/apt/apt.conf.d/01autoremove-kernels

APT::NeverAutoRemove, apt autoremove'ün dokunmayı reddettiği paket adı kalıplarının listesidir. APT::VersionedKernelPackages, apt'in öncelikli olarak sürümlendirilmiş çekirdek paketleri olarak ele aldığı isim öneklerinin listesidir. /etc/apt/apt.conf.d/01autoremove-kernels dosyasını oluşturan sürümlerde, bu dosya her çekirdek paketi yüklendiğinde /etc/kernel/postinst.d/apt-auto-removal tarafından yeniden yazılır; bu nedenle dosyayı elle düzenlemek bir sonuç vermez: bir sonraki çekirdek kurulumu yaptığınız değişikliğin üzerine yazacaktır. Dosyanın mevcut olmadığı sürümlerde ise apt aynı korumayı dahili olarak uygular. Her iki durumda da apt-config dump, makinenizde geçerli olan kuralları gösterir ve bu çıktı, kullandığınız sürüm için doğru cevaptır.

Güvenle çalıştırılabilecek temizlik işlemi

sudo apt update
sudo apt autoremove --purge --dry-run

--dry-run disk üzerinde hiçbir şeyi değiştirmez ve gerçek bir çalıştırma durumunda nelerin silineceğini tam olarak listeler. Listeyi inceleyin. Durmanızı gerektirecek iki durum vardır. Kaldırma listesinde linux-generic veya linux-image-generic gibi bir meta paketinin bulunması, bir şeyin onu otomatik olarak işaretlediği anlamına gelir; bu paketi kaldırmak çekirdek güncellemelerinizi durdurur. Kaldırma listesinde uname -r dizisinden bir ifade yer alması, çalışan çekirdeğin korunmadığı anlamına gelir; bu durum normalde yaşanmamalıdır ve devam etmeden önce araştırılmalıdır.

Eğer liste doğru görünüyorsa, işlemi gerçek anlamda çalıştırın.

sudo apt autoremove --purge
df -h /boot

--purge komutu, paketle birlikte geride kalan yapılandırma dosyalarını da siler. Bu işlem çok az miktarda ek alan açar ve dpkg --list dosyasının gereksiz rc satırlarıyla dolmasını engelleyerek bir sonraki denetimin daha okunabilir olmasını sağlar.

Ardından önyükleme menüsünün yeniden oluşturulduğunu doğrulayın. Bir çekirdek paketini kaldırmak sizin yerinize update-grub komutunu çalıştırır, bu nedenle menü yalnızca mevcut olan dosyalara referans vermelidir.

sudo grep -o 'vmlinuz-[^ ]*' /boot/grub/grub.cfg | sort -u
ls -1 /boot/vmlinuz-*

İlk çıktıdaki her sürüm, ikincisinde de görünmelidir. Mevcut olmayan bir dosyayı işaret eden bir menü girdisi, çalışan bir sunucunun GRUB isteminde takılı kalmasına neden olur. Bu, çekirdek güncellemesi sonrası açılmayan bir VPS durumuna giden yollardan biridir ve bu sorunu bir kurtarma konsolundan düzeltmek, burada önlem almaktan çok daha zordur.

apt autoremove komutu neden bazen hiçbir şeyi kaldırmaz

apt autoremove yalnızca otomatik olarak işaretlenmiş paketleri, yani başka bir paketin bağımlılığı olarak yüklenmiş olanları kaldırır. apt install linux-image-6.8.0-40-generic ile manuel olarak yüklediğiniz bir çekirdek, manuel olarak işaretlenir ve ne kadar eski olursa olsun autoremove bu çekirdeğe müdahale etmez.

apt-mark showmanual | grep -E '^linux-'

Bu çıktıdaki sürümlü çekirdeklerin hiçbiri autoremove tarafından görülmez. Kendi listenizdeki sürüm dizgelerini kullanarak işlemi şu şekilde gerçekleştirin:

sudo apt-mark auto linux-image-6.8.0-40-generic linux-modules-6.8.0-40-generic
sudo apt autoremove --purge --dry-run

Meta paketlerini manuel olarak işaretli bırakın. Bu paketler sizin talep ettiğiniz öğeler olduğu için manuel olarak işaretlenmiş olmaları gerekir.

Belirli bir çekirdeği manuel olarak kaldırma

Bazen belirli bir sürümü, politika izin verene kadar beklemek yerine hemen kaldırmak istersiniz. İmaj paketini belirtin ve gerisini apt aracının halletmesine izin verin.

sudo apt purge linux-image-6.8.0-40-generic

apt, herhangi bir işlem yapmadan önce bir kaldırma listesi yazdırır; çünkü linux-modules-extra-*, imaj paketine bağımlıdır ve aynı işlem sırasında kaldırılması gerekir. Yazdırılan bu liste gerçek güvenlik kontrolünüzdür; kaldırmak istediğiniz sürümle birlikte bir meta paketin de silinip silinmediğini buradan anlarsınız. Beklenmedik bir durumla karşılaşırsanız n yanıtını verin. Ardından, artık bir işlevi kalmayan modül ve başlık paketlerini temizlemek için sudo apt autoremove --purge komutunu çalıştırın.

Çalışan çekirdeği neden asla kaldırmamalısınız

Bellekteki çekirdek, dosyaları silindikten sonra da çalışmaya devam eder; bu nedenle ilk etapta hiçbir şey bozulmamış gibi görünür. Bozulan şey, çekirdeğin henüz yüklemediği her şeydir. linux-modules-$(uname -r) ile temizlik yapmak /lib/modules/$(uname -r)/ dosyasını siler, bu yüzden bir sonraki modül yükleme işlemi başarısız olur:

modprobe: FATAL: Module nf_tables not found in directory /lib/modules/6.8.0-64-generic

Bu noktadan itibaren bir güvenlik duvarı yeniden yükleme işlemi başarısız olur; aynı şekilde, çekirdeğin açılıştan bu yana temas etmediği bir dosya sistemi türünü bağlamak da başarısız olur. Bu sırada /boot/vmlinuz-$(uname -r) silinmiş durumdadır, dolayısıyla önyükleme menüsü artık çalışmakta olduğunuz çekirdeği sunmaz ve bir sonraki yeniden başlatma işlemi farklı bir sonuçla biter. Makine trafik sunmaya devam eder ancak artık önyüklenemez durumdadır. Her seferinde uname -r dosyasını kaldırma listesiyle karşılaştırarak kontrol edin.

/boot dizini apt işlemleri için tamamen dolduğunda

İnsanları bu sayfayı aramaya yönelten durum budur. apt autoremove, yarı yapılandırılmış kernel paketinin yapılandırmasını tamamlamak için dpkg komutuna ihtiyaç duyar; bu adım, /boot içinde yer gerektiren bir initramfs yeniden oluşturma işlemini tetikler ancak yer kalmamıştır. Döngüyü manuel olarak bir kez kırın.

uname -r
ls -1 /boot/initrd.img-*

Sürümü uname -r çıktısında yer almayan bir initrd seçin ve bu tek dosyayı silin.

sudo rm /boot/initrd.img-6.8.0-40-generic
sudo apt --fix-broken install
sudo apt autoremove --purge
sudo update-grub

Her satırın bir gerekçesi vardır. rm, dpkg sisteminin bir dosyanın var olduğuna inanmasını sağlayan kasıtlı bir istisnadır. apt --fix-broken install, initramfs için yer açıldığından, başarısız olan yapılandırmayı tamamlar. autoremove --purge, sildiğiniz dosyanın ait olduğu paketi ve diğer eski sürümleri kaldırarak dpkg durumunu disk ile tekrar uyumlu hale getirir. update-grub, menüyü mevcut dosyalara göre yeniden oluşturur. rm ve update-grub işlemleri arasında sistemi yeniden başlatmayın; çünkü bu aralıkta menü, az önce sildiğiniz dosyayı işaret ediyor olabilir. Eğer dpkg işlemin kesintiye uğradığına dair bir hata verirse, sudo dpkg --configure -a komutu apt --fix-broken install ile aynı onarımı gerçekleştirir.

dnf tabanlı sistemlerde aynı işlem

VPS'niz Fedora veya Rocky Linux gibi RHEL tabanlı bir dağıtım üzerinde çalışıyorsa mekanizma tersine işler. Debian ve Ubuntu, çekirdekleri apt autoremove kurallarıyla korur ve temizlik işlemini size veya unattended-upgrades aracına bırakır; oysa dnf, installonly_limit adında bir sayı sınırı uygular ve yeni bir kurulum bu sınırı aştığı anda en eski çekirdeği otomatik olarak kaldırır. Yürürlükteki değeri grep installonly_limit /etc/dnf/dnf.conf ve man 5 dnf.conf ile okuyabilir, mevcut birikmiş dosyaları ise sudo dnf remove --oldinstallonly ile temizleyebilirsiniz. Çalışan çekirdek orada da koruma altındadır. İki paket yöneticisi arasındaki daha geniş kapsamlı eşleşmeler için dnf ve apt komut karşılıkları bölümüne bakınız.

Tekrar yaşanmasını önleme

Sizin hatırlamanıza bağlı olan temizlik işlemleri er ya da geç başarısız olacaktır; bu nedenle bu işlemi çekirdekleri yükleyen yapılandırmaya ekleyin. /etc/apt/apt.conf.d/50unattended-upgrades dosyasını açın ve halihazırda yorum satırı olarak dosya içinde bulunan şu anahtarları arayın:

Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

Bu satırları dosyanın sonuna ikinci bir kopya eklemek yerine yorum satırı olmaktan çıkarın. apt yapılandırmasında bir anahtara yapılan son atama geçerli olur; bu nedenle mükerrer kayıtlar dosyanın kendi içinde çelişmesine ve hangi değerin geçerli olduğunun belirsizleşmesine neden olur. Ayrıştırıcının (parser) hangi sonucu ürettiğini kontrol edin ve hiçbir değişikliğe yol açmayan bir çalıştırmayı izleyin:

apt-config dump | grep -i 'Unattended-Upgrade::Remove'
sudo unattended-upgrade --dry-run --debug
sudo tail -n 40 /var/log/unattended-upgrades/unattended-upgrades.log

Günlük kaydı kanıttır. Her çalıştırmayı kaydeder; bu sayede yer yetersizliği nedeniyle başarısız olan bir yükseltme, makinenin yama konusunda geride kaldığı fark edilmeden çok önce burada görünür. Bu yapılandırmanın geri kalanı Ubuntu üzerinde otomatik güvenlik güncellemeleri bölümünde ele alınmıştır.

Bir sonraki çekirdek gelmeden önce kontrol edilmesi gereken bir sayı vardır; bu, rehberin başındaki iki komutla aynıdır:

df -h /boot
ls -lh /boot/initrd.img-$(uname -r)

Eğer Avail, ilgili dosyadan yeterince büyük değilse bir sonraki çekirdek yüklemesi tam olarak yukarıda tarif edildiği gibi başarısız olacaktır. Bu yüzden sorunu yükseltme sırasında değil, şimdi çözün. Bu kontrol, diğer VPS disk sağlığı kontrolleriniz ile birlikte bir dakikanızı ayırmaya değer. Bu durum özellikle bir sürüm yükseltmesi öncesinde kritiktir; çünkü Ubuntu 24.04'ten 26.04'e geçiş işlemi, sürecin başında yeni bir çekirdek yükler ve /boot üzerinde yer kalmadığında do-release-upgrade devam etmeyi reddeder.

FAQ

Ubuntu neden eski çekirdekleri silmek yerine tutuyor?

Çünkü önyükleme yapamayan bir çekirdek, seçebileceğiniz başka bir seçenek bırakmaz. Önceki sürümü tutmak, hatalı bir güncellemenin kurtarma konsolu yerine GRUB menüsünden düzeltilebileceği anlamına gelir. apt bu nedenle, çalışmakta olduğunuz çekirdek dahil olmak üzere bir dizi çekirdek paketini otomatik silinmeye karşı korur. Sürümler arasında politika değiştiği için, sürümünüzün tam olarak hangi kalıpları koruduğunu görmek adına apt-config dump | grep -i neverautoremove komutunu çalıştırın.

apt autoremove --purge komutunu üretim sunucusunda çalıştırmak güvenli mi?

Evet, ancak önce deneme (dry run) çıktısını okumanız şartıyla. Hiçbir değişiklik yapmayan sudo apt autoremove --purge --dry-run komutunu çalıştırın ve listelenen paketleri kontrol edin. Eğer liste linux-generic veya linux-image-generic gibi bir meta paket içeriyorsa durun; çünkü bunlardan birini kaldırmak gelecekteki çekirdek güncellemelerini durdurur. Ayrıca uname -r çıktısında yer alan sürüm dizisini içeriyorsa da durun. Eğer bu ikisi de listede yoksa, kaldırılacak olanlar eski çekirdekler ve artık bağımlılıklardır.

apt autoremove hiçbir şeyi kaldırmadı ve /boot dizini hala dolu. Şimdi ne yapmalı?

Eski çekirdekler büyük ihtimalle manuel olarak işaretlenmiştir ve autoremove sadece otomatik olarak işaretlenmiş paketlere müdahale eder. apt-mark showmanual | grep -E '^linux-' komutunu çalıştırın. Listelenen sürüm numaralı çekirdekler bir noktada elle kurulmuştur. Bunları sudo apt-mark auto linux-image-<version> ile otomatik olarak işaretleyin ve deneme komutunu tekrar çalıştırın ya da ilgili sürümü doğrudan sudo apt purge linux-image-<version> ile kaldırın.

/boot dizinindeki dosyaları elle silebilir miyim?

Sadece /boot dizini o kadar doludur ki apt bozuk çekirdek paketini yapılandıramıyorsa, bilinçli ve tek seferlik bir işlem olarak yapılabilir. Sürümü uname -r çıktısı olmayan tek bir initrd.img-<version> dosyasını silin, ardından hemen sudo apt --fix-broken install, sudo apt autoremove --purge ve sudo update-grub komutlarını çalıştırın. Bu takip eden adımlar olmadan dosya silmek, dpkg üzerinde dosyaları silinmiş paketlerin kayıtlı kalmasına ve GRUB menü girdilerinin olmayan dosyaları işaret etmesine neden olur; bu durumda makine hatayı yaptığınız anda değil, bir sonraki yeniden başlatmada başarısız olur.