solaris11 zfs notları
ZFS’i temel anlamda kurcamak için solaris 11 t4 sparc bir sunucu üzerinde bazı denemeler/çalışmalar yaptım.
root@T4:~# uname -a SunOS T4 5.11 11.0 sun4v sparc sun4v |
Fiziksel Diskler:
format
komutunun çıktısından mevcut fiziksel diskler ve boyutları öğrenilebilir. Test ettiğim sistemde format
komutunun çıktısı aşağıdaki gibi.
root@T4:/# format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c0t5000CCA0253CB86Cd0 solaris /scsi_vhci/disk@g5000cca0253cb86c /dev/chassis//SYS/MB/HDD0/disk 1. c0t5000CCA0253C33D0d0 /scsi_vhci/disk@g5000cca0253c33d0 /dev/chassis//SYS/MB/HDD1/disk 2. c0t5000CCA02537F538d0 /scsi_vhci/disk@g5000cca02537f538 /dev/chassis//SYS/MB/HDD2/disk 3. c0t50015179596F4C9Dd0 /scsi_vhci/disk@g50015179596f4c9d /dev/chassis//SYS/MB/HDD3/disk 4. c0t5000CCA025393F44d0 /scsi_vhci/disk@g5000cca025393f44 /dev/chassis//SYS/MB/HDD4/disk 5. c0t5000CCA02538FD50d0 /scsi_vhci/disk@g5000cca02538fd50 /dev/chassis//SYS/MB/HDD5/disk 6. c0t5000CCA02505249Cd0 /scsi_vhci/disk@g5000cca02505249c /dev/chassis//SYS/MB/HDD6/disk 7. c0t50015179596F4D07d0 /scsi_vhci/disk@g50015179596f4d07 /dev/chassis//SYS/MB/HDD7/disk Specify disk (enter its number): |
Ctrl + C ‘ye basarak format komutundan çıkın.
Yukarda görüldüğü gibi toplam 8 Tane fiziksel disk mevcut. 5 adet 558g, 2 adet279g, sistemin kurulu olduğu bir tane 1x558g disk var.
Not: format komutuyla disklerinizi göremiyorsanız önce devfsadm
komutunu çalıştırmayı deneyebilirsiniz.
root@T4:~# devfsadm root@T4:~# format |
zfs Temel komutlar:
Zfs pool(havuz) ları hakkında şu komutlar ile bilgi edinilebilir.
- zpool list [pool adi]
- zpool status [pool adi]
- zfs list [pool adi]
- zfs get all [filesystem adi]
- zpool iostat -v
- zpool list komutuyla mevcut pool lar listelenir.
root@T4:~# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 556G 69.6G 486G 12% 1.00x ONLINE - |
Sistemde sadece solaris 11’in kurulu olduğu rpool isimli pool mevcut. Yukarda rpool isimli pool’un toplam kapasitesi, kullanılan ve boş alanlar görülebiliyor.
- zpool status komutuyla pool’a dahil olan device ismi, raid bilgisi ve varsa hatalar görülebilir.
root@T4:~# zpool status data1 pool: data1 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM data1 ONLINE 0 0 0 c0t50015179596F4C9Dd0 ONLINE 0 0 0 errors: No known data errors |
- 279GB’lık disklerden birini kullanarak data1 isimli pool oluşturmak için.
root@T4:~# zpool create data1 c0t50015179596F4C9Dd0 |
data1 isimli bir pool oluşturduk. zpool list
ve zpool status
çıktıları şöyle olacaktır.
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT data1 278G 85K 278G 0% 1.00x ONLINE - rpool 556G 69.6G 486G 12% 1.00x ONLINE - |
root@T4:~# zpool status data1 pool: data1 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM data1 ONLINE 0 0 0 c0t50015179596F4C9Dd0 ONLINE 0 0 0 errors: No known data errors |
- data1 pool’una attach parametresiyle yeni bir disk eklersek sistem bu iki diski mirror olarak kullanır.
zpool attach data1 c0t50015179596F4C9Dd0 c0t50015179596F4D07d0 |
root@T4:~# zpool status data1 pool: data1 state: ONLINE scan: resilvered 86.5K in 0h0m with 0 errors on Mon Mar 25 19:15:42 2013 config: NAME STATE READ WRITE CKSUM data1 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t50015179596F4C9Dd0 ONLINE 0 0 0 c0t50015179596F4D07d0 ONLINE 0 0 0 errors: No known data errors |
Yukardaki mirror-0 yazısından bu iki diskin mirror çalıştığını anlıyoruz. data1 pool’una iki tane diskten daha mirror oluştursaydık onları da mirror-1 olarak görecektik.
- Tanımlanmış bir pool’u kaldırmak
Mevcut bir pool’u kaldırmak için zpool destroy
kullanılır. data1 isimli pool’u kaldıralım.
zpool destroy data1 |
- Mirror
Yukarda 1 disk ile data1 isimli pool oluşturup, bu pool’a yeni bir disk attach ederek dolaylı yoldan mirror oluşturduk. Esasında iki (veya daha fazla) diskten zfs mirror oluşturmak için zpool create mirror
kullanılır.
- data1 isimli pool’u mirror olacak şekilde yeniden oluşturmak için;
zpool create data1 mirror c0t50015179596F4C9Dd0 c0t50015179596F4D07d0 |
zpool status data1
yazarak duruma tekrar bakalım.
root@T4:~# zpool status data1 pool: data1 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM data1 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t50015179596F4C9Dd0 ONLINE 0 0 0 c0t50015179596F4D07d0 ONLINE 0 0 0 errors: No known data errors |
zfs list
komutuyla pool’un kapasitesine bakarsak, diskleri mirror’ladığımız için kapasitenin tek bir diskin kapasitene eşit olduğunu görülebilir.
root@T4:~# zfs list data1 NAME USED AVAIL REFER MOUNTPOINT data1 85K 274G 31K /data1 |
- concatenated/striped depolama
data1’i create ederken mirror kullanmasaydık, diskleri stripe edecekti. yani pool’un toplam kapasitesi disklerin toplam kapasitesi olacaktı.
root@T4:~# zpool create data2 c0t5000CCA0253C33D0d0 c0t5000CCA02537F538d0 c0t5000CCA025393F44d0 'data2' successfully created, but with no redundancy; failure of one device will cause loss of the pool |
Yukarda 3 tane 558GB’lık diskten toplam kapasitesi 1.60T olan data2 isimli pool oluştu. zfs bize olası bir disk arızasında veri kaybı olacağını hatırlattıyor.
- raidZ
raidz, raid5 benzeri bir disk arrayidir. raidz1’de 1 tane parity diski bulunur. Yani disklerden birinde olabilecek veri kaybı tolere edilebilir. raidz2’de iki parity diski raidz3’de 3 parity diski bulunur.
3 tane 558GB kapasiteli disk ile data2 isimli raidz1 pool’u oluştururmak istiyorum ama öncesinde data2 isimli pool’u kaldıralım
root@T4:~# zpool destroy data2 |
aşağıdaki komut dizisiyle raidz pool oluşturalım;
root@T4:~# zpool create data2 raidz1 c0t5000CCA0253C33D0d0 c0t5000CCA02537F538d0 c0t5000CCA025393F44d0 |
zfs list
ve zpool status
komutları ile duruma bakacak olursak;
root@T4:~# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT data1 278G 85K 278G 0% 1.00x ONLINE - data2 1.62T 239K 1.62T 0% 1.00x ONLINE - rpool 556G 70.1G 486G 12% 1.00x ONLINE - |
Yukarda görüldüğü gibi data2 pool’unun kapasitesi 1.62T. data2 pool’u 3 tane 558GB kapasiteli diskten oluşuyor ve zpool list
komutu toplam disk boyutunu gösteriyor. Ama disklerden birisi parity için kullanıldığından kullanılabilir alan 2 diskin toplam kapasitesine eşit olmalı. zfs list
komutu bunu bize gösteriyor.
root@T4:~# zfs list data2 NAME USED AVAIL REFER MOUNTPOINT data2 117K 1.07T 34.6K /data2 |
Yukardaki çıktıya göre data2 isimli pool’da kullanılabilir alan 1.07T belirtilmiş.
zpool status komutuyla mevcut tüm pool’lara bakacak olursak;
root@T4:~# zpool status pool: data1 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM data1 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t50015179596F4C9Dd0 ONLINE 0 0 0 c0t50015179596F4D07d0 ONLINE 0 0 0 errors: No known data errors pool: data2 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM data2 ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 c0t5000CCA0253C33D0d0 ONLINE 0 0 0 c0t5000CCA02537F538d0 ONLINE 0 0 0 c0t5000CCA025393F44d0 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 c0t5000CCA0253CB86Cd0s0 ONLINE 0 0 0 errors: No known data errors |
Görüldüğü gibi 3 tane pool var. Sistemin kurulu olduğu rpool, 2 tane diskten oluşturduğumuz ve mirror olan data1, 3 tane diskten oluşturduğumuz data2 isimli ve raidz1 olan pool’ları mevcut.
Not: zfs üzerinde df -k
yeride daha doğru sonuç almak için zfs list
kullanılması öneriliyor.
- zfs parametreleri
zfs get all
veya zfs get all [dataset ismi] ile zfs değişkenleri görülebilir ve zfs set
ile değiştirilebilir.
root@T4:~# zfs get all data1 NAME PROPERTY VALUE SOURCE data1 type filesystem - data1 creation Mon Mar 25 23:45 2013 - data1 used 85K - data1 available 274G - data1 referenced 31K - data1 compressratio 1.00x - data1 mounted yes - data1 quota none default data1 reservation none default data1 recordsize 128K default data1 mountpoint /data1 default data1 sharenfs off default data1 checksum on default data1 compression off default data1 atime on default data1 devices on default data1 exec on default data1 setuid on default data1 readonly off default data1 zoned off default data1 snapdir hidden default data1 aclmode discard default data1 aclinherit restricted default data1 canmount on default data1 xattr on default data1 copies 1 default data1 version 5 - data1 utf8only off - data1 normalization none - data1 casesensitivity mixed - data1 vscan off default data1 nbmand off default data1 sharesmb off default data1 refquota none default data1 refreservation none default data1 primarycache all default data1 secondarycache all default data1 usedbysnapshots 0 - data1 usedbydataset 31K - data1 usedbychildren 54K - data1 usedbyrefreservation 0 - data1 logbias latency default data1 dedup off default data1 mlslabel none - data1 sync standard default data1 encryption off - data1 keysource none default data1 keystatus none - data1 rekeydate - default data1 rstchown on default data1 shadow none - |
mesela mountpint değerini değiştirmek için;
zfs set mountpoint="/yeni_mount_noktasi" data1 |
- disk i/o istatistiklerini görmek
istatikler için zpool iostat
kullanılabilir.
root@T4:~# zpool iostat -v capacity operations bandwidth pool alloc free read write read write ------------------------- ----- ----- ----- ----- ----- ----- data1 94K 278G 0 0 0 5 mirror 94K 278G 0 0 0 5 c0t50015179596F4C9Dd0 - - 0 0 2 27 c0t50015179596F4D07d0 - - 0 0 2 27 ------------------------- ----- ----- ----- ----- ----- ----- data2 176K 1.62T 0 0 5 26 raidz1 176K 1.62T 0 0 5 26 c0t5000CCA0253C33D0d0 - - 0 0 35 399 c0t5000CCA02537F538d0 - - 0 0 35 399 c0t5000CCA025393F44d0 - - 0 0 37 400 ------------------------- ----- ----- ----- ----- ----- ----- rpool 70.1G 486G 0 0 1.76K 1.40K c0t5000CCA0253CB86Cd0s0 70.1G 486G 0 0 1.76K 1.40K ------------------------- ----- ----- ----- ----- ----- ----- |
sed ile patern’in altina satır ekleme disk doluyken dosya taşıma