fdupes ile Hylafax docq dizini temizliği
24 Mart 2009 Salı, 20:32 | GezegenDün az kullanılan bir faks sunucusunu taşırken acı bir gerçek ile karşılaştım, gönderilen belgeler dizini gigabyte’lara ulaşmıştı. Bundan bihaber biçimde yeni diski bölümlendirmiş, üzerine kurulum yapmış, hemen her servisi de taşımıştım. /var dizininde o kadar yerim yoktu (lvm kullansaydın ya dediğinizi duyaar gibi oluyorum).
Ne var canım, diskler çok büyüdü, Hylafax dizinini /home disk bölümüne taşıyıp oradan linkleyiveririm olur biter diye düşündüm. Düşünmez olaydım, Hylafax dizinlerin farklı disk bölümlerine sembolik bağlanmasından pek hoşlanmıyormuş. Faks servisi hiç çalışmadı, yazması gereken dizinleri bulamadı. Servisi sembolik bağlama öncesi çalışır hale getirmediğimden problem kullanıcı yetkilendirmelerinde falan zannettim — bir süre debelendim.
Farklı disk bölümüne taşıyamayacağım belli olunca, gönderilen belgelerin saklandığı docq dizinine daha bir alıcı gözüyle baktım. Bir sürü boyutları aynı dosya vardı. Faks sayısına bakınca jeton düştü. Bunların çoğu toplu faks gönderimlerinden dolayı oluşmuştu. “Tüm müşterilerimize şunu fakslayalım”, “basına bunu fakslayalım” cümlelerinin sonucu aynı belgenin gönderim sayısı kadar kaydedilmesine yol açmıştı. Evet, az ama öz bir kullanım söz konusu :)
Tabii optimize motorize birlikler direkt harekete geçti, ne demek efendim buna disk yeri mi yetişir, ayrıca ne kadar saçma, zaten yerim de yok ve benzeri (5 bahane daha ekleyin buraya) düşüncelerle kolları sıvadım. Önce çift dosyaları ayıklayacak bir yazılım bulmam gerekliydi, komut satırından çalışan fdupes tam olarak işimi görüyordu. Önce dosya boyutuna, sonra MD5 toplamına baktıktan sonra tek tek byte’larını da karşılaştırıyordu.
Çift olanları sildim silmesine ama bu sefer de iki problemle karşılaştım. Hylafax arayüzünde ilgili faksa tıklandığında dosyayı bulamadığı için gösteremiyordu. Hadi bu beklenen bişidi. Ama bir de ikincisi çıktı, Hylafax istemcisi sunucuyu her sorguladığında “bu dosyalar yok” diye yüzlerce hata satırı loga düşüyordu. Hylafax loglarını sistem loglarından ayır, logları gün sonunda silebilirdim ama iki kirli çözüm birden can sıkıcı bir hale gelmişti.
Sonra aklıma geldi, yaav ben bu çift olan dosyaları bir tanesi dışında siliyorum ama sildiklerimi o sakladığım tek kopyaya sembolik linklesem? Hylafax dizinlerin farklı disk bölümünde olmasından hoşlanmamış olabilirdi ama aynı disk bölümünde, hem de aynı dizinde birbirine linkli dosyalardan nem kapmayabilrdi. O zaman birçok yerde uygulanabilir mükemmel bir çözüm elde etmiş olurdum.
fdupes’un -1 parametresi, her bir çift dosyalar grubu birer satıra denk gelecek şekilde çiftleri birbirinden boşlukla, grupları da birbirinden yeni satırla ayrılmış bir halde sıralıyordu. Bu çıktıyı kullanacak basit bir betik yazdım, çıktının her satırında 2. dosyadan başlayarak hepsini önce silip sonra 1. dosyaya sembolik linkledi.
Sonuç : Bir anda docq dizininin boyutu 1/10’una indi. Uğraşmamak için cron’a yerleştirdim, her gece faks dizinini kontrol edip, aynı fakstan n tane varsa biri dışında hepsini silip o tek dosyaya linkliyor. Hylafax da mutlu, ben de :)