it-swarm.asia

Linux'ta boş disk alanı nasıl silinir?

Bir dosya silindiğinde, başka birşeyle açıkça yazılı olmadıkça içerikleri dosya sisteminde kalabilir. wipe komutu dosyaları güvenle silebilir, ancak herhangi bir dosya tarafından kullanılmayan boş disk alanını silmeye izin vermiyor gibi görünmektedir.

Bunu başarmak için ne kullanmalıyım?

141
Alex B

Uyarı:Modern disk/SSD donanımı ve modern dosya sistemleri, onları silemediğiniz yerlerde verileri susturabilir, bu nedenle bu işlem diskte veri bırakabilir. Verileri silmenin güvenli yolları ATA Secure Erase (ATA Secure Erase) komutudur (doğru şekilde uygulanırsa) veya fiziksel yıkım Ayrıca bkz. Bir sabit sürücüdeki tüm bilgileri nasıl güvenle silebilirim?

Secure-delete adında bir takım araçlar kullanabilirsiniz.

Sudo apt-get install secure-delete

Bunun dört aracı var:

srm- mevcut bir dosyayı güvenle sil
smem- bir dosyanın izlerini koçtan güvenle sil
sfill- sabit sürücünüzde boş olarak işaretlenmiş tüm alanları silin
sswap- alan değiştirdiğiniz tüm verileri silin.

srmman sayfasından

srm, hırsızlar, kolluk kuvvetleri veya diğer tehditler tarafından kurtarılamayan ortamlardaki verileri güvenli bir şekilde silmek için tasarlanmıştır. Silme algoritması, önde gelen sivil şifreleme uzmanlarından Peter Gutmann tarafından 6. Usenix Güvenlik Sempozyumu'nda sunulan "Manyetik ve Katı Hal Belleğinden Verilerin Güvenli Silinmesi" adlı bir kağıda dayanmaktadır.

Srm'nin güvenli veri silme işlemi şöyle devam eder:

  • 0xff ile 1 geçiş
  • 5 rastgele geçer. Varsa, güvenli bir RNG için /dev/urandom kullanılır.
  • 27 Peter Gutmann tarafından tanımlanan özel değerlerle geçti.
  • 5 rastgele geçer. Varsa, güvenli bir RNG için /dev/urandom kullanılır.
  • Dosyayı rastgele bir değere yeniden adlandır
  • Dosyayı kes

Ek bir güvenlik önlemi olarak, dosya O_SYNC modunda açılır ve her geçişten sonra fsync() çağrısı yapılır. srmname__, 32k blokları, dosya önbelleklerini dosyaya ait eski verileri silmeye ve üzerine yazmaya zorlamak için disk önbelleklerini doldurmak amacıyla 32k blok yazar.

105
fnord_ix

En hızlı yol, yalnızca tek bir geçişte ihtiyacınız varsa ve yalnızca her şeyi sıfırlarla değiştirmek istiyorsanız:

cat /dev/zero > zero.file
sync
rm zero.file

(silmek istediğiniz dosya sistemindeki bir dizinden çalıştırın)
(sync komutu, tüm verilerin diske yazılmasını sağlayan bir paranoya ölçüsüdür - akıllı bir önbellek yöneticisi, dosya bağlantısız olduğunda bekleyen tüm bloklar için yazma işlemlerini iptal edebileceğini hesaplayabilir)

Bu işlem sırasında, dosya sisteminde hiç boş alan kalmayacak, bu da sonuçta ortaya çıkan dosya büyük ve parçalanmışsa onlarca saniye alabilmesi için zaman alacaktır. Boş alanın tamamen sıfır olduğu süreyi azaltmak için:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
cat /dev/zero > zero.file
sync
rm zero.small.file
rm zero.file

Bu, pahalı bir adli işlem olmadan eski dosya içeriğini okuyan birisini durdurmak için yeterli olmalıdır. Biraz daha güvenli, ancak daha yavaş bir varyant için /dev/zero, /dev/urandom ile değiştirin. Daha fazla paranoya için /dev/urandom ile birden fazla adım uygulayın, ancak bu kadar çabaya ihtiyacınız varsa, coreutils paketindeki shred yardımcı programı tam yoludur:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
shred -z zero.small.file
cat /dev/zero > zero.file
sync
rm zero.small.file
shred -z zero.file
sync
rm zero.file

Yukarıda, küçük dosyanın daha büyük oluşturmadan önce parçalandığını unutmayın; bu nedenle, sürenin dolması için dosya sistemi sıfır boş alan bırakılarak parçalanmasını beklemek yerine, daha büyük tamamlandığında kaldırılabilir. Parçalama işlemi büyük bir dosya üzerinde uzun zaman alır ve NSA öğesinden bir şey saklamaya çalışmadığınız sürece gerçekten gerekli IMO değildir.

Yukarıdakilerin hepsi herhangi bir dosya sistemi üzerinde çalışmalıdır.

Dosya Boyutu Sınırları:

DanMoulding'in aşağıdaki açıklamada işaret ettiği gibi, bazı dosya sistemlerinde dosya boyutu sınırlamaları ile ilgili sorunlar olabilir.

FAT32 için 2GiB dosya limitinden dolayı kesinlikle bir endişe olurdu: çoğu cilt bugünlerde bundan daha büyük (8TiB hacim boyutu sınırı IIRC'dir). Bunun için büyük cat /dev/zero çıkış çıkışını split içinden pipetleyerek ve daha küçük dosyalar oluşturmak ve parçalama ve silme aşamalarını buna göre ayarlamak için kullanabilirsiniz.

Ext2/3/4 ile daha az sorun çıkarır: varsayılan/yaygın 4K bloğunda dosya boyutu sınırı 2TiB'dir, bu nedenle bir sorun olması için kocaman birime sahip olmanız gerekir ( Bu koşullar altında maksimum hacim büyüklüğü 16TiB'dir).

(Hala deneysel) btrfs ile hem maksimum dosya hem de cilt büyüklüğü 16EiB'dir.

NTFS'de, maksimum dosya uzunluğu, bazı durumlarda bile maksimum dosya uzunluğundan daha büyüktür.

Daha fazla bilgi için başlangıç ​​noktaları:
http://en.wikipedia.org/wiki/Ext3#Size_limits
http://en.wikipedia.org/wiki/Btrfs
http://en.wikipedia.org/wiki/Ntfs#Scalability

Sanal Aygıtlar

Son zamanlarda yapılan yorumlarda belirtildiği gibi, sanal cihazlar için ekstra hususlar vardır:

  • Seyrek olarak tahsis edilen sanal diskler için zerofree tarafından kullanılanlar gibi diğer yöntemler daha hızlı olacaktır (ancak cat ve dd'dan farklı olarak, bu, hemen hemen herhangi bir unix benzeri işletim sisteminde kullanmaya güvenebileceğiniz standart bir araç değildir).

  • Seyrek bir sanal cihazda bir bloğu sıfırlamanın, alttaki fiziksel cihazdaki bloğu silemeyebileceğini unutmayın, aslında bunun olası olmadığını söyleyeceğim kadar uzağa gideceğim - sanal disk yöneticisi sadece blok artık kullanılmadığı için daha sonra başka bir şeye tahsis edilebilir.

  • Sabit boyutlu sanal cihazlar için bile, cihazın fiziksel olarak nerede yaşadığını kontrol edemeyebilirsiniz, böylece herhangi bir zamanda mevcut konumu veya yeni bir fiziksel diskler kümesi üzerine taşınabilir ve silebileceğiniz en fazla geçerli konumdur. önceki herhangi bir yer, blok geçmişte kalmış olabilir.

  • Sanal cihazlardaki yukarıdaki problemler için: Ana Bilgisayarları kontrol edemezseniz ve daha sonra VM içindeki diskleri silmeden veya sanal cihazı hareket ettirmeden tahsis edilmemiş alanlarını güvenli bir şekilde silemezseniz, hiçbir şey yapmazsınız. Bundan sonra bu konuda yapabilir. Tek başvuru, tam disk şifrelemesini kullanmaktır başlangıçtan itibaren, böylece her şeyden önce fiziksel medyaya şifrelenmemiş hiçbir şey yazılmaz. Elbette VM içinde bir boşluk silme çağrısı hala yapılabilir. Ayrıca, FDE'nin, sanallaştırma katmanı hangi blokların kullanılmadığını gerçekten göremediğinden seyrek sanal cihazları daha az kullanışlı hale getirebileceğini unutmayın. İşletim sisteminin dosya sistemi katmanı sanal aygıta (SSD gibi) trim komutları gönderirse ve sanal denetleyici bunları yorumlarsa, o zaman bunu çözebilir, ancak bunun gerçekte gerçekleştiği ve daha geniş olduğu durumları bilmiyorum Bunun tartışılması başka bir konu için bir meseledir (orijinal soru için konuyla ilgisiz olmaya başladık, bu yüzden ilginizi çekerse, bazı deneyler ve/veya takip eden sorular sırayla olabilir).

69
David Spillett

UYARI

Diskimi sildikten sonra bile kaç tane photorec diskimden alabildiğince şok oldum.

“Boş alanı” doldurmak için yalnızca 1 kez 0x00 ile sadece 1 kez mi yoksa farklı cabalistic standartlarda 38 kez daha fazla güvenlik olup olmadığı daha çok akademik bir tartışmadır. 1996 senesinin parçalanmasına ilişkin makalenin yazarı, kendisine, bunun modern donanım için eski ve gereksiz olduğunu söyleyen bir epilogu yazdı. Fiziksel olarak sıfırlanan ve sonrasında kurtarılan hiçbir belgelenmiş veri durumu yoktur.

True fragile link bu prosedürde filesystem şeklindedir. Bazı dosya sistemleri özel kullanım için alan ayırır ve "boş alan" olarak kullanılmaz. Fakat verileriniz orada olabilir . Bu fotoğraflar, kişisel düz metin e-postaları, her neyse içerir. Sadece googled reserved + space + ext4 öğelerini kullandım ve home bölümümün% 5'inin ayrıldığını öğrendim. Galiba burası photorec benim eşyalarımın çoğunu buldu. Sonuç: parçalama yöntemi en önemli değil, çoklu geçiş yöntemi bile verileri yerinde bırakıyor .

Takmadan önce # tune2fs -m 0 /dev/sdn0 deneyebilirsiniz. (Eğer yeniden başlattıktan sonra bu kök bölüm olacaksa, çıkardıktan sonra -m 5 veya -m 1 komutlarını çalıştırdığınızdan emin olun).

Ancak yine de, bir şekilde veya başka bir yerde biraz boşluk kalmış olabilir.

Tek güvenli yol, tüm bölümü silmek, bir dosya sistemi yeniden oluşturmak ve ardından dosyalarınızı bir yedekten geri yüklemek.


Hızlı yol (önerilir)

Silmek istediğiniz dosya sistemindeki bir dizinden çalıştırın:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

Notlar: küçük dosyanın amacı boş alanın tamamen sıfır olduğu süreyi azaltmaktır; senkronizasyonun amacı verilerin gerçekten yazıldığından emin olmaktır.

Bu çoğu insan için yeterince iyi olmalı.

Yavaş yol (paranoyak)

Yukarıdaki temizlikten sonra belgelenen veri durumu bulunmuyor. Mümkünse, pahalı ve kaynak zorlu olurdu.

Ancak, gizli kurumların dosyalarınızı kurtarmak için çok fazla kaynak harcayacağını düşünmek için bir nedeniniz varsa, bu yeterli olacaktır:

dd if=/dev/urandom of=random.small.file bs=1024 count=102400
dd if=/dev/urandom of=random.file bs=1024
sync ; sleep 60 ; sync
rm random.small.file
rm random.file

Çok daha uzun zaman alıyor.

Uyarı. Eğer paranoyak yolu seçtiyseniz, bundan sonra hala hızlı silme işlemini yapmak isterdiniz ve bu paranoya değil. Tamamen rastgele verilerin mevcudiyeti tespit edilmesi kolay ve ucuzdur ve aslında şifreli veri olduğu şüphesini yükseltir. Şifre çözme anahtarını açığa vurmadığınız için işkence altında ölebilir.

Çok yavaş yol (çılgın paranoyak)

Hatta 1996 senesinde seminalleştirme üzerine yazılan makalenin yazarı bile bunun modern donanım için modası geçmiş ve gereksiz olduğunu söyleyen bir epilog yazdı.

Ancak, çok fazla boş zamanınız varsa ve diskinizi çok fazla üzerine yazma ile boşa harcamazsanız, işte orada:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sync ; sleep 60 ; sync
shred -z zero.small.file
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
shred -z zero.file
sync ; sleep 60 ; sync
rm zero.file

Not: bu aslında güvenli silme aracını kullanmaya eşdeğerdir.


Düzenlemeden önce bu yazı David Spillett'in bir yeniden yazmasıydı. "Cat" komutu bir hata mesajı veriyor, ancak diğer kişilerin yayınlarına yorum yazamıyorum.

44
user39559

En azından Ubuntu'da sıfır içermeyen yardımcı program var:

http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

   zerofree — zero free blocks from ext2/3 file-systems

   zerofree  finds  the  unallocated, non-zeroed blocks in an ext2 or ext3
   filesystem (e.g. /dev/hda1) and fills them with zeroes. This is  useful
   if  the  device  on  which this file-system resides is a disk image. In
   this case, depending on the type of disk image, a secondary utility may
   be  able  to  reduce the size of the disk image after zerofree has been
   run.

   The usual way to achieve  the  same  result  (zeroing  the  unallocated
   blocks)  is to run dd (1) to create a file full of zeroes that takes up
   the entire free space on the drive, and then delete this file. This has
   many disadvantages, which zerofree alleviates:

      ·  it is slow;

      ·  it makes the disk image (temporarily) grow to its maximal extent;

      ·  it  (temporarily)  uses  all  free  space  on  the disk, so other
         concurrent write actions may fail.

   filesystem has to be unmounted or mounted  read-only  for  zerofree  to
   work.  It  will exit with an error message if the filesystem is mounted
   writable. To remount the  root  file-system  readonly,  you  can  first
   switch to single user runlevel (telinit 1) then use mount -o remount,ro
   filesystem.

Ayrıca bu linkini zerofree ile ilgili kontrol edin: Dosya sistemindeki görüntüleri sabit tutma - yazarından - Ron Yorston (9 Ağustos 2012)

27
osgx

İşte bir GUI ile nasıl yapılır.

  1. Kur BleachBit
  2. Uygulamalar - Sistem Araçları - BleachBit'i Yönetici olarak tıklatarak root olarak çalıştırın.
  3. Tercihlerde, hangi yolları istediğinizi söyleyin. Genellikle onları iyi tahmin eder. Her bölüm için bir tane yazılabilir yol eklemek istersiniz. Genelde bu/home/username ve/tmp, eğer aynı bölüm olmadıkça, sadece bir tane seç.
  4. Sistem kutusunu işaretleyin - Boş Disk Alanı Silin.
  5. Sil'e tıklayın.

BleachBit’in dd üzerinden ilerletilmesi (aksi takdirde çok güzeldir), disk nihayet doluysa, BleachBit inode'ları silmek için küçük dosyalar oluşturur (dosya isimleri gibi meta verileri içerir).

3
Andrew Z

Güvenli silme paketini kullanarak boş alanınızı silebilirsiniz.

Bu pakette, hırsızlar, kolluk kuvvetleri veya diğer tehditler tarafından kurtarılamayan, ortamlardaki kullanılabilir disk alanında bulunan verileri silmek için tasarlanmış sfill aracını bulabilirsiniz.

Linux'ta güvenli silme paketini kurmak için (Ubuntu), aşağıdaki komutla yükleyin:

$ Sudo apt-get install secure-delete

Sonra erase verileriniz boş alan bırakmazsa, aşağıdaki komutu deneyin:

sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY

Nerede/YOUR_MOUNTPOINT/OR_DIRECTORY, boş alanın silineceği bağlama noktanız (df -h, mount) veya dizininizdir.

http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html adresindeki kılavuzu okuyun.

2
kenorb

Bir sürücüyü en yüksek hızda silin.

Günümüzde bir sürücüyü şifrelemekle ilgili tipik talimatlar size önce sürücüyü SİLMEYİNİ söyleyecektir.

Aşağıdaki komut sürücünüzü AES şifreli metin ile doldurur.

Ana önyükleme sürücünüzü silmeniz gerekirse, canlı bir CD kullanın.

Bir terminal açın ve ayrıcalıklarınızı yükseltin:

Sudo bash

Güvenliğimiz için sistemdeki tüm sürücüleri listeleyelim:

cat /proc/partitions

NOT: /dev/sd{x} öğesini silmek istediğiniz cihazla değiştirin.

UYARI: Bu amatörler için değil! Sisteminizi açılmaz hale getirebilirsiniz !!!

Sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x}

Bunun ne kadar hızlı olduğuna çok şaşırdım.

2
Roger Lawhorn

Boş alanı doldurmak için bir veya daha fazla büyük dosyayı tahsis etmek için dd işlevini kullanıyorum, ardından güvenli bir silme yardımcı programı kullanıyorum.

Dd ile dosyaları tahsis etmek için şunu deneyin:

dd if=/dev/zero of=delete_me bs=1024 count=102400

Bu, 100 MB boyutunda delete_me adlı bir dosya üretecektir. (Burada bs, 1k olarak ayarlanan "blok boyutu" ve count, ayrılacak blok sayısıdır.)

Ardından oluşturduğunuz dosyalar üzerinde favori güvenli silme yardımcı programını kullanın ( shred / kullanıyorum).

Ama NOT NOT: buffering, bütün diskini yapsanız bile, kesinlikle her şeyi alamayabilirsiniz!


Bu link , scrub 'yi boş alan silmek için önerir. Denemedim.

2
dmckee

Muhtemelen sisteminizde GNU coreutils paketi yüklüdür. shred komutunu verir.

2
dkaylor

Kolay kullanım ovalama :

scrub -X dump

Bu, geçerli konumda bir dump klasörü oluşturur ve disk dolana kadar dosya oluşturur. -p seçeneğiyle (nnsa|dod|bsi|old|fastold|gutmann) bir desen seçebilirsiniz.

Çalıştırmayı yapmak kolay değil ( bu konuda Ubuntu Forumlarına bakın ), ancak kurulum tamamlandıktan sonra, elinizde gerçekten basit ve etkili bir araç var.

1
FMaz008

Linux ve MacOS'ta çalışan basit bir çözüm buldum. Diskinizin kök klasörüne gidin ve şu komutu çalıştırın:

for i in $(seq 1 //DISKSPACE//); do dd if=/dev/zero of=emptyfile${i} bs=1024 count=1048576; done; rm emptyfile*;

// // DISKSPACE // sabit diskinizin GB cinsinden boyutu.

1
Enrico

dd kullanın ve boş alanı sıfırlayın. bu bir efsane verinin birden fazla kez yazılması (sadece peter guntmann'a sorması) ve rastgele verinin, 1'lerin aksine 0 olması doğal olmayan faaliyet anlamına gelir. o zaman sonuç, yazma işlemine daha az zaman harcanan temiz bir sürücüdür. Ayrıca, güvenli silme programları, modern dosya sistemlerindeki (günlüklü) gerçek dosyanın üzerine bile yazma garantisi vermezler. Kendinize bir iyilik yapın ve fotoğraf çekimi yapın, karışıklığı görmek için sürücünüzü tarayın, 1'lerle silin ve dokunulmamış görünmesi için isteğe bağlı olarak sıfırlarla silin. photorec hala bir şeyler bulursa, mevcut olan her şeyi taradığını unutmayın, bu yüzden kök kullanıcı ile tekrar dikkatlice yapın.

unutmayın, cia/fbi/nsa, manyetik medya bitlerinizin gerçek durumunu okuyabilen bir makineye sahip değildir. Hepsi uzun zaman önce yazılmış bir bildiriydi. bir "eğer". sadece 1 kez silmeniz gerekir.

1
fred

İşte kullandığım "sdelete.sh" betiği. Ayrıntılar için yorumları görün.

# Install the secure-delete package (sfill command).

# To see progress type in new terminal:
# watch -n 1 df -hm

# Assuming that there is one partition (/dev/sda1). sfill writes to /.
# The second pass writes in current directory and synchronizes data.
# If you have a swap partition then disable it by editing /etc/fstab
# and use "sswap" or similar to wipe it out.

# Some filesystems such as ext4 reserve 5% of disk space
# for special use, for example for the /home directory.
# In such case sfill won't wipe out that free space. You
# can remove that reserved space with the tune2fs command.
# See http://superuser.com/a/150757
# and https://www.google.com/search?q=reserved+space+ext4+sfill

Sudo tune2fs -m 0 /dev/sda1
Sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'

Sudo sfill -vfllz /

# sfill with the -f (fast) option won't synchronize the data to
# make sure that all was actually written. Without the fast option
# it is way too slow, so doing another pass in some other way with
# synchronization. Unfortunately this does not seem to be perfect,
# as I've watched free space by running the "watch -n 1 df -hm"
# command and I could see that there was still some available space
# left (tested on a SSD drive).

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

Sudo tune2fs -m 5 /dev/sda1
Sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'
1
Czarek Tomczak

Bu bir cevap değil! Sadece pv... kullanmak isteyenler için bir yorum yapın, o yüzden oy kullanma zahmetine girmeyin.

Linux Mint 17.3 üzerinde, yazının ilerlemesini sağlamak için pv ( pipe view ) kullanabilirsiniz. Örneğin:

# Install pv (pipe view)
Sudo apt-get install pv

# Write huge file of approximate size of /dev/sdb, using urandom data:
pv --timer --average-rate --progress --numeric --eta --interval 5 --size "$(blockdev --getsize64 /dev/sda )" /dev/urandom >Rand.file

Buradaki avantaj, bir ilerleme çubuğu, ETA ve sürekli güncellenen veri hızı elde etmektir. Dezavantajı, bunun bir satırda yazılması ve disk dolu olduğunda (bir hata döndürerek) kaybolmasıdır. Bu, tam boyutun yaklaşık olması nedeniyle oluşur, çünkü OS çok uzun süren bu işlem sırasında özellikle OS biriminde disk kullanacaktır.

Çok eski bir HD'de, /dev/urandom kullanarak 13 MB/s ve /dev/zero kullanılırken 70 MB/s veri oranı alıyorum. Bu muhtemelen ham dd veya cat kullanıldığında ve pv olmadığında daha da iyileşir.

0
not2qubit

Bazen bu bash bir-liner'ı kullanıyorum:

while :; do cat /dev/zero > zero.$RANDOM; done

Diskin dolu olduğunu söylemeye başladığında, Ctrl+C ve oluşturulan zero.* dosyalarını kaldırın.

Dosya boyutu ne olursa olsun, herhangi bir sistemde çalışır.
cat: write error: File too large hatalarını yoksay.

0
Nicolas Raoul