[Nasıl] Sistem üzerinde kullanıcı disk kota (quota) ayarlaması

Başlatan heartsmagic, 12 Ocak 2015 - 00:58:01

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

heartsmagic

Sistem üzerinde kullanıcı disk kullanım sınırlaması, kota (quota) ayarlaması

Sistem üzerindeki kullanıcılara yer tahsis sınırlaması yapabilmek için İngilizce ismi "quota" olan özellikten yararlanılmaktadır. Buradaki anlatımda Ubuntu 14.04 sunucu sürümü kullanılmış olsa da hemen her güncel Linux dağıtımında anlatım geçerli olacaktır. Örneğimizde dosya sistemi iki temel bölüme ayrılmıştır: Kök bölüm, yani / ve kullanıcıların dizinlerini tutacak olan /home bölümü. Çoklu kullanıcılara hizmet verecek sunucularda /home bölümünü ayrı tutmak akıllıca bir yöntemdir. Eğer kurulu bir sistem üzerinde işlem yapacaksanız ve /home bölümü ya da sınırlama yapılacak bölüm ayrılamıyorsa anlatımın ilerleyen bölümünde değinileceği üzere "zorlama" yöntemle bu işlem denenebilir. Fakat, doğru çalışacağından ve kota ayarlaması yapılan dosya sisteminde sıkıntı çıkartmayacağından emin olamadığım için bu konuda sorumluluk size düşmektedir.

Çok ayrışmasalar da iki farklı yöntemle tahsis işini yapabiliriz. Bunlardan ilki klasik kota yöntemi, ikincisi ise günlüklü kota yöntemi. Eğer ext4 kullanıyorsanız günlüklü yöntemi tercih etmeniz daha isabetli olabilir. Bu aşamada karar vermeniz gerekiyor. Aralarında çok fark olmamasına rağmen ufak bir değişikliğin yapılması gerekmekte. Bu nedenle anlatımı tamamen okuduktan sonra karar vermeniz, hemen uygulamaya geçmemeniz iyi olacaktır. İlk sırada klasik yöntemi anlatalım ve kota işlemlerini açıklayalım.

Klasik yöntem

Sistem üzerindeki ilk mount çıktısından ilgili satırlar şu şekildedir:
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
/dev/sda2 on /home type ext4 (rw)


Görüldüğü üzere /home bölümü ayrı bir disk bölümünde tutulmakta. Kullanıcı dizinleri de burada oluşturulduğu için kota işlemini bu bölüme uygulayacağız ileride.
Önce kota ayarlamasını yapacağımız uygulamayı kuralım. İşlemler root ile yapılacaktır, haliyle önce root kullanıcısına geçelim.

sudo -i

Ardından paketi kurabiliriz:

sudo apt-get install quota

Uygulama kurulduktan sonra sınırlama yapacağımız disk bölümü için kotayı etkinleştirmemiz gerekmekte. Bizim örneğimizde bu bölüm /home oluyor. Düzenlemek üzere fstab dosyasını açalım:

nano /etc/fstab

ve aşağıdaki benzer satırı bulalım:
UUID=77b2f8fb-e661-4ab4-b6ac-bc57a83345ee /home           ext4    defaults        0       2
Buradaki UUID değeri haliyle farklı olacaktır. Bağlama seçeneklerine usrquota'yı eklememiz gerekiyor. Son görüntü şöyle olacaktır:
UUID=77b2f8fb-e661-4ab4-b6ac-bc57a83345ee /home           ext4    defaults,usrquota        0       2

Dosyamızı kaydedip kapattıktan sonra şu komutu yürüterek dosya sisteminin tekrar bağlanmasını sağlayalım:

mount -o remount /home

Şimdi mount komutunun çıktısında usrquota parametresinin görünmesi gerekmekte:
mount
Alıntı Yap/dev/sda2 on /home type ext4 (rw,usrquota)

İlgili dosya sistemine kota desteği verdikten sonra artık uygulamamızı kullanmaya başlayabiliriz.

Öncelikle ilgili dosya sistemini kota denetimine tabi tutup eğer hiç ayarlanmadıysa ayarları yapmasını sağlayalım.

quotacheck -avu

Bu komutu verdiğimizde uygulama kotanın etkinleştirildiği dosya sistemlerini arayacak, bulacak ve ilgili dosyayı oluşturacaktır. Şuna benzer bir çıktı almamız gerekiyor:


İlk sıradaki uyarıyı şimdilik dikkate almamıza gerek yok. ext4 günlüklü kota desteği sağlamakta ve uygulama bizim bundan yararlanmadığımızı belirtmekte (ikinci yöntem).
Çıktıdan görebileceğimiz üzere kota destekli bölümler tarandı, mevcut bir kota dosyası olmadığı için de /home dizini altında yenisi oluşturuldu. Şu şekilde bakabiliriz:

ls -l /home
Çıktısı:
toplam 28
-rw------- 1 root   root    7168 Oca 11 22:10 aquota.user
drwx------ 2 root   root   16384 Oca 11 20:46 lost+found
drwxr-xr-x 3 ubuntu ubuntu  4096 Oca 11 21:26 ubuntu


Kota bilgilerini tutacak dosyamız oluşturulmuş durumda. Artık kullanıcılar için kota ekleme işlemi yapabiliriz. Fakat, bunun öncesinde kota için bir rapor alalım ve durumu görelim.
Rapor için şu komutu kullanıyoruz:
repquota /home
Çıktısı:
*** Report for user quotas on device /dev/sda2
Block grace time: 7günler; Inode grace time: 7günler
                        Block limits                File limits
Kullanıcı       used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0       
ubuntu    --      24       0       0              7     0     0       


Bizi boyutsal kota ilgilendirdiği için "Block limits" kısmına bakacağız. Şu an için "soft" ve "hard" olan değerlerin tanımlı olmadığını görüyoruz. "soft" ve "hard" limitler ayrı ayrı belirlenebilmekteler. Örneğin "soft" değerini 500MB, "hard" değerini 1GB yaparsanız kullanıcı 500MB gelince bir uyarı alır fakat dosya oluşturmaya devam edebilir, ta ki 1GB sınırına veya ek süre dolana kadar. Ek süre konusuna anlatımın sonunda değinelim. Şimdilik bu değerlerimiz aynı olacak.

Bir kullanıcı için kota işlemi yapalım. Bunun için edquota komutunu kullanıyoruz.

edquota ubuntu

Açılacak dosyada karşımıza çıkacak görüntü şöyle bir şeydir:

Bu nano ile açılan bir dosyadır ve görüldüğü üzere henüz kullanıcı için bir sınır tanımlanmamış durumdadır. Biz buradaki "soft" ve "hard" değerlerini değiştireceğiz. Bu örneğimizde değerleri farklı yapmıyoruz, ikisini de örneğin 200MB olarak tanımlayacağız. inode değerlerineyse dokunmayacağız, bizim istediğimiz boyutsal sınır, dosya ve dizin sayısı bizi ilgilendirmiyor.

Burada boyut konusunu açmak gerekmekte. quota boyut olarak blok sayısını baz almakta. Buna göre hesap yapmamız gerekecek. Bu hesabı yapmak da ilgili sistemin kullandığı çekirdeğin blok boyutu olarak ne kullandığını bilmeyi gerektiriyor. Güncel birçok çekirdek blok boyutu olarak 1024 byte kullanıyor. İsteyen şöyle denetleyebilir:

64bit için:
cat /usr/include/x86_64-linux-gnu/sys/mount.h | grep BLOCK_SIZE

32bit için:
cat /usr/include/i386-linux-gnu/sys/mount.h | grep BLOCK_SIZE

Not: Bilgi alınabilmesi için libc6-dev paketi kurulu olmalıdır.

Şöyle bir çıktısı olacaktır bu komutun:
#define BLOCK_SIZE      1024
#define BLOCK_SIZE_BITS 10


Görüldüğü üzere çekirdek bir blok boyutu olarak 1024 byte tutmaktadır. Şimdi bu bilgiler ışığında hesaplama yapalım. Diyelim ki kullanıcımıza 200MB yer tahsis etmek istiyoruz. Bu durumda 200 * 1024 = 204800 blok sayısını ihtiyacımız vardır.

Bu değeri "soft" ve "hard" için işliyoruz. Neticede dosyamız şöyle görünüyor:


Dosyamız nano ile açıldığı için ctrl+x ile kapatıp, kayıt edebiliriz. Tekrar kotayı denetleyelim:
repquota /home
Alacağımız çıktı şöyle olacaktır:
*** Report for user quotas on device /dev/sda2
Block grace time: 7günler; Inode grace time: 7günler
                        Block limits                File limits
Kullanıcı       used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0       
ubuntu    --      24  204800  204800              7     0     0       


Gördüğümüz üzere ubuntu kullanıcısı için kota tanımlaması yapılmış durumda. Fakat, henüz kota sınırlamamız etkin değil. Rapor alabiliyor olmamız etkin olduğu anlamına gelmiyor. Şu şekilde etkinleştiriyoruz:
quotaon /home
Komut çıktı vermez etkinleştirmede. Fakat zaten etkinse ve siz etkinleştirmeye çalışırsanız sda2 için aygıtın meşgul olduğunu söyleyecektir.

Şu durumda kota işlemimiz tamamlanmış oluyor. Gerçek zamanlı bir deneme yapalım. Öncelikle ubuntu kullanıcısına geçelim:
su - ubuntu

Bu komutun ardından /home/ubuntu veya sizin kullanıcınızın dizinine düşmeniz gerekiyor. pwd komutu ile denetleyebilirsiniz. Burada 200MB boyutunu aşan bir dosya oluşturmayı deneyelim. Bunun için fallocate uygulamasını kullanabiliriz.

fallocate -l 250M deneme

Kota sınırımızdan yüksek bir dosya oluşturmayı denediğimiz için alacağımız sonuç disk kotasının aşılmış olduğu sonucu olacaktır. deneme dosyasının boyutuna bakılacak olursa 200MB'ta durduğu görülecektir.
ls -hl deneme
Sonuç:
-rw-r--r-- 1 ubuntu ubuntu 200M Oca 11 23:27 deneme

Ayrıca yeniden rapor aldığımızda ubuntu kullanıcısının kendisine tahsis edilen tüm blok sayısını kullandığı görülecektir.
repquota /home
Sonuç:
*** Report for user quotas on device /dev/sda2
Block grace time: 7günler; Inode grace time: 7günler
                        Block limits                File limits
Kullanıcı       used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0       
ubuntu    --  204800  204800  204800              9     0     0 
     


Son olarak da ek süre meselesini anlatalım. Bu çıktıda görünen "grace" kullanıcılara verilecek ek süreyi gösteriyor. Hemen çıktının üzerinde belirtilmiş durumda: 7günler. Türkçe konuşması aslında iyi değil, değineceğiz bu konuya. Biz "hard" ve "soft" limitleri ayrı ayrı tutmadığımız için bir anlam taşımıyor bu değer. Ek süreden kasıt şu, kullanıcı "soft" limite ulaştığı andan itibaren verilen bu ek süre içinde (saniye,dakika,saat,gün olabiliyor) yeni dosya oluşturabiliyor. Verilen süre içinde de durumu düzeltmeye çalışıyor. Eğer düzeltmezse kota işliyor. Bu sınırı şu şekilde ayarlıyoruz:

edquota -t

Sonuç şöyle bir şey oluyor:


Normalde sunucularda Türkçe yerelini kullanmam, fakat bu anlatımı yaptığım sunucuda elim Türkçe'ye gitti :) Durum böyle olunca da haliyle bazı sorunlar çıkabiliyor. Sunucularda İngilizce halinde yereli kullanmak sorunlara yol açabilmekte, bu nedenle mümkün mertebe İngilizce ile idare edilmeli. Görüntüye bakacak olursak değer olarak "7günler" ifadesi geçiyor. Burası esasında "7days" olmalı. İstediğimiz değeri buna göre ayarlamalıyız, fakat inode tarafındaki değeri de aynen "days" olarak değiştirmeliyiz aksi takdirde işlem hata verir. Şöyle de aşılabilir bu sorun:

LC_ALL=C edquota -t

Bu sayede dosya Türkçe yerile ile açılmayacak ve sorun yapmayacaktır. Şimdi, değeri "3days" olarak ayarladığımızda aldığımız çıktı:
*** Report for user quotas on device /dev/sda2
Block grace time: 3günler; Inode grace time: 7günler
                        Block limits                File limits
Kullanıcı       used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0       
ubuntu    --  204800  204800  204800             11     0     0       


Dikkat ederseniz artık "Block grace time: 3günler; Inode grace time: 7günler" ifadesi görünmekte. Şimdi, bunu denemek için ubuntu kullanıcısı için "hard" limit değerini 400MB yaptığımızda bakın çıktı nasıl görünecek:

*** Report for user quotas on device /dev/sda2
Block grace time: 3günler; Inode grace time: 7günler
                        Block limits                File limits
Kullanıcı       used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0       
ubuntu    +-  204808  204800  409600 2günler      11     0     0     
 

"graces" ifadesinin altındaki değere dikkat edin. Şu durumda ubuntu kullanıcısı dosya oluşturabilecek, ancak durumu düzeltmesi için kendisine iki gün daha verilecektir.

Günlüklü kota yöntemi

Bu yöntem hemen hemen ilk yöntemle aynı aşamalara sahip. İşlemlerin neler olduğuna ilk yöntemde değinildiği için buraya aktarmayalım. Sadece temel anlatımı yapalım. Günlüklü yöntemde ext4 üzerindeki günlüklemenin nimetlerinden yararlanıyor ve güç kesintisi gibi durumlarda kota bilgilerini kaybetmemiş oluyoruz.

İlk yöntemden değişiklik gösteren ilk ayar fstab dosyasındaki bağlama parametreleri. Şöyle olacak:

UUID=77b2f8fb-e661-4ab4-b6ac-bc57a83345ee /home           ext4    defaults,usrjquota=aquota.user,jqfmt=vfsv0        0       2

Doğru şekilde bölüm bağlandıysa mount çıktısı şöyle görünmelidir:
/dev/sda2 on /home type ext4 (rw,usrjquota=aquota.user,jqfmt=vfsv0)

Devamında ilk yöntemdeki gibi:
quotacheck -avu
ile getirebiliriz. İlk yöntemde aldığımız uyarıyı almayacak ve kota hazırlıklarımız tamamlanmış olacaktır. Geri kalan işlemler ilk yöntemdeki gibidir.


[eklenti yönetici tarafından silindi]
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.