Kullanılmayan alanı sıfırlarla (btrfs) temizleyin


10

Kullanılmayan alanı sıfırlarla nasıl temizleyebilirim? ( Btrfs dosya sistemi için araç istiyorum )

Daha akıllıca bir şey arıyorum

cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero

FSArchiver gibi "kullanılmış alan" arıyor ve kullanılmayan ama karşıt site yok sayar.

Amaç: Bölüm görüntülerini sıkıştırmak istiyorum, bu nedenle kullanılmayan alanı sıfırlarla doldurmak şiddetle tavsiye edilir.

Btw. Ext3, ext4 için: Kullanılmayan alanı sıfırlarla (ext3, ext4) temizleyin . Burada btrfs istiyorum

"Daha akıllı algoritmanın" açıklığa kavuşturulması: "Daha akıllı algoritmanın" karışıklığa yol açtığını gördüğüm gibi, sonunda bu konuda satır eklemeye karar verdim. Sayın okuyucu, lütfen veri sistemini veri yapısı olarak düşünün. Basitleştirme amacıyla, değerlerin tamsayı olduğu ilişkilendirme anahtarı-> değer dizisi olarak kullanılan kendi kendini dengeleyen kırmızı-siyah ağaç tutma haritasını hayal edelim. Amaç, sıfırlarla tüm negatif değerleri temizlemektir. "akıllı değil" algoritması üzerinden yinelenir ve yeni haritaya key: değer çiftleri eklenir (sonunda sıfıra negatif olarak değiştirilir). Akıllı algoritma sadece negatif değerlerin saklandığı yerleri tespit eder ve bunları yerinde temizler .


2
sfillÖneriyi denedin mi? ExtX gerektirmiyor gibi görünüyor.
Kevin

1. Mevcut dosyaları parçalama ile sıfırlarla doldurabileceğinizi biliyorum, ama bu muhtemelen değil, değil mi? 2. bu görüntüleri nasıl yapıyorsunuz? Belki orada kesmeyi yapabilirsin?
Zlatko

@kevin: Bu yüzden orijinal soruya cevap cevabını gönderdim. nadiren ext2,3,4 dosya sistemlerini kendim kullanıyorum, bu yüzden sadece ext * üzerinde çalışan yardımcı programları rahatsız edici bir şekilde işe yaramaz buluyorum.
cas

"Akıllı" bir şeye ihtiyacım var. Başka yerlere dokunmadan sadece boş alanı sıfırlarla dolduran bir şey - Yani B-Ağaçları gibi dahili veri yapılarını etkilemeden görüntüleri de-çoğaltma, analiz ve araştırma gibi)
Grzegorz Wierzowiecki

sadece kullanın truncateve / veyafallocate
mikeserv

Yanıtlar:


4

İşte önceki sorunuza verdiğim cevabın değiştirilmiş ve çok genişletilmiş bir yayını:

sfilldan secure-deletepaketin istediğini yapabilirsin.

Sıfırsızdan farklı olarak (yalnızca ext2, ext3 ve ext4 dosya sistemlerinde çalışır), sfill herhangi bir dosya sistemiyle çalışır.

Örneğin

sfill -l -l -z /mnt/X

Sfill / secure-delete ana sayfası artık yok gibi görünüyor, ancak debian ve ubuntu için paketlenmiş. muhtemelen diğer dağıtımlar da. kaynak koduna ihtiyacınız varsa, başka bir yerde bulamazsanız debian arşivlerinde bulunabilir.

NOT: sfill yalnızca bağlı bir dosya sisteminde çalışır. Görüntü dosyalarını VM'den ziyade ana bilgisayar sisteminden sıfır olarak dolduruyorsanız, fs görüntüsünü ana makineye bağlamanız gerekir. Kesin yöntem, ne tür bir görüntü dosyası olduğuna bağlı olarak değişir (örn. Qcow2 veya raw).

'Ham' görüntülerin montajı kolay ve basittir. Sadece kpartxbir geri döngü cihazı oluşturmak için görüntü dosyasında kullanın ve her bölüm için / dev / mapper / girişleri ayrı ayrı monte edilebilir.

İşte net-önyüklenebilir freedos sabit disk görüntüleri (flashrom çalışmayan makinelerde bios güncellemeleri için kullanılır) monte etmek için kullandığım komut dosyası bir parçasından değiştirilmiş kısmi bir komut dosyası:

image="myrawimagefile.img"

# use kpartx to build /dev/mapper device nodes
KP=$(kpartx -a -v "$image")

# now mount each partition under ./hd/
for p in $(echo "$KP" | awk '/^add map/ {print $3}') ; do
  dm="/dev/mapper/$p"
  fp=$(echo "$p" | sed -r -e 's/^loop[0-9]+//')
  mkdir -p "./hd/$fp"
  mount "$dm" "./hd/$fp"
  sfill -l -l -v "./hd/$fp"
  umount "$dm"
done

# now remove the loopback device and /dev/mapper entries
kpartx -d "$image"

NOT: görüntüdeki her bölümün monte edilebilir olduğunu varsayar. Kullanım durumumda true (tek bölümlü bir freedos hd görüntüsü). Bölümlerden biri, örneğin takas alanı ise doğru değil. Bu bölümleri tespit etmek ve takas bölümünü sıfırlamak için dd kullanmak okuyucu için bir alıştırma olarak bırakılır :)

Bu yöntem veya bunun bir varyantı LVM hacimleri için de çalışmalıdır.

Resimleriniz qcow qemu-nbdise, qemu-utilspaketi, görüntü dosyasını ve bölümlerini ağ blok cihazları olarak sunacak olan paketi kullanabilirsiniz - örneğin / dev / nbd0 / dev / ndb0p1 - / ile benzer şekilde kullanılabilir dev / mapper cihazları.

Muhtemelen daha kolay ve daha az güçlük (ancak daha fazla zaman alıcı) qemu-img, qcow'dan raw'a dönüştürmek, yukarıdaki raw yöntemini kullanmak ve daha sonra değiştirilmiş ham görüntüyü sıkıştırılmış qcow2'ye geri dönüştürmek daha kolaydır. Yeni qcow2 görüntüsünü oluşturulurken sıkıştıracağınızdan, bu muhtemelen qemu-nbd kullanmaktan biraz daha küçük görüntülere neden olacaktır.


1
Demek istediğim edilmekte, değil kabul "akıllı" sıfırlarla kullanılmayan alanın doldurulmasına ilişkin yol. Bunu yapmanın en belirgin ve tipik yolu. Ben böyle şeyler sormuyorum.
Grzegorz Wierzowiecki

1
Lütfen belirli bir dosya sistemi ailesine özgü olmayan "akıllı" bir algoritma açıklayın (sıfır dolgu ext2 / 3/4 içindir). İşi yapabilecek bir program istedin. Onun da büyülü olması gerektiğini söylemedin.
cas

1
ve gerçekten, eğer dosya sistemi kullanılmıyorsa (örneğin, sıfır dolum için ana bilgisayara monte edildiğinden), algoritmanın ne kadar akıllı olduğu ne anlama gelir? Boş sektörleri arayan fs meta verileri arasında dolaşmak, sadece NUL'larla dolu büyük bir dolgu yazmaktan daha hızlı veya daha iyi olmayacaktır ... dosya sisteminin kendisi boş alanın nerede olduğunu bulmak için yeterince akıllıdır.
cas

2
Bir yandan, ihtiyaçlarınız için yeterlidir - bu yüzden sorum zaten bu çözümle kod snippet'i içeriyor - bu nedenle cevabınız yeni bir şey sağlamıyor. Öte yandan, ihtiyaçlarım belirttiğim şeyi gerektirir, çünkü kullanılmayan alanı iç yapıları değiştirmeden sıfırlarla silmek istiyorum (örneğin, "Dans Eden B-Ağaçları" veya diğer tür veri yapılarını (örneğin analizler ve çoğaltma için) amaçlar)
Grzegorz Wierzowiecki

2
@cas - Sanırım sıfır doldurmanın VM'lerde sanal sabit diskleri sıkıştırmadan önce önemli bir adım olduğu gerçeğini kaçırıyorsunuz. 500 GB'lık bir genişleme diskiniz varsa, 10 GB dosya ve 10 GB "boş" alan (yani silinen dosyalar) varsa, saf "dev sıfır dosya" yaklaşımını çalıştırmak FAR'ı daha uzun sürebilir ve VHD'nin tam 500 GB. Ben OP de FS özel olması gerektiğini varsayar bahis .
Sahte İsim

3

Boş alanı temizlemenin doğru ve "akıllı" yolu:

fstrim /mountpoint

Bunu bağlı bir dosya sisteminde kullanın.

Bunun bir güvenlik avantajı olmadığını belirtmek önemlidir. Diskinizi güvenlik amacıyla temizlemek istiyorsanız, dosyalarınızı yedekleyin, tüm diski "parçalama" gibi bir komutla sıfırlayın ve ardından dosyalarınızı geri yükleyin.

Bununla birlikte, diskiniz seyrek bir dosya sisteminde ince bir provizyonsa ve kullanılmayan alanı kurtarmak istiyorsanız çözüm iyi çalışır.

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.