Bölüm 13. Yapılandırma ve Ayarlama
13.1. Özet
FreeBSD'nin önemli yönlerinden biri uygun sistem yapılandırmasıdır. Bu bölümde, bir FreeBSD sistemini ayarlamak için ayarlanabilen bazı parametreler de dahil olmak üzere FreeBSD yapılandırma sürecinin çoğu açıklanmaktadır.
Bu bölümü okuduktan sonra şunları bileceksiniz:
rc.conf yapılandırmasının ve /usr/local/etc/rc.d başlangıç komut dosyalarının temelleri.
Ağ kartı nasıl yapılandırılır ve test edilir.
Ağ cihazlarında sanal konaklar nasıl yapılandırılır.
/etc içindeki çeşitli yapılandırma dosyaları nasıl kullanılır?
FreeBSD'yi sysctl(8) değişkenleri kullanarak ayarlama.
Disk performansını ayarlama ve çekirdek sınırlamalarını değiştirme.
Bu bölümü okumadan önce şunları yapmalısınız:
UNIX® ve FreeBSD temellerini (FreeBSD Temelleri) anlayın.
Çekirdek yapılandırması ve derlemenin temellerini öğrenin (FreeBSD Çekirdeğini Yapılandırma).
13.2. Hizmetlerin Başlatılması
Birçok kullanıcı, Bağlantı Noktaları Koleksiyonu'ndan FreeBSD'ye üçüncü taraf yazılımı yükler ve sistem başlatıldıktan sonra yüklü hizmetlerin başlatılmasını gerektirir. Mail/postfix veya www/apache22 gibi hizmetler, sistem başlatma sırasında başlatılabilecek birçok yazılım paketinden sadece ikisidir. Bu bölümde, üçüncü taraf yazılımlarını başlatmak için kullanılabilen yordamlar açıklanmaktadır.
FreeBSD'de, cron(8) gibi dahil edilen hizmetlerin çoğu sistem başlatma komut dosyaları aracılığıyla başlatılır.
13.2.1. Genişletilmiş Uygulama Yapılandırması
Artık FreeBSD rc.d'yi içerdiğinden, uygulama başlangıcının yapılandırılması daha kolaydır ve daha fazla özellik sağlar. FreeBSD'de Hizmetleri Yönetme'de tartışılan anahtar sözcükler kullanılarak, uygulamalar diğer bazı hizmetlerden sonra başlayacak şekilde ayarlanabilir ve başlangıç komut dosyasındaki sabit kodlanmış bayraklar yerine /etc/rc.conf üzerinden fazladan bayraklar geçirilebilir. Temel komut dosyası aşağıdakine benzer görünebilir:
#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# KEYWORD: shutdown
. /etc/rc.subr
name=utility
rcvar=utility_enable
command="/usr/local/sbin/utility"
load_rc_config $name
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
utility_enable=${utility_enable-"NO"}
pidfile=${utility_pidfile-"/var/run/utility.pid"}
run_rc_command "$1"Bu komut dosyası, sağlanan dosyanın sahte hizmetten sonra başlatılmasını sağlar. Ayrıca, işlem kimliğini (PID) ayarlamak ve izlemek için bir yöntem sağlar.utilityDAEMON
Bu uygulama daha sonra /etc/rc.conf dosyasına aşağıdaki satırı yerleştirebilir:
utility_enable="YES"
Bu yöntem, komut satırı bağımsız değişkenlerinin daha kolay değiştirilmesine, /etc/rc.subr dosyasında sağlanan varsayılan işlevlerin eklenmesine, rcorder(8) ile uyumluluğa olanak tanır ve rc.conf aracılığıyla daha kolay yapılandırma sağlar.
13.2.2. Hizmetleri Başlatmak için Hizmetleri Kullanma
Diğer hizmetler inetd(8) kullanılarak başlatılabilir. inetd(8) ile çalışma ve yapılandırması "The inetd Super-Server" bölümünde ayrıntılı olarak açıklanmıştır.
Bazı durumlarda, sistem hizmetlerini başlatmak için cron(8) kullanmak daha mantıklı olabilir. Bu yaklaşımın bir dizi avantajı vardır, çünkü cron(8) bu işlemleri crontab(5)'in sahibi olarak çalıştırır. Bu, normal kullanıcıların kendi uygulamalarını başlatmasına ve sürdürmesine olanak tanır.
13.3. Cron Yapılandırması(8)
FreeBSD'deki en kullanışlı yardımcı programlardan biri cron'dur. Bu yardımcı program arka planda çalışır ve yürütülecek görevler için /etc/crontab'ı düzenli olarak kontrol eder ve özel crontab dosyaları için /var/cron/tabs'ı arar. Bu dosyalar, cron'un belirtilen zamanlarda çalıştığı görevleri zamanlamak için kullanılır. Bir crontab içindeki her girdi, çalıştırılacak bir görevi tanımlar ve cron işi olarak bilinir.
İki farklı yapılandırma dosyası türü kullanılır: değiştirilmemesi gereken sistem crontab ve gerektiğinde oluşturulabilen ve düzenlenebilen kullanıcı crontabs. Bu dosyalar tarafından kullanılan biçim crontab(5) içinde belgelenmiştir. Sistem crontab, /etc/crontab biçimi, kullanıcı crontab'larında bulunmayan bir sütun içerir. Sistem crontab içinde, cron komutu bu sütunda belirtilen kullanıcı olarak çalıştırır. Bir kullanıcı crontab içinde, tüm komutlar crontab'ı oluşturan kullanıcı olarak çalışır.who
Kullanıcı crontab'ları, bireysel kullanıcıların kendi görevlerini zamanlamasına olanak tanır. Kullanıcı, sistem crontab'ında bulunmayan görevleri zamanlamak için kullanılabilecek bir kullanıcı crontab'ına da sahip olabilir.root
İşte crontab, /etc/crontab sisteminden örnek bir giriş:
# /etc/crontab - root's crontab for FreeBSD # # $FreeBSD$ SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin # #minute hour mday month wday who command # */5 * * * * root /usr/libexec/atrun
Karakterle başlayan satırlar yorumlardır. İstenen bir eylemin ne ve neden gerçekleştirildiğini hatırlatmak için dosyaya bir yorum yerleştirilebilir. Yorumlar bir komutla aynı satırda olamaz, aksi takdirde komutun bir parçası olarak yorumlanırlar; yeni bir çizgide olmalılar. Boş satırlar yoksayılır.# | |
Eşittir () karakteri, herhangi bir ortam ayarını tanımlamak için kullanılır. Bu örnekte, ve . Bu öğe atlanırsa, cron varsayılan Bourne kabuğunu kullanır. Atlanırsa, tam yol çalıştırılacak komuta veya komut dosyasına verilmelidir.=SHELLPATHSHELLPATH | |
Bu satır, bir sistem crontab'ında kullanılan yedi alanı tanımlar: , , , , , , , ve . Alan, belirtilen komutun çalıştırılacağı dakika cinsinden zamandır, belirtilen komutun çalıştırılacağı saattir, ayın günüdür, aydır ve haftanın günüdür. Bu alanlar, yirmi dört saatlik saati temsil eden sayısal değerler veya o alanın tüm değerlerini temsil eden a , olmalıdır. Alan yalnızca sistem crontab içinde bulunur ve komutun hangi kullanıcı olarak çalıştırılacağını belirtir. Son alan, yürütülecek komuttur.minutehourmdaymonthwdaywhocommandminutehourmdaymonthwday*who | |
Bu girdi, bu cron işi için değerleri tanımlar. , ardından birkaç karakter daha gelir, her saatin her beş dakikasında, haftanın her günü ve gününde, her ayın çağrıldığını belirtir. Komutlar herhangi bir sayıda anahtar içerebilir. Ancak, birden çok satıra uzanan komutların ters eğik çizgi "\" devam karakteriyle kırılması gerekir.*/5*/usr/libexec/atrunroot |
13.3.1. Kullanıcı Crontab Oluşturma
Bir kullanıcı crontab oluşturmak için düzenleyici modunda çağırın:crontab
% crontab -eBu, varsayılan metin düzenleyicisini kullanarak kullanıcının crontab dosyasını açacaktır. Bir kullanıcı bu komutu ilk kez çalıştırdığında, boş bir dosya açar. Bir kullanıcı bir crontab oluşturduktan sonra, bu komut bu dosyayı düzenlemek için açacaktır.
Ortam değişkenlerini ayarlamak ve crontab içindeki alanların anlamlarını hatırlamak için bu satırları crontab dosyasının en üstüne eklemek yararlıdır:
SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin # Order of crontab fields # minute hour mday month wday command
Ardından, çalıştırılacak her komut veya komut dosyası için, komutun çalıştırılacağı zamanı belirten bir satır ekleyin. Bu örnek, belirtilen özel Bourne kabuk betiğini her gün öğleden sonra ikide çalıştırır. Komut dosyasının yolu , içinde belirtilmediğinden, komut dosyasının tam yolu verilir:PATH
0 14 * * * /usr/home/dru/bin/mycustomscript.sh
Özel bir komut dosyası kullanmadan önce, yürütülebilir olduğundan emin olun ve cron tarafından ayarlanan sınırlı ortam değişkenleri kümesiyle test edin. Yukarıdaki cron girdisini çalıştırmak için kullanılacak ortamı çoğaltmak için şunu kullanın: env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru /usr/home/dru/bin/mycustomscript.sh Cron tarafından ayarlanan ortam crontab(5) içinde tartışılmıştır. Komut dosyalarının cron ortamında düzgün çalışıp çalışmadığını denetlemek, joker karakterler kullanarak dosyaları silen herhangi bir komut içeriyorsa özellikle önemlidir. |
Cron sekmesini düzenlemeyi tamamladığınızda, dosyayı kaydedin. Otomatik olarak kurulacak ve cron crontab'ı okuyacak ve cron işlerini belirtilen zamanlarda çalıştıracaktır. Cron işlerini bir crontab içinde listelemek için şu komutu kullanın:
% crontab -l
0 14 * * * /usr/home/dru/bin/mycustomscript.shBir kullanıcı crontabındaki tüm cron işlerini kaldırmak için:
% crontab -r
remove crontab for dru? y13.4. FreeBSD'de Hizmetleri Yönetme
FreeBSD, sistem başlatma sırasında ve hizmetleri yönetmek için rc(8) başlangıç komut dosyaları sistemini kullanır. /etc/rc.d dosyasında listelenen komut dosyaları, , ve hizmet(8) seçenekleriyle kontrol edilebilen temel hizmetler sağlar. Örneğin, sshd(8) aşağıdaki komutla yeniden başlatılabilir:startstoprestart
# service sshd restartBu yordam, çalışan bir sistemde hizmetleri başlatmak için kullanılabilir. Hizmetler, rc.conf(5) dosyasında belirtildiği gibi önyükleme zamanında otomatik olarak başlatılır. Örneğin, sistem başlangıcında natd(8)'i etkinleştirmek için /etc/rc.conf dosyasına aşağıdaki satırı ekleyin:
natd_enable="YES"
Bir satır zaten varsa, . rc(8) komut dosyaları, aşağıda açıklandığı gibi bir sonraki önyükleme sırasında bağımlı hizmetleri otomatik olarak yükler.natd_enable="NO"NOYES
rc(8) sistemi öncelikle sistem başlatma ve kapatma sırasında hizmetleri başlatmak ve durdurmak için tasarlandığından, , ve seçenekleri yalnızca uygun /etc/rc.conf değişkeni ayarlanmışsa eylemlerini gerçekleştirir. Örneğin, yalnızca /etc/rc.conf içinde ayarlanmışsa çalışır. /etc/rc.conf dosyasındaki ayarlardan bağımsız olarak to veya bir hizmete, bu komutların başına "one" eklenmelidir. Örneğin, geçerli /etc/rc.conf ayarından bağımsız olarak sshd(8)'i yeniden başlatmak için aşağıdaki komutu yürütün:startstoprestartsshd restartsshd_enableYESstartstoprestart
# service sshd onerestart/etc/rc.conf dosyasında bir hizmetin etkin olup olmadığını kontrol etmek için, uygun rc(8) komut dosyasını . Bu örnek, /etc/rc.conf dosyasında sshd(8)'in etkin olup olmadığını denetler:rcvar
# service sshd rcvar
# sshd
#
sshd_enable="YES"
# (default: "")Satır, bir konsoldan değil, yukarıdaki komuttan çıktıdır. |
Bir hizmetin çalışıp çalışmadığını belirlemek için, . Örneğin, sshd(8)'in çalıştığını doğrulamak için:status
# service sshd status
sshd is running as pid 433.Bazı durumlarda, bir hizmet de mümkündür. Bu, tek bir hizmete sinyal göndermeye çalışır ve hizmeti yapılandırma dosyalarını yeniden yüklemeye zorlar. Çoğu durumda bu, hizmete bir sinyal göndermek anlamına gelir. Bu özellik desteği her hizmet için dahil değildir.reloadSIGHUP
rc (8) sistemi ağ hizmetleri için kullanılır ve aynı zamanda sistemin başlatılmasının çoğuna katkıda bulunur. Örneğin, /etc/rc.d/bgfsck komut dosyası yürütüldüğünde, aşağıdaki iletiyi yazdırır:
Starting background file system checks in 60 seconds.Bu komut dosyası, yalnızca sistem başlatma sırasında gerçekleşen arka plan dosya sistemi denetimleri için kullanılır.
Birçok sistem hizmeti düzgün çalışması için diğer hizmetlere bağımlıdır. Örneğin, yp(8) ve diğer RPC tabanlı hizmetler, rpcbind(8) hizmeti başlatılıncaya kadar başlatılamayabilir. Bu sorunu gidermek için, bağımlılıklar ve diğer meta veriler hakkındaki bilgiler her başlangıç komut dosyasının en üstündeki açıklamalara eklenir. rcorder(8) programı, bağımlılıkları karşılamak için sistem hizmetlerinin çağrılması gereken sırayı belirlemek üzere sistem başlatma sırasında bu yorumları ayrıştırmak için kullanılır.
rc.subr(8) tarafından başlangıç komut dosyasının "etkinleştirilmesi" için gerekli olduğu için aşağıdaki anahtar sözcük tüm başlangıç komut dosyalarına eklenmelidir:
PROVIDE: Bu dosyanın sağladığı hizmetleri belirtir.
Aşağıdaki anahtar sözcükler her başlangıç komut dosyasının en üstüne eklenebilir. Bunlar kesinlikle gerekli değildir, ancak rcorder(8) için ipuçları olarak kullanışlıdır:
REQUIRE: Bu hizmet için gerekli olan hizmetleri listeler. Bu anahtar sözcüğü içeren komut dosyası, belirtilen hizmetlerden sonra çalışır.BEFORE: Bu hizmete bağlı hizmetleri listeler. Bu anahtar sözcüğü içeren komut dosyası, belirtilen hizmetlerden önce çalışır.
Her başlangıç komut dosyası için bu anahtar sözcükleri dikkatli bir şekilde ayarlayan yönetici, bazı UNIX® işletim sistemleri tarafından kullanılan "çalışma düzeylerine" gerek kalmadan, komut dosyalarının başlangıç sırası üzerinde ayrıntılı bir denetim düzeyine sahip olur.
Ek bilgiler rc(8) ve rc.subr(8) dosyalarında bulunabilir. Özel rc(8) komut dosyalarının nasıl oluşturulacağına ilişkin yönergeler için bu makaleye bakın.
13.4.1. Sisteme Özel Yapılandırmayı Yönetme
Sistem yapılandırma bilgilerinin asıl konumu /etc/rc.conf şeklindedir. Bu dosya çok çeşitli yapılandırma bilgileri içerir ve sistemi yapılandırmak için sistem başlangıcında okunur. rc* dosyaları için yapılandırma bilgileri sağlar.
/etc/rc.conf dosyasındaki girişler /etc/defaults/rc.conf dosyasındaki varsayılan ayarları geçersiz kılar. Varsayılan ayarları içeren dosya düzenlenmemelidir. Bunun yerine, sisteme özgü tüm değişiklikler /etc/rc.conf dosyasında yapılmalıdır.
Yönetim yükünü azaltmak amacıyla site genelindeki yapılandırmayı sisteme özgü yapılandırmadan ayırmak için kümelenmiş uygulamalarda bir dizi strateji uygulanabilir. Önerilen yaklaşım, sisteme özgü yapılandırmayı /etc/rc.conf.local içine yerleştirmektir. Örneğin, /etc/rc.conf dosyasındaki şu girdiler tüm sistemler için geçerlidir:
sshd_enable="YES" keyrate="fast" defaultrouter="10.1.1.254"
/etc/rc.conf.local dosyasındaki bu girişler yalnızca bu sistem için geçerlidir:
hostname="node1.example.org" ifconfig_fxp0="inet 10.1.1.1/8"
/etc/rc.conf dosyasını rsync veya kukla gibi bir uygulama kullanarak her sisteme dağıtın, /etc/rc.conf.local ise benzersiz kalır.
Upgrading the system will not overwrite /etc/rc.conf, so system configuration information will not be lost.
Both /etc/rc.conf and /etc/rc.conf.local are parsed by sh(1). This allows system operators to create complex configuration scenarios. Refer to rc.conf(5) for further information on this topic. |
13.5. Ağ Arabirim Kartlarının Kurulması
Ağ arabirim kartı (NIC) eklemek ve yapılandırmak, herhangi bir FreeBSD yöneticisi için ortak bir görevdir.
13.5.1. Doğru Sürücüyü Bulma
İlk olarak, NIC'nin modelini ve kullandığı çipi belirleyin. FreeBSD çok çeşitli NIC'leri destekler. NIC'nin desteklenip desteklenmediğini görmek için FreeBSD sürümünün Donanım Uyumluluk Listesi'ni kontrol edin.
NIC destekleniyorsa, NIC için FreeBSD sürücüsünün adını belirleyin. Desteklenen yonga kümeleri hakkında bazı bilgiler içeren NIC sürücülerinin listesi için /usr/src/sys/conf/NOTES ve /usr/src/sys/arch/conf/NOTES dosyalarına bakın. Şüphe duyduğunuzda, desteklenen donanım ve sürücünün bilinen sınırlamaları hakkında daha fazla bilgi sağlayacağından sürücünün el kitabı sayfasını okuyun.
Yaygın NIC'lerin sürücüleri GENEL çekirdekte zaten mevcuttur, yani NIC'nin önyükleme sırasında incelenmesi gerekir. Sistemin önyükleme mesajları, metin içinde gezinmek için boşluk çubuğu yazılarak ve kullanılarak görüntülenebilir. Bu örnekte, sistemde dc(4) sürücüsünü kullanan iki Ethernet NIC bulunmaktadır:more /var/run/dmesg.boot
dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
miibus0: <MII bus> on dc0
bmtphy0: <BCM5201 10/100baseTX PHY> PHY 1 on miibus0
bmtphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc0: Ethernet address: 00:a0:cc:da:da:da
dc0: [ITHREAD]
dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
miibus1: <MII bus> on dc1
bmtphy1: <BCM5201 10/100baseTX PHY> PHY 1 on miibus1
bmtphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: Ethernet address: 00:a0:cc:da:da:db
dc1: [ITHREAD]NIC sürücüsü GENERIC'te yoksa, ancak bir sürücü varsa, NIC'nin yapılandırılabilmesi ve kullanılabilmesi için sürücünün yüklenmesi gerekir. Bu, iki yoldan biriyle gerçekleştirilebilir:
En kolay yol, kldload(8) kullanarak NIC için bir çekirdek modülü yüklemektir. Ayrıca sürücüyü önyükleme sırasında otomatik olarak yüklemek için /boot/loader.conf dosyasına uygun satırı ekleyin. Tüm NIC sürücüleri modül olarak kullanılamaz.
Alternatif olarak, NIC desteğini statik olarak özel bir çekirdeğe derleyin. Özel çekirdek yapılandırma dosyasına hangi satırın ekleneceğini belirlemek için /usr/src/sys/conf/NOTES, /usr/src/sys/arch/conf/NOTES ve sürücünün el kitabı sayfasına bakın. Çekirdeği yeniden derleme hakkında daha fazla bilgi için, FreeBSD Çekirdeğini Yapılandırma konusuna bakın. NIC önyükleme sırasında algılandıysa, çekirdeğin yeniden derlenmesi gerekmez.
13.5.1.1. Windows® NDIS Sürücülerini Kullanma
Ne yazık ki, sürücüleri için açık kaynak topluluğuna şematik sağlamayan birçok satıcı var, çünkü bu tür bilgileri ticari sırlar olarak görüyorlar. Sonuç olarak, FreeBSD ve diğer işletim sistemlerinin geliştiricilerine iki seçenek bırakılmıştır: sürücüleri uzun ve zahmetli bir tersine mühendislik süreciyle veya Microsoft® Windows® platformları için mevcut sürücü ikili dosyalarını kullanarak geliştirmek.
FreeBSD, Ağ Sürücüsü Arabirim Belirtimi (NDIS) için "yerel" destek sağlar. Bir Windows® XP sürücüsünü FreeBSD'de kullanılabilecek bir biçime dönüştürmek için kullanılabilecek ndisgen(8) içerir. ndis(4) sürücüsü Windows® XP ikili dosyası kullandığından, yalnızca i386™ ve amd64 sistemlerinde çalışır. PCI, CardBus, PCMCIA ve USB aygıtları desteklenir.
ndisgen(8) kullanmak için üç şeye ihtiyaç vardır:
FreeBSD çekirdek kaynakları.
.SYS uzantılı bir Windows® XP sürücü ikilisi.
Windows® XP sürücüsü yapılandırma dosyası . INF uzantısı.
.SYS indirin ve . Belirli NIC için INF dosyaları. Genel olarak, bunlar sürücü CD'sinde veya satıcının web sitesinde bulunabilir. Aşağıdaki örneklerde W32DRIVER.SYS ve W32DRIVER kullanılmıştır. INF.
Sürücü bit genişliği FreeBSD sürümüyle eşleşmelidir. FreeBSD/i386 için Windows® 32 bit sürücü kullanın. FreeBSD/amd64 için Windows® 64 bit sürücü gereklidir.
Bir sonraki adım, sürücü ikili dosyasını yüklenebilir bir çekirdek modülüne derlemektir. As , ndisgen(8) kullanın:root
# ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYSBu komut etkileşimlidir ve gerektirdiği ek bilgileri ister. Geçerli dizinde yeni bir çekirdek modülü oluşturulacaktır. Yeni modülü yüklemek için kldload(8) kullanın:
# kldload ./W32DRIVER_SYS.koOluşturulan çekirdek modülüne ek olarak, ndis.ko ve if_ndis.ko modülleri de yüklenmelidir. Bu, ndis(4)'e bağlı herhangi bir modül yüklendiğinde otomatik olarak gerçekleşmelidir. Değilse, aşağıdaki komutları kullanarak bunları el ile yükleyin:
# kldload ndis
# kldload if_ndisİlk komut ndis(4) miniport sürücü sarmalayıcısını yükler ve ikincisi oluşturulan NIC sürücüsünü yükler.
Herhangi bir yükleme hatası olup olmadığını görmek için dmesg(8) öğesini kontrol edin. Her şey yolunda giderse, çıktı aşağıdakine benzer olmalıdır:
ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
ndis0: NDIS API version: 5.0
ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54MbpsBuradan, ndis0 diğer NIC gibi yapılandırılabilir.
Sistemi ndis(4) modüllerini önyükleme zamanında yükleyecek şekilde yapılandırmak için, oluşturulan modülü (W32DRIVER_SYS.ko) /boot/modules konumuna kopyalayın. Ardından, /boot/loader.conf dosyasına aşağıdaki satırı ekleyin:
W32DRIVER_SYS_load="YES"
13.5.2. Ağ Kartının Yapılandırılması
NIC için doğru sürücü yüklendikten sonra, kartın yapılandırılması gerekir. Yükleme sırasında bsdinstall(8) tarafından yapılandırılmış olabilir.
NIC yapılandırmasını görüntülemek için aşağıdaki komutu girin:
% ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80008<VLAN_MTU,LINKSTATE>
ether 00:a0:cc:da:da:da
inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80008<VLAN_MTU,LINKSTATE>
ether 00:a0:cc:da:da:db
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet 10baseT/UTP
status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>Bu örnekte, aşağıdaki aygıtlar görüntülenmiştir:
dc0: İlk Ethernet arabirimi.
dc1: İkinci Ethernet arabirimi.
lo0: Geri döngü aygıtı.
FreeBSD, NIC adını vermek için sürücü adını ve ardından kartın önyüklemede algılanma sırasını kullanır. Örneğin, sis2, sis(4) sürücüsünü kullanan sistemdeki üçüncü NIC'dir.
Bu örnekte, dc0 açık ve çalışır durumdadır. Temel göstergeler şunlardır:
UPkartın yapılandırılmış ve hazır olduğu anlamına gelir.Kartın bir İnternet () adresi vardır, .
inet192.168.1.3Geçerli bir alt ağ maskesi () vardır, burada .
netmask0xffffff00255.255.255.0Geçerli bir yayın adresine sahiptir, .
192.168.1.255Kartın MAC adresi () .
ether00:a0:cc:da:da:daFiziksel ortam seçimi otomatik seçim modundadır (). Bu örnekte, dc1 medya ile çalışacak şekilde yapılandırılmıştır. Bir sürücü için kullanılabilir ortam türleri hakkında daha fazla bilgi için, kılavuzun sayfasına bakın.
media: Ethernet autoselect (100baseTX <full-duplex>)10baseT/UTPBağlantının durumu () , taşıyıcı sinyalin algılandığını gösterir. dc1 için, Ethernet kablosu karta takılı olmadığında durum normaldir.
statusactivestatus: no carrier
ifconfig(8) çıktısı şuna benzer bir şey gösterseydi:
dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80008<VLAN_MTU,LINKSTATE>
ether 00:a0:cc:da:da:da
media: Ethernet autoselect (100baseTX <full-duplex>)
status: activekartın yapılandırılmadığını gösterir.
Kartın şu şekilde yapılandırılması gerekir: . NIC yapılandırması komut satırından ifconfig(8) ile gerçekleştirilebilir, ancak yapılandırma /etc/rc.conf dosyasına da eklenmediği sürece yeniden başlatmadan sonra kalıcı olmaz. LAN'da bir DHCP sunucusu varsa, şu satırı eklemeniz yeterlidir:root
ifconfig_dc0="DHCP"
dc0 değerini sistem için doğru değerle değiştirin.
Eklenen satır, ardından Test ve Sorun Giderme bölümünde verilen talimatları izleyin.
Ağ yükleme sırasında yapılandırıldıysa, NIC(ler) için bazı girişler zaten mevcut olabilir. Herhangi bir satır eklemeden önce /etc/rc.conf dosyasını iki kez kontrol edin. |
DHCP sunucusu yoksa, NIC(ler) el ile yapılandırılmalıdır. Bu örnekte görüldüğü gibi, sistemde bulunan her NIC için bir satır ekleyin:
ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"
dc0 ve dc1 ve IP adresi bilgilerini sistem için doğru değerlerle değiştirin. İzin verilen seçenekler ve /etc/rc.conf sözdizimi hakkında daha fazla ayrıntı için sürücünün man sayfasına, ifconfig(8) ve rc.conf(5) sayfalarına bakın.
Ağ DNS kullanmıyorsa, zaten orada değillerse, LAN üzerindeki ana bilgisayarların adlarını ve IP adreslerini eklemek için /etc/hosts adresini düzenleyin. Daha fazla bilgi için hosts(5) ve /usr/share/examples/etc/hosts adreslerine bakın.
DHCP sunucusu yoksa ve Internet erişimi gerekiyorsa, varsayılan ağ geçidini ve ad sunucusunu el ile yapılandırın: |
13.5.3. Test ve Sorun Giderme
/etc/rc.conf dosyasında gerekli değişiklikler kaydedildikten sonra, ağ yapılandırmasını test etmek ve sistemin herhangi bir yapılandırma hatası olmadan yeniden başlatıldığını doğrulamak için bir yeniden başlatma kullanılabilir. Alternatif olarak, ayarları ağ sistemine şu komutla uygulayın:
# service netif restart/etc/rc.conf dosyasında varsayılan bir ağ geçidi ayarlanmışsa, şu komutu da verin: |
Ağ sistemi yeniden başlatıldıktan sonra NIC'leri test edin.
13.5.3.1. Ethernet Kartının Test Edilmesi
Ethernet kartının doğru yapılandırıldığını doğrulamak için, arabirimin kendisine ping yapın(8) ve ardından LAN üzerindeki başka bir makineye ping yapın(8):
% ping -c5 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms
--- 192.168.1.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms% ping -c5 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms
--- 192.168.1.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 msAğ çözümlemesini sınamak için, IP adresi yerine ana bilgisayar adını kullanın. Ağda DNS sunucusu yoksa, önce /etc/hosts yapılandırılmalıdır. Bu amaçla, zaten orada değillerse, LAN üzerindeki ana bilgisayarların adlarını ve IP adreslerini eklemek için /etc/hosts öğesini düzenleyin. Daha fazla bilgi için hosts(5) ve /usr/share/examples/etc/hosts adreslerine bakın.
13.5.3.2. Sorun Giderme
Donanım ve yazılım yapılandırmalarında sorun giderirken, önce basit şeyleri kontrol edin. Ağ kablosu takılı mı? Ağ hizmetleri düzgün yapılandırılmış mı? Güvenlik duvarı doğru yapılandırılmış mı? NIC FreeBSD tarafından destekleniyor mu? Bir hata raporu göndermeden önce, her zaman Donanım Notları'nı kontrol edin, FreeBSD sürümünü en son KARARLI sürüme güncelleyin, posta listesi arşivlerini kontrol edin ve İnternet'te arama yapın.
Kart çalışıyorsa ancak performans düşükse ayar yoluyla okuyun(7). Ayrıca, yanlış ağ ayarları yavaş bağlantılara neden olabileceğinden ağ yapılandırmasını denetleyin.
Bazı kullanıcılar, bazı kartlar için normal olan bir veya iki iletiyle karşılaşır. Devam ederlerse veya rahatsız ediciyse, aygıtın başka bir aygıtla çakışıp çakışmadığını belirleyin. Kablo bağlantılarını iki kez kontrol edin. Başka bir kart denemeyi düşünün.device timeout
Hataları çözmek için önce ağ kablosunu kontrol edin. Birçok kart, veri yolu mastering'i destekleyen bir PCI yuvası gerektirir. Bazı eski anakartlarda, yalnızca bir PCI yuvası buna izin verir, genellikle yuva 0. Sorunun bu olup olmadığını belirlemek için NIC ve anakart belgelerine bakın.watchdog timeout
No route to host sistem bir paketi hedef ana bilgisayara yönlendiremiyorsa iletiler oluşur. Bu durum, varsayılan yol belirtilmemişse veya bir kablo takılı değilse oluşabilir. Çıktısını denetleyin ve ana bilgisayara geçerli bir yol olduğundan emin olun. Yoksa, "Ağ Geçitleri ve Rotalar" ı okuyun.netstat -rn
ping: sendto: Permission denied hata iletilerine genellikle yanlış yapılandırılmış bir güvenlik duvarı neden olur. FreeBSD'de bir güvenlik duvarı etkinleştirilmişse ancak hiçbir kural tanımlanmamışsa, varsayılan ilke ping(8) dahil olmak üzere tüm trafiği reddetmektir. Daha fazla bilgi için Güvenlik Duvarları bölümüne bakın.
Bazen kartın performansı zayıf veya ortalamanın altındadır. Bu gibi durumlarda, ortam seçim modunu doğru ortam seçimine ayarlamayı deneyin. Bu, çoğu donanım için işe yarasa da, sorunu çözebilir veya çözmeyebilir. Yine, tüm ağ ayarlarını kontrol edin ve ayarlama(7) konusuna bakın.autoselect
13.6. Sanal Ana Bilgisayarlar
FreeBSD'nin yaygın bir kullanımı, bir sunucunun ağa birçok sunucu olarak göründüğü sanal site barındırmadır. Bu, tek bir arabirime birden çok ağ adresi atanarak elde edilir.
Belirli bir ağ arabiriminin bir "gerçek" adresi vardır ve herhangi bir sayıda "diğer ad" adresi olabilir. Bu takma adlar normalde bu örnekte görüldüğü gibi /etc/rc.conf içine takma ad girişleri yerleştirilerek eklenir:
ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"
Diğer ad girdileri, , , vb. gibi sıralı bir sayı kullanarak başlamalıdır. Yapılandırma işlemi ilk eksik numarada durur.alias0alias0alias1
Diğer ad ağ maskelerinin hesaplanması önemlidir. Belirli bir arabirim için, ağın ağ maskesini doğru şekilde temsil eden bir adres olmalıdır. Bu ağa giren diğer tüm adresler, ya da .1255.255.255.2550xffffffff
Örneğin, fxp0 arabiriminin iki ağa bağlı olduğu durumu düşünün: ağ maskesi ve ağ maskesi . Sistem, aralıklarda ve içinden görünecek şekilde yapılandırılmalıdır. Yalnızca belirli bir ağ aralığındaki ilk adresin gerçek bir ağ maskesi olmalıdır. Geri kalan her şey ( içinden ve içinden ) bir ağ maskesi ile yapılandırılmalıdır.10.1.1.0255.255.255.0202.0.75.16255.255.255.24010.1.1.110.1.1.5202.0.75.17202.0.75.2010.1.1.210.1.1.5202.0.75.18202.0.75.20255.255.255.255
Aşağıdaki /etc/rc.conf girdileri bağdaştırıcıyı bu senaryo için doğru şekilde yapılandırır:
ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"
Bunu ifade etmenin daha basit bir yolu, IP adres aralıklarının boşlukla ayrılmış bir listesidir. İlk adrese belirtilen alt ağ maskesi verilir ve ek adreslerde alt ağ maskesi .255.255.255.255
ifconfig_fxp0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"
13.7. Sistem Günlüğe Kaydetmeyi Yapılandırma
Sistem günlüklerinin oluşturulması ve okunması, sistem yönetiminin önemli bir yönüdür. Sistem günlüklerindeki bilgiler, donanım ve yazılım sorunlarının yanı sıra uygulama ve sistem yapılandırma hatalarını algılamak için kullanılabilir. Bu bilgiler ayrıca güvenlik denetimi ve olay yanıtında da önemli bir rol oynar. Çoğu sistem cinleri ve uygulamaları günlük girdileri oluşturur.
FreeBSD, günlüğü yönetmek için syslogd adlı bir sistem kaydedici sağlar. Varsayılan olarak, sistem önyüklendiğinde syslogd başlatılır. Bu, /etc/rc.conf içindeki değişken tarafından kontrol edilir. /etc/rc.conf içinde kullanılarak ayarlanabilen çok sayıda uygulama argümanı vardır. Mevcut bağımsız değişkenler hakkında daha fazla bilgi için syslogd(8) bölümüne bakın.syslogd_enablesyslogd_flags
Bu bölümde, FreeBSD sistem kaydedicisinin hem yerel hem de uzaktan günlüğe kaydetme için nasıl yapılandırılacağı ve günlük döndürme ve günlük yönetiminin nasıl gerçekleştirileceği açıklanmaktadır.
13.7.1. Yerel Günlüğe Kaydetmeyi Yapılandırma
/etc/syslog.conf yapılandırma dosyası, syslogd'un alınan günlük girdileriyle ne yaptığını denetler. Gelen olayların işlenmesini denetlemek için birkaç parametre vardır. Tesis, çekirdek veya daemon gibi iletiyi hangi alt sistemin oluşturduğunu açıklar ve düzey, gerçekleşen olayın önem derecesini açıklar. Bu, tesise ve düzeye bağlı olarak bir günlük iletisinin günlüğe kaydedilip kaydedilmeyeceğini ve nerede kaydedileceğini yapılandırmayı mümkün kılar. İletiyi gönderen uygulamaya ve uzaktan günlük kaydı durumunda, günlük olayını oluşturan makinenin ana bilgisayar adına bağlı olarak işlem yapmak da mümkündür.
Bu yapılandırma dosyası, eylem başına bir satır içerir ve burada her satırın sözdizimi bir seçici alan ve ardından bir eylem alanıdır. Seçici alanın sözdizimi, tesis düzeyinden veya daha yüksek düzeydeki günlük iletileriyle eşleşecek olan facility.level şeklindedir. Neyin günlüğe kaydedildiğini daha kesin bir şekilde belirtmek için seviyeden önce isteğe bağlı bir karşılaştırma bayrağı eklemek de mümkündür. Aynı eylem için birden çok seçici alan kullanılabilir ve noktalı virgülle () ayrılır. Kullanmak her şeyle eşleşir. Eylem alanı, günlük iletisinin nereye gönderileceğini (örneğin, bir dosyaya veya uzak günlük ana bilgisayarına) gösterir. Örnek olarak, FreeBSD'den varsayılan syslog.conf dosyası aşağıda verilmiştir:;*
# $FreeBSD$ # # Spaces ARE valid field separators in this file. However, # other *nix-like systems still insist on using tabs as field # separators. If you are sharing this file between systems, you # may want to use only tabs as field separators here. # Consult the syslog.conf(5) manpage. *.err;kern.warning;auth.notice;mail.crit /dev/console *.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security auth.info;authpriv.info /var/log/auth.log mail.info /var/log/maillog lpr.info /var/log/lpd-errs ftp.info /var/log/xferlog cron.* /var/log/cron !-devd *.=debug /var/log/debug.log *.emerg * # uncomment this to log all writes to /dev/console to /var/log/console.log #console.info /var/log/console.log # uncomment this to enable logging of all log messages to /var/log/all.log # touch /var/log/all.log and chmod it to mode 600 before it will work #*.* /var/log/all.log # uncomment this to enable logging to a remote loghost named loghost #*.* @loghost # uncomment these if you're running inn # news.crit /var/log/news/news.crit # news.err /var/log/news/news.err # news.notice /var/log/news/news.notice # Uncomment this if you wish to see messages produced by devd # !devd # *.>=info !ppp *.* /var/log/ppp.log !*
Bu örnekte:
Satır 8, , ve 'nin yanı sıra bir veya daha yüksek düzeye sahip tüm iletileri eşleştirir ve bu günlük iletilerini konsola (/dev/console) gönderir.
errkern.warningauth.noticemail.critSatır 12, tesisteki tüm iletileri seviye veya daha yüksek bir seviyede eşleştirir ve iletileri /var/log/maillog dosyasına kaydeder.
mailinfo17. satır, iletileri yalnızca düzeydeki iletilerle eşleştirmek için bir karşılaştırma bayrağı () kullanır ve bunları /var/log/debug.log konumuna kaydeder.
=debugSatır 33, bir program belirtiminin örnek kullanımıdır. Bu, onu izleyen kuralları yalnızca belirtilen program için geçerli kılar. Bu durumda, yalnızca ppp tarafından oluşturulan iletiler /var/log/ppp.log dosyasına kaydedilir.
Mevcut seviyeler, en kritikten en azına doğru sırayla, , , , , , ve .emergalertcriterrwarningnoticeinfodebug
Tesisler, belirli bir düzen içinde, , , , Diğer işletim sistemlerinin farklı olanaklara sahip olabileceğini unutmayın.authauthprivconsolecrondaemonftpkernlprmailmarknewssecuritysysloguseruucplocal0local7
Seviyedeki ve daha yüksek seviyedeki her şeyi /var/log/daemon.log kaydetmek için aşağıdaki girdiyi ekleyin:notice
daemon.notice /var/log/daemon.log
Farklı düzeyler ve olanaklar hakkında daha fazla bilgi için syslog(3) ve syslogd(8) bölümlerine bakın. /etc/syslog.conf, sözdizimi ve daha gelişmiş kullanım örnekleri hakkında daha fazla bilgi için bkz: syslog.conf(5).
13.7.2. Log Yönetimi ve Rotasyonu
Günlük dosyaları hızla büyüyerek disk alanı kaplayabilir ve yararlı bilgilerin bulunmasını zorlaştırabilir. Günlük yönetimi bunu azaltmaya çalışır. FreeBSD'de, günlük dosyalarını yönetmek için newsyslog kullanılır. Bu yerleşik program, günlük dosyalarını düzenli aralıklarla döndürüp sıkıştırır ve isteğe bağlı olarak eksik günlük dosyaları oluşturur ve günlük dosyaları taşındığında programlara sinyal gönderir. Günlük dosyaları, syslogd veya günlük dosyaları üreten başka bir program tarafından oluşturulabilir. Newsyslog normalde cron(8)'den çalıştırılsa da, bir sistem daemonu değildir. Varsayılan yapılandırmada, saatte bir çalışır.
Hangi eylemlerin gerçekleştirileceğini bilmek için, newsyslog yapılandırma dosyasını (/etc/newsyslog.conf) okur. Bu dosya, newsyslog tarafından yönetilen her günlük dosyası için bir satır içerir. Her satırda dosya sahibi, izinler, dosyanın ne zaman döndürüleceği, sıkıştırma gibi günlük döndürmeyi etkileyen isteğe bağlı bayraklar ve günlük döndürüldüğünde sinyal verilecek programlar belirtilir. FreeBSD'deki varsayılan yapılandırma şunlardır:
# configuration file for newsyslog # $FreeBSD$ # # Entries which do not specify the '/pid_file' field will cause the # syslogd process to be signalled when that log file is rotated. This # action is only appropriate for log files which are written to by the # syslogd process (ie, files listed in /etc/syslog.conf). If there # is no process which needs to be signalled when a given log file is # rotated, then the entry for that file should include the 'N' flag. # # The 'flags' field is one or more of the letters: BCDGJNUXZ or a '-'. # # Note: some sites will want to select more restrictive protections than the # defaults. In particular, it may be desirable to switch many of the 644 # entries to 640 or 600. For example, some sites will consider the # contents of maillog, messages, and lpd-errs to be confidential. In the # future, these defaults may change to more conservative ones. # # logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] /var/log/all.log 600 7 * @T00 J /var/log/amd.log 644 7 100 * J /var/log/auth.log 600 7 100 @0101T JC /var/log/console.log 600 5 100 * J /var/log/cron 600 3 100 * JC /var/log/daily.log 640 7 * @T00 JN /var/log/debug.log 600 7 100 * JC /var/log/kerberos.log 600 7 100 * J /var/log/lpd-errs 644 7 100 * JC /var/log/maillog 640 7 * @T00 JC /var/log/messages 644 5 100 @0101T JC /var/log/monthly.log 640 12 * $M1D0 JN /var/log/pflog 600 3 100 * JB /var/run/pflogd.pid /var/log/ppp.log root:network 640 3 100 * JC /var/log/devd.log 644 3 100 * JC /var/log/security 600 10 100 * JC /var/log/sendmail.st 640 10 * 168 B /var/log/utx.log 644 3 * @01T05 B /var/log/weekly.log 640 5 1 $W6D0 JN /var/log/xferlog 600 7 100 * JC
Her satır, döndürülecek günlüğün adıyla başlar, isteğe bağlı olarak hem döndürülen hem de yeni oluşturulan dosyalar için bir sahip ve grup tarafından takip edilir. Alan, günlük dosyasındaki izinleri ayarlar ve kaç tane döndürülmüş günlük dosyasının tutulması gerektiğini gösterir. and alanları, newsyslog'a dosyanın ne zaman döndürüleceğini bildirir. Günlük dosyası, boyutu alandan büyük olduğunda veya alandaki süre geçtiğinde döndürülür. Yıldız işareti () bu alanın yok sayıldığı anlamına gelir. Bayraklar alanı, döndürülen dosyanın nasıl sıkıştırılacağı veya eksikse günlük dosyasının nasıl oluşturulacağı gibi daha fazla talimat verir. Son iki alan isteğe bağlıdır ve bir işlemin İşlem Kimliği (PID) dosyasının adını ve dosya döndürüldüğünde bu işleme gönderilecek sinyal numarasını belirtir.modecountsizewhensizewhen*
Tüm alanlar, geçerli bayraklar ve döndürme zamanının nasıl belirtileceği hakkında daha fazla bilgi için newsyslog.conf(5) dosyasına bakın. Newsyslog cron(8)'den çalıştırıldığından, dosyaları cron(8)'den çalışacak şekilde zamanlandığından daha sık döndüremez.
13.7.3. Uzaktan Günlüğe Kaydetmeyi Yapılandırma
Birden çok ana bilgisayarın günlük dosyalarını izlemek, sistem sayısı arttıkça hantal hale gelebilir. Merkezi günlüğün yapılandırılması, günlük dosyası yönetiminin yönetim yükünün bir kısmını azaltabilir.
FreeBSD'de, merkezi günlük dosyası toplama, birleştirme ve döndürme, syslogd ve newsyslog kullanılarak yapılandırılabilir. Bu bölümde, ana bilgisayar , adlandırılmış, yerel ağ için günlük bilgilerini toplayacağı örnek bir yapılandırma gösterilmektedir. Ana bilgisayar, adlandırılan, günlük bilgilerini günlük sunucusuna geçirecek şekilde yapılandırılır.Alogserv.example.comBlogclient.example.com
13.7.3.1. Günlük Sunucusu Yapılandırması
Günlük sunucusu, diğer ana bilgisayarlardan gelen günlük bilgilerini kabul edecek şekilde yapılandırılmış bir sistemdir. Günlük sunucusu yapılandırmadan önce, aşağıdakileri denetleyin:
Günlük sunucusu ile herhangi bir günlük istemcisi arasında bir güvenlik duvarı varsa, güvenlik duvarı kural kümesinin hem istemciler hem de sunucu için UDP bağlantı noktası 514'e izin verdiğinden emin olun.
Günlük sunucusu ve tüm istemci makinelerin yerel DNS'de ileri ve geri girişleri olmalıdır. Ağın bir DNS sunucusu yoksa, her sistemin /etc/hosts bilgisayarında girişler oluşturun. Günlük girdilerinin günlük sunucusu tarafından reddedilmemesi için uygun ad çözümlemesi gereklidir.
Günlük sunucusunda, günlük girdilerinin alınacağı istemcinin adını, kullanılacak günlük özelliğini ve ana bilgisayarın günlük girdilerini depolamak için günlüğün adını belirtmek üzere /etc/syslog.conf dosyasını düzenleyin. Bu örnek, , tüm olanakları günlüğe kaydeder ve günlük girdilerini /var/log/logclient.log içinde depolar.B
+logclient.example.com *.* /var/log/logclient.log
Birden çok günlük istemcisi eklerken, her istemci için benzer bir iki satırlı giriş ekleyin. Mevcut olanaklar hakkında daha fazla bilgiyi syslog.conf(5) adresinde bulabilirsiniz.
Ardından, /etc/rc.conf dosyasını yapılandırın:
syslogd_enable="YES" syslogd_flags="-a logclient.example.com -v -v"
İlk girdi, sistem önyüklemesinde syslogd'u başlatır. İkinci giriş, belirtilen istemciden günlük girişlerine izin verir. Günlüğe kaydedilen iletilerin ayrıntı düzeyini artırır. Bu, yöneticiler her bir tesisin altında ne tür iletilerin günlüğe kaydedildiğini görebildiklerinden, tesisleri değiştirmek için kullanışlıdır.-v -v
Birden çok istemciden günlüğe kaydetmeye izin vermek için birden çok seçenek belirtilebilir. IP adresleri ve tüm ağ blokları da belirtilebilir. Olası seçeneklerin tam listesi için syslogd(8) bölümüne bakın.-a
Son olarak, günlük dosyasını oluşturun:
# touch /var/log/logclient.logBu noktada, syslogd yeniden başlatılmalı ve doğrulanmalıdır:
# service syslogd restart
# pgrep syslogPID döndürülürse, sunucu başarıyla yeniden başlatılır ve istemci yapılandırması başlayabilir. Sunucu yeniden başlatılmadıysa, hata için /var/log/messages dosyasına başvurun.
13.7.3.2. İstemci Yapılandırmasını Günlüğe Kaydetme
Günlük istemcisi, günlük girdilerini ağdaki bir günlük sunucusuna gönderir. İstemci ayrıca kendi günlüklerinin yerel bir kopyasını da tutar.
Bir günlük sunucusu yapılandırıldıktan sonra, günlük istemcisinde /etc/rc.conf dosyasını düzenleyin:
syslogd_enable="YES" syslogd_flags="-s -v -v"
İlk giriş, önyüklemede syslogd'u etkinleştirir. İkinci giriş, günlüklerin bu istemci tarafından diğer ana bilgisayarlardan () kabul edilmesini önler ve günlüğe kaydedilen iletilerin ayrıntı düzeyini artırır.-s
Ardından, istemcinin /etc/syslog.conf dosyasında günlük sunucusunu tanımlayın. Bu örnekte, günlüğe kaydedilen tüm olanaklar, belirtilen ana bilgisayar adıyla sembolle gösterilen uzak bir sisteme gönderilir:@
*.* @logserv.example.com
Düzenlemeyi kaydettikten sonra, değişikliklerin etkili olması için syslogd'u yeniden başlatın:
# service syslogd restartGünlük iletilerinin ağ üzerinden gönderildiğini sınamak için, syslogd'a ileti göndermek üzere istemcideki logger(1) öğesini kullanın:
# logger "Test message from logclient"Bu ileti artık hem istemcideki /var/log/messages hem de günlük sunucusundaki /var/log/logclient.log içinde bulunmalıdır.
13.7.3.3. Günlük Sunucularında Hata Ayıklama
Günlük sunucusunda hiçbir ileti alınmıyorsa, bunun nedeni büyük olasılıkla bir ağ bağlantısı sorunu, ana bilgisayar adı çözümleme sorunu veya yapılandırma dosyasındaki yazım hatasıdır. Nedeni yalıtmak için, hem günlük sunucusunun hem de günlük istemcisinin /etc/rc.conf dosyasında belirtilen ana bilgisayar adını kullanarak birbirlerini kullanabildiğinden emin olun. Bu işlem başarısız olursa, ağ kablolarını, güvenlik duvarı kural kümesini ve DNS sunucusundaki ana bilgisayar adı girdilerini veya hem günlük sunucusundaki hem de istemcilerdeki /etc/hosts öğelerini denetleyin. Her iki ana bilgisayardan da başarılı olana kadar tekrarlayın.pingping
Her iki ana bilgisayarda da başarılı olursa ancak günlük iletileri hala alınmıyorsa, yapılandırma sorununu daraltmak için günlük ayrıntı düzeyini geçici olarak artırın. Aşağıdaki örnekte, günlük sunucusundaki /var/log/logclient.log boş ve günlük istemcisindeki /var/log/messages hatanın nedenini göstermiyor. Hata ayıklama çıktısını artırmak için, günlük sunucusundaki girdiyi düzenleyin ve yeniden başlatma yapın:pingsyslogd_flags
syslogd_flags="-d -a logclient.example.com -v -v"
# service syslogd restartAşağıdakine benzer hata ayıklama verileri, yeniden başlatmanın hemen ardından konsolda yanıp söner:
logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart
syslogd: restarted
logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel
Logging to FILE /var/log/messages
syslogd: kernel boot file is /boot/kernel/kernel
cvthname(192.168.1.10)
validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com;
rejected in rule 0 due to name mismatch.Bu örnekte, günlük iletileri, ana bilgisayar adı uyuşmazlığına neden olan bir yazım hatası nedeniyle reddedilmektedir. İstemcinin ana bilgisayar adı , değil, olmalıdır. Yazım hatasını düzeltin, yeniden başlatma sorunu yaşayın ve sonuçları doğrulayın:logclientlogclien
# service syslogd restart
logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart
syslogd: restarted
logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel
syslogd: kernel boot file is /boot/kernel/kernel
logmsg: pri 166, flags 17, from logserv.example.com,
msg Dec 10 20:55:02 <syslog.err> logserv.example.com syslogd: exiting on signal 2
cvthname(192.168.1.10)
validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com;
accepted in rule 0.
logmsg: pri 15, flags 0, from logclient.example.com, msg Dec 11 02:01:28 trhodes: Test message 2
Logging to FILE /var/log/logclient.log
Logging to FILE /var/log/messagesBu noktada, iletiler düzgün bir şekilde alınmakta ve doğru dosyaya yerleştirilmektedir.
13.7.3.4. Güvenlikle İlgili Dikkat Edilmesi Gerekenler
Herhangi bir ağ hizmetinde olduğu gibi, bir günlük sunucusu uygulamadan önce güvenlik gereksinimleri dikkate alınmalıdır. Günlük dosyaları, yerel ana bilgisayarda etkinleştirilen hizmetler, kullanıcı hesapları ve yapılandırma verileri hakkında hassas veriler içerebilir. İstemciden sunucuya gönderilen ağ verileri şifrelenmez veya parola korumalı olmaz. Şifreleme gereksinimi varsa, günlük verilerini şifreli bir tünel üzerinden iletecek olan security/stunnel kullanmayı düşünün.
Yerel güvenlik de bir sorundur. Günlük dosyaları kullanım sırasında veya günlük döndürme işleminden sonra şifrelenmez. Yerel kullanıcılar, sistem yapılandırması hakkında ek içgörü elde etmek için günlük dosyalarına erişebilir. Günlük dosyalarında uygun izinlerin ayarlanması kritik öneme sahiptir. Yerleşik günlük döndürücüsü newsyslog, yeni oluşturulan ve döndürülen günlük dosyalarında izinlerin ayarlanmasını destekler. Günlük dosyalarının moda ayarlanması, yerel kullanıcıların istenmeyen erişimini engellemelidir. Ek bilgi için newsyslog.conf(5) dosyasına bakın.600
13.8. Yapılandırma Dosyaları
13.8.1. /etc Düzen
Yapılandırma bilgilerinin tutulduğu birkaç dizin vardır. Bunlar şunları içerir:
/ve saire | Genel sisteme özgü yapılandırma bilgileri. |
/etc/defaults | Sistem yapılandırma dosyalarının varsayılan sürümleri. |
/etc/posta | Ekstra sendmail(8) yapılandırması ve diğer MTA yapılandırma dosyaları. |
/etc/ppp | Hem kullanıcı hem de çekirdek ppp programları için yapılandırma. |
/usr/local/etc | Yüklü uygulamalar için yapılandırma dosyaları. Uygulama başına alt dizinler içerebilir. |
/usr/local/etc/rc.d | yüklü uygulamalar için rc(8) komut dosyaları. |
/var/db | Paket veritabanı ve locate(1) veritabanı gibi sisteme özgü otomatik olarak oluşturulan veritabanı dosyaları. |
13.8.2. Ana bilgisayar adları
13.8.2.1. /etc/resolv.conf
Bir FreeBSD sisteminin İnternet Etki Alanı Adı Sistemi'ne (DNS) nasıl eriştiği, resolv.conf(5) tarafından kontrol edilir.
/etc/resolv.conf dosyasına en yaygın girişler şunlardır:
| Çözümleyicinin sorgulaması gereken ad sunucusunun IP adresi. Sunucular en fazla üç ile listelenen sırayla sorgulanır. |
| Ana bilgisayar adı araması için arama listesi. Bu normalde yerel ana bilgisayar adının etki alanı tarafından belirlenir. |
| Yerel etki alanı adı. |
Tipik bir /etc/resolv.conf dosyası şöyle görünür:
search example.com nameserver 147.11.1.11 nameserver 147.11.100.30
Seçeneklerden yalnızca biri kullanılmalıdır. |
DHCP kullanırken, dhclient(8) genellikle DHCP sunucusundan alınan bilgilerle /etc/resolv.conf dosyasını yeniden yazar.
13.8.2.2. /etc/hosts
/etc/hosts IP adresi eşlemelerine ana bilgisayar adı sağlamak için DNS ve NIS ile birlikte çalışan basit bir metin veritabanıdır. LAN üzerinden bağlanan yerel bilgisayarların girişleri, adlandırılmış(8) bir sunucu kurmak yerine basit adlandırma amacıyla bu dosyaya eklenebilir. Ayrıca, /etc/hosts Internet adlarının yerel kaydını sağlamak için kullanılabilir ve böylece sık erişilen adlar için dış DNS sunucularını sorgulama gereksinimi azalır.
# $FreeBSD$ # # # Host Database # # This file should contain the addresses and aliases for local hosts that # share this file. Replace 'my.domain' below with the domainname of your # machine. # # In the presence of the domain name service or NIS, this file may # not be consulted at all; see /etc/nsswitch.conf for the resolution order. # # ::1 localhost localhost.my.domain 127.0.0.1 localhost localhost.my.domain # # Imaginary network. #10.0.0.2 myname.my.domain myname #10.0.0.3 myfriend.my.domain myfriend # # According to RFC 1918, you can use the following IP networks for # private nets which will never be connected to the Internet: # # 10.0.0.0 - 10.255.255.255 # 172.16.0.0 - 172.31.255.255 # 192.168.0.0 - 192.168.255.255 # # In case you want to be able to connect to the Internet, you need # real official assigned numbers. Do not try to invent your own network # numbers but instead get one from your network provider (if any) or # from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.) #
/etc/hosts biçimi aşağıdaki gibidir:
[Internet address] [official hostname] [alias1] [alias2] ...
Mesela:
10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2
Daha fazla bilgi için ev sahiplerine danışın(5).
13.9. sysctl ile ayarlama(8)
sysctl(8), çalışan bir FreeBSD sisteminde değişiklik yapmak için kullanılır. Bu, TCP/IP yığınının ve sanal bellek sisteminin deneyimli bir sistem yöneticisinin performansını önemli ölçüde artırabilecek birçok gelişmiş seçeneğini içerir. Beş yüzden fazla sistem değişkeni sysctl(8) kullanılarak okunabilir ve ayarlanabilir.
Özünde, sysctl(8) iki işlev görür: sistem ayarlarını okumak ve değiştirmek.
Tüm okunabilir değişkenleri görüntülemek için:
% sysctl -aBelirli bir değişkeni okumak için adını belirtin:
% sysctl kern.maxproc
kern.maxproc: 1044Belirli bir değişkeni ayarlamak için variable=value sözdizimini kullanın:
# sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000Sysctl değişkenlerinin ayarları genellikle bir booleanın evet veya hayır için olduğu dizeler, sayılar veya booleanlardır.10
Makine her önyüklendiğinde bazı değişkenleri otomatik olarak ayarlamak için, bunları /etc/sysctl.conf dosyasına ekleyin. Daha fazla bilgi için sysctl.conf(5) ve sysctl.conf dosyalarına bakın.
13.9.1. sysctl.conf
sysctl(8), /etc/sysctl.conf yapılandırma dosyası /etc/rc.conf dosyasına çok benziyor. Değerler bir biçimde ayarlanır. Belirtilen değerler, sistem çok kullanıcılı moda geçtikten sonra ayarlanır. Tüm değişkenler bu modda ayarlanabilir değildir.variable=value
Örneğin, önemli sinyal çıkışlarının günlüğe kaydedilmesini kapatmak ve kullanıcıların diğer kullanıcılar tarafından başlatılan işlemleri görmesini önlemek için /etc/sysctl.conf dosyasında aşağıdaki ayarlanabilir öğeler ayarlanabilir:
# Do not log fatal signal exits (e.g., sig 11) kern.logsigexit=0 # Prevent users from seeing information about processes that # are being run under another UID. security.bsd.see_other_uids=0
13.9.2. sysctl(8) Salt okunur
Bazı durumlarda, sistemin yeniden başlatılmasını gerektiren salt okunur sysctl(8) değerlerinin değiştirilmesi istenebilir.
Örneğin, bazı dizüstü bilgisayar modellerinde cardbus(4) cihazı bellek aralıklarını araştırmaz ve aşağıdakine benzer hatalarla başarısız olur:
cbb0: Could not map register memory
device_probe_and_attach: cbb0 attach returned 12Düzeltme, salt okunur bir sysctl(8) ayarının değiştirilmesini gerektirir. /boot/loader.conf dosyasına ekleyin ve yeniden başlatın. Artık cardbus(4) düzgün çalışmalıdır.hw.pci.allow_unsupported_io_range=1
13.10. Ayar Diskleri
Aşağıdaki bölümde, disk aygıtlarına uygulanabilecek çeşitli ayarlama mekanizmaları ve seçenekleri tartışılacaktır. Çoğu durumda, SCSI sürücüleri gibi mekanik parçalara sahip diskler, genel sistem performansını düşüren darboğaz olacaktır. Bir çözüm, katı hal sürücüsü gibi mekanik parçaları olmayan bir sürücüyü takmak olsa da, mekanik sürücüler yakın gelecekte herhangi bir zamanda ortadan kalkmayacaktır. Diskleri ayarlarken, sistemdeki çeşitli değişiklikleri test etmek için iostat(8) komutunun özelliklerini kullanmanız önerilir. Bu komut, kullanıcının sistem GÇ hakkında değerli bilgiler edinmesini sağlar.
13.10.1. Sysctl Değişkenleri
13.10.1.1. vfs.vmiodirenable
sysctl(8) değişkeni (kapalı) veya (açık) olarak ayarlanabilir. Varsayılan olarak bu değere ayarlanmıştır. Bu değişken, dizinlerin sistem tarafından nasıl önbelleğe alındığını denetler. Çoğu dizin küçüktür, dosya sisteminde yalnızca tek bir parça (genellikle 1 K) ve arabellek önbelleğinde genellikle 512 bayt kullanır. Bu değişken kapalıyken, arabellek önbelleği, sistemde çok miktarda bellek olsa bile, yalnızca sabit sayıda dizini önbelleğe alır. Bu sysctl(8) etkinleştirildiğinde, arabellek önbelleğinin dizinleri önbelleğe almak için VM sayfası önbelleğini kullanmasına olanak tanıyarak dizinleri önbelleğe almak için tüm belleği kullanılabilir hale getirir. Ancak, bir dizini önbelleğe almak için kullanılan en düşük çekirdek içi bellek, 4 bayt yerine fiziksel sayfa boyutudur (genellikle 512 K). Sistem çok sayıda dosyayı işleyen herhangi bir hizmet çalıştırıyorsa, bu seçeneğin etkin tutulması önerilir. Bu tür hizmetler web önbelleklerini, büyük posta sistemlerini ve haber sistemlerini içerebilir. Bu seçeneği açık tutmak, boşa harcanan bellekle bile genellikle performansı düşürmez, ancak öğrenmek için denemeler yapılmalıdır.vfs.vmiodirenable011
13.10.1.2. vfs.write_behind
sysctl(8) değişkeni varsayılan olarak (on) olarak ayarlanır. Bu, dosya sistemine, tam kümeler toplanırken medya yazmaları vermesini söyler ve bu genellikle büyük sıralı dosyalar yazarken oluşur. Bu, G/Ç performansına fayda sağlamayacağı durumlarda arabellek önbelleğinin kirli arabelleklerle doyurulmasını önler. Ancak, bu süreçleri durdurabilir ve belirli koşullar altında kapatılmalıdır.vfs.write_behind1
13.10.1.3. vfs.hirunningspace
sysctl(8) değişkeni, herhangi bir örnekte sistem genelindeki disk denetleyicilerine ne kadar bekleyen yazma G/Ç'sinin sıraya alınabileceğini belirler. Varsayılan değer genellikle yeterlidir, ancak çok sayıda diske sahip makinelerde, dört veya beş megabayta kadar çarpmayı deneyin. Arabellek önbelleğinin yazma eşiğini aşan bir değerin çok yüksek ayarlanması, kümeleme performansının bozulmasına neden olabilir. Daha yüksek yazma değerleri aynı anda gerçekleşen okumalara gecikme süresi ekleyebileceğinden, bu değeri rasgele yüksek ayarlamayın.vfs.hirunningspace
Diğer çeşitli arabellek önbelleği ve VM sayfası önbelleği ile ilgili sysctl (8) değerleri vardır. VM sistemi kendini otomatik olarak ayarlama konusunda iyi bir iş çıkardığından bu değerlerin değiştirilmesi önerilmez.
13.10.1.4. vm.swap_idle_enabled
sysctl(8) değişkeni, birçok etkin oturum açma kullanıcısı ve çok sayıda boşta işlem içeren büyük çok kullanıcılı sistemlerde kullanışlıdır. Bu tür sistemler boş bellek rezervleri üzerinde sürekli baskı oluşturma eğilimindedir. Bu özelliği açmak ve takas histerezini (boşta kalan saniyelerde) değiştirmek, boşta kalan işlemlerle ilişkili bellek sayfalarının önceliğini normal sayfa çıkış algoritmasından daha hızlı bir şekilde azaltır. Bu, pageout daemon'a yardım eli uzatır. Bu seçeneği yalnızca gerekirse açın, çünkü ödünleşim esasen daha fazla takas ve disk bant genişliği yiyen er ya da geç sayfa öncesi bellektir. Küçük bir sistemde bu seçeneğin belirlenebilir bir etkisi olacaktır, ancak zaten ılımlı sayfalama yapan büyük bir sistemde, bu seçenek VM sisteminin tüm işlemleri kolayca belleğe girip çıkarmasına olanak tanır.vm.swap_idle_enabledvm.swap_idle_threshold1vm.swap_idle_threshold2
13.10.1.5. hw.ata.wc
IDE yazma önbelleğini kapatmak, IDE disklerine yazma bant genişliğini azaltır, ancak bazen sabit disk satıcıları tarafından sunulan veri tutarlılığı sorunları nedeniyle gerekli olabilir. Sorun şu ki, bazı IDE sürücüleri bir yazma işleminin ne zaman tamamlanacağı konusunda yalan söylüyor. IDE yazma önbelleği açıkken, IDE sabit sürücüleri verileri diske düzensiz yazar ve bazen ağır disk yükü altındayken bazı blokların yazılmasını süresiz olarak geciktirir. Bir çökme veya elektrik kesintisi ciddi dosya sistemi bozulmasına neden olabilir. sysctl(8) değişkenini gözlemleyerek sistemdeki varsayılanı kontrol edin. IDE yazma önbelleği kapalıysa, önyükleme sırasında etkinleştirmek için bu salt okunur değişkeni in /boot/loader.conf olarak ayarlayabilirsiniz.hw.ata.wc1
Daha fazla bilgi için ata(4) bölümüne bakın.
13.10.1.6. SCSI_DELAY (kern.cam.scsi_delay)
Çekirdek yapılandırma seçeneği, sistem önyükleme sürelerini azaltmak için kullanılabilir. Varsayılan değerler oldukça yüksektir ve önyükleme işlemindeki saniyelik gecikmeden sorumlu olabilir. Saniyelere indirmek genellikle modern sürücülerle çalışır. Ayarlanabilir önyükleme süresi kullanılmalıdır. Ayarlanabilir ve çekirdek yapılandırma seçeneği, değerleri saniye değil milisaniye cinsinden kabul eder.SCSI_DELAY155kern.cam.scsi_delay
13.10.2. Yazılım Güncellemeleri
Bir dosya sisteminde ince ayar yapmak için tunefs(8) kullanın. Bu programın birçok farklı seçeneği vardır. Yazılım Güncelleştirmeleri'ni açıp kapatmak için şunları kullanın:
# tunefs -n enable /filesystem
# tunefs -n disable /filesystemBir dosya sistemi bağlıyken tunefs(8) ile değiştirilemez. Yazılım Güncelleştirmeleri'ni etkinleştirmek için iyi bir zaman, tek kullanıcı modunda herhangi bir bölüm bağlanmadan öncedir.
Yazılım Güncellemeleri, bir bellek önbelleği kullanarak meta veri performansını, özellikle dosya oluşturma ve silme işlemlerini büyük ölçüde geliştirdiği için UFS dosya sistemleri için önerilir. Yumuşak Güncellemelerin farkında olunması gereken iki dezavantajı vardır. İlk olarak, Yazılım Güncelleştirmeleri bir çökme durumunda dosya sistemi tutarlılığını garanti eder, ancak fiziksel diski güncellemenin birkaç saniye hatta bir dakika gerisinde kolayca olabilir. Sistem çökerse, yazılmamış veriler kaybolabilir. İkincisi, Yazılım Güncellemeleri dosya sistemi bloklarının serbest bırakılmasını geciktirir. Kök dosya sistemi neredeyse doluysa, , gibi büyük bir güncelleştirme gerçekleştirmek, dosya sisteminde boş alan kalmamasına ve güncelleştirmenin başarısız olmasına neden olabilir.make installworld
13.10.2.1. Yazılım Güncellemeleri Hakkında Daha Fazla Ayrıntı
Meta veri güncellemeleri, inode'lar veya dizinler gibi içerik dışı verilerde yapılan güncellemelerdir. Bir dosya sisteminin meta verilerini diske geri yazmak için iki geleneksel yaklaşım vardır.
Tarihsel olarak, varsayılan davranış meta veri güncellemelerini eşzamanlı olarak yazmaktı. Bir dizin değişirse, sistem değişiklik gerçekten diske yazılana kadar bekledi. Dosya verileri arabellekleri (dosya içeriği) arabellek önbelleğinden geçirilir ve daha sonra zaman uyumsuz olarak diske yedeklenir. Bu uygulamanın avantajı, güvenli bir şekilde çalışmasıdır. Güncelleştirme sırasında bir hata oluşursa, meta veriler her zaman tutarlı bir durumdadır. Bir dosya ya tamamen oluşturulur ya da hiç oluşturulmaz. Bir dosyanın veri blokları kilitlenme sırasında arabellek önbelleğinden diske çıkış yolunu bulamadıysa, fsck(8) bunu tanır ve dosya uzunluğunu . Ek olarak, uygulama açık ve basittir. Dezavantajı, meta veri değişikliklerinin yavaş olmasıdır. Örneğin, bir dizindeki tüm dosyalara sırayla dokunur, ancak her dizin değişikliği diske eşzamanlı olarak yazılır. Bu, dizinin kendisine, inode tablosuna ve muhtemelen dosya tarafından ayrılan dolaylı bloklara yapılan güncellemeleri içerir. Benzer hususlar, .0rm -rtar -x
İkinci yaklaşım, zaman uyumsuz meta veri güncelleştirmelerini kullanmaktır. Bu, . Tüm meta veri güncelleştirmeleri arabellek önbelleğinden de geçirildiğinden, bunlar dosya içeriği verilerinin güncelleştirmeleriyle karıştırılır. Bu uygulamanın avantajı, her meta veri güncelleştirmesinin diske yazılmasını beklemeye gerek olmamasıdır, bu nedenle büyük miktarda meta veri güncelleştirmesine neden olan tüm işlemler zaman uyumlu durumdan çok daha hızlı çalışır. Bu uygulama hala açık ve basittir, bu nedenle hataların koda sızması için düşük bir risk vardır. Dezavantajı, dosya sisteminin tutarlı bir durumu için garanti olmamasıdır. Elektrik kesintisi veya sıfırlama düğmesine basan biri gibi büyük miktarda meta veriyi güncelleştiren bir işlem sırasında bir hata olursa, dosya sistemi öngörülemeyen bir durumda bırakılır. Sistem tekrar ortaya çıktığında dosya sisteminin durumunu inceleme fırsatı yoktur, çünkü inode tablosunun veya ilişkili dizinin güncellemeleri değilken bir dosyanın veri blokları diske zaten yazılmış olabilir. Ortaya çıkan kaosu temizleyebilen bir fsck(8) uygulamak imkansızdır, çünkü gerekli bilgiler diskte mevcut değildir. Dosya sistemi onarılamayacak kadar hasar görmüşse, tek seçenek onu yeniden biçimlendirmek ve yedekten geri yüklemektir.mount -o async
Bu sorunun olağan çözümü, günlük kaydı olarak da adlandırılan kirli bölge günlüğünü uygulamaktır. Meta veri güncelleştirmeleri yine de eşzamanlı olarak yazılır, ancak diskin yalnızca küçük bir bölgesine yazılır. Daha sonra, uygun yerlerine taşınırlar. Günlük alanı diskte küçük, bitişik bir bölge olduğundan, ağır işlemler sırasında bile disk kafalarının hareket etmesi için uzun mesafeler yoktur, bu nedenle bu işlemler zaman uyumlu güncelleştirmelerden daha hızlıdır. Ek olarak, uygulamanın karmaşıklığı sınırlıdır, bu nedenle hataların mevcut olma riski düşüktür. Bir dezavantajı, tüm meta verilerin iki kez, bir kez günlük bölgesine ve bir kez de uygun konuma yazılmasıdır, bu nedenle performans "kötümserliği" ile sonuçlanabilir. Öte yandan, bir çökme durumunda, bekleyen tüm meta veri işlemleri, sistem tekrar ortaya çıktıktan sonra hızlı bir şekilde geri alınabilir veya günlük alanından tamamlanabilir ve bu da hızlı bir dosya sistemi başlangıcına neden olur.
Berkeley FFS'nin geliştiricisi Kirk McKusick, Soft Updates ile bu sorunu çözdü. Bekleyen tüm meta veri güncellemeleri bellekte tutulur ve sıralanmış bir sırayla diske yazılır ("sıralı meta veri güncellemeleri"). Bu, ağır meta veri işlemleri durumunda, daha sonra bir öğeye yapılan güncellemelerin, hala bellekte olan ve diske henüz yazılmamış olan önceki öğeleri "yakalaması" etkisine sahiptir. Tüm işlemler genellikle güncelleştirme diske yazılmadan önce bellekte gerçekleştirilir ve veri blokları, meta verilerinin önünde diskte olmayacak şekilde konumlarına göre sıralanır. Sistem çökerse, örtülü bir "günlük geri sarma", diske yazılmamış tüm işlemlerin hiç olmamış gibi görünmesine neden olur. 30 ila 60 saniye önceki gibi görünen tutarlı bir dosya sistemi durumu korunur. Kullanılan algoritma, kullanımdaki tüm kaynakların bloklarında ve inodlarında bu şekilde işaretlenmesini garanti eder. Bir kilitlenmeden sonra, oluşan tek kaynak ayırma hatası, kaynakların aslında "ücretsiz" olan "kullanılmış" olarak işaretlenmesidir. fsck(8) bu durumu algılar ve artık kullanılmayan kaynakları serbest bırakır. Bir çökmeden sonra dosya sisteminin kirli durumunu zorla monte ederek görmezden gelmek güvenlidir. Kullanılmamış olabilecek kaynakları serbest bırakmak için fsck(8)'in daha sonra çalıştırılması gerekir. fsck(8) arka planının arkasındaki fikir budur: sistem başlatma sırasında, dosya sisteminin yalnızca anlık görüntüsü kaydedilir ve fsck(8) daha sonra çalıştırılır. Tüm dosya sistemleri daha sonra "kirli" olarak monte edilebilir, böylece sistem başlangıcı çok kullanıcılı modda devam eder. Ardından, arka plan fsck(8), kullanılmamış olabilecek kaynakları serbest bırakmak için bunun gerekli olduğu tüm dosya sistemleri için zamanlanır. Yazılım Güncelleştirmeleri kullanmayan dosya sistemleri hala her zamanki ön plan fsck(8) değerine ihtiyaç duyar.mount -f
Bunun avantajı, meta veri işlemlerinin neredeyse zaman uyumsuz güncelleştirmeler kadar hızlı olması ve meta verileri iki kez yazması gereken günlüğe kaydetmeden daha hızlı olmasıdır. Dezavantajları, kodun karmaşıklığı, daha yüksek bellek tüketimi ve bazı kendine özgü özelliklerdir. Bir çökmeden sonra, dosya sisteminin durumu biraz "eski" gibi görünüyor. Standart zaman uyumlu yaklaşımın fsck(8)'den sonra bazı sıfır uzunluklu dosyaların kalmasına neden olacağı durumlarda, ne meta veriler ne de dosya içeriği diske yazılmadığından, bu dosyalar Yazılım Güncelleştirmeleri'nde hiç bulunmaz. Güncelleştirmeler diske yazılana kadar disk alanı serbest bırakılmaz, bu da rm(1) çalıştırıldıktan bir süre sonra gerçekleşebilir. Bu, tüm dosyaları iki kez tutmak için yeterli boş alana sahip olmayan bir dosya sistemine büyük miktarda veri yüklerken sorunlara neden olabilir.
13.11. Çekirdek Sınırlarını Ayarlama
13.11.1. Dosya/İşlem Sınırları
13.11.1.1. kern.maxfiles
sysctl(8) değişkeni, sistem gereksinimlerine göre yükseltilebilir veya alçaltılabilir. Bu değişken, sistemdeki maksimum dosya tanımlayıcı sayısını gösterir. Dosya tanımlayıcı tablosu dolduğunda, dmesg(8) kullanılarak görüntülenebilen sistem iletisi arabelleğinde tekrar tekrar görünür.kern.maxfilesfile: table is full
Her açık dosya, soket veya fifo bir dosya tanımlayıcısı kullanır. Büyük ölçekli bir üretim sunucusu, aynı anda çalışan hizmetlerin türüne ve sayısına bağlı olarak kolayca binlerce dosya tanımlayıcısı gerektirebilir.
Eski FreeBSD sürümlerinde, varsayılan değer çekirdek yapılandırma dosyasından türetilir. değeri ile orantılı olarak büyür. Özel bir çekirdek derlerken, bu çekirdek yapılandırma seçeneğini sistemin kullanımına göre ayarlamayı düşünün. Bu sayıdan, çekirdeğe önceden tanımlanmış sınırlarının çoğu verilir. Bir üretim makinesinin aynı anda 256 kullanıcısı olmasa da, gereken kaynaklar yüksek ölçekli bir web sunucusuna benzer olabilir.kern.maxfilesmaxuserskern.maxfilesmaxusers
Salt okunur sysctl(8) değişkeni, sistemde kullanılabilir bellek miktarına bağlı olarak önyükleme sırasında otomatik olarak boyutlandırılır ve çalışma zamanında . Bazı sistemler , 'nin daha büyük veya daha küçük değerlerini ve değerlerini gerektirir ve nadir değildir. Çok sayıda dosya tanımlayıcısına ihtiyaç duyulmadıkça yukarıya gitmeniz önerilmez. Varsayılan değerlerine ayarlanabilen değerlerin çoğu, /boot/loader.conf dosyasındaki önyükleme zamanında veya çalışma zamanında tek tek geçersiz kılınabilir. Daha fazla ayrıntı ve bazı ipuçları için loader.conf(5) ve /boot/defaults/loader.conf dosyalarına bakın.kern.maxuserskern.maxuserskern.maxusers64128256256kern.maxusers
Eski sürümlerde, sistem . [1]. Bu seçeneği ayarlarken, en azından , özellikle sistem Xorg çalıştırıyorsa veya yazılımı derlemek için kullanılıyorsa. Tarafından ayarlanan en önemli tablo, . , olarak ayarlanırsa, sistemin önyükleme zamanında başlatılması ve Xorg tarafından kullanılan veya daha fazlası dahil olmak üzere yalnızca eşzamanlı işlemler olabilir. Manuel bir sayfayı okumak gibi basit bir görev bile, filtrelemek, sıkıştırmasını açmak ve görüntülemek için dokuz işlem başlatacaktır. Neredeyse tüm kullanımlar için yeterli olması gereken eşzamanlı işlemlere izin verecek şekilde ayarlanması. Ancak, başka bir programı başlatmaya çalışırken hata görüntülenirse veya bir sunucu çok sayıda eşzamanlı kullanıcıyla çalışıyorsa, sayıyı artırın ve yeniden oluşturun.maxusers0maxusers4maxusers20 + 16 * maxusersmaxusers1361815maxusers641044
|
13.11.1.2. kern.ipc.soacceptqueue
sysctl(8) değişkeni, yeni bağlantıları kabul etmek için dinleme kuyruğunun boyutunu sınırlar. Varsayılan değeri, yoğun yüklü bir web sunucusundaki yeni bağlantıların sağlam bir şekilde işlenmesi için genellikle çok düşüktür. Bu tür ortamlar için bu değerin daha yüksek veya daha yüksek bir değere çıkarılması önerilir. sendmail(8) veya Apache gibi bir hizmetin kendisi dinleme kuyruğu boyutunu sınırlayabilir, ancak yapılandırma dosyasında genellikle sıra boyutunu ayarlamak için bir yönerge bulunur. Büyük dinleme kuyrukları, Hizmet Reddi (DoS) saldırılarından kaçınmak için daha iyi bir iş çıkarır.kern.ipc.soacceptqueueTCP1281024
13.11.2. Ağ Sınırları
Çekirdek yapılandırma seçeneği, sistem için kullanılabilir ağ Mbufs miktarını belirler. Düşük sayıda Mbuf'a sahip yoğun trafik alan bir sunucu performansı engelleyecektir. Her küme yaklaşık 2 K belleği temsil eder, bu nedenle ağ arabellekleri için ayrılmış çekirdek belleğinin megabayt değerini temsil eder. Kaç tanesine ihtiyaç duyulduğunu bulmak için basit bir hesaplama yapılabilir. Her bağlantının 6 K alma ve 16 K gönderme arabelleği kullandığı eşzamanlı bağlantılarda maksimuma çıkan bir web sunucusu, web sunucusunu kapsayacak şekilde yaklaşık 32 MB değerinde ağ arabelleği gerektirir. İyi bir kural, 2x32 MB / 2 KB = 64 MB / 2 kB = . Daha fazla belleğe sahip makineler için ve arasındaki değerler önerilir. Önyükleme zamanı çökmesine neden olabileceğinden, bu parametre için hiçbir zaman rasgele yüksek bir değer belirtmeyin. Ağ kümesi kullanımını gözlemlemek için netstat(1) ile kullanın.NMBCLUSTERS102421000232768409632768-m
Önyükleme sırasında bunu ayarlamak için ayarlanabilir yükleyici kullanılmalıdır. FreeBSD'nin yalnızca eski sürümleri çekirdek yapılandırması(8) seçeneğinin kullanılmasını gerektirir.kern.ipc.nmbclustersNMBCLUSTERS
Sendfile(2) sistem çağrısını yoğun olarak kullanan meşgul sunucular için, çekirdek yapılandırma seçeneği aracılığıyla veya /boot/loader.conf dosyasındaki değerini ayarlayarak sendfile(2) arabelleklerinin sayısını artırmak gerekebilir (ayrıntılar için bkz. loader(8). Bu parametrenin ayarlanması gerektiğine dair yaygın bir gösterge, işlemlerin durumda görüldüğü zamandır. sysctl(8) değişkeni salt okunurdur. Bu parametre nominal olarak , ile ölçeklendirilir, ancak buna göre ayarlamak gerekebilir.NSFBUFSsfbufakern.ipc.nsfbufskern.maxusers
Bir soket engellenmiyor olarak işaretlenmiş olsa da, engellemeyen sokette sendfile(2) çağrısı yapmak, yeterli sayıda ' kullanılabilir hale getirilene kadar sendfile(2) çağrısının engellenmesine neden olabilir. |
13.11.2.1. net.inet.ip.portrange.*
sysctl(8) değişkenleri, otomatik olarak bağlanan bağlantı noktası numarası aralıklarını ve soketleri kontrol eder. Üç aralık vardır: düşük aralık, varsayılan aralık ve yüksek aralık. Çoğu ağ programı, sırasıyla varsayılan ve varsayılan olarak denetlenen ve , tarafından denetlenen varsayılan aralığı kullanır. Bağlı bağlantı noktası aralıkları giden bağlantılar için kullanılır ve belirli koşullar altında sistemi bağlantı noktalarından çalıştırmak mümkündür. Bu genellikle yoğun yüklü bir web proxy'si çalıştırılırken oluşur. Bağlantı noktası aralığı, web sunucusu gibi esas olarak gelen bağlantıları işleyen veya posta geçişi gibi sınırlı sayıda giden bağlantıya sahip bir sunucu çalıştırırken sorun değildir. Bağlantı noktası sıkıntısı olan durumlarda, mütevazı bir şekilde arttırılması önerilir. 'nin bir değeri veya makul olabilir. Bağlantı noktası aralığını değiştirirken güvenlik duvarı efektlerini göz önünde bulundurun. Bazı güvenlik duvarları, genellikle düşük numaralı bağlantı noktaları olmak üzere çok çeşitli bağlantı noktalarını engelleyebilir ve sistemlerin giden bağlantılar için daha yüksek bağlantı noktası aralıkları kullanmasını bekleyebilir. Bu nedenle değerinin düşürülmesi önerilmez.net.inet.ip.portrange.*TCPUDPnet.inet.ip.portrange.firstnet.inet.ip.portrange.last10245000net.inet.ip.portrange.last100002000030000net.inet.ip.portrange.first
13.11.3. Sanal Bellek
13.11.3.1. kern.maxvnodes
vnode, bir dosya veya dizinin dahili temsilidir. İşletim sistemi için kullanılabilir vnode sayısını artırmak, disk G/Ç'sini azaltır. Normalde, bu işletim sistemi tarafından işlenir ve değiştirilmesi gerekmez. Disk G/Ç'nin bir darboğaz olduğu ve sistemde vnode'ların tükendiği bazı durumlarda, bu ayarın artırılması gerekir. Etkin olmayan ve boş RAM miktarının dikkate alınması gerekecektir.
Kullanımdaki vnode'ların geçerli sayısını görmek için:
# sysctl vfs.numvnodes
vfs.numvnodes: 91349Maksimum vnode'ları görmek için:
# sysctl kern.maxvnodes
kern.maxvnodes: 100000Geçerli vnode kullanımı maksimuma yakınsa, . Sayısına dikkat edin. Tekrar maksimuma tırmanırsa, daha da arttırılması gerekecektir. Aksi takdirde, üst(1) tarafından bildirilen bellek kullanımındaki bir kayma görünür olmalı ve daha fazla bellek etkin olmalıdır.kern.maxvnodes1000vfs.numvnodeskern.maxvnodes
13.12. Takas Alanı Ekleme
Bazen bir sistem daha fazla takas alanı gerektirir. Bu bölümde, takas alanını artırmak için iki yöntem açıklanmaktadır: varolan bir bölüme veya yeni bir sabit sürücüye takas ekleme ve varolan bir bölümde takas dosyası oluşturma.
Takas alanının nasıl şifreleneceği, hangi seçeneklerin mevcut olduğu ve neden yapılması gerektiği hakkında bilgi için "Şifreli Takas" konusuna bakın.
13.12.1. Yeni Bir Sabit Sürücüde veya Mevcut Bölümde Takas Edin
Takas için yeni bir sabit sürücü eklemek, mevcut bir sürücüdeki bir bölümü kullanmaktan daha iyi performans sağlar. Bölümleri ve sabit sürücüleri ayarlama, "Disk Ekleme" bölümünde açıklanırken, "Bölüm Düzenini Tasarlama" bölümünde bölüm düzenleri ve bölüm boyutuyla ilgili önemli noktalar hakkında bilgi verilmektedir.
Sisteme bir takas bölümü eklemek için kullanın. Mesela:swapon
# swapon /dev/ada1s1bZaten veri içerse bile, şu anda bağlı olmayan herhangi bir bölümü kullanmak mümkündür. Veri içeren bir bölümde kullanmak, bu verilerin üzerine yazar ve yok eder. Takas olarak eklenecek bölümün çalıştırmadan önce gerçekten amaçlanan bölüm olduğundan emin olun. |
Bu takas bölümünü önyüklemede otomatik olarak eklemek için, /etc/fstab dizinine bir girdi ekleyin:
/dev/ada1s1b none swap sw 0 0
/etc/fstab içindeki girişlerin açıklaması için fstab(5) sayfasına bakın. Hakkında daha fazla bilgiyi swapon(8) bölümünde bulabilirsiniz.swapon
13.12.2. Takas Dosyası Oluşturma
Bu örnekler, bölüm kullanmak yerine /usr/swap512 adlı bir 0M takas dosyası oluşturur.
Takas dosyalarının kullanılması, md(4)'ün ihtiyaç duyduğu modülün çekirdeğe entegre edilmiş olmasını veya takas etkinleştirilmeden önce yüklenmiş olmasını gerektirir. Özel çekirdek oluşturma hakkında bilgi için FreeBSD Çekirdeğini Yapılandırma bölümüne bakın.
Create the swap file:
# dd if=/dev/zero of=/usr/swap0 bs=1m count=512Set the proper permissions on the new file:
# chmod 0600 /usr/swap0Inform the system about the swap file by adding a line to /etc/fstab:
md none swap sw,file=/usr/swap0,late 0 0
Swap space will be added on system startup. To add swap space immediately, use swapon(8):
# swapon -aL
13.13. Güç ve Kaynak Yönetimi
Donanım kaynaklarını verimli bir şekilde kullanmak önemlidir. Güç ve kaynak yönetimi, işletim sisteminin sistem sınırlarını izlemesine ve sistem sıcaklığı beklenmedik şekilde artarsa muhtemelen bir uyarı vermesine olanak tanır. Güç yönetimi sağlamak için erken bir spesifikasyon, Gelişmiş Güç Yönetimi (APM) tesisiydi. APM, bir sistemin güç kullanımını etkinliğine göre kontrol eder. Bununla birlikte, işletim sistemlerinin bir sistemin güç kullanımını ve termal özelliklerini yönetmesi zor ve esnek değildi. Donanım BIOS tarafından yönetiliyordu ve kullanıcının güç yönetimi ayarlarında sınırlı yapılandırılabilirlik ve görünürlüğü vardı. APMBIOS satıcı tarafından sağlanır ve donanım platformuna özgüdür. İşletim sistemindeki bir APM sürücüsü, güç düzeylerinin yönetilmesine olanak tanıyan APM Yazılım Arabirimi'ne erişime aracılık eder.
APM'de dört ana sorun vardır. İlk olarak, güç yönetimi, işletim sisteminden ayrı olarak satıcıya özgü BIOS tarafından yapılır. Örneğin, kullanıcı APMBIOS'taki bir sabit sürücü için boşta kalma süresi değerlerini ayarlayabilir, böylece aşıldığında BIOS, işletim sisteminin izni olmadan sabit sürücüyü aşağı çevirir. İkincisi, APM mantığı BIOS'a gömülüdür ve işletim sisteminin kapsamı dışında çalışır. Bu, kullanıcıların APMBIOS'taki sorunları yalnızca ROM'a yeni bir tane yanıp sönerek çözebilecekleri anlamına gelir; bu, başarısız olursa sistemi kurtarılamaz bir durumda bırakma potansiyeline sahip tehlikeli bir prosedürdür. Üçüncüsü, APM satıcıya özgü bir teknolojidir, yani bir satıcının BIOS'unda bulunan birçok çaba ve hatanın diğerlerinde çözülemeyeceği anlamına gelir. Son olarak, APMBIOS'un sofistike bir güç politikası veya makinenin amacına iyi uyum sağlayabilecek bir güç politikası uygulamak için yeterli alanı yoktu.
Tak ve Çalıştır BIOS (PNPBIOS) birçok durumda güvenilmezdi. PNPBIOS 16 bit teknolojidir, bu nedenle işletim sisteminin PNPBIOS yöntemleriyle arabirim oluşturabilmesi için 16 bit öykünme kullanması gerekir. FreeBSD, APM'nin 2000 yılında veya öncesinde üretilen sistemler için hala kullanılması gerektiği için bir APM sürücüsü sağlar. Sürücü apm(4) ile belgelenmiştir.
APM'nin halefi Gelişmiş Yapılandırma ve Güç Arabirimi'dir (ACPI). ACPI, donanım kaynakları ve güç yönetimi için bir arabirim sağlamak üzere satıcılar birliği tarafından yazılmış bir standarttır. İşletim sistemine daha fazla kontrol ve esneklik sağladığı için İşletim Sistemi tarafından yönlendirilen yapılandırma ve Güç Yönetimi'nde önemli bir unsurdur.
Bu bölümde, ACPI'nin FreeBSD'de nasıl yapılandırılacağı gösterilmektedir. Daha sonra, ACPI'de hata ayıklama ve geliştiricilerin ACPI sorunlarını tanılayabilmesi ve düzeltebilmesi için hata ayıklama bilgilerini içeren bir sorun raporunun nasıl gönderileceği hakkında bazı ipuçları sunar.
13.13.1. ACPI'yi Yapılandırma
FreeBSD'de acpi(4) sürücüsü sistem önyüklemesinde varsayılan olarak yüklenir ve çekirdeğe derlenmemelidir. Sistem veri yolu çeşitli donanım etkileşimleri için kullandığından, bu sürücü önyüklemeden sonra kaldırılamaz. Ancak, sistemde sorun yaşanıyorsa, ACPI, /boot/loader.conf dosyasında ayarlandıktan sonra yeniden başlatılarak veya "Üçüncü Aşama" bölümünde açıklandığı gibi yükleyici isteminde bu değişken ayarlanarak tamamen devre dışı bırakılabilir.hint.acpi.0.disabled="1"
ACPI ve APM bir arada bulunamaz ve ayrı ayrı kullanılmalıdır. Yüklenecek son yük, sürücü diğerinin çalıştığını fark ederse sona erer. |
ACPI, sistemi , bayrak ve . Çoğu kullanıcının yalnızca (RAM'e hızlı askıya alma) veya (RAM'e askıya alma) ihtiyacı vardır. Option, koşmakla aynı olan bir soft-off gerçekleştirir.acpiconf-s15135halt -p
acpi_video(4) sürücüsü, ekran geçişini ve arka ışık parlaklığını denetlemek için ACPI Video Uzantıları'nı kullanır. DRM çekirdek modüllerinden herhangi birinden sonra yüklenmelidir. Sürücüyü yükledikten sonra, parlaklık tuşları ekranın parlaklığını değiştirecektir. ACPI olaylarını /var/run/devd.pipe dosyasını inceleyerek kontrol etmek mümkündür:Fn
...
# cat /var/run/devd.pipe
!system=ACPI subsystem=Video type=brightness notify=62
!system=ACPI subsystem=Video type=brightness notify=63
!system=ACPI subsystem=Video type=brightness notify=64
...Diğer seçenekler . Daha fazla bilgi için acpi(4) ve acpiconf(8) bölümlerine bakın.sysctl
13.13.2. Sık Karşılaşılan Sorunlar
ACPI, ia32 (x86) ve amd64 (AMD) mimarilerine uyan tüm modern bilgisayarlarda bulunur. Tam standart, CPU performans yönetimi, güç düzlemleri kontrolü, termal bölgeler, çeşitli pil sistemleri, gömülü denetleyiciler ve veri yolu numaralandırma gibi birçok özelliğe sahiptir. Çoğu sistem tam standarttan daha azını uygular. Örneğin, bir masaüstü sistemi genellikle yalnızca veri yolu numaralandırmasını uygularken, bir dizüstü bilgisayar soğutma ve pil yönetimi desteğine de sahip olabilir. Dizüstü bilgisayarlar ayrıca kendi ilişkili karmaşıklıklarıyla askıya alma ve devam ettirme özelliğine sahiptir.
ACPI uyumlu bir sistemin çeşitli bileşenleri vardır. BIOS ve yonga kümesi satıcıları, bellekte APIC eşlemesi (SMP için kullanılır), yapılandırma kayıtları ve basit yapılandırma değerleri gibi şeyleri belirten FADT gibi çeşitli sabit tablolar sağlar. Ayrıca, bir bayt kodu tablosu olan Farklılaştırılmış Sistem Açıklaması Tablosu DSDT, aygıtların ve yöntemlerin ağaç benzeri bir ad alanını belirtir.
ACPI sürücüsünün sabit tabloları ayrıştırması, bayt kodu için bir yorumlayıcı uygulaması ve aygıt sürücülerini ve çekirdeği ACPI alt sisteminden bilgi kabul edecek şekilde değiştirmesi gerekir. FreeBSD için Intel®, Linux® ve NetBSD ile paylaşılan bir tercüman (ACPI-CA) sağlamıştır. ACPI-CA kaynak kodunun yolu src/sys/contrib/dev/acpica'dır. ACPI-CA'nın FreeBSD üzerinde çalışmasına izin veren tutkal kodu src/sys/dev/acpica/Osd şeklindedir. Son olarak, çeşitli ACPI aygıtlarını uygulayan sürücüler src/sys/dev/acpica içinde bulunur.
ACPI'nin düzgün çalışması için, tüm parçaların doğru çalışması gerekir. Burada, görünüm sıklığına göre bazı yaygın sorunlar ve bazı olası geçici çözümler veya düzeltmeler bulunmaktadır. Bir düzeltme sorunu çözmezse, hata raporu gönderme talimatları için Hata Ayıklama Bilgilerini Alma ve Gönderme bölümüne bakın.
13.13.2.1. Fare Sorunları
Bazı durumlarda, askıya alma işleminden devam etmek farenin başarısız olmasına neden olur. Geçici çözüm olarak bilinen bir çözüm /boot/loader.conf dosyasına eklemektir.hint.psm.0.flags="0x3000"
13.13.2.2. Askıya Alma/Devam Ettirme
ACPI'nin RAM'e (STR) üç askıya alma durumu vardır - ve bir askıya alma disk durumuna (STD) denir. STD iki ayrı şekilde uygulanabilir. BIOS, diske BIOS destekli bir askıya almadır ve işletim sistemi tamamen işletim sistemi tarafından uygulanır. Prize takılıyken ancak açılmadığında sistemin içinde bulunduğu normal durum "yumuşak kapalı" dır ().S1S3S4S4S4S5
Askıya alma ile ilgili öğeleri denetlemek için kullanın. Bu örnek sonuçlar bir Thinkpad'den alınmıştır:sysctl hw.acpi
hw.acpi.supported_sleep_state: S3 S4 S5
hw.acpi.s4bios: 0Test etmek için kullanın, , ve . Birinin () değeri, işletim sistemi desteği yerine BIOS desteğini gösterir.acpiconf -sS3S4S5s4bios1S4S4
Askıya alma/sürdürmeyi test ederken, destekleniyorsa , ile başlayın. Bu durum, çok fazla sürücü desteği gerektirmediğinden büyük olasılıkla çalışır. Kimse uygulamadı , buna benzer . Ardından, deneyin . Bu en derin STR durumudur ve donanımı düzgün bir şekilde yeniden başlatmak için çok fazla sürücü desteği gerektirir.S1S2S1S3
Askıya alma/sürdürme ile ilgili yaygın bir sorun, birçok aygıt sürücüsünün üretici yazılımlarını, kayıtlarını veya aygıt belleğini düzgün bir şekilde kaydetmemesi, geri yüklememesi veya yeniden başlatmamasıdır. Sorunu ayıklamaya yönelik ilk girişim olarak şunları deneyin:
# sysctl debug.bootverbose=1
# sysctl debug.acpi.suspend_bounce=1
# acpiconf -s 3Bu sınama, tüm aygıt sürücülerinin askıya alma/sürdürme döngüsünü gerçekte duruma geçmeden öykünür. Bazı durumlarda, ürün yazılımı durumunu kaybetme, cihaz bekçisi zaman aşımı ve sonsuza kadar yeniden deneme gibi sorunlar bu yöntemle yakalanabilir. Sistemin gerçekten duruma girmeyeceğini unutmayın, bu da cihazların güç kaybetmeyebileceği anlamına gelir ve gerçek durumdan farklı olarak askıya alma / devam ettirme yöntemleri tamamen eksik olsa bile birçoğu iyi çalışacaktır.S3S3S3
Önceki test işe yaradıysa, bir dizüstü bilgisayarda, sistemi kapak kapağına kapanacak ve tekrar açıldığında devam ettirecek şekilde yapılandırmak mümkündür:S3
# sysctl hw.acpi.lid_switch_state=S3Bu değişiklik, yeniden başlatmalar arasında kalıcı hale getirilebilir:
# echo 'hw.acpi.lid_switch_state=S3' >> /etc/sysctl.confDaha zor durumlar, seri konsol üzerinden hata ayıklamak için seri bağlantı noktası ve kablo, dcons(4) kullanmak için Firewire bağlantı noktası ve kablosu ve çekirdek hata ayıklama becerileri gibi ek donanımlar gerektirir.
Sorunu yalıtmaya yardımcı olmak için, mümkün olduğunca çok sayıda sürücüyü boşaltın. Çalışırsa, tekrar başarısız olana kadar sürücüleri yükleyerek hangi sürücünün sorun olduğunu daraltın. Genellikle, nvidia.ko, ekran sürücüleri ve USB gibi ikili sürücüler en fazla soruna sahipken, Ethernet arayüzleri genellikle iyi çalışır. Sürücüler düzgün bir şekilde yüklenebiliyor ve kaldırılabiliyorsa, /etc/rc.suspend ve /etc/rc.resume dosyalarına uygun komutları koyarak bunu otomatikleştirin. Devam ettikten sonra ekranın bozulup bozulmadığını ayarlamayı deneyin. Bunun yardımcı olup olmadığını görmek için daha uzun veya daha kısa değerler ayarlamayı deneyin.hw.acpi.reset_video1hw.acpi.sleep_delay
Askıya alma/sürdürmenin aynı donanımda çalışıp çalışmadığını görmek için yeni bir Linux® dağıtımı yüklemeyi deneyin. Linux'ta® çalışıyorsa, muhtemelen bir FreeBSD sürücü sorunudur. Hangi sürücünün soruna neden olduğunu daraltmak, geliştiricilerin sorunu çözmesine yardımcı olacaktır. ACPI bakımcıları ses veya ATA gibi diğer sürücüleri nadiren koruduğundan, herhangi bir sürücü sorunu da FreeBSD-CURRENT posta listesine gönderilmeli ve sürücü sorumlusuna postalanmalıdır. İleri düzey kullanıcılar, özgeçmiş işlevinin neresinde asılı kaldığını izlemek için sorunlu bir sürücüde printf(3)s hata ayıklamasını içerebilir.
Son olarak, ACPI'yi devre dışı bırakmayı ve bunun yerine APM'yi etkinleştirmeyi deneyin. Askıya alma/sürdürme APM ile çalışıyorsa, özellikle eski donanımlarda (2000 öncesi) APM'ye bağlı kalın. Satıcıların ACPI desteğini doğru bir şekilde almaları biraz zaman aldı ve eski donanımların ACPI ile ilgili BIOS sorunları yaşama olasılığı daha yüksektir.
13.13.2.3. Sistem Askıda Kalıyor
Çoğu sistem askıda kalma, kayıp kesintilerin veya bir kesme fırtınasının bir sonucudur. Yonga kümelerinde önyüklemeye, BIOS'un APIC (MADT) tablosunun doğruluğundan önce kesmeleri nasıl yapılandırdığına ve Sistem Denetimi Kesmesi'nin (SCI) yönlendirilmesine bağlı olarak sorunlar olabilir.
Kesme fırtınaları, çıkış kontrol edilerek ve sahip olunan çizgiye bakarak kayıp kesmelerden ayırt edilebilir. Sayaç saniyede birkaç kişiden fazla artıyorsa, bir kesme fırtınası vardır. Sistem askıda görünüyorsa, DDB'ye (vmstat -iacpi0CTRL+ALT+ESC konsolda) ve yazın.show interrupts
Kesme sorunlarıyla uğraşırken, APIC desteğini /boot/loader.conf içinde devre dışı bırakmayı deneyin.hint.apic.0.disabled="1"
13.13.2.4. Panikler
Panikler ACPI için nispeten nadirdir ve düzeltilmesi gereken en önemli önceliktir. İlk adım, mümkünse paniği yeniden üretmek için adımları izole etmek ve bir geri izleme elde etmektir. "DDB Hata Ayıklayıcısını Seri Satırdan Girme" bölümündeki seri konsolu etkinleştirme ve ayarlama veya döküm bölümü ayarlama konusundaki önerileri izleyin. DDB'de bir geri izleme almak için . Geri izlemeyi el yazısıyla yazarken, izdeki en az son beş ve ilk beş satırı alın.options DDBtr
Ardından, ACPI devre dışı bırakılmış olarak önyükleme yaparak sorunu yalıtmaya çalışın. Bu işe yararsa, ACPI alt sistemini çeşitli değerler kullanarak izole edin. Bazı örnekler için acpi(4) bölümüne bakın.debug.acpi.disable
13.13.2.5. Askıya Alma veya Kapatma Sonrasında Sistem Güçleniyor
İlk olarak, /boot/loader.conf dosyasında ayarlamayı deneyin. Bu, ACPI'nin kapatma işlemi sırasında çeşitli olayları devre dışı bırakmasını engeller. Bazı sistemler aynı nedenle bu değerin (varsayılan) olarak ayarlanmasını gerektirir. Bu genellikle bir sistemin askıya alınmasından veya kapatılmasından sonra kendiliğinden açılması sorununu giderir.hw.acpi.disable_on_poweroff="0"1
13.13.2.6. BIOS Buggy bayt kodu içerir
Bazı BIOS satıcıları yanlış veya buggy bayt kodu sağlar. Bu genellikle aşağıdaki gibi çekirdek konsolu iletileriyle kendini gösterir:
ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
(Node 0xc3f6d160), AE_NOT_FOUNDGenellikle, bu sorunlar BIOS'u en son revizyona güncelleyerek çözülebilir. Çoğu konsol mesajı zararsızdır, ancak pil durumunun çalışmaması gibi başka sorunlar varsa, bu mesajlar sorun aramaya başlamak için iyi bir yerdir.
13.13.3. Varsayılan AML'yi Geçersiz Kılma
ACPI Makine Dili (AML) olarak bilinen BIOS bayt kodu, ACPI Kaynak Dili (ASL) adı verilen bir kaynak dilden derlenir. AML, Farklılaştırılmış Sistem Açıklama Tablosu (DSDT) olarak bilinen tabloda bulunur.
FreeBSD'nin amacı, herkesin herhangi bir kullanıcı müdahalesi olmadan çalışan ACPI'ye sahip olmasıdır. BIOS satıcıları tarafından yapılan yaygın hatalar için geçici çözümler hala geliştirilmektedir. Microsoft® yorumlayıcısı (acpi.sys ve acpiec.sys) standarda uygunluğu kesinlikle kontrol etmez ve bu nedenle ACPI'yi yalnızca Windows® altında test eden birçok BIOS satıcısı ASL'lerini asla düzeltmez. FreeBSD geliştiricileri, Microsoft'un® tercümanı tarafından hangi standart dışı davranışa izin verildiğini belirlemeye ve belgelemeye devam eder ve FreeBSD'nin kullanıcıları ASL'yi düzeltmeye zorlamadan çalışabilmesi için bunu çoğaltır.
Hata davranışını tanımlamaya yardımcı olmak ve muhtemelen manuel olarak düzeltmek için, sistemin ASL'sinden bir kopya oluşturulabilir. Sistemin ASL'sini belirtilen bir dosya adına kopyalamak için, sabit tabloların içeriğini göstermek için , ile kullanın ve AML'yi sökmek için:acpidump-t-d
# acpidump -td > my.aslBazı AML sürümleri, kullanıcının Windows çalıştırdığını varsayar®. Bunu geçersiz kılmak için, /boot/loader.conf dosyasında, ASL'de listelenen en son Windows® sürümünü kullanarak ayarlayın.hw.acpi.osname="Windows 2009"
Diğer geçici çözümler my.asl'nin özelleştirilmesini gerektirebilir. Bu dosya düzenlenirse, aşağıdaki komutu kullanarak yeni ASL'yi derleyin. Uyarılar genellikle göz ardı edilebilir, ancak hatalar genellikle ACPI'nin düzgün çalışmasını engelleyen hatalardır.
# iasl -f my.aslDerleme sırasında hatalar olsa bile, AML'nin oluşturulmasını zorlar. Eksik dönüş ifadeleri gibi bazı hatalar, FreeBSD tercümanı tarafından otomatik olarak giderilir.-f
Varsayılan çıktı dosyası adı DSDT.aml dosyasıdır. Flash bellekte hala bulunan BIOS'un buggy kopyası yerine /boot/loader.conf dosyasını aşağıdaki gibi düzenleyerek bu dosyayı yükleyin:iasl
acpi_dsdt_load="YES" acpi_dsdt_name="/boot/DSDT.aml"
DSDT.aml dosyasını /boot dizinine kopyaladığınızdan emin olun, ardından sistemi yeniden başlatın. Bu işlem sorunu çözerse, geliştiricilerin acpica'daki buggy davranışına geçici bir çözüm bulabilmeleri için eski ve yeni ASL'nin farkını(1) FreeBSD ACPI posta listesine gönderin.
13.13.4. Hata Ayıklama Bilgilerini Alma ve Gönderme
ACPI sürücüsünün esnek bir hata ayıklama olanağı vardır. Bir dizi alt sistem ve ayrıntı düzeyi belirtilebilir. Hata ayıklamak için alt sistemler katmanlar halinde belirtilir ve bileşenlere () ve ACPI donanım desteğine () ayrılır. Hata ayıklama çıktısının ayrıntı düzeyi düzey olarak belirtilir ve yalnızca rapor hatalarından () her şeye () kadar değişir. Seviye bir bit maskesidir, böylece boşluklarla ayrılmış olarak aynı anda birden fazla seçenek ayarlanabilir. Uygulamada, çıkışı günlüğe kaydetmek için seri bir konsol kullanılmalıdır, böylece konsol mesaj arabelleği kızarırken kaybolmaz. Tek tek katmanların ve düzeylerin tam listesi acpi(4) içinde bulunur.ACPI_ALL_COMPONENTSACPI_ALL_DRIVERSACPI_LV_ERRORACPI_LV_VERBOSE
Hata ayıklama çıktısı varsayılan olarak etkin değildir. Etkinleştirmek için, ACPI çekirdeğe derlenmişse özel çekirdek yapılandırma dosyasına ekleyin. Genel olarak etkinleştirmek için /etc/make.conf dosyasına ekleyin. Özel çekirdek yerine bir modül kullanılıyorsa, yalnızca acpi.ko modülünü aşağıdaki gibi yeniden derleyin:options ACPI_DEBUGACPI_DEBUG=1
# cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1Derlenmiş acpi.ko'yu /boot/kernel dizinine kopyalayın ve istediğiniz düzeyi ve katmanı /boot/loader.conf dosyasına ekleyin. Bu örnekteki girdiler, tüm ACPI bileşenleri ve donanım sürücüleri için hata ayıklama iletilerini ve çıktı hata iletilerini en az ayrıntılı düzeyde etkinleştirir:
debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS" debug.acpi.level="ACPI_LV_ERROR"
Gerekli bilgiler askıya alma ve ardından devam ettirme gibi belirli bir olay tarafından tetiklenirse, /boot/loader.conf dosyasını değiştirmeyin. Bunun yerine, sistemi belirli bir olay için önyükledikten ve hazırladıktan sonra katmanı ve düzeyi belirtmek için kullanın. Kullanılarak ayarlanabilen değişkenler, /boot/loader.conf dosyasındaki ayarlanabilirlerle aynı şekilde adlandırılır.sysctlsysctl
Hata ayıklama bilgileri toplandıktan sonra, FreeBSD ACPI posta listesine gönderilebilir, böylece FreeBSD ACPI geliştiricileri tarafından sorunun temel nedenini tanımlamak ve bir çözüm geliştirmek için kullanılabilir.
Hata ayıklama bilgilerini bu posta listesine göndermeden önce, en son BIOS sürümünün ve varsa katıştırılmış denetleyici üretici yazılımı sürümünün yüklü olduğundan emin olun. |
Bir sorun raporu gönderirken, aşağıdaki bilgileri ekleyin:
Sistem türü, modeli ve hatanın görünmesine neden olan her şey dahil olmak üzere buggy davranışının açıklaması. Yeniyse, hatanın ne zaman oluşmaya başladığını mümkün olduğunca doğru bir şekilde not edin.
Çalıştırdıktan sonra çıktısı , hata tarafından oluşturulan hata mesajları dahil.
dmesgboot -vACPI'yi devre dışı bırakmak sorunu çözmeye yardımcı oluyorsa, ACPI devre dışı bırakılmış olarak alınan çıktı.
dmesgboot -vÇıkış . Bu, sistemin sunduğu özellikleri listeler.
sysctl hw.acpiSistemin ASL'sinin yapıştırılmış bir sürümünün URL'si. ASL'yi doğrudan listeye göndermeyin, çünkü çok büyük olabilir. Bu komutu çalıştırarak ASL'nin bir kopyasını oluşturun:
# acpidump -dt > name-system.aslOturum açma adını ad ve üretici/model yerine sistem kullanın. Örneğin, njl-FooCo6000.asl kullanın.
Çoğu FreeBSD geliştiricisi FreeBSD-CURRENT posta listesini izler, ancak görüldüğünden emin olmak için FreeBSD ACPI posta listesine sorun gönderilmelidir. Bir yanıt beklerken sabırlı olun. Hata hemen belli değilse, bir hata raporu gönderin. Bir PR girerken, yukarıda istenenle aynı bilgileri ekleyin. Bu, geliştiricilerin sorunu izlemesine ve çözmesine yardımcı olur. Önce FreeBSD ACPI posta listesini e-postayla göndermeden bir PR göndermeyin, çünkü sorunun daha önce bildirilmiş olması muhtemeldir.
13.13.5. Referanslar
ACPI hakkında daha fazla bilgi aşağıdaki konumlarda bulunabilir:
FreeBSD ACPI Posta Listesi Arşivleri (https://lists.freebsd.org/pipermail/freebsd-acpi/)
ACPI 2.0 Teknik Özellikleri (http://acpi.info/spec.htm)
acpi(4), acpi_thermal(4), acpidump(8), iasl(8) ve acpidb(8)
Son değiştirilme tarihi: Mart 4, 2023 tarafından Sergio Carlavilla Delgado
Popular Posts
-
Bölüm 13. Yapılandırma ve Ayarlama 13.1. Özet FreeBSD'nin önemli yönlerinden biri uygun sistem yapılandırmasıdır. Bu bölümde, bir Free...
-
Modern Intel CPU'lar, termal ve güç sınırları izin verdiğinde belirli çekirdekleri (bazen reklamı yapılan hızın 2 katından fazla) geçi...
-
Dosya ve Dizinlerin Erişim Yetkileri Düzenleme Posted on 16 June 2015 by ibrahimucar — 3 Comments ↓ Merhabalar Bu yazıda Linux türev...
ADs
Labels Cloud
Labels List Numbered
Video of the day
Satranç Chees
Bu Blogda Ara
- Mart 2023 (4)
- Şubat 2023 (17)
