Farklı boyutta diske sahip çok cihazlı BTRFS dosya sistemi


14

Bir 500GB diskten oluşan mevcut bir BTRFS dosya sistemim var ve sadece ev sunucumun depolama kapasitesini artırmak için 2 TB'lık bir disk aldım ve yeni diski mevcut dosya sistemine eklemek istiyorum. Okuduğum kadarıyla, hiçbir BTRFS kurulumu, daha büyük ve daha küçük disk arasındaki boyut farkını boşa harcamadan farklı boyutlardaki diskleri işleyemiyor gibi görünüyor, ancak BTRFS'de yeniyim ve bir şey kaçırmış olabilirim, bu yüzden bir kurulum var mı? Bu, bir dosya sisteminde iki diski boşa harcamadan birleştirmeme olanak tanıyabilir mi?


Alttaki diskleri nasıl kullanıyorsunuz? LVM ile mi?
Andy Smith

@Andy, tutacağa LVM / RAID tarzı çoklu diskleri btrfs, kontrol bu .
OneOfOne

Hata! Benim hatam. Şerefe ;-)
Andy Smith

Yanıtlar:


4

Btrfs veri ve Meta veriler için farklı baskın seviyeleri kullanabilir:

varsayılan (bir disk için bile) meta veriler (dizinler vb.) için raid1 ve veriler için raid0'dır.

Bunu değiştirmediyseniz, ikinci diski ekleme ve yeniden dengeyi çalıştırma konusunda sorun yaşamayacaksınız. çünkü yalnızca meta veriler her iki diske de kopyalanacaktır (meta veri boyutunuzu ile görebilirsiniz btrfs filesystem df /). Disklerinizden herhangi birinin başarısız olması durumunda verilerin kaybedildiğini unutmayın.

2 tb disk sooooooooo 500g'den çok daha büyük olduğundan, yenisini ekleyip eskisini kaldırırsanız belki de daha iyi oranlar verir (belirli bir sürücünün başarısız olma olasılığı, sürücülerin ikisinden de çok daha düşüktür. ) başarısız.

raid dizisine daha sonra (daha benzer boyutlu sürücülerle) sahip olmayı planlıyorsanız, hem veri hem de meta veriler için raid1 ile yeni sürücüde dosya sistemini yeniden oluşturmak ve her şeyi kopyalamak isteyebilirsiniz. daha sonra daha fazla paranız olduğunda ikinci 2 tb sürücü satın alın.

ps: tek bir sürücüde raid1 kullanmak, verilerin bu sürücüdeki iki konumda saklanacağı (bozulmaya karşı koruma sağlamak için) ve depolama alanınızı azaltacağı anlamına gelir (meta veriler için gerçekten iyi bir fikir).

pss: cidden, meta veriler için raid1 kullanmamaya çalışmayın. psss: btrfs baskın seviyelerini dinamik olarak değiştirme yeteneği kazanma şansı çok yüksektir.


Şahsen ben btrfs raid5 ve raid6 desteği var en kısa sürede benim btrfs fs / dizileri / ne-do-i-call-bu yeniden yaratmayı planlıyorum.
Arthur Ulfeldt

12

Çok cihazlı Btrfs dosya sisteminin veri blokları için kullandığınız profile bağlıdır.

  • RAID0 (veri blokları için varsayılan) kullandığınızda, her disk yalnızca dizideki en küçük diskin kapasitesine kadar doldurulabilir.

  • Veri blokları için "tek" profili kullandığınızda, her disk tam kapasitesine kadar doldurulur. Örneğinmkfs.btrfs -d single /dev/sda /dev/sdb

2 TB ve 3 TB disk ile bir dosya sunucum var. Bir USB flash sürücüden Ubuntu 12.10'u başlatır. İlk önce Btrfs dosya sistemini seçeneksiz oluşturdum -d single:

mkfs.btrfs /dev/sda /dev/sdb

Sonuç olarak sadece yaklaşık 4 TB (3.45 ikili TB dosya verisi) depolayabiliyordum.

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 3.22TB
 devid    2 size 2.73TB used 1.82TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data, RAID0: total=3.45TB, used=3.22TB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=264.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.29GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  3.3T  241G  94% /mnt/btrfs1

3 used 1.82TBTB sürücü için not edin .

Sonra veri bloklarını RAID0'dan "single" profiline dönüştürmek için "balance" komutunu kullandım:

btrfs balance start -dconvert=single /mnt/btrfs1

4 TB verilerinin dengelenmesi çok uzun sürdü (yaklaşık 30 saat). Ancak tamamlandıktan sonra, tam 5 TB'ı (4.36 ikili TB dosya verisi) kullanabilirim.

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 4.34TB
 devid    2 size 2.73TB used 2.73TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data: total=4.36TB, used=4.34TB
System, RAID1: total=40.00MB, used=500.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.01GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  4.4T   27G 100% /mnt/btrfs1

2

Ubuntu'da btrfs ile birden fazla cihaz kullandım ve gayet iyi çalıştı. Btrfs'nin aslında standart RAID düzeylerini uygulamadığını unutmayın. İsteğe bağlı şeritleme ve yansıtma uygular, ancak gerçek RAID'i uygular.


1

Farklı boyutlardaki sürücüleri btrfs cinsinden birleştirmek mümkündür.
Ancak şu anda btrfs ENOSPC'yi (cihazda yer kalmamış) çok iyi işlemiyor.

Örneğin, RAID0 (şeritli) diziye 3 sürücü taktım. 1x500GB, 1x250GB, 1x160GB.
800-900GB arasında bir disk alanınız olacağını varsayarsınız.

Bu nedir df -h: gösterileri
/ dev / sdf 848G 615G 234G% 73 / medya / btrfs

Ancak dizide daha fazla veri depolayamıyorum. (Boş yer kalmadı)

btrfs filesystem df /media/btrfsbana bunu gösterir:
Veri: toplam = 612.51GB, kullanılmış = 612.51GB
Meta veri: toplam = 1.62GB, kullanılmış = 990.73MB
Sistem: toplam = 12.00MB, kullanılmış = 48.00KB

Yeniden dengeleme bile yardımcı olmadı.

Bir posta listesinde şu çağrıyı gördüm:
en küçük sürücünün boyutu * dizideki sürücü sayısı (
biraz daha fazla alanım olmasına rağmen: 160GB yerine 312GB * 3 = 480GB)

Dolayısıyla, şu andaki geliştirme şansı, btrfs bir dizide farklı boyutları desteklese bile sahip olduğunuz tüm alanı kullanamayacağınızdır.

2.6.35-22-jenerik çekirdek ile Ubuntu 10.10 kullanıyorum.


En azından dosya başına / dizin bazında farklı baskın düzeylerini destekleyene kadar ne istediğinizi destekleyeceğini sanmıyorum. Raid0 (şerit) için, her bir aygıtın eşit boyutlu bölümlerini 3 aygıtta da tutmak için btrfs gerekir. Tek bir cihazın 500 GB'ını kullanmanıza izin veriyorsa nasıl yapabilir? "Raid0" yerine "single" kullandıysanız (yayınladığınızda bu seçeneğin mevcut olduğundan emin değilsiniz), btrfs dosyaları hiçbir yerde kopyalamaya çalışmaz ve tüm cihazlarda tüm alanı kullanmanıza izin verir. Ancak baskın seviyeleri için bu mantıklı değil: baskın seviyesinin tanımını ihlal etmeye çalışıyorsunuz.
13:22

Boşver, yanılıyorum. btrfs raid0 / 1, tüm cihazlara değil, yalnızca 1 diğer cihaza şerit / ayna çizer, bu nedenle 1TB + 500GB + 500GB, raid0 ve raid1 için tam olarak 1 TB + 1 TB kadar iyi çalışır (en azından Linux 3.0'dan itibaren). Linux 3.0'dan önce, tanımladığınız sorun vardı.
13:11

1

Güncelleme: Linux 3.0 piyasaya sürülmeden önce aşağıdaki cevap yazılmıştır. Linux 3.0, yarı-yuvarlak-robin yamasını içerir.

Veri yansıtma veya şeritleme yaparken, ikinci ayna veya şerit parçasının boş alana sahip başka bir cihaza tahsis edilmesi gerekir. BTRFS, parçaları farklı boyutlarda cihazlarınız varsa alan kaybına neden olabilecek şekilde, yuvarlak döngüye sahip cihazlara ayırır.

Bir yoktur yarı-yuvarlak robin yama bu konuda geliştirmek için boru hattı. Tabii ki, 500GB ve 2 TB'lık bir diskiniz varsa, tüm parçaları farklı cihazlarda eşleştirmek hala imkansızdır. Yama daha çok, her bir küçük diskin diğer küçük disk yerine büyük diskle yansıtmayı / şeritlemeyi tercih etmesi gereken 1 x 1 TB + 2 x 500 GB gibi durumlar için tasarlanmıştır.

Sizin durumunuzda, verileriniz için "tek" modu kullanırım ( mkfs.btrfs -d single). Parçalar bu modda eşleştirilmedi, bu yüzden farklı boyutlardaki cihazlarda sorun olmayacağını düşünüyorum. Yine de test etmedim.


0

Bu sorun yalnızca gelen, btrfs-raıd1 kurulumları için geçerli Sorunlar sayfa:

  • Tahsisat yuvarlak devir esasına göre yapılır. Eşleşmeyen sürücülerden (farklı boyutlardaki birimler) oluşan bir birimde raid1 stratejiniz varsa, en büyük sürücünüzde çok fazla alan bırakarak daha küçük biriminiz dolar. 'Df' ve 'btrfs dosya sistemi df [mountpoint]' arasında herhangi bir tutarsızlık varsa VE son komut da "toplam" ve "kullanılmış" öğelerinin "Veri" satırında aynı olduğunu gösteriyorsa, bunun bir sorun olduğunu doğrulayabilirsiniz. . Yeniden dengeleme bu sorunu azaltabilir. (2.6.33)
    • Ses düzeyiniz bu şekilde dolarsa, yeniden dengeleme hızlı bir şekilde ENOSPC'ye ("Hata NO SPaCe cihazda kalmaz") neden olabilir. Bu çıkmazı çözmek için nispeten büyük bir dosyayı silmeniz gerekebilir, bu durumda yeniden dengeleme başarılı olacaktır. (2.6.33)
    • Yeniden dengeleme, uzun süre boyunca çok yoğun CPU kullanımına neden olabilir. (2.6.34 ve 2.6.35)

Kendinizi tekrarlamanız için üzgünüm, ancak yeni cihazı eklemek üzereyim ve emin olmam gerekiyor. RAID0 hakkında denetlenen tüm kaynaklar, disklerin aynı boyutta olması gerektiğini belirtir (örn. Freebsd geom doc: "G / Ç istekleri okumak veya yazmak için serpiştirilmiş olduğundan, RAID0 şeridindeki her disk aynı boyutta olmalıdır paralel olarak birden fazla diske bağlayın. "). Btrfs ile çalıştığını teyit edebilir misiniz lütfen?
fokenrute

Üzgünüm, onaylayamadığım çok cihazlı btrfs'im yok, ancak bulamadığım hiçbir şey raid0 + btrfs için aynı cihaz boyutuna sahip olmakla ilgili bir şey söylemiyor, ancak yeterli zamanınız varsa, yeni diski 1tb / 1tb, eski diski bölümlerden birine yedekleyin, boş 1 tb ekleyin, eğer çalışıyorsa 2. parition ekleyin.
OneOfOne
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.