Bir btrfs subvolume kaldırılarak ne kadar alan serbest bırakılır?


11

Bir Btrfs diskindeki bir (veya birkaç) alt birimi kaldırırsam (gerçekte onları kaldırmadan) ne kadar alan açacağımı hesaplamanın herhangi bir yolu var mı? "Şu anda sizin için hesaplama yapacak hiçbir kod" olduğunu biliyorum , ama nasıl yapardınız?

Acaba neden bu kadar yavaş olacağını söylüyorlar? Hem bir alt hacmi gerçekten kaldırmak hem de boş alanı sormak benim deneyimime göre çok hızlı, aynı şeyi varsayımsal olarak yapmak neden bu kadar yavaş olur?


2
Umarım btrfs.wiki.kernel.org/index.php/Btrfs_mailing_list , btrfs (veya başka bir çekirdek bileşen) iç çalışması hakkında sorular sormak için daha iyi bir yer olabilir. Cevabı alırsanız, lütfen buraya da gönderin. Cevabı kendim merak ediyorum.
Adam Ryczkowski

1
"Hem bir alt cildi gerçekten kaldırmak hem de boş alan sormak benim deneyimime göre çok hızlı" diyorsunuz. Bir alt birimi sildiğinizde , bu yalnızca alt hacmi silmek için işaretler , yalnızca zaman aldığında bu blokları serbest bırakır (bu, 'taahhüt yok' mesajının bunu yaptığınız anlamına gelir), yani hayır, silmek değil mutlaka çok hızlı.
etskinner

Yanıtlar:


3

btrfs quotaVe btrfs qgroups(kota grupları) 'na bir göz atmalısınız .

Temel qgroupsolarak tam olarak istediğinizi yapın, alt hacimler tarafından ne kadar alan ayrıldığını takip ederler. qgroupBir btrfsdosya sistemi için işlevselliği etkinleştirmek için aşağıdakileri yapmanız gerekir:

# btrfs quota enable /path/to/btrfs/filesystem

Ancak, bunu yapmadan önce, özellikle de birçok alt hacimli büyük dosya sistemleri için biraz zaman alacak olan verilerin tam bir yeniden hesaplanmasını tetiklediği konusunda uyarılmalıdırqgroup . Bu işlem arka planda eşzamansız olarak çalışır. Zaten durumunu kontrol edebilirsiniz qgroupsile

# btrfs qgroup show /path/to/btrfs/filesystem

Bu size böyle bir çıktı verecektir:

WARNING: rescan is running, qgroup data may be incorrect
qgroupid         rfer         excl
--------         ----         ----
0/5         843.69GiB     61.91MiB
0/4881      811.06GiB      9.34GiB
0/7990      867.32GiB    329.91MiB
0/8400      867.17GiB     37.64MiB

(İlk satırdaki uyarı, yeniden tarama devam ettiği sürece mevcuttur.)

Btrfs qgroupher alt hacim için otomatik olarak bir a oluşturur . Bu durumda, alt hacim kimlikleri 4881, 7990 ve 8400 olan üç alt hacim vardır. Ön eğik çizgiden önceki kısım, seviyesidir qgroup. Her alt hacim qgroup0 seviyesindedir. Ek olarak qgroup, her zaman ID 5'e sahip olan ve btrfs dosya sisteminin köküne karşılık gelen özel bir seviye 0 vardır.

qgroupYukarıdaki her çıktı için ne kadar alanın başvurduğunu gösterir. Bu, karşılık gelen alt hacmin, toplam boyutu gösterilen sayıya eşit olan dosyalar içerdiği anlamına gelir.

Ancak, anlık görüntüler ve btrfs alt hacimlerinin yazma-kopyalama özelliği nedeniyle dosyalar paylaşılabilir. Bu, dosyaların içeriğine (veya aslında uzantılarına) birden fazla alt hacim tarafından referans verilebileceği anlamına gelir. Bu, her bir alt hacim tarafından sadece ne kadar alan tahsis edildiğini ve başka herhangi bir alt hacim ile paylaşılmadığını gösteren ikinci sayı ile ifade edilir . Bir alt birimi silerseniz, bu gerçekten serbest bırakılacak alandır.

Birden fazla alt hacmi silerseniz ne kadar alanın boşaltılacağını öğrenmek istiyorsanız, yukarıda belirtilen seviyeleri kullanabilirsiniz. bir hiyerarşiqgroups içinde düzenlenir ve üst düzeylerdeki gruplar (0'dan yüksek) alt düzeylerin bilgilerini toplar .

Böylece, 4881 ve 7990 alt hacimlerinin (yukarıdaki örnekte) silinmesi durumunda ne kadar alanın serbest bırakılacağını bulmak için qgroup, seviye 1'de yeni (keyfi olarak ID 0 ile, ancak burada istediğinizi seçebilirsiniz) oluşturun

# btrfs qgroup create 1/0 /path/to/btrfs/filesystem

Ardından, yeni oluşturulan öğeyi silmek istediğiniz alt hacimlere qgroupüst qgroupsöğe olarak atayın

# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem

Bu, kota bilgilerinin bir süre sonra yeniden taranmasını tetikler. Eğer bitmişse ve şimdi yayınlıyorsanız

# btrfs qgroup show -p /path/to/btrfs/filesystem

şöyle bir çıktı alırsınız:

qgroupid         rfer         excl parent
--------         ----         ---- ------
0/5           1.38TiB      2.51GiB ---
0/4881        1.11TiB     10.86GiB 1/0
0/7990        1.23TiB    502.41MiB 1/0
0/8400        1.34TiB      1.69GiB 1/0
1/0           1.51TiB    132.23GiB ---

( Üst / alt ilişkisini gösteren çıktıya sütun -peklemek için bayrağı ekledim .)parentqgroups

Şimdi ile satır, qgroup 1/0silmek istediğiniz her iki alt hacim tarafından ne kadar alanın başvurulduğunu söyler ve daha da önemlisi, yalnızca onlar tarafından ne kadar alan ayrıldığını gösterir . Bu, her iki alt birimi de silerseniz boşaltılacak alan miktarıdır.

Acaba neden bu kadar yavaş olacağını söylüyorlar?

Bunun nedeni, anlık görüntülerin yanı sıra btrfs'nin yazma üzerine kopyalama özelliğidir. Btrfs'de (normalde) bir anlık görüntü oluşturursanız, yeni oluşturulan alt hacimdeki anlık görüntüyü içeren tüm gerçek veriler anlık görüntünün kaynağı ile paylaşılır. Yalnızca kaynakta bir dosya değiştirildiğinde veya değiştirildiğinde farklı içeriğe (uzantılara) işaret eder. Bu, bir alt hacim silindiğinde gerçekte ne kadar alanın boşaltılacağını değerlendirmeyi çok zorlaştırır, çünkü diğer alt hacimlerle paylaşılan tüm alanı hesaba katmanız gerekir.

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.