Son güncelleme tarihi 10 Nisan 2022
Yazı İçeriği
- Dosya sistemi nedir?
- ZFS nedir?
- ZFS bize ne sunuyor?
- OpenZFS
- Başlamadan önce kısaca
- RAID nedir?
- ZFS ile RAID nedir?
- ZFS ile RAID uygulamaları
- Yazı için kullanılan araç seti
- Uygulamalara giriş
- Dosya sistemi temizleme işlemi (manuel)
- Disk bölümleme işlemi (manuel)
- STRIPE (RAID-0) yapılandırması
- MIRROR (RAID-1) yapılandırması
- MIRROR + STRIPE (RAID-10) yapılandırması
- Çok sayıda disk var kolaylaştıralım, wipedisks.sh scripti
- partdisks.sh scripti
- RAIDZ1 (RAID-5) yapılandırması
- RAIDZ2 (RAID-6) yapılandırması
- RAIDZ3 yapılandırması
- RAIDZ1 + STRIPE (RAID-50) yapılandırması
- RAIDZ2 + STRIPE (RAID-60) yapılandırması
- RAIDZ3 + STRIPE yapılandırması
- Yapılandırma özet listesi (kapasite kaybı)
- Sonraki adımlar
Dosya sistemi nedir?
ZFS dosya sistemine giriş yapmadan önce dosya sisteminin ne olduğuna bakalım, şu anda okuduğunuz yazıyı web tarayıcımız ile açıp görebilmemiz için bir yerlere kaydedilmiş olması gerekmekte değil mi? Evet demek için düşünmemize gerek bile yok.
Peki kaydedilen bu veri, nereye ve nasıl kaydedildi sorularını sorarsak verilecek cevaplar ne olacaktır?
Bunda da fazla düşünmeye gerek yok, hızlıca söyleyelim “Bir sunucu bilgisayar sistemi üzerindeki işletim sistemi aracılığıyla o bilgisayarın depolama alanına, diskinde bir yerlere.”
Hımmm… Bir yerlere ama nereye?
İşte bu sorunun cevabı tam olarak “Dosya Sistemi” kavramını açıklamak için başlangıç noktası. Dosya Sistemi kavramı ve çeşitleri üzerine buradan yazdığım yazılara erişebilirsiniz, yoksa merak etmeyin yakında ekleyeceğim demektir.
Bir bilgisayar sisteminde işletim sistemi ile depolama alanındaki bir verinin nereye kaydedildiği bilgisi, temelde dosya boyutu, ve disk üzerindeki yeri gibi bilgileri tutmak dosya sisteminin temel vazifelerindendir. Bir dosyaya erişebilmek için dosya sisteminde nerede olduğuna bakılarak hareket edilir.
Ana konumuz dosya sistemi ve veri erişim yöntemleri ile birlikte çeşitleri olmadığından burada bırakıyorum, daha sonra linux üzerinde fstab ile mount işlemlerini yazdığımda biraz daha detayına girmeye fırsat bulacağım.
ZFS dosya sistemi diğerlerine nazaran oldukça güzel kabiliyetlere sahip ve bu yazıda da öncelikli olarak raidz ve raid kabiliyetleri ardından dosya sistemi özelliklerine odaklanmak niyetindeyim.
ZFS nedir?
ZFS (Zettabyte File System) Sun Microsystems tarafından kapalı olarak geliştirilmeye başlanmış ve Open Solaris (Şu anda Oracle Solaris ZFS) ile birlikte kaynak kodu erişime açılmış, zamanla çeşitli alternatifleri (fork/derivative) türetilmiş bir dosya sistemidir, OpenZFS bunlardan biri ve bu yazının temelinde yer alıyor.
Tüm geliştirme aşamalarının tarihçesine bakmak isteyen buradan detaylarını inceleyebilir, ben olayın daha çok Debian Bullseye üzerinde root dosya sistemi olarak ZFS nasıl kullanılır, nasıl RAID yapılır kısmındayım.
ZFS dosya sisteminin bize sunduklarına kısaca bakacak olursak;
- Yüksek depolama alanı desteği (İsminden de anlaşılacağı üzere Zettabyte),
- Pool bazlı otomatik disk genişlemesi (autoexpand)
- Filesystem bazlı kota yönetimi (quota)
- Etkili veri sıkıştırma (gzip[1-9], lz4 …),
- Anlık görüntü alma (Snapshot),
- Yazarken kopyalama (copy on write),
- Sürekli veri bütünlüğü kontrolü ve veri bozulmalarına karşı otomatik onarım (scrubbing),
- Kriptolama (encryption),
- Uzak sunucuya replika oluşturma (send/receive)
- RAID-Z
- stripe
- mirror
- mirror + stripe
- raidz1
- raidz2
- raidz3
- raidz1 + stripe
- raidz2 + stripe
- raidz3 + stripe
Yukarıdaki maddeler üzerine sırasıyla örneklemeler yapmaya çalışacağım, aşağıdaki ekran görüntüsünde ise paramızın kapasite testine yetmeyeceğini görerek devam ediyoruz 🙂

Open ZFS
Gayet güzel dökümente edilmiş bir web siteleri var, detaylarını incelemek isteyen OpenZFS sitesini inceleyerek yola çıkabilir, az önce de belirttiğim gibi bu yazıda kurulum, ve ufak sürprizim ile birlikte ağırlıklı olarak kullanım ön planda olacak.
Ufak Sürpriz, şahsen otur yaz deseydiniz $300 ödemek zorunda kalacağınız installer script hediyemdir, 3 oturumda test ede ede 12 saat gibi bir sürede eğlene eğlene yazıldı. Böylece kullanım kısmına odaklanmak daha kolay olacaktır. Hali hazırda kurulum dökümanını işleri kolaylaştırsın diyerekten bash script haline çevirdim. Çalıştır, enter, enter … root ZFS dosya sistemine sahip Bullseye tamamdır 🙂
installer.sh kullanarak ZFS root dosya sistemi olan Debian Bullseye yazısında açıklandı. Aşağıdaki yazıda kendi sisteminizi kurup oynayabilirsiniz.
Kuruluma başlamadan önce bilinmesi gerekenler;
- LiveCD ile Linux kurulumunu / kullanımını biliyor olmalısınız. (Sonraki adımda aynı işi kurduğumuz sistem ile de yapabileceğimiz için konu bir alt maddeye dayanıyor.)
- Linux terminaline aşina olmalısınız, Live CD ile sistemi aç, openzfs dökümanındaki adımları izle veya paylaştığım scripti çalıştır, kurulum bittikten sonraki sistem açılışında /root dizininde after-reboot.sh scripti var onu da çalıştırdıktan sonra sisteminiz kullanıma hazır olacaktır. Script nasıl kullanılır kurulum nasıl yapılır sorularını başka bir yazıda cevaplamayı düşünüyorum,
- Öncelikle Sanallaştırma sistemi üzerinde denemelisiniz ki fiziki diskinizin üstündeki tüm veri ve partition yapısı silindiğinde üzülmeyin, kısaca “use at on your own risk!” ben sorumlu değilim,
- Bir sorun ile karşılaştığınızda bana sorabilirsiniz ama an itibariyle $25 saat + KDV üzerinden fatura keserim, zamanımı kiralıyorsanız paramı da peşin isteyeceğimi bilin 🙂
- Gerisi çok basit, “next, next, next , reboot,”
OpenZFS -Debian Bullseye Root on ZFS dökümanı içerisindeki adımları içeren ve işleri kolaylaştıracak birkaç özellik ile birlikte hazırladığım bash script.
Bullseye üzerinde kök dosya sistemi olarak ZFS kullanımı için : installer.sh

Bu scriptin kullanımını anlatan ayrıca bir yazı
hazırlayacağımhazırlandı. Söylemeye çalıştığım şey bu işlemler giriş seviye Linux kullanıcıları için biraz ağır, hali hazırda bu yazıya bakarak ZFS hakkında giriş seviye bir döküman dememe rağmen bu böyle!Linux üzerinde, Network, Sistem Kurulumu, Kernel Modülü, Dosya Sistemi, Depolama Yönetimi, Sanallaştırma sistemi, RAID konfigürasyonu, Terminal/Konsol, Versiyon Kontrol Sistemi … gibi kavramlara aşina olmayan birisi bir hata ile karşılaştığında işin içinden çıkamayacaktır…
Raid nedir?
ZFS dosya sisteminin özellikleri araasında raid topolojileri de yer almakta ve bunların uygulamasını yapacağımdan kısaca bahsetmek istedim.
RAID (Redundant Array of Inexpensive Disks) ile amaca bağlı olarak birçok diski, hız, kapasite ve veri güvenliği arasında veya üçünü bir arada kullanabileceğimiz şekilde yapılandırmamızı sağlayan kavramdır.
Uygulamada tek bir disk kullandığı denetleyiciye bağlı bir hıza ve kapasiteye sahiptir. Peki disk hızını, kapasitesini, güvenliğini artırmak istersek, bunu yaparken milyar dolarlık ar-ge bütçesi ayırmak istemezsek nasıl bir yol izlemeliyiz ? Bu ihtiyaca karşılık olarak ortaya tam olarak RAID çıkar. Üretim maliyeti olarak karşılanabilir diskleri bir arada kullanmamızı sağlar ve sanki elimizde tek bir disk varmış gibi sisteme ekleyebiliriz. Diskleri ekleme şekline bağlı olarak hız, kapasite, veri güvenliği veya üçüne birden ulaşmamızı sağlar.
- RAID-0 seri şekilde birbirine eklenmiş disklerdir, hız, kapasite artışı sağlar ancak veri güvenliği tehlikeli boyutta düşüktür.
İki adet 1TB diski bu şekilde eklersek toplam kapasitemiz 2TB, hızımızda teorik olarak x 2 olacak şekilde artacaktır. ancak disklerden 1 tanesi arıza verdiği anda tüm veriyi kaybetme olasılığımız yüksek. - RAID-1 paralel şekilde birbirine eklenmiş disklerdir, teorik olarak hızı tek bir diskin hızına eşittir, kapasitesi tek bir diskin kapasitesine eşittir ancak bir diske yazılan veri aynen ikinci diske de yazılır, anlık klonlama işlemi diyelim. Veri güvenliği iki diskin aynı anda bozulmasına bağlıdır ve görece olarak güvenlidir. 1TB iki adet diskimizi bu şekilde eklersek toplam kapasite ve hız değişmez ancak güvenli bir yapı oluşturmuş oluruz.
- RAID-5 minimum 3 disk ile gerçekleştirilen, 1. 2. ve 3. disklerin paralel bağlı halinin eklenmesidir. Her disk üzerinde veri ile doğrulama biti disklere eşit şekilde dağıtılır. Disklerden birisinin hata vermesi sonucu diğer disklerdeki veriler kullanılarak veri yeniden oluşturulabilir, okuma hızı x2 olur ancak yazma hızı tek disk hızında kalacaktır, veri güvenliği ve kapasite artışını bir arada sunar. 3 adet 1TB disk ile 2TB kapasitede güvenli, hızlı bir yapı kurmuş oluruz.
- RAID-6 Raid-5 ile aynı yapıdadır ancak disklere ilave doğrulama biti eklenir, veri güvenliğini artırdığı gibi disk hata payı da düşer aynı anda 2 disk hatasında da sistem çalışmaya devam edecektir, minimum 4 disk gereklidir. Okuma hızı x2 artar ancak yazma hızı değişmez.
- RAID-10 Raid1 ve Raid 0 birleşimidir, minimum 4 adet disk ile kurulur okuma hızı x4 yazma hızı x2 artış sağlar veri güvenliği 2 diskin (non-mirror) arızalanmasına kadar tölere eder, aynı anda mirror edilmiş iki disk arızalanırsa veri kaybı demek. 1TB 4 adet disk ile 2TB kapasitede hızlı güvenli bir yapı kurmuş oluruz, kişisel tercihim bu yönde.
- RAID-50 Raid0 ve Raid5 birleşimidir, minimum 6 adet disk gerekir ve hız, kapasite, güvenlik açısından gayet iyi bir konfigürasyondur.
- RAID-60 Raid0 ve Raid6 birleşimidir, minimum 8 adet disk gerekir ve hız, kapasite, güvenlik açısından oldukça iyi bir konfigürasyondur.
Başkaca RAID topolojileri de mevcut ancak yukarıda sıraladıklarım piyasadaki RAID Controller ekipmanlarının büyük kısmının fiziki olarak sundukları. Yani en çok karşılaştıklarımız.
RAID nedir kısaca açıkladık, peki ZFS ile RAID nedir ona da bir bakalım.
stripe pool RAID-0 karşılığıdır, diskleri/dosyaları pool içerisine doğrudan ekleyip kullanabildiğimiz yöntem. Minimum 1 disk.
mirror RAID-1 karşılığıdır, diskleri/dosyaları mirror olarak pool içerisine ekleyip kullandığımız yöntem. Minimum 2 disk.
RAIDZ1 (Single Parity) RAID-5 karşılığıdır, diskleri/dosyaları raidz olarak pool içerisine ekleyip kullandığımız yöntem. Minimum 2 tavsiye edilen 3 disk.
RAIDZ2 (Double Parity) RAID-6 karşılığıdır, diskleri/dosyaları raidz2 olarak pool içerisine ekleyip kullandığımız yöntem. Minimum 3 tavsiye edilen 4 disk.
RAIDZ3 (Triple Parity) RAID karşılığı yok, diskleri/dosyaları raidz3 olarak pool içerisine ekleyip kullandığımız yöntem. Minimum 4 tavsiye edilen 5 disk.
mirror ile stripe pool bir arada kullanımı RAID-10 karşılığıdır, diskleri/dosyaları ;
mirror <disk0> <disk2>
mirror <disk1> <disk3>
şeklinde pool içerisine ekleyip kullandığımız yöntemdir. Minimum 4 disk.
raidz1 çoğul kullanımı RAID-50 karşılığıdır, diskleri/dosyaları ;
raidz <disk0> <disk2> <disk4>
raidz <disk1> <disk3> <disk5>
şeklinde pool içerisine ekleyip kullandığımız yöntemdir. Minimum 4 tavsiye edilen 6 disk.
raiadz2 çoğul kullanımı RAID-60 karşılığıdır, diskleri/dosyaları ;
raidz2 <disk0> <disk2> <disk4> <disk6>
raidz2 <disk1> <disk3> <disk5> <disk7>
şeklinde pool içerisine ekleyip kullandığımız yöntemdir. Minimum 6 tavsiye edilen 8 disk.
raiadz3 çoğul kullanımı veya kendisinin raid karşılığı yoktur, diskleri/dosyaları ;
raidz3 <disk0> <disk2> <disk4> <disk6> <disk8>
raidz3 <disk1> <disk3> <disk5> <disk7> <disk9>
şeklinde pool içerisine ekleyip kullandığımız yöntemdir. Minimum 8 tavsiye edilen 10 disk.
RAID için karşılaşacağımız ve uygulamalarını yapacağım tanımlar yukarıdaki gibi, hadi uygulamalarımızı yapalım.
ZFS ile RAID Uygulamaları
Uygulamaları yapmaya başlamadan önce kullandığım araç setini paylaşayım.
- Debian Bullseye GNU/Linux Host İşletim Sistemi
- DELL Precision M4800 Workstation Notebook, bana sağladığı avantaj e-sata ile birlikte şu anda 4 adet fiziki SSD disk sistemime takılı durumda, sanallaştırma ile birlikte fazla bir performans kaybı yaşamadan yukarıdaki örneklerin tümünü yapabileceğim manasına geliyor (8 adet sanal disk).
- QEMU/KVM Sanallaştırma altyapısı, libvirt ile birlikte Virt Manager arayüzü kullanarak rahatlıkla VM işlemlerini yapmamı sağlıyor.
- Yukarıda linkini verdiğim installer scripti, Debian Bullseye için hazırladım, farklı Debian sürümleri için düzenlemek isterseniz script 1002. satırda installBaseSystem fonksiyonunda ve ilaveten sürüme bağlı paket isimlerinde de değişiklik varsa tespit edip apt install satırlarında kurulan paketleri kullanacağınız sürüme göre düzenlemelisiniz.
- Oluşturduğum sanal makinede
- 2 x SCSI controller,
- 8 adet sanal disk
- 4 core CPU paylaşımı
- 4GB ram paylaşımı
- UEFI boot aktive edilmiş (EFI kullanımı tavsiye edilmediğinden yalnızca UEFI kurulumu yaptım, aynını tavsiye ederim.)
- Script ile ZFS dosya sistemi üzerine kurulu Debian Bullseye (Döküman ile de kurabilirsiniz)
mevcut durumda. - Özellikle Desktop (KDE) kurdum ki gündelik hayat örneklerini yapabileyim.
virsh ile VM üzerindeki sanal disklere bir bakalım.
virsh domblklist --domain 0ZFS-Testing

VM içerisinden sistemdeki disklere bakalım.
lsblk

ZFS dosya sistemindeki aktif pool yapımıza bakalım
zpool list

ZFS dosya sistemimizdeki pool listemize mountpoint ile birlikte bakalım.
zfs list

Bu kadar bakınmak yeter haydi biraz uygulama yapalım.
İlk olarak disklerimizi kullanım amacımıza göre biçimlendirmemiz gerekiyor. Biçimlendirme işlemini hangi türde raid yapacaksak o şekilde yapıyoruz, stripe pool veya mirror farklı şekilde yapacağız. Eğer boot sektörü barındıran disk için boot partition dahil mirror ekleyeceksek partition yapısını aynen kopyalayacağız.
Burada stripe pool (raid0) veya mirror (raid1) ve diğerleri için aslen dikkat etmemiz gereken şey pool kavramı olacak, sonuç olarak pool için ekleme yapıyoruz.
Raid yapılarından burada bahsettiğimizden aşağıda doğrudan uygulamalarını yapacağız.
İşlemlere başlamadan önce özet olarak,
* zfs ve zpool komutlarını root kullanıcısı ile çalıştırıyoruz,* disklerin bağlandığı aygıtları seçerken sdX, vdX yerine disk/by-id veya disk/by-uuid değerleri ile işlem yapıyoruz, sda, sdb, sdX gibi isimler sistemi her yeniden başlatmanızda farklı diskleri işaret edebilmekte. id veya uuid sabit! id diski çıkartmadığımız sürece değişmiyor, uuid ise diski partitionlamadığımız sürece görüntülenemiyor. Partition + UUID bizim uygulayacağımız yöntem.
* Komut tamamlama ile ilgili ufak bir bug var sanırım, zfs bash_completion çalışıyor ancak zpool completion çalışabilmesi için ilk olarak zfs [Tab][Tab] yaparak zfs alt komutlarını listelemek gerekiyor.
Bir süre sistem açılışında zfs tetikleyip ardından zpool completion çalıştırmayı denedim ama olmadı, en son hızlı çözüm olarak :
/usr/share/bash-completion/completions/
klasörü içerisindeki zfs dosyasını (completion bilgilerini içeriyor) zpool olarak aynı dizine kopyaladım ve sorun çözüldü…

Örnek ekran görüntüsünde partition işlemi yapılmamış diskte uuid değerimiz yok ancak id değerimiz var.

Disk Dosya Sistemi Temizleme İşlemi
Test için olsun, yeni kurulum olsun kullanacağımız disklerin üzerinde ne var ne yok temizledikten sonra işlem yapmak zorundayız.
root@debian:~# ls -l /dev/disk/by-id/ toplam 0 lrwxrwxrwx 1 root root 9 Mar 19 22:19 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0 -> ../../sda lrwxrwxrwx 1 root root 10 Mar 19 22:19 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 Mar 19 22:19 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 -> ../../sda3 lrwxrwxrwx 1 root root 10 Mar 19 22:19 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 -> ../../sda4 lrwxrwxrwx 1 root root 9 Mar 19 21:52 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1 -> ../../sdg root@debian:~#
Yukarıdaki çıktıda da görüldüğü üzere bölümleme yapılmamış diskimiz :
/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1
örneklemeyi bu disk üzerinden yapacağız, disk yüzeyi temizleme ve bölümleme işlemlerini uygulamalarda bir daha kullanmayacağım, yapılması gerekmekte ve ortak nokta olduğundan sadece burada açıklıyorum.
root@debian:~# DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1 root@debian:~# zpool labelclear -f "${DISK}" failed to clear label for /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1 root@debian:~# wipefs -a "${DISK}" root@debian:~# sgdisk --zap-all "${DISK}" Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Creating new GPT entries in memory. GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. root@debian:~#
zpool labelclear komutunun hata verme sebebi, disk daha önceden zfs pool için kullanılmamış bir disk.
Disk Partition (Disk Bölümleme) işlemi.
Partition (Bölümleme) işlemi, dökümanda belirtilen komutlar kullanılarak ilk disk oluşturulduğundan diğer diskler için de işlem benzer şekilde olacak. Az önce temizlediğimiz diski kullanalım.
Boot bölümü ile birlikte disk bölümleme işlemi.
root@debian:~# DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1 root@debian:~# sgdisk -n2:1M:+512M -t2:EF00 $DISK Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Creating new GPT entries in memory. The operation has completed successfully. root@debian:~# sgdisk -n3:0:+1G -t3:BF01 $DISK The operation has completed successfully. root@debian:~# sgdisk -n4:0:0 -t4:BF00 $DISK The operation has completed successfully. root@debian:~# lsblk /dev/sdg NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdg 8:96 0 20G 0 disk ├─sdg2 8:98 0 512M 0 part ├─sdg3 8:99 0 1G 0 part └─sdg4 8:100 0 18,5G 0 part root@debian:~#
Tek bölüm içeren bölümleme işlemi.
root@debian:~# DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1 root@debian:~# sgdisk -n1:0:0 -t1:BF00 $DISK Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Creating new GPT entries in memory. The operation has completed successfully. root@debian:~# lsblk /dev/sdg NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdg 8:96 0 20G 0 disk └─sdg1 8:97 0 20G 0 part root@debian:~#
Buraya kadar temel sistemimizi ve disklerimizi hazırladık, bundan sonrası işin eğlenceli tarafı.
Stripe Pool (RAID-0) yapılandırması.
İlk olarak disk üzerinde stripe pool oluşturalım, var olan diskimizi ikinci disk ile birleşecek şekilde pool oluşturalım. Ekleyeceğimiz kısım yeni diskimizin partition kısmı bu yüzden DISK değişkenine dikkat!
root@debian:~# DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 root@debian:~# zpool add rpool $DISK root@debian:~# zpool status rpool pool: rpool state: ONLINE scan: scrub repaired 0B in 00:00:14 with 0 errors on Fri Mar 18 03:22:53 2022 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 errors: No known data errors root@debian:~# zfs list rpool NAME USED AVAIL REFER MOUNTPOINT rpool 5.64G 30.7G 96K / root@debian:~# s
Not: Hangi pool üzerine stripe disk ekleyeceksek o pool ve eklenecek diskleri sırasıyla yanına yazmak yeterlidir, örnekte 1 adet disk eklendi ancak elinizdeki tüm diskleri de ekleyebilirsiniz. Bu durumda komutumuz aşağıdaki şekilde olacaktır.
zpool add rpool <disk1> <disk2> <disk3> <disk4> <disk5> … <diskX>
root@debian:~# DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 root@debian:~# zpool remove rpool $DISK root@debian:~# zpool status rpool pool: rpool state: ONLINE scan: scrub repaired 0B in 00:00:14 with 0 errors on Fri Mar 18 03:22:53 2022 remove: Removal of vdev 1 copied 6.66M in 0h0m, completed on Sun Mar 20 15:57:47 2022 2.98K memory used for removed device mappings config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 errors: No known data errors root@debian:~#
Not: Pool içerisinden ekli bir diski çıkartmak istediğimizde de durum basit, örneğimizde eklediğimiz diski yukarıda stripe pool üzerinden remove komutuyla ayırdık. Birden fazla disk üzerinde bu işlemi yapmak isteseydik aynı şekilde,
zpool remove rpool <disk1> <disk2> <disk3> <disk4> <disk5> … <diskX>
Bu işlemden sonra zpool status rpool komutu ile pool durumuna bakarak sistemi yeniden başlatmak mantıklı olan, otomatik olarak diğer diskler üzerine yazılmış veriyi pool üzerindeki aktif disklere çekecektir.
RAID-0 oluşturmak bu kadar basit 🙂 dez avantajı, yeni eklediğim diski çıkartacak olursam (arızalanacak olursa) kesinlikle data kaybı demek ve geri dönüşü mümkün olmayan cinsten kayıptan bahsediyorum. Gündelik hayatta mecbursanız ve yedeklemeniz sağlamsa kullanın. Avantajı x2 performans (Okuma/Yazma) ve kapasite kaybı yok.
Peki stripe pool olarak eklenmiş disk üzerinde veri varsa ve buna rağmen ayırmak istersem? hadi bakalım.
İlk olarak diskimizin kapasitesine bakalım (benim test için kullandığım 20G) ve random img dosyaları oluşturarak sistem diskinin dışına çıktığımızdan emin olalım 🙂 Mesela 16 adet random 1G dosya oluşturalım böylece 2. diski kesinlikle kullanmış olacağız, random oluşturma sebebimize daha sonra geleceğim anahtar kelimemiz dedup, eğer dosya sisteminin bu özelliği pool üzerinde aktifse aynı hash değerine sahip dosyanın dosya sisteminde kopyasına izin yok demek oluyor, /dev/zero içerisinden isterseniz 1TB kopyalayın dosya 50M seviyelerinde kalıyor.
root@debian:/home/yasin# for i in $(seq 1 16); do dd if=/dev/urandom of=test$i.img bs=1M count=1024 status=progress; done root@debian:/home/yasin# df -h /home/yasin/ Dosyasistemi Boy Dolu Boş Kull% Bağlanılan yer rpool/home/yasin 31G 17G 15G 53% /home/yasin root@debian:/home/yasin# zpool list rpool NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT rpool 37.5G 21.7G 15.8G - - 9% 57% 1.00x ONLINE - root@debian:/home/yasin#
Hadi 2. diski pool üzerinden çıkaratalım.
root@debian:/home/yasin# zpool status rpool pool: rpool state: ONLINE scan: scrub repaired 0B in 00:00:41 with 0 errors on Sun Mar 20 16:40:56 2022 remove: Removal of vdev 2 copied 28.0M in 0h0m, completed on Sun Mar 20 16:06:45 2022 5.88K memory used for removed device mappings config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 errors: No known data errors root@debian:/home/yasin# zpool remove rpool scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 cannot remove scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1: out of space root@debian:/home/yasin#
cannot remove scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1: out of space
Bu diskin üzerine yazdım ve tek diske düşebileceğim alan yok dedi, hadi tek diske sıkışacak seviyeye düşelim ve 8G değerinde dosyayı silip tekrar deneyelim.
root@debian:/home/yasin# rm -f test1.img test2.img test3.img test4.img test5.img test6.img test7.img test8.img root@debian:/home/yasin# df -h /home/yasin/ Dosyasistemi Boy Dolu Boş Kull% Bağlanılan yer rpool/home/yasin 31G 9,1G 22G 30% /home/yasin root@debian:/home/yasin# zpool list rpool NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT rpool 37.5G 14.7G 22.8G - - 5% 39% 1.00x ONLINE - root@debian:/home/yasin# zpool status rpool pool: rpool state: ONLINE scan: scrub repaired 0B in 00:00:41 with 0 errors on Sun Mar 20 16:40:56 2022 remove: Removal of vdev 2 copied 28.0M in 0h0m, completed on Sun Mar 20 16:06:45 2022 5.88K memory used for removed device mappings config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 errors: No known data errors root@debian:/home/yasin# zpool remove rpool scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 root@debian:/home/yasin# zpool status rpool pool: rpool state: ONLINE scan: scrub repaired 0B in 00:00:41 with 0 errors on Sun Mar 20 16:40:56 2022 remove: Evacuation of /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 in progress since Sun Mar 20 16:45:19 2022 2.29G copied out of 5.15G at 75.6M/s, 44.47% done, 0h0m to go 5.88K memory used for removed device mappings config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 errors: No known data errors root@debian:/home/yasin# zpool status rpool pool: rpool state: ONLINE scan: scrub repaired 0B in 00:00:41 with 0 errors on Sun Mar 20 16:40:56 2022 remove: Removal of vdev 3 copied 5.15G in 0h0m, completed on Sun Mar 20 16:46:03 2022 25.2K memory used for removed device mappings config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 errors: No known data errors root@debian:/home/yasin#
Disk üzerindeki veriyi diğer disklere dağıtabileceği alanı gördüğünden evacuation işlemini başlattı ve ayrılacak diskin yüzeyindeki veriyi taşıdıktan sonra diski ayırdı. Disk üzerindeki veri boyutuna göre işlem bir miktar zaman alacaktır, 20G disk üzerinde yaklaşık olarak 1dk içerisinde diski ayırdı. Eğer bu diskimiz arızalanmış olsaydı ve yedekleme sistemi kurmamış olsaydık yapabileceğimiz hiçbir şey yoktu ne yazık ki, kalıcı veri kaybı ile karşılaşmış olurduk!
Şimdi dosyalar üzerinde aynısını yapalım. Evet yanlış duymadınız oluşturacağımız dosyaları da raid gibi kullanabiliyoruz. Kullanım örneklerinde ne işe yaradığına bakacağız (zvol). Burada sadece işleme değineceğim.
2 adet img dosyası oluşturup bunları stripe pool olarak birbirine bağlayalım ardından destroy komutu ile pool yapısını silelim.
root@debian:/home/yasin/test-imgs# for i in $(seq 1 2); do dd if=/dev/zero of=test$i.img bs=1M count=2048 status=progress; done root@debian:/home/yasin/test-imgs# ls test1.img test.img root@debian:/home/yasin/test-imgs# zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT bpool 960M 61.9M 898M - - 1% 6% 1.00x ONLINE - rpool 18G 5.64G 12.4G - - 7% 31% 1.00x ONLINE - root@debian:/home/yasin/test-imgs# zpool create testpool /home/yasin/test-imgs/test.img /home/yasin/test-imgs/test1.img root@debian:/home/yasin/test-imgs# zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT bpool 960M 61.9M 898M - - 1% 6% 1.00x ONLINE - rpool 18G 5.65G 12.4G - - 7% 31% 1.06x ONLINE - testpool 3.75G 126K 3.75G - - 0% 0% 1.00x ONLINE - root@debian:/home/yasin/test-imgs# zpool status testpool pool: testpool state: ONLINE config: NAME STATE READ WRITE CKSUM testpool ONLINE 0 0 0 /home/yasin/test-imgs/test.img ONLINE 0 0 0 /home/yasin/test-imgs/test1.img ONLINE 0 0 0 errors: No known data errors root@debian:/home/yasin/test-imgs# zpool destroy testpool
Mirror Pool (RAID-1) yapılandırması.
Sırada mirror pool var, diskimizi ikinci disk ile birlikte mirror çalışacak şekilde pool oluşturalım. Boot içeren diski boot pool ile birlikte mirror yapacağımızdan disk bölümleme işlemi sistemi kurarken kullandığımızın aynısı olacak, hadi başlayalım.
mirror olacak diskimizdeki partition yapısını temizleyelim ardından sistem diskindeki ile aynı yapıda bölümleyelim ve mirror konumdaki disk için de boot dosya sistemini kopyalayıp grub-install yapalım.
UYARI: Burada belirli durumlarda disk sök-tak işlemi yaptığımdan disklerin isimleri değişebiliyor, sisteminizde hangi disk sistem diski, hangisi sonradan eklediğiniz disk kendiniz takip etmelisiniz !!! kopyala yapıştır yapmayın kısacası.
Ctrl + C & Ctrl + V & Enter … aaaa Sistem diski gitti 🙂
root@debian:~# DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2 root@debian:~# BOOT_DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0 root@debian:~# zpool labelclear -f "${DISK}" root@debian:~# wipefs -a "${DISK}" root@debian:~# sgdisk --zap-all "${DISK}" root@debian:~# sgdisk -n2:1M:+512M -t2:EF00 $DISK root@debian:~# sgdisk -n3:0:+1G -t3:BF01 $DISK root@debian:~# sgdisk -n4:0:0 -t4:BF00 $DISK root@debian:~# umount /boot/efi root@debian:~# dd if=$BOOT_DISK-part2 of=$DISK-part2 status=progress root@debian:~# efibootmgr -c -g -d $DISK -p 2 -L "debian-2" -l '\EFI\debian\grubx64.efi' root@debian:~# mount /boot/efi
Ardından zpool attach komutu ile mirror pool olacak disklerimizi sisteme ekleyelim.
root@debian:~# ls -l /dev/disk/by-id/ | grep -P "^.*[^\d]+$" lrwxrwxrwx 1 root root 9 Mar 20 18:15 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0 -> ../../sda lrwxrwxrwx 1 root root 9 Mar 20 18:29 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2 -> ../../sdb root@debian:~# zpool status bpool pool: bpool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. config: NAME STATE READ WRITE CKSUM bpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 ONLINE 0 0 0 errors: No known data errors root@debian:~# zpool attach bpool scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part3 root@debian:~# zpool status bpool pool: bpool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: resilvered 63.4M in 00:00:00 with 0 errors on Sun Mar 20 18:43:10 2022 config: NAME STATE READ WRITE CKSUM bpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part3 ONLINE 0 0 0 errors: No known data errors root@debian:~# zpool status rpool pool: rpool state: ONLINE scan: scrub repaired 0B in 00:00:14 with 0 errors on Fri Mar 18 03:22:53 2022 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 errors: No known data errors root@debian:~# zpool attach rpool scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part4 root@debian:~# zpool status rpool pool: rpool state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Sun Mar 20 18:44:28 2022 5.62G scanned at 1.41G/s, 751M issued at 188M/s, 5.62G total 827M resilvered, 13.05% done, 00:00:26 to go config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part4 ONLINE 0 0 0 (resilvering) errors: No known data errors root@debian:~#
zpool status rpool komutundan takip ederek (resilvering) işleminin bittiğinden emin olalım, disk içerisindeki veriyi mirror edilen diske birebir kopyalama işlemi bittikten sonra sistem diskini doğrudan çıkartabiliriz ve sistemimiz çalışmaya devam edecektir, hadi 1. diski çıkartalım 🙂 1. sistem diskini sökmeden önceki zpool status komutunun çıktısı.
root@debian:~# zpool status pool: bpool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: resilvered 63.4M in 00:00:00 with 0 errors on Sun Mar 20 18:43:10 2022 config: NAME STATE READ WRITE CKSUM bpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part3 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: resilvered 5.90G in 00:00:31 with 0 errors on Sun Mar 20 18:44:59 2022 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part4 ONLINE 0 0 0 errors: No known data errors root@debian:~#


Sistem diskini söktükten sonraki zpool status komutunun çıktısı. Burada bpool ONLINE görünecektir çünkü boot pool içerisinde sistem açılışı haricinde genelde bir işlem yapılmamakta, okuma yoksa disk durumu hakkında bilgilendirme de yok demektir. Sistemi kandırmak için bpool üzerinde scrub komutunu çalıştıracağım. Ardından zpool status komutunu çalıştıracağım DEGRADE durumu okuyabiliriz.
root@debian:~# zpool scrub bpool root@debian:~# zpool scrub rpool root@debian:~# zpool status pool: bpool state: DEGRADED status: One or more devices could not be used because the label is missing or invalid. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the device using 'zpool replace'. see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J scan: scrub repaired 0B in 00:00:01 with 0 errors on Sun Mar 20 18:51:01 2022 config: NAME STATE READ WRITE CKSUM bpool DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 UNAVAIL 0 0 313 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part3 ONLINE 0 0 0 errors: No known data errors pool: rpool state: DEGRADED status: One or more devices could not be used because the label is missing or invalid. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the device using 'zpool replace'. see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J scan: scrub in progress since Sun Mar 20 18:51:04 2022 5.62G scanned at 1.41G/s, 1.01G issued at 258M/s, 5.62G total 0B repaired, 17.91% done, 00:00:18 to go config: NAME STATE READ WRITE CKSUM rpool DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 UNAVAIL 3 116 18.3K scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part4 ONLINE 0 0 0 errors: No known data errors root@debian:~#
Diski sistem çalışırken çıkarttım ve sistem olağan şekilde çalışmaya devam ediyor, yukarıdaki komut çıktılarından diskin artık sistemde takılı olmadığını görebiliyoruz. Sistemi yeniden başlatıp bir daha bakalım. Böylece mirror yapımız çalışıyor mu görelim. UEFI boot shell ekranına düşebiliriz korkmayın yazının başında attığımız adımlara göre uefi boot kaydı ekleyip devam etmemiz yeterli olacaktır.
Sistemi yeniden başlattıktan sonraki zpool status komutunun çıktısı aşağıdaki gibi.
root@debian:~# zpool status pool: bpool state: DEGRADED status: One or more devices could not be used because the label is missing or invalid. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the device using 'zpool replace'. see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J scan: scrub repaired 0B in 00:00:01 with 0 errors on Sun Mar 20 18:51:01 2022 config: NAME STATE READ WRITE CKSUM bpool DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 2631372970255669592 UNAVAIL 0 0 0 was /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part3 ONLINE 0 0 0 errors: No known data errors pool: rpool state: DEGRADED status: One or more devices could not be used because the label is missing or invalid. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the device using 'zpool replace'. see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J scan: scrub repaired 0B in 00:00:16 with 0 errors on Sun Mar 20 18:51:20 2022 config: NAME STATE READ WRITE CKSUM rpool DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 6518433092302664021 UNAVAIL 0 0 0 was /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part4 ONLINE 0 0 0 errors: No known data errors root@debian:~#
Diski hali hazırda çıkarttık, hadi komple mirror yapıdan da çıkartalım ve mirror olarak kullandığımız disk artık bizim sistem diskimiz olarak VM üzerinde çalışmaya devam etsin. mirror yapı kurmak için attach kullanmıştık, ayırmak için ise detach kullanacağız, ufak bir farkla, UNAVAIL olarak işaretli disk id bilgisinin olduğu yerdeki sayıyı kullanarak bu işlemi yapacağız.
root@debian:~# zpool detach bpool 2631372970255669592 root@debian:~# zpool detach rpool 6518433092302664021 root@debian:~# zpool status pool: bpool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: scrub repaired 0B in 00:00:01 with 0 errors on Sun Mar 20 18:51:01 2022 config: NAME STATE READ WRITE CKSUM bpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part3 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: scrub repaired 0B in 00:00:16 with 0 errors on Sun Mar 20 18:51:20 2022 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part4 ONLINE 0 0 0 errors: No known data errors root@debian:~#
Komut çıktısında gördüğünüz gibi artık bir mirror (RAID-1) yapımız yok. Sistem ilk halindeki gibi ancak artık sonradan eklediğimiz disk ile sistemi kullanıyoruz 🙂
Dosyalar üzerinde de aynı işlemi tekrarlayalım 2 adet img dosyası oluşturup bunları mirror olarak birbirine bağlayalım ardından destroy komutu ile pool yapısını silelim.
root@debian:/home/yasin/test-imgs# for i in $(seq 1 2); do dd if=/dev/zero of=test$i.img bs=1M count=2048 status=progress; done 2048+0 kayıt girdi 2048+0 kayıt çıktı 2147483648 bytes (2,1 GB, 2,0 GiB) copied, 0,796254 s, 2,7 GB/s 2048+0 kayıt girdi 2048+0 kayıt çıktı 2147483648 bytes (2,1 GB, 2,0 GiB) copied, 0,732331 s, 2,9 GB/s root@debian:/home/yasin/test-imgs# zpool create testpool mirror /home/yasin/test-imgs/test1.img /home/yasin/test-imgs/test2.img root@debian:/home/yasin/test-imgs# zpool status testpool pool: testpool state: ONLINE config: NAME STATE READ WRITE CKSUM testpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 /home/yasin/test-imgs/test1.img ONLINE 0 0 0 /home/yasin/test-imgs/test2.img ONLINE 0 0 0 errors: No known data errors root@debian:/home/yasin/test-imgs# zpool destroy testpool
mirror yapısı bu şekilde çalışmakta, add ve attach komutlarını bir arada kullanarak RAID-10 dizisi oluşturabiliyoruz, sırada bu var.
Mirrored Stripe Pool (RAID-10) yapılandırması.
stripe pool ve mirror pool oluşturduk, sırada bu ikisinin birleşimi olan yapı var, minimum 4 adet disk kullanarak bu yapıyı kurabiliriz. Sistemi hazır hale getirip başlıyorum.
root@debian:~# ls -alh /dev/disk/by-id/ | grep -P "^.*[^\d]+$" drwxr-xr-x 2 root root 200 Mar 20 19:14 . drwxr-xr-x 7 root root 140 Mar 20 19:14 .. lrwxrwxrwx 1 root root 9 Mar 20 19:14 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2 -> ../../sdc lrwxrwxrwx 1 root root 9 Mar 20 19:14 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3 -> ../../sdb lrwxrwxrwx 1 root root 9 Mar 20 19:14 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4 -> ../../sda lrwxrwxrwx 1 root root 9 Mar 20 19:14 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5 -> ../../sdd root@debian:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk ├─sdc2 8:34 0 512M 0 part /boot/efi ├─sdc3 8:35 0 1G 0 part └─sdc4 8:36 0 18,5G 0 part sdd 8:48 0 20G 0 disk sr0 11:0 1 1024M 0 rom root@debian:~#
Komut çıktılarından da görüleceği üzere /dev/sdc -> /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2 diskimiz sistem diski konumunda. Diğer disklerde birkaç işlem yapacağız.
- Yeni eklenen disklerin üzerindeki label ve partition yapısını temizleyeceğiz,
- mirror olarak eklenecek diski sistem diski ile aynı şekilde bölümlendireceğiz,
- grub-install işlemini bu disk üzerindeki boot pool üzerinde gerçekleştireceğiz,
- stripe olarak kullanılacak diskleri ise tek bölüm içerecek şekilde bölümleyeceğiz,
- Bölümleme işlemleri bittikten sonra diskleri mirror + stripe olarak ekleyeceğiz.
Diskleri temizleme işleminde kolaylık sağlaması için ufak bir shell script, sdc benim sistem diskimin kurulu olduğu yapı bu yüzden scripti çağırırken sistem diskini argüman olarak veriyorum, diğer disklerin tümünün yüzeyindeki label ve partition yapısını silecek bu yüzden dikkatli kullanın.
wipedisks.sh
#!/usr/bin/env bash if [ -z $1 ]; then echo -e "Sistem diskinin [ sdX | vdX ] türünden ismini girin.\n" lsblk exit 1 fi for i in $(ls -l /dev/disk/by-id/ | grep -v $1 | grep -P "^.*[^\d]+$" | awk '{print "/dev/disk/by-id/"$9}'); do echo -e "$i\n" zpool labelclear -f $i wipefs -a $i sleep 1 sgdisk --zap-all $i sleep 1 done partprobe lsblk
root@debian:~# ./wipedisks.sh sdc /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3 failed to clear label for /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3 Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Creating new GPT entries in memory. GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4 failed to clear label for /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4 Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Creating new GPT entries in memory. GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5 failed to clear label for /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5 Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Creating new GPT entries in memory. GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk ├─sdc2 8:34 0 512M 0 part /boot/efi ├─sdc3 8:35 0 1G 0 part └─sdc4 8:36 0 18,5G 0 part sdd 8:48 0 20G 0 disk sr0 11:0 1 1024M 0 rom root@debian:~#
Disk yüzeylerimizi temizledik, sırada partition yapısı oluşturmak var, bunun için de script hazırladım,
partdisks.sh
#!/usr/bin/env bash if [[ $# -eq 0 ]]; then for i in $(ls -l /dev/disk/by-id/ | grep -P "^.*[^\d]+$" | awk '{print "/dev/disk/by-id/"$9 $11}'); do echo $i done echo -e "Bölümlenecek disk(ler)i [ sdX sdY | vdX vdY ] şeklinde argüman olarak girin.\n" lsblk exit 1 fi read -r -p "Bölümleme türü [ Mirror (m) (default) / stripe (s) ] : " partitionType if [ -z "${partitionType}" ] || [ "${partitionType}" == "m" ] || [ "${partitionType}" == "M" ]; then partitionType="mirror" else partitionType="stripe" fi for i in "$@"; do DISK=$(ls -l /dev/disk/by-id/ | grep "$i" | grep -P "^.*[^\d]+$" | awk '{print "/dev/disk/by-id/"$9}') if [ "${partitionType}" == "mirror" ]; then echo -e "\n DISK=$DISK" sgdisk -n2:1M:+512M -t2:EF00 $DISK sgdisk -n3:0:+1G -t3:BF01 $DISK sgdisk -n4:0:0 -t4:BF00 $DISK sleep 2 fi if [ "${partitionType}" == "stripe" ]; then echo -e "\n DISK=$DISK" sgdisk -n1:0:0 -t1:BF00 $DISK sleep 2 fi done partprobe sleep 2 echo -e "\n" lsblk
Disk bölümleme işlemlerinin çıktısı
root@debian:~# ./partdisks.sh NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk ├─sdc2 8:34 0 512M 0 part /boot/efi ├─sdc3 8:35 0 1G 0 part └─sdc4 8:36 0 18,5G 0 part sdd 8:48 0 20G 0 disk sr0 11:0 1 1024M 0 rom /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2../../sdc /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3../../sdb /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4../../sda /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5../../sdd Bölümlenecek disk(ler)i [ sdX sdY | vdX vdY ] şeklinde argüman olarak girin. root@debian:~# ./partdisks.sh sdb Bölümleme türü [ Mirror (m) (default) / stripe (s) ] : m DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3 Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Creating new GPT entries in memory. The operation has completed successfully. The operation has completed successfully. The operation has completed successfully. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk sdb 8:16 0 20G 0 disk ├─sdb2 8:18 0 512M 0 part ├─sdb3 8:19 0 1G 0 part └─sdb4 8:20 0 18,5G 0 part sdc 8:32 0 20G 0 disk ├─sdc2 8:34 0 512M 0 part /boot/efi ├─sdc3 8:35 0 1G 0 part └─sdc4 8:36 0 18,5G 0 part sdd 8:48 0 20G 0 disk sr0 11:0 1 1024M 0 rom root@debian:~# ./partdisks.sh sda sdd Bölümleme türü [ Mirror (m) (default) / stripe (s) ] : s DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4 Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Creating new GPT entries in memory. The operation has completed successfully. DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5 Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Warning: Partition table header claims that the size of partition table entries is 0 bytes, but this program supports only 128-byte entries. Adjusting accordingly, but partition table may be garbage. Creating new GPT entries in memory. The operation has completed successfully. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk └─sda1 8:1 0 20G 0 part sdb 8:16 0 20G 0 disk ├─sdb2 8:18 0 512M 0 part ├─sdb3 8:19 0 1G 0 part └─sdb4 8:20 0 18,5G 0 part sdc 8:32 0 20G 0 disk ├─sdc2 8:34 0 512M 0 part /boot/efi ├─sdc3 8:35 0 1G 0 part └─sdc4 8:36 0 18,5G 0 part sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 20G 0 part sr0 11:0 1 1024M 0 rom root@debian:~#
Bölümleme işlemimiz tamamlandı, mirror olacak disk için boot klonlama ve grub install işlemlerini yapalım.
root@debian:~# DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3 root@debian:~# BOOT_DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2 root@debian:~# umount /boot/efi root@debian:~# dd if=$BOOT_DISK-part2 of=$DISK-part2 status=progress root@debian:~# efibootmgr -c -g -d $DISK -p 2 -L "debian-2" -l '\EFI\debian\grubx64.efi' root@debian:~# mount /boot/efi root@debian:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk └─sda1 8:1 0 20G 0 part sdb 8:16 0 20G 0 disk ├─sdb2 8:18 0 512M 0 part /boot/efi ├─sdb3 8:19 0 1G 0 part └─sdb4 8:20 0 18,5G 0 part sdc 8:32 0 20G 0 disk ├─sdc2 8:34 0 512M 0 part ├─sdc3 8:35 0 1G 0 part └─sdc4 8:36 0 18,5G 0 part sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 20G 0 part sr0 11:0 1 1024M 0 rom root@debian:~#
Raid-10 yapımızı oluşturma vakti geldi.
root@debian:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda2 8:2 0 512M 0 part /boot/efi ├─sda3 8:3 0 1G 0 part └─sda4 8:4 0 18,5G 0 part sdb 8:16 0 20G 0 disk ├─sdb2 8:18 0 512M 0 part ├─sdb3 8:19 0 1G 0 part └─sdb4 8:20 0 18,5G 0 part sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 20G 0 part sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 20G 0 part root@debian:~# ls -l /dev/disk/by-id/ | grep -P "^.*[^\d]+$" lrwxrwxrwx 1 root root 9 Mar 20 20:29 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0 -> ../../sda lrwxrwxrwx 1 root root 9 Mar 20 20:29 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1 -> ../../sdb lrwxrwxrwx 1 root root 9 Mar 20 20:29 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2 -> ../../sdc lrwxrwxrwx 1 root root 9 Mar 20 20:29 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3 -> ../../sdd root@debian:~# zpool status pool: bpool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. config: NAME STATE READ WRITE CKSUM bpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: scrub repaired 0B in 00:00:14 with 0 errors on Fri Mar 18 03:22:53 2022 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 errors: No known data errors root@debian:~# zpool attach bpool scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part3 root@debian:~# zpool attach rpool scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part4 root@debian:~# zpool add rpool mirror scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1
resilvering işlemi tamamlandıktan sonraki pool yapımızı kontrol edelim.
root@debian:~# zpool status pool: bpool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: resilvered 63.3M in 00:00:03 with 0 errors on Sun Mar 20 20:32:05 2022 config: NAME STATE READ WRITE CKSUM bpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part3 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: resilvered 5.93G in 00:03:43 with 0 errors on Sun Mar 20 20:36:05 2022 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part4 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 ONLINE 0 0 0 errors: No known data errors root@debian:~#
Sistem diskine ait 1 adet mirror ve rpool üzerinde stripe pool olarak ekli iki adet disk. Hayırlı olsun.
Şimdi de yaptığımızı bozalım ve sistemi eski haline getirelim 🙂
root@debian:~# zpool remove rpool mirror-1 root@debian:~# zpool detach rpool scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part4 root@debian:~# zpool status rpool pool: rpool state: ONLINE scan: resilvered 5.93G in 00:03:43 with 0 errors on Sun Mar 20 20:36:05 2022 remove: Removal of vdev 1 copied 2.48M in 0h0m, completed on Sun Mar 20 20:40:16 2022 1.31K memory used for removed device mappings config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 errors: No known data errors root@debian:~# zpool detach bpool scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part3 root@debian:~# zpool status bpool pool: bpool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: resilvered 63.3M in 00:00:03 with 0 errors on Sun Mar 20 20:32:05 2022 config: NAME STATE READ WRITE CKSUM bpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 ONLINE 0 0 0 errors: No known data errors root@debian:~# zpool status pool: bpool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: resilvered 63.3M in 00:00:03 with 0 errors on Sun Mar 20 20:32:05 2022 config: NAME STATE READ WRITE CKSUM bpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part3 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scan: resilvered 5.93G in 00:03:43 with 0 errors on Sun Mar 20 20:36:05 2022 remove: Removal of vdev 1 copied 2.48M in 0h0m, completed on Sun Mar 20 20:40:16 2022 1.31K memory used for removed device mappings config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0-part4 ONLINE 0 0 0 errors: No known data errors root@debian:~#
Şimdi aynı işlemi 4 adet img dosyası üzerinde yapalım 🙂 dosyalarda boot kısmı olmadığından tek komutla işlemi tamamlayabiliriz.
root@debian:/home/yasin/test-imgs# for i in $(seq 1 4); do dd if=/dev/zero of=test$i.img bs=1M count=1024 status=progress; done root@debian:/home/yasin/test-imgs# zpool create testpool mirror /home/yasin/test-imgs/test1.img /home/yasin/test-imgs/test2.img mirror /home/yasin/test-imgs/test3.img /home/yasin/test-imgs/test4.img root@debian:/home/yasin/test-imgs# zpool status testpool pool: testpool state: ONLINE config: NAME STATE READ WRITE CKSUM testpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 /home/yasin/test-imgs/test1.img ONLINE 0 0 0 /home/yasin/test-imgs/test2.img ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 /home/yasin/test-imgs/test3.img ONLINE 0 0 0 /home/yasin/test-imgs/test4.img ONLINE 0 0 0 errors: No known data errors root@debian:/home/yasin/test-imgs# zpool destroy testpool
RAIDZ1 (RAID-5 Single Parity) yapılandırması.
Minimum 2 tavsiye edilen 3 disk ile oluşturacağımız bu yapılandırmada yalnızca rpool veya bpool ve rpool dahil edebiliriz. Ben 3 diski de birbirinin eşiti olarak yapılandıracağım böylece hangi disk sökülürse sökülsün sistem yeniden başlatıldığında bile hatasız şekilde yoluna devam edebilecektir.
RAIDZ hakkında bilinmesi gereken şey ilk kurulum sırasında pool oluşturulurken raidz olarak oluşturulması gerekmekte, stripe veya mirror örneklerinde olduğu gibi ekleyerek bu yapılandırmayı kök dosya sistemi için yapamayız, installer içerisinde sorulduğunda mirror, raidz, raidz2 şeklinde belirterek bu kurulumu yapabilirsiniz.
Peki raidz olmayan bir sisteme 3 adet disk ekleyip yeni bir pool oluşturup o pool için aktif edebilir miyiz? evet, hadi yapalım.
Yukarıda wipedisks.sh ve partdisks.sh betiklerini kullanarak yoluma devam edeceğim,
root@debian:~# ./wipedisks.sh sda /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1 ... /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2 ... /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3 ... GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda2 8:2 0 512M 0 part /boot/efi ├─sda3 8:3 0 1G 0 part └─sda4 8:4 0 18,5G 0 part sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk root@debian:~# ./partdisks.sh sdb sdc sdd Bölümleme türü [ Mirror (m) (default) / stripe (s) ] : s DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1 ... The operation has completed successfully. DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2 ... The operation has completed successfully. DISK=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3 ... The operation has completed successfully. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda2 8:2 0 512M 0 part /boot/efi ├─sda3 8:3 0 1G 0 part └─sda4 8:4 0 18,5G 0 part sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 20G 0 part sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 20G 0 part sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 20G 0 part root@debian:~#
Bölümlerimizi oluşturduk sırada bu bölümleri kullanarak raidz pool oluşturmak var. Pool oluşturulduktan sonra mountpoint belirtmemiz mount olması için yeterli.
root@debian:~# zpool create rzpool raidz /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 -f root@debian:~# zpool status rzpool pool: rzpool state: ONLINE config: NAME STATE READ WRITE CKSUM rzpool ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 ONLINE 0 0 0 errors: No known data errors root@debian:~# zfs set mountpoint=/home/yasin/rzpool rzpool root@debian:~# zpool status rzpool pool: rzpool state: ONLINE config: NAME STATE READ WRITE CKSUM rzpool ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 ONLINE 0 0 0 errors: No known data errors root@debian:~# df -h /home/yasin/rzpool/ Dosyasistemi Boy Dolu Boş Kull% Bağlanılan yer rzpool 39G 128K 39G 1% /home/yasin/rzpool root@debian:~# zpool destroy rzpool
Şu anda /home/yasin/rzpool klasörüm aktif durumda ve temelinde 3 adet diskle oluşturulmuş raidz var. Son verdiğim komutla rzpool yok edildi. zpool create -O mountpoint=… şeklinde pool oluşturulurken mountpoint belirtilebilir ancak yazının ilerleyen kısmında dosya sistemi üzerinde belirtilen pool için özellik açma, kapama örnekleri yapılacağından ayrı komut olarak işlemek istedim.
Aynı örneklemeyi 3 adet dosya ile gerçekleştirelim.
root@debian:/home/yasin/test-imgs# for i in $(seq 1 3); do dd if=/dev/zero of=test$i.img bs=1M count=1024; done root@debian:/home/yasin/test-imgs# zpool create rzpool /home/yasin/test-imgs/test1.img /home/yasin/test-imgs/test2.img /home/yasin/test-imgs/test3.img root@debian:/home/yasin/test-imgs# zpool status rzpool pool: rzpool state: ONLINE config: NAME STATE READ WRITE CKSUM rzpool ONLINE 0 0 0 /home/yasin/test-imgs/test1.img ONLINE 0 0 0 /home/yasin/test-imgs/test2.img ONLINE 0 0 0 /home/yasin/test-imgs/test3.img ONLINE 0 0 0 errors: No known data errors root@debian:/home/yasin/test-imgs# zpool destroy rzpool root@debian:/home/yasin/test-imgs#
RAIDZ2 (RAID-6 Double Parity) yapılandırması.
Minimum 3 tavsiye edilen 4 disk gereken yapılandırmamız için sanal diskleri hazırladım, installer.sh içerisinde sorulduğunda raidz2 şeklinde raid level belirtilecek olursa kök dosya sistemi bu yapı üzerine kurulacaktır, sonradan yapma imkanımız olmadığından örneklememizi bu şekilde gerçekleştireceğim. installer script kullanımı için hazırlayacağım yazıda bunlara da değineceğimden burada bırakıyorum.
root@debian:~# ls -l /dev/disk/by-id/ | grep -P "^.*[^\d]+$" lrwxrwxrwx 1 root root 9 Mar 21 00:20 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-0 -> ../../sda lrwxrwxrwx 1 root root 9 Mar 21 00:20 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1 -> ../../sdb lrwxrwxrwx 1 root root 9 Mar 21 00:20 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2 -> ../../sdc lrwxrwxrwx 1 root root 9 Mar 21 00:20 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3 -> ../../sdd lrwxrwxrwx 1 root root 9 Mar 21 00:20 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4 -> ../../sde root@debian:~# zpool create -O mountpoint=/home/yasin/rz2pool rz2pool raidz2 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4-part1 root@debian:~# zpool status rz2pool pool: rz2pool state: ONLINE config: NAME STATE READ WRITE CKSUM rz2pool ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4-part1 ONLINE 0 0 0 errors: No known data errors root@debian:~# df -h /home/yasin/rz2pool/ Dosyasistemi Boy Dolu Boş Kull% Bağlanılan yer rz2pool 39G 128K 39G 1% /home/yasin/rz2pool root@debian:~# zpool destroy rz2pool
Dosyalar üzerinde de aynı işlemi yapalım
root@debian:/home/yasin/test-imgs# for i in $(seq 1 4); do dd if=/dev/zero of=test$i.img bs=1M count=1024; done root@debian:/home/yasin/test-imgs# zpool create rz2pool raidz2 /home/yasin/test-imgs/test1.img /home/yasin/test-imgs/test2.img /home/yasin/test-imgs/test3.img /home/yasin/test-imgs/test4.img root@debian:/home/yasin/test-imgs# zpool status rz2pool pool: rz2pool state: ONLINE config: NAME STATE READ WRITE CKSUM rz2pool ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 /home/yasin/test-imgs/test1.img ONLINE 0 0 0 /home/yasin/test-imgs/test2.img ONLINE 0 0 0 /home/yasin/test-imgs/test3.img ONLINE 0 0 0 /home/yasin/test-imgs/test4.img ONLINE 0 0 0 errors: No known data errors root@debian:/home/yasin/test-imgs# zpool destroy rz2pool root@debian:/home/yasin/test-imgs#
RAIDZ3 (Triple Parity) yapılandırması.
Bu yapılandırmanın herhangi bir RAID karşılığı yok, nevi şahsına münhasır cinsten 🙂 uygulama olsun yapalım. Minimum 4 tavsiye edilen 5 disk disk ile yapılabiliyor.
root@debian:~# zpool create -O mountpoint=/home/yasin/rz3pool rz3pool raidz3 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4-part1 root@debian:~# zpool status rz3pool pool: rz3pool state: ONLINE config: NAME STATE READ WRITE CKSUM rz3pool ONLINE 0 0 0 raidz3-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4-part1 ONLINE 0 0 0 errors: No known data errors root@debian:~# df -h /home/yasin/rz3pool/ Dosyasistemi Boy Dolu Boş Kull% Bağlanılan yer rz3pool 20G 128K 20G 1% /home/yasin/rz3pool root@debian:~# zpool destroy rz3pool
Aynı işlemi dosyalara ile de yapalım.
root@debian:/home/yasin/test-imgs# for i in $(seq 1 4); do dd if=/dev/zero of=test$i.img bs=1M count=1024; done root@debian:/home/yasin/test-imgs# zpool create rz3pool raidz3 /home/yasin/test-imgs/test1.img /home/yasin/test-imgs/test2.img /home/yasin/test-imgs/test3.img /home/yasin/test-imgs/test4.img root@debian:/home/yasin/test-imgs# zpool status rz3pool pool: rz3pool state: ONLINE config: NAME STATE READ WRITE CKSUM rz3pool ONLINE 0 0 0 raidz3-0 ONLINE 0 0 0 /home/yasin/test-imgs/test1.img ONLINE 0 0 0 /home/yasin/test-imgs/test2.img ONLINE 0 0 0 /home/yasin/test-imgs/test3.img ONLINE 0 0 0 /home/yasin/test-imgs/test4.img ONLINE 0 0 0 errors: No known data errors root@debian:/home/yasin/test-imgs# zpool destroy rz3pool root@debian:/home/yasin/test-imgs#
Yukarıda raidz1, raidz2 ve raidz3 yapılandırmalarında özellikle mount klasörüne df -h ile boş alan kontrolü yaptım, raidz1 ile 3 diskten 1 tanesini, raidz2 ile 4 diskten 1 tanesini kaybediyoruz, raidz3 ile 4 diskten 3 tanesini kaybediyoruz, kaybettiğimiz diskler bize veri güvenliği olarak dönse de hız ve kapasite noktasında kayıp ve maliyet artışı demek oluyor. Şahsen mirror + stripe (RAID-10) kişisel tavsiyem ve tercihim, bu şekilde yapılandırılmış bir ZFS sistemde disk ekleme-çıkartma işlemleri oldukça kolay olduğu gibi fiyat/hız+performans+güvenlik denkleminde ortalamanın üzerinde bir değer sunuyor. İlave olarak raidzX konfigürasyona sahip bir sistemi yeniden kurmadan bazı işlemleri yapmamız mümkün değil ne yazık ki.
RAIDZ1 + stripe [ RAID-50 ] yapılandırması.
Bu işlem için minimum 4 tavsiye edilen 6 adet diske ihtiyacımız olacak, temelde birbirine seri şekilde eklenmiş 2 adet raidz yapılandırması oluşturulmuş olacak. RAID-10 yerine tercih edilebilecek bir yapılandırma, daha fazla kapasaite , performans ve veri güvenliği demek ancak kişisel tercihim halen daha değişmedi, bir arıza durumunda bakım sorunu yüzünden…
root@debian:~# zpool create -O mountpoint=/home/yasin/rzpool rzpool \ raidz \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 \ raidz \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-6-part1 root@debian:~# zpool status rzpool pool: rzpool state: ONLINE config: NAME STATE READ WRITE CKSUM rzpool ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 ONLINE 0 0 0 raidz1-1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-6-part1 ONLINE 0 0 0 errors: No known data errors root@debian:~# df -h /home/yasin/rzpool/ Dosyasistemi Boy Dolu Boş Kull% Bağlanılan yer rzpool 77G 128K 77G 1% /home/yasin/rzpool root@debian:~# zpool destroy rzpool
RAIDZ2 + stripe [ RAID-60 ] yapılandırması.
Bu işlem için minimum 6 tavsiye edilen 8 adet diske ihtiyacımız olacak, temelde birbirine seri şekilde eklenmiş 2 adet raidz2 yapılandırması oluşturulmuş olacak.
root@debian:~# zpool create -O mountpoint=/home/yasin/rz2pool rz2pool \ raidz2 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-0-0-0-part1 \ raidz2 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-6-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-0-0-1-part1 root@debian:~# zpool status rz2pool pool: rz2pool state: ONLINE config: NAME STATE READ WRITE CKSUM rz2pool ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-0-0-0-part1 ONLINE 0 0 0 raidz2-1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-6-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-0-0-1-part1 ONLINE 0 0 0 errors: No known data errors root@debian:~# df -h /home/yasin/rz2pool/ Dosyasistemi Boy Dolu Boş Kull% Bağlanılan yer rz2pool 77G 128K 77G 1% /home/yasin/rz2pool root@debian:~# zpool destroy rz2pool
RAIDZ3 + stripe yapılandırması.
Bu işlem için minimum 8 tavsiye edilen 10 adet diske ihtiyacımız olacak, temelde birbirine seri şekilde eklenmiş 2 adet raidz3 yapılandırması oluşturulmuş olacak.
root@debian:~# zpool create -O mountpoint=/home/yasin/rz3pool rz3pool \ raidz3 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-0-0-0-part1 \ raidz3 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-6-part1 \ /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-0-0-1-part1 root@debian:~# zpool status rz3pool pool: rz3pool state: ONLINE config: NAME STATE READ WRITE CKSUM rz3pool ONLINE 0 0 0 raidz3-0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-1-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-2-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-0-0-0-part1 ONLINE 0 0 0 raidz3-1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-5-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-6-part1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-0-0-1-part1 ONLINE 0 0 0 errors: No known data errors root@debian:~# df -h /home/yasin/rz3pool/ Dosyasistemi Boy Dolu Boş Kull% Bağlanılan yer rz3pool 39G 128K 39G 1% /home/yasin/rz3pool root@debian:~# zpool destroy rz3pool
Yapılandırma Özeti :
- stripe (RAID-0) = 2 x 20G (40G) disk : 40G kullanılabilir alan ( %100 ).
- mirror (RAID-1) = 2 x 20G (40G) disk : 20G kullanılabilir alan ( %50 ).
- RAIDZ1 (Single Parity) = 3 x 20G (60G) disk : 39G kullanılabilir alan ( %66 ).
- RAIDZ2 (Double Parity) = 4 x 20G (80G) disk : 39G kullanılabilir alan ( %50 ).
- RAIDZ3 (Triple Parity) = 4 x 20G (80G) disk : 20G kullanılabilir alan ( %25 ).
- RAIDZ1 + stripe [RAID-50] (Single Parity) = 6 x 20G (120G) disk : 77G kullanılabilir alan ( %66 ).
- RAIDZ2 + stripe [RAID-60] (Double Parity) = 8 x 20G (160G) disk : 77G kullanılabilir alan ( %50 ).
- RAIDZ3 + stripe (Triple Parity) = 8 x 20G (160G) disk : 39G kullanılabilir alan ( %25 ).
Sonraki adım
Yazının bu seviyede uzayacağını tahmin etmemiştim, zfs komutları, dosya sistemi özellikleri, snapshot, send-receive, compression, quota, zvol, ayrıca hazırlamam gerekecek bir yazı halini aldı. installer script kullanımı ve dosya sisteminin gündelik kullanımı olmak üzere 1 adet yazı borcum var, takipte kalın.
ZFS dosya sistemine sahip bir sistemin kullanımı üzerine örnekleri ile yazım, söz verdiğim gibi yayında.
Allah’a emanet olun.
[…] önceki yazımda, dosya sistemi nedir, ZFS dosya sistemi nedir, RAID nedir, ZFS ile RAID çeşitleri nelerdir, ZFS […]
[…] Debian Kök Dosya Sistemi olarak ZFS […]