FreeBSD & ZFS Haziran 9, 2008
Alchemist | Teknoloji, Unix | trackback |
Yazıcı Uyumlu Sayfa
BSD ve linux camiasinda FreeBSD ZFS dosya sistemini ilk port eden işletim sistemi oldu. ZFS'i i ilk duydugumda emektar Sun (sparc) sunucularımızdan birini üzerinine sırf denemek için solaris 10 kurmuştum. Kurcalamak fırsat olmadı.Kısmet FreeBSD'ninmiş.
ZFS'in tüm özelliklerini anlatmak çok zor. ZFS yönetimi ile ilgili Sun tarafından yazılan belge 190 sayfa ![]()
Dolayısı ile benim burda yazdıklarım ZFS'in sadece benim tarafından kullanılan özellikleri.
ZFS kullanmanız için en azından 1Gbyte belleğinizin olması öneriliyor.ZFS klasik dosya sistemlerinin
birçok limit ve zorluklarını ortadan kaldırıyor. Merak edenler ayrıntılarını google'dan aratıp öğrenebilir ama pratikte benim hoşuma gidenler.
Max dosya büyüklüğü limitiniz yok.
Dosya sisteminizin büyüklüğünü ihtiyacınıza göre küçültüp büyütebiliyorsunuz.
İsterseniz verileriniz dosya sistemine sıkıştırılarak aktarılabiliyor.
Yazma işlemleri copy on write olduğu için fsck'ya son
Kolayca RAID1,0, 5,6,10, 50 yapma olanağı
Block size'ı sonradan değiştirme olanağı
Disk snapshot alma yeteneği.
Kullanım kolaylığı.
ve burda yazmadığımız birçok güzel özellik. ZFS için kullandığım sunucu 2 adet AMD Opteron 252 işlemcisine sahip üzerinde 4 adet sata disk var. ad6,ad8 ve ad10 disklerini zfs üzerinde raidz2 yapmak için kullanacağız.FreeBSD kurulumu AMD64 dağıtımı üzerinden yapıldı.
ad6: 238475MB
ad8: 238475MB
ad10: 238475MB
FreeBSD'de ZFS in açılışta aktif olması için ilk olarak /etc/rc.conf dosyasına aşağıdaki satırları ekiyoruz.
zfs_enable="YES"
Bundan sonra yapmanız gereken FreeBSD wiki'de açıklandığı üzere /boot/loader.conf dosyasının içine aşağıdaki satırları ekleyerek:
vm.kmem_size="512M"
çekirdeğinizde kmem adres alanını ZFS için biraz daha artırmak . Aksi taktirde söyle bir hata ile karşılaşabiliyorsunuz:
Apr 8 06:46:08 nas savecore: reboot after panic: kmem_malloc(131072): kmem_map too small: 528273408 total allocated
Bu durumda 512M değerini daha yükseğe çekmek gerekiyor (1024M).Sunucuda kullandığım diskleri başka sunuculardan söktüğüm için üzerlerinde bad sector bulunmadığından emin olmam gerekiyordu. FreeBSD port kolleksiyonunda bulunan badblocks programı ile tarama yaptım.
[root@alchemist ~]# cd /usr/ports/sysutils/e2fsprogs
[root@alchemist ~]# make install
[root@alchemist ~]# badblocks -o /root/ad10.txt -w -b 4096 -c 512 -s /dev/ad10
Yukarıdaki komut /dev/ad10 'da bad sector varsa numaralarını /root/ad10.txt dosyasının altında yazmasını söylüyor.Şansıma 3 diskte temiz çıktı. Artık ZFS ile oynamaya başlayabiliriz. 3 adet diskimiz vardı. Birine zfs pool'u oluşturalım.
[root@alchemist ~]# zpool create log /dev/ad10
Komut tam olarak bu kadar. ZFS sizin için yarattığınız pool'u /log altına otomatik olarak mount editor.
Bunu ext3, ufs te yapar diyebilirsizi o zaman birde şuna bakalım. 3 diskle RAID 6 (ZFS'te RAIDZ2 olarak geçiyor)
yapalım.
[root@alchemist ~]# zpool create log raidz2 /dev/ad6 /dev/ad8 /dev/ad10
[root@alchemist ~]# df -m Filesystem 1M-blocks Used Avail Capacity Mounted on /dev/ad4s1a 26389 2306 21971 10% / devfs 0 0 0 100% /dev log 232942 0 232942 0% /log
işte bu kadar. RAID5 yapmak için raidz2 yerine raidz yazmanız yeterli. RAID1 yapmak içinse mirror yazıyoruz.
[root@alchemist ~]# zpool create log mirror /dev/ad8 /dev/ad10
Bu kadar kolay olacağını tahmin etmemiştim açıkcası. Pool yaratılması için 1-2 sn beklemeniz yeterli oluyor.Sonra yaratığınız pool'u direkt olarak kullanabiliyorsunuz. FreeBSD üzerinde gmirror ile RAID-1 yazıma bakarsanız RAID olayın ne kadar kolaylaştığını görebilirsiniz. Ben diskleri RAID6 kullanacağım için bundan sonraki kısmı RAID6 yapılandırmasında gösterdim. Yarattığımız pool'un durumuna bir bakalım.
[root@alchemist ~]# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
log 696G 338K 696G 0% ONLINE -
[root@alchemist ~]# zpool status
pool: log
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
log ONLINE 0 0 0
raidz2 ONLINE 0 0 0
ad6 ONLINE 0 0 0
ad8 ONLINE 0 0 0
ad10 ONLINE 0 0 0
errors: No known data errors
Bu kısıma kadar olanlar örnekti. Bu örneklerden sonra benim ne yaptığım ve açıklamalarına gelirsek:
#logman adında RAID6 yapılandırmasında bir pool oluşturup içinde logs adı altında bir dosya sistemi yaratalım.
[root@alchemist ~]#zpool create logman raidz2 /dev/ad6 /dev/ad8 /dev/ad10
[root@alchemist ~]#zfs create logman/logs [root@alchemist ~]# df -m Filesystem 1M-blocks Used Avail Capacity Mounted on /dev/ad4s1a 26389 2306 21972 9% / devfs 0 0 0 100% /dev logman 232942 0 232942 0% /logman logman/logs 232942 0 232942 0% /logman/logs
#/logman/logs'un büyüklüğü gördüğünüz üzere /logman ile aynı,dosya sistemin büyüklüğünü 10 Gbyte olarak ayarlayalım:
[root@alchemist ~]# zfs set quota=10g logman/logs
[root@alchemist ~]# df -m Filesystem 1M-blocks Used Avail Capacity Mounted on /dev/ad4s1a 26389 2306 21972 9% / devfs 0 0 0 100% /dev logman 232942 0 232942 0% /logman logman/logs 10240 0 10239 0% /logman/logs
#/logman/logs altına sistem log dosyalarını atacağımdan dolayı bu kısmı sıkıştırılmış şekilde kullanmak istiyorum.ZFS sıkıştırma özelliğini açıp en üst seviye olan 9 'a ayarlayalım:
[root@alchemist ~]#zfs set compression=on logman/logs
[root@alchemist ~]#zfs set compression=gzip-9 logman/logs
#Dosya sisteminin değiştirebileceğimiz diğer özelliklerin görmek için:
[root@alchemist ~]# zfs get all logman/logs
NAME PROPERTY VALUE SOURCE logman/logs type filesystem - logman/logs creation Tue May 27 13:52 2008 - logman/logs used 22.9K - logman/logs available 10.0G - logman/logs referenced 22.9K - logman/logs compressratio 1.04x - logman/logs mounted yes - logman/logs quota 10G local logman/logs reservation none default logman/logs recordsize 128K default logman/logs mountpoint /logman/logs default logman/logs sharenfs off default logman/logs checksum on default logman/logs compression gzip-9 local logman/logs atime on default logman/logs devices on default logman/logs exec on default logman/logs setuid on default logman/logs readonly off default logman/logs jailed off default logman/logs snapdir hidden default logman/logs aclmode groupmask default logman/logs aclinherit secure default logman/logs canmount on default logman/logs shareiscsi off default logman/logs xattr off temporary logman/logs copies 1 default
#Şu ana kadar hangi komutları kullanmışız:
[root@alchemist ~]# zpool history
History for 'logman':
2008-05-27.13:52:03 zpool create logman raidz2 /dev/ad6 /dev/ad8 /dev/ad10
2008-05-27.13:52:53 zfs create logman/logs
2008-05-27.13:58:39 zfs set quota=10g logman/logs
2008-05-27.13:59:09 zfs set compression=on logman/logs
2008-05-27.14:00:39 zfs set compression=gzip-9 logman/logs
#Disklerin okuma/yazma istatistiklerine 10 sn ortalamalı olarak bir bakalım:
[root@alchemist ~]# zpool iostat 10
capacity operations bandwidth
pool used avail read write read write
———- —– —– —– —– —– —–
logman 526K 696G 0 1 33 3.34K
logman 526K 696G 0 0 0 0
#Logman altinda yarattiliginiz temp dizinini /usr/tmp altına mount edelim ama büyüklüğü 2 Gbyte olsun:
[root@alchemist ~]# mkdir /usr/tmp
[root@alchemist ~]# zfs create logman/temp
[root@alchemist ~]# zfs set quota=2g logman/temp
[root@alchemist ~]# zfs set mountpoint=/usr/tmp logman/temp
[root@alchemist ~]# df -m Filesystem 1M-blocks Used Avail Capacity Mounted on /dev/ad4s1a 26389 2306 21972 9% / devfs 0 0 0 100% /dev logman 232942 0 232942 0% /logman logman/logs 10240 0 10239 0% /logman/logs logman/temp 2048 0 2047 0% /usr/tmp
#Beğenmedik diyelim
Yarattığmız kısmı umout edip yok edelim:
[root@alchemist ~]#zfs umount /usr/tmp/
[root@alchemist ~]# zfs destroy logman/temp
#Son olarak normalde yaratığımız dosya sistemlerini /etc/fstab altına yazmamız lazım değil mi ? Ona da gerek yok:
[root@alchemist ~]# zfs mount -a
yeterli.
+
Saygılar.
Yorumlar »
Çok teknik bir döküman. Hali hazırda FreeBSD kullananlar için ideal. Ama diğer büyük çoğunluğu temsil eden bizler için çok teknik.
Hep bu şekilde detaylı olarak FreeBAS veya Linux kullanmak istemişimdir. Ancak tüm işiniz bu olmayınca sadece evde çalışmayla olacak iş değil.
ZFS'nin Mac OS X Leopard'la geleceğine dair dedikodular vardı fakat son sistemde ne yazık ki bunu göremedik.
Hatta bazıları HSF+'nın bırakılıp ZFS'nin varsayılan dosyalama sistemi olarak geleceğinden emindi.
Şimdi ise Disk Utility'de ZFS'nin adı bile geçmiyor, fakat birkaç satır kodla ZFS'ye okuma/yazma desteğinin açılabildiği söyleniyor.
Belki de birkaç saat içinde duyuralacağı söylenen Snow Leopard'la gelir.
@iyiinsan
Belki bir sonraki Macox sürümünde gelir. Çünkü freebsd için de şu anda tam destek söz konusu değil. freebsd 7.1 ile gelecek.
Öncelikle eliniza sağlık.
Merak ettiğim bir konu var 2TB sınırı işlemci ile alakalı değil mi? Yabancı bir forumda 32Bit işlemci kullanan bilgisayar üzerinde max. 2TB'lık bölüm oluşturulabileceğini/kullanılabileceğini okumuştum?
Acaba bu limit tam olarak ne ile alakalı?
@Dr Çakır
Evet biraz fazla teknik oldu gibi
@S..
FreeBSD 7.0 da yazdığın gibi destek deneysel (experimental) ama şu ana kadar bir sorun yaşamadık. FreeBSD wiki ve forumlarından okuduğum kadarı ile gayet kararlı olarak çalışıyor.
@munirekinci
Kullanıcağınız dosya sistemini limitleri üç etken tarafından belirleniyor
1)İşlemcinizin kaç bit olduğu
2)Dosya sisteminin adreslemesin kaç bit olduğu
3)Kullandığınız blok büyüklüğü.
az bit adresine sahip olan dosya sistemlerinde 2Tbyte limiti aşmanız için yapmanız gereken kullandığınız blok büyüklüğünü arttırmak.Örneğin 32 bit
dosya sisteminiz varsa normalde 4Kbyte olan blok büyüklüğünü linux çekirdeğini derlerken seçeceğiniz Large Block Size opsiyonunu aktive ederek 8Kbyte a çıkarabilir ve adres sayısı aynı olmasına karşın blok büyüklüğünü arttırarak toplamda adreslenen veri büyüklüğünü yükseltebilirsiniz.Diğer bir yöntemde 32 bit olan dosya sitemini adreslemesini arttırmak. ZFS te 128 adresleme kullanıyor örneğin.Dosya sisteminde 32 bitten üzeri çıktığınızda işlemcinizinde bu bit sayısını destekler bir durumda olmasında fayda var yoksa 32 bit işlemcilerde 4Gbyte üzeri belleğin desteklemesi için geliştirilen PAE (Physical Address Extension) tarzı taklar atmanız gerekebiliyor.Ext3 adreslemesini 48 ve 64 bite çıkaran yamalar mevcut (belkide artık kararlı olmuşlardır)
Kısaca 32 bit işlemcilerlede 2 Tbyte limiti aşmak mümkün
Hangi dosya sistemini seçtiğinize göre limitler değişebilir.Dosya sistemlerinin karşılaştırılması için Şu linke bir bak istersen
http://en.wikipedia.org/wiki/Comparison_of_file_systems
+
Saygılar.
Hm evet öyleymiş, http://www.apple.com/server/macosx/snowleopard/
Teşekkürler Alchemist.
Ayrıntılı bilgi ve güzel konu için teşekkürler!