Windows’ta Kaç Kullanıcı Yaratabiliriz?

Windows’ta kullanıcılar birer nesnedir (object).

Kullanıcıların sayısına ilişkin özel bir kısıtlama yok ama tüm nesnelerin sayısına ilişkin bir kısıtlama var.

Windows’ta hemen her şey bir nesnedir; kullanıcılar, kullanıcı grupları, bilgisayarlar, yapısal birimler, grup ilkeleri vb.

Microsoft bu nesneler için 30 bitlik bir sayaç kullanıyor; bu da, 2 üzeri 30, yaklaşık olarak bir milyar yapıyor.

Normal koşullarda bir milyar nesne yaratabileceğiz.

Üstelik, değişiklik yaparak 30 biti 31 bite çıkartıp yaratılabilecek nesne sayısını 2 milyara yükseltmek de mümkün.

Ama gerçekte bu kadar nesne yaratabilecek miyiz? Yoksa biz bekleyen pratik sınırlar var mı?

Önümüzde bir örnek var: NTFS dosya sistemi.

Microsoft, NTFS formatlı bir disk bölümünün 12 ExaByte’a kadar büyüyebileceğini söylüyor ama örneğin sabit disk bölümleme şekli (MBR ya da GPT) bu sınırı düşürüyor.

Bu nedenle, mümkün olduğunca fazla sayıda kullanıcı yaratıp sınırı görmeye karar verdim.

Yeni bir Windows Server 2016 kurulumu yapıp makineyi etki alanı denetçisi (DC) durumuna yükselttim.

İlk başta yalnızca birkaç kullanıcı vardı.

Sonra da aşağıdaki basit Powershell betiğiyle kullanıcı yaratmaya başladım:

[long]$number=1

while($true){

$name=$number.tostring()

new-aduser -name $name

$number=$number+1

}

Betik sonsuz bir döngüden oluşuyor.

Bu döngüyü istediğiniz zaman kırabilirsiniz. Ben çeşitli denemeler ve bakım işlemleri yapmak için birçok kez döngüyü kırıp sonra yeniden başlattım.

Yeniden başlattığınızda yalnızca ilk satırdaki eşitliği değiştirmeniz ve en son hangi rakamda kaldıysanız onu yazmanız yeterli.

En son nerede kaldığınızı öğrenmek için Güvenlik Günlüğü’nü kullanabilirsiniz. 4720 nolu olaylar yeni kullanıcı yaratımına ilişkindir. En üstteki 4720 olayı son yaratılan kullanıcıyı gösterir.

Bu arada, Sistem Günlüğü’nde de çok sayıda 16647 ve 16648 nolu olaylar yer alacaktır. Bu olaylar DC’nin yeni bir RID havuzu isteyip aldığını gösterir.

Yaratılan her nesneye bir güvenlik kimliği (Security ID-SID) atamak gerekir. SID’ler de sabit bir etki alanı kimliği ve Göreli Kimlik (RID) kısımlarından oluşur.

RID’ler RID rolündeki DC tarafından beş yüzer beş yüzer üretilip DC’lere gönderilir.

İlk başta i5 işlemcili ve SATA sabit diskli bir laptop makine kullandım. Kullanıcı yaratma betiği saatte 50 bin kullanıcı yarattı.

Yaratım işlemini hızlandırmak için Denetim Masası’ndaki güç yönetiminde, güç ayarını “Balanced”dan “High Performance”a getirdim.

Yalnızca bu değişiklik bile performansı iki kat arttırdı ve yaratılan kullanıcı sayısı saatte 100 bin civarına çıktı.

Powershell’in sağladığı paralel çalışmanın performansı daha fazla arttırıp arttırmayacağını görmek istedim ve aşağıdaki iş akışı kodunu yazdım:

workflow Create

{

$numbers = 4997970..5200000

foreach -parallel ($number in $numbers)

{

$name=$number.tostring()

new-aduser -name $name

}

}

Create

Sonuç büyük bir düş kırıklığı oldu. Yukarıdaki kod saatte yalnızca 8 bin civarında kullanıcı yaratabildi.

Kullanıcı yaratma işlemi paralel hale getirilemeyecek bir işlem olabilir.

Daha sonra, i7 işlemcili ve SSD diskli bir başka laptop makineye geçtim.

Bu değişiklik performansı yüzde elli arttırdı ve yaratılan kullanıcı sayısını 150 bin civarına çıkarttı.

Yaratılan her kullanıcının Active Directory (AD) veritabanına 2,2 KB’lık veri eklediğini fark ettim.

Bu rakam bana yüksek göründü. Çünkü kullanıcı yaratırken bir tek adını veriyorum ve AD veritabanının da nesneleri öznitelik (attribute) temelli sakladığını biliyoruz.

Yani, bir değere sahip olmayan özniteliğe ilişkin bilgi veritabanında tutulmuyor. Öyleyse veritabanı neden bu kadar büyüyor?

Veritabanı fragment olmuş olabilir diyerek AD veritabanını defrag etmeye karar verdim.

Windows 2008’den bu yana AD işlevi bir hizmet olarak çalışıyor (Active Directory Domain Service).

Bu hizmeti durdurup AD veritabanı üzerinde çeşitli bakım-onarım işlemleri gerçekleştirebiliyoruz.

Hizmeti durdurup komut satırına indim, AD veritabanı olan ntds.dit dosyasının bulunduğu klasöre geçtim (varsayılan olarak \Windows\NTDS klasörü).

Orada şu komutu verdim:

esentutl /d ntds.dit

Bu işlemden önce veritabanı 45.1 GB idi, işlem sonrası yalnızca 43.8 GB’a indi. Pek parlak bir sonuç değil!

Demek ki veritabanının büyümesi fragmente olmasından kaynaklanmıyor.

Microsoft’un bunun üzerine düşünmesinde yarar var.

Veritabanının büyümesi birçok şeyi sınırlıyor.

Örneğin, AD kullanıcılarının sayısını şu komutla öğrenemiyoruz:

(get-aduser –filter *).count

Bu komutu verdiğimizde yaklaşık yarım saat sonra bir hata mesajı alıyoruz: The server has returned the following error: invalid enumeration context.

Get-aduser komutu yeni bir hizmet olan “Active Directory Web Services” ile ilişkiye geçiyor. Bu hizmetin de “MaxEnumContextExpiration” şeklinde bir parametresi var, varsayılan değeri de 30 dakika..

Eğer sorgunuz 30 dakikadan daha fazla zaman alıyorsa bu nedenle hata alıyorsunuz.

Önerilen şey bu değeri yükseltmek.

Bu değer \Windows\ADWS klasörü altındaki “Microsoft.ActiveDirectory.WebServices.exe.config” dosyasında bulunuyor.

Ama bu değişikliği yaptıktan sonra da hata almaya devam ettim.

Komutun çıktısını bir değişkenden saklayıp o değişkeni incelemeye karar verdim ve aşağıdaki komutu verdim:

$users=get-aduser –filter *

Ne yazık ki bu komut da hatayla sonuçlandı.

Burada ilginç olan, aşağıdaki gibi bir komutla kullanıcı listesini alabilmemiz:

$count=invoke-command {net user }

Kullanıcı sayısı yaklaşık 11 milyon iken bu komut verdim ve komut elli dakika içinde tamamlandı.

$count.length komutuyla satır sayısını alabildim: 3860947.

“Net user” komutunun her satırda üç kullanıcıyı gösterdiğini bildiğimiz için satır sayısını üçle çarparak kullanıcı sayısını bulabiliyoruz.

Üstelik, aşağıdaki komutla kullanıcı listesini bir metin dosyasına da verebiliyoruz:

$count | out-file listusers.txt

Yukarıdaki komut 567 MB’lık bir dosya yarattı. İçinde 11 milyon kullanıcının adı vardı.

30 yıllık net user komutu işe yararken Powershell komutlarının hata vermesi utanç verici.

Bundan sonraki zamanda, betik yaklaşık 14 gün boyunca aralıksız ve sorunsuz çalıştı.

Sonra da, kullanıcı sayısı 67 milyona ulaştığında Windows’um çöktü.

Kritik bir işlemin sonlandığını (A critical process died) söyleyen mavi ekran (BSOD) almaya başladım.

Güvenli Kip seçeneklerini özellikle de AD hizmetlerinin çalışmadığı “Directory Services Repair Mode”u kullanarak bilgisayarı başlatmak istedim ama seçeneklerin hiçbiri işe yaramadı.

Demek ki sorun AD hizmetleri ya da veritabanı değildi.

Hataya bir disk hatasının neden olabileceğini düşünerek “chkdsk /f” komutuyla diski denetledim. Diskte hiç hata çıkmadı.

“sfc /scannow” komutu “Windows Resource Protection could not perform the requested operation” mesajı vererek başarısız oldu.

Aynı şekilde “DISM /image:C:\ /cleanup-image /revertpendingactions” komutu da “error 3” mesajıyla başarısız oldu.

Ben de Server 2016’yı daha fazla onarmaya çalışmaktan vazgeçtim.

Benim için kullanıcı sayısı sınırı 67 milyon oldu:)

Şu yazıları da okuyabilirsiniz:

https://muratyildirimoglu.wordpress.com/2018/02/07/spacex-firmasinin-roketlerini-powershell-ile-izlemek/

https://muratyildirimoglu.wordpress.com/2017/12/12/yerel-administrator-parolalarini-degistirme/

https://muratyildirimoglu.wordpress.com/2016/11/14/dosyalari-sifreleyen-fidye-yazilimlarina-karsi-volume-shadow-copy-ozelligini-kullanma/

https://muratyildirimoglu.wordpress.com/2011/11/16/mac-adresine-dayanan-guvenlik-onlemleri/

https://muratyildirimoglu.wordpress.com/2009/03/05/certificate-services-yuklu-makinenin-adini-degistirmek/

https://muratyildirimoglu.wordpress.com/2014/10/28/windows-server-2012-r2de-oturum-acma-betigi-garipligi/

https://muratyildirimoglu.wordpress.com/2014/06/30/windowsta-yapisal-birimlerin-ve-grup-ilkelerinin-verimsiz-kullanimi/

https://muratyildirimoglu.wordpress.com/2012/11/15/windows-8-uzerine-birkac-not/

https://muratyildirimoglu.wordpress.com/2010/03/29/power-users-grubu/

https://muratyildirimoglu.wordpress.com/2010/02/09/windows-7-kullanicilari-icin-guvenlik-onerisi/

https://muratyildirimoglu.wordpress.com/2013/08/27/uacnin-gucu/

https://muratyildirimoglu.wordpress.com/2009/05/07/vista-ve-windows-2008de-ntfs-izinlerinin-devraliminda-degisiklik/

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s


%d blogcu bunu beğendi: