ZFS: zvol'u zpool'daki tüm disklere yeniden dağıtmak?


12

ZFS'den belirli bir dosya sistemini zpool'undaki tüm diskler üzerinde yeniden dağıtmanın istenebileceği bir yol var mı?

FC üzerinden LUN olarak dışa aktarılan sabit boyutlu bir ZFS birimine sahip olduğum bir senaryo düşünüyorum. Mevcut zpool küçük, sadece iki adet 1 TB aynalı disk ve zvol toplam 750 GB. Aniden zpool'un boyutunu, örneğin 12 1 TB'lık disklere genişletecek olsaydım, zvol'un hala sadece ilk iki iğde 'etkin' olacağına inanıyorum.

Daha fazla iğ = daha fazla IOPS olduğu düşünüldüğünde, onlardan faydalanmak için zvolü 12 iğde 'yeniden dağıtmak' için hangi yöntemi kullanabilirim?

Yanıtlar:


8

Yeniden dengelemek için verilerinizi genişletilmiş zpool'a yeniden yazmanız gerekir. Aksi takdirde, zaman geçtikçe, yazılarınız tüm havuza dağıtılacaktır.


Bunu yapmanın hızlı ve kolay bir yolu olduğunu sanmıyorum ...?
büyümek

7
zfs send | zfs recv
the-wabbit

Bunu test edeceğim - bu kadar basit bir şeyin yapacağına inanamıyorum. :)
büyümek

3
Rapor verin, bunu hiç yapmadım ve merak ediyorum.
StrangeWill

3

Zvol'ün sadece ilk cihazlarda depolanmasına gerek yoktur. Havuzu büyütürseniz, ZFS güncellenmiş verileri mevcut tüm temel aygıtlara dağıtır. ZFS ile sabit bölümleme yoktur.


4
Deneyimlerime göre, bu doğru değil. Hiçbir sabit sabitleme olmasa da, ZFS, verileri istemci IO isteklerinin dışında kendi özgür iradesi etrafında taşımaz. Açıkladığım senaryoyu oluşturursanız, daha fazla disk ekleyin ve ardından orijinal LUN'da ağır bir IO yapın, dizideki ilk iki diskte yalnızca etkinlik göreceksiniz, çünkü veriler buradadır. ewwhite zamanla dengelendiğine dikkat çekiyor, ancak bunu yapmanın daha hızlı bir yolu olup olmadığını merak ediyorum.
büyümek

1
Belirsiz olsaydım özür dilerim. Tabii ki, mevcut veriler sihirli bir şekilde hareket etmeyecek. Yalnızca güncellenen veriler eşit olarak taşınır. "Yeni ES'ler" ile kastettiğim budur. Mevcut statik veriler söz konusu olduğunda, bloklar bir kereden fazla okunduğu sürece önbellekleme performansı da artıracaktır.
jlliagre

0

Bu ewwhite'ın cevabının "devamı" dır:

Yeniden dengelemek için verilerinizi genişletilmiş zpool'a yeniden yazmanız gerekir

Ben Ubuntu 14.04 ana bilgisayarında bu otomatikleştirmek için bir PHP komut dosyası ( github kullanılabilir ) yazdı .

Biri sadece PHP CLI aracını yüklemeli sudo apt-get install php5-clive betiği çalıştırmalı, havuz verilerinizin yolunu ilk argüman olarak geçirmelidir. Örneğin

php main.php /path/to/my/files

İdeal olarak, betiği havuzdaki tüm veriler üzerinde iki kez çalıştırmalısınız. İlk çalıştırma sürücü kullanımını dengeler, ancak ayrı ayrı dosyalar en son eklenen sürücülere aşırı tahsis edilecektir. İkinci çalıştırma, her dosyanın sürücüler arasında "adil bir şekilde" dağıtılmasını sağlar. Eşit olarak söylemek istiyorum, çünkü sadece farklı büyüklükteki çiftleri (4 TB ayna + 3 TB ayna + 3 TB ayna) benim baskın 10 ile olduğum gibi sürücü kapasitelerini karıştırmazsanız eşit olarak dağıtılacak.

Komut Dosyası Kullanmanın Nedenleri

  • Sorunu "yerinde" düzeltmek zorundayım. Örneğin, verileri başka bir sisteme yazamıyorum, buradan silemiyorum ve hepsini tekrar yazamıyorum.
  • Havuzumu% 50'nin üzerinde doldurdum, bu yüzden orijinali silmeden önce tüm dosya sistemini bir kerede kopyalayamadım.
  • Yalnızca iyi performans göstermesi gereken belirli dosyalar varsa, komut dosyası bu dosyalar üzerinde iki kez çalıştırılabilir. Ancak, ikinci çalışma sadece ilk çalışma sürücü kullanımını dengelemeyi başardıysa etkilidir .
  • Çok fazla veri var ve ilerleme kaydedildiğini görmek istiyorum.

Drive Kullanımının Bile Sağlandığını Nasıl Anlarım?

Iostat aracını belirli bir süre (örn. iostat -m 5) Kullanın ve yazma işlemlerini kontrol edin. Eğer aynılarsa, eşit bir yayılma elde ettiniz. Aşağıdaki ekran görüntüsünde bile mükemmel değiller, çünkü RAID 10'da 2 çift 3 TB sürücülü bir çift 4 TB çalıştırıyorum, bu yüzden iki 4 biraz daha fazla yazılacak. resim açıklamasını buraya girin

Disk kullanımınız "dengesiz" ise, iostat, yeni sürücülerin orantısız olarak yazıldığı aşağıdaki ekran görüntüsü gibi bir şey gösterecektir. Ayrıca yeni sürücüler olduklarını da söyleyebilirsiniz çünkü okumalar 0'dadır, çünkü üzerinde veri yoktur. resim açıklamasını buraya girin

Senaryo mükemmel değil, sadece bir geçici çözüm, ama bu arada benim için ZFS bir gün BTRFS (parmak çarpı işareti) gibi bir yeniden dengeleme özelliği uygulayana kadar çalışıyor.


Oh my ... Wow ...
ewwhite

0

Bu bir hack biraz ama zvol kullanarak makineyi durdurduğunuz göz önüne alındığında, zfs dosya sistemini bar.zvol adlı yerel ana bilgisayarda yerel bir dosyaya gönderebilir ve daha sonra dosya geri sistemini tekrar alabilirsiniz. Bu sizin için verileri yeniden dengelemelidir.

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

bulduğum en iyi çözüm, verilerinizin yarısını genişletilmiş havuzda çoğaltmak ve daha sonra orijinal çoğaltılan verileri silmekti.


3
Detaylandırabilir misin?
ewwhite

@reco: zvols dosya sistemleri değildir, bu nedenle bunlardaki verileri silemez veya çoğaltamazsınız. Verilerin üzerine yazabilirsiniz, ancak verileri temeldeki birimlerdeki verileri etkili bir şekilde kapsayacak şekilde aynı içerikle yapmadığınız sürece bu bozulur, ancak bir yıl önce zaten beyazın önerdiği şey budur.
jlliagre

Evet haklısın. etrafa bakıyordum ve aynı konuyu araştırıyordum. ne fark zfs vdevs üzerinden veri yeniden dağıtım gerekli değildir. ancak yine de herhangi bir nedenle veri çoğaltmak ve orijinalleri silmek zfs'nin zaman içinde yapacağı işi hızlandıracaktır.
reco

1
Verileri vdevs üzerinden yeniden dağıtmak meşru bir istektir. Korkarım hala eksik olan soru, dosya sistemleri değil, zvollerle ilgili. Bir birimdeki verileri çoğaltamaz veya silemezsiniz; bu anlamlı değildir.
jlliagre

merhaba jlliagre. evet haklısın üzgünüm
reco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.