Kullanılmayan alanı sıfırlarla temizleyin (ext3, ext4)


73

Kullanılmayan alanı sıfırlarla nasıl temizlerim? (Ext3 ext4)

Daha akıllı 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, ancak site karşıtı yok sayar.

Amaç: Bölüm görüntülerini sıkıştırmak istiyorum, bu yüzden kullanılmayan alanı sıfırlarla doldurmanız şiddetle önerilir.

Btw. Btrfs için: Kullanılmayan alanı sıfırlarla temizleyin (btrfs)


4
Mat

1
İki farklı cevap türü vardır. Neyi başarmaya çalışıyorsun? Ya 1) güvenlik, birinin bu verileri okumasını yasaklayarak, veya 2) tüm bölümün sıkıştırılmasını veya [SSD performansını] optimize ederek ( en.wikipedia.org/wiki/Trim_(computing) ?
Totor

Yanıtlar:


77

Böyle bir yardımcı programdır zerofree.

Açıklamasından:

Zerofree, ayrılmamış, sıfırlanmamış blokları bir ext2 veya ext3 dosya sisteminde bulur ve sıfırla doldurur. Bu, bu dosya sisteminin bulunduğu aygıt bir disk görüntüsü ise yararlıdır. Bu durumda, disk görüntüsünün türüne bağlı olarak, ikincil bir yardımcı program sıfırsız çalıştırıldıktan sonra disk görüntüsünün boyutunu azaltabilir. Zerofree, dosya sisteminin sökülmesini veya salt okunur şekilde monte edilmesini gerektirir.

Aynı sonucu elde etmenin genel yolu (kullanılmayan blokları sıfırlamak) "dd" yi çalıştırmak, sürücüdeki tüm boş alanı kaplayan sıfırlarla dolu bir dosya oluşturmak ve ardından bu dosyayı silmek. Bu sıfırsız hafifletir hafifletir birçok dezavantajı vardır:

  • bu yavaş
  • disk görüntüsünü (geçici olarak) maksimum ölçüde büyütür
  • (geçici olarak) diskteki tüm boş alanları kullanır, bu nedenle diğer eşzamanlı yazma işlemleri başarısız olabilir.

Zerofree, sanal bir makinede konuk işletim sistemi olarak kurulan GNU / Linux sistemlerinden çalıştırılmak üzere yazılmıştır. Bu sizin durumunuz değilse, neredeyse kesinlikle bu pakete ihtiyacınız yok.

GÜNCELLEME # 1

.Deb paketinin açıklaması şimdi bunun ext4 ile de iyi çalışacağı anlamına gelen aşağıdaki paragrafı içerir.

Açıklama: ext2, ext3 ve ext4 dosya sistemlerinden sıfır ücretsiz blok Zerofree, ext2, ext3 veya ext4 dosya sisteminde sıfır olmayan değer içeriğine sahip ayrılmamış blokları bulur ve sıfırla doldurur ...

Diğer kullanımlar

Bu yardımcı programın başka bir uygulaması, gerçek bir diskin yedeği olan disk görüntülerini sıkıştırmaktır. Bunun tipik bir örneği, SD kartın bir BeagleBone veya bir Raspberry Pi içindeki dökümüdür. Boş alanlar sıfırlandıktan sonra, yedek resimler daha verimli şekilde sıkıştırılabilir.


1
İntgat.tigress.co.uk/rmy/uml/index.html sayfasının resmi sayfası mı ? Ext4 ile kullanmanın güvenli olduğunu düşünüyor musunuz?
Grzegorz Wierzowiecki

2
@ GrzegorzWierzowiecki: evet, sayfa bu, ancak debian ve arkadaşlar için zaten depoda. Disk dosya görüntüsünü art arda küçültmek için sanal diskteki bir ext4 bölümünde kullandım ve hiçbir sorun yaşamadım.
enzotib

1
Bu, ddasıl sorudaki ham yönteme eşdeğer değildir , çünkü monte edilmiş dosya sistemlerinde çalışmaz.
JLH

sıfırsız sayfa , "dosya sistemi sıfırsız seçenekle monte edilmiştir" yapmanızı sağlayan bir düzeltme eki hakkında konuşur, böylece silinen dosyaları sürekli olarak sıfırlar. Bu, çekirdeğin yeniden derlenmesini gerektirir mi? aynı şeyi başarmanın daha kolay bir yolu var mı?
Endolit

2
Dikkatli olun - zerofreeextral dosya sistemini Astralinux (Debian tabanlı) kullanarak kaybettim …
Hubbitus

33

Ext2 / ext3 / ext4'teki kullanılmayan alanı temizlemek için kullanılan yöntemlerin özeti (bu soruda ve başka yerlerde belirtildiği gibi):

Kullanılmayan alanı sıfırlama

Dosya sistemi takılı değil

  • Dosya sisteminiz "disk" in açık olması durumunda (örneğin TRIM'i destekleyen modern bir SSD, formatı çok azını destekleyen bir VM dosyası vb.) Ve çekirdeğiniz blok aygıtının bunu anladığını söylüyorsa, e2fsck -E discard src_fskullanılmayan alanı silmek için kullanabilirsiniz (e2fsprogs gerekir) 1.42.2 veya daha yüksek).
  • Açıkça kullanılmayan blokların üzerine sıfır yazmak için zerofree (örn. zerofree src_fs) Kullanmak
  • Kullanılması e2image -rap src_fs dest_fsiçin tek kullanımda blokları kopyalamak (yeni dosya sistemi bir başka sıfırlanmasını "disk" olmalıdır e2fsprogs 1.42.9 veya üstü gerekir).

Dosya sistemi monte edildi

  • Dosya sisteminiz "disk" in açık olması durumunda (örneğin TRIM'i destekleyen modern bir SSD, formatı çok azını destekleyen bir VM dosyası vb.) Varsa, çekirdeğiniz blok aygıtının onu anladığını ve son olarak ext dosya sistemi sürücüsünün kullanabileceğini söylüyor fstrim /mnt/fs/dosya sisteminden kullanılmayan alanı atmasını istemek için.
  • Kullanmak cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros( sfillgüvenli-silme işleminden bu tekniği kullanır). Ted Ts'o (ext4'ün yazarı) tarafından önerilmeyen bu yöntem verimsizdir, belirli şeyleri sıfırlamayabilir ve gelecekleri yavaşlatabilir fsck.

Dosya sisteminin kaldırılması, monte edilmesinden daha iyi sonuçlar verecektir. Atma, daha önce kullanılan bir çok alanın sıfırlanması gerektiğinde en hızlı yöntem olma eğilimindedir, ancak zerofreeatma işleminden sonra kullanılmasının bazen (biraz daha fazla "diskin" uygulanmasına bağlı olarak) biraz fazladan sıfır olabilir.

Görüntü dosyasını daha küçük yapmak

Görüntü özel bir VM formatında

qemu-img convert src_image dst_imageSıfırlanan alanın geri kazanılmasını sağlamak ve görüntüyü temsil eden dosyanın daha küçük olmasına izin vermek için uygun bir disk görüntü aracı (örneğin ) kullanmanız gerekir.

Görüntü ham bir dosyadır

Dosyayı seyrek yapmak için aşağıdaki tekniklerden biri kullanılabilir (bu nedenle sıfır durma alanı kaplar)

  • cp --sparse=always src_image dst_image.
  • fallocate -d src_image (util-linux v2.25 veya daha üstünü gerektirir).

Bu günlerde virt-sparış gibi bir aracı kullanarak bu adımları ve daha fazlasını tek seferde yapmak daha kolay olabilir .

 Kaynaklar


15

sfilldan güvenli-sil Bu ve birkaç diğer ilgili işleri yapabilir.

Örneğin

sfill -l -l -z /mnt/X

GÜNCELLEME # 1

ArchLinux projesi tarafından github'da sfillSecure-Delete paketinde yer alan bir araç olan kaynağı içeren bir kaynak ağacı var .

Ayrıca sfill'in man sayfasının bir kopyası burada:


bu URL eski. ana sayfasının nerede olduğu hakkında hiçbir fikrim yok (veya hala bir tane bile olsa), 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.
cas,

Eski manpage URL’si şimdi düzeltildi. Görünüşe göre "Digipedia" artık bir şey değil.
mwfearnley

8

E2fsprogs 1.42.9'unuz varsa, o zaman e2imageboş alan olmadan bölüm görüntüsünü oluşturmak için kullanabilirsiniz , böylece sıfırlama adımını atlayabilirsiniz.


Bu parametreler hakkında çevrimiçi olarak herhangi bir bilgiyi bulamadım (kolayca), ancak gerçekten 1.42.9 sürüm notlarında verilmiştir: e2fsprogs.sf.net/e2fsprogs-release.html#1.42.9
mwfearnley

1
Bu değerli bir araç! Ancak, nasıl kullanılacağını da açıklarsa cevabınız daha iyi olacaktır. Bu e2image -ar /dev/foo1 | gzip > fs.img.gzya da onun bir çeşitlemesi. -fMonte edilmiş bir fs kullanmak için dahil edin .
marcelm


0

Ek araçlara başvurmak istemiyorsanız, bu yöntem aşağıdakilerden daha hızlı olmalıdır cat /dev/zero > /mnt/fs/zeros:

dd if=/dev/zero of="/mnt/fs/filler" bs=10485760
dd if=/dev/zero of="/mnt/fs/filler1" bs=1
rm /mnt/fs/filler
rm /mnt/fs/filler1

Neden bu daha hızlı olsun ki cat? (Hayır, blok boyutu argümanı ddyardımcı olmuyor)
marcelm


2
Evet, ama bu dddaha hızlı olmuyor . Aslında, muhtemelen catdaha hızlı hale getirir . Blok boyutu yalnızca sistem çağrılarının ek yükünü en aza indirmek ve CPU önbellek kullanımını optimize etmek için önemlidir. Sistem çağrı ek yükü ile azalan geri dönüş alanına girersiniz. Önbellek, 1MiB gibi Ve gerçek disklerde çalışırken, yine de I / O'ya bağlısınız ve bu nokta çoğunlukla tartışmalı. Kendiniz kıyaslama deneyin.
marcelm
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.