it-swarm.asia

Bagaimana cara menyimpan ruang kosong di Linux?

Ketika file dihapus, isinya mungkin masih tersisa di sistem file, kecuali secara eksplisit ditimpa dengan sesuatu yang lain. Perintah wipe dapat menghapus file dengan aman, tetapi sepertinya tidak memungkinkan untuk menghapus ruang disk kosong yang tidak digunakan oleh file apa pun.

Apa yang harus saya gunakan untuk mencapai ini?

142
Alex B

Peringatan: Perangkat keras disk/SSD modern dan sistem file modern dapat membuang data di tempat-tempat di mana Anda tidak dapat menghapusnya, jadi proses ini mungkin masih meninggalkan data pada disk. Satu-satunya cara yang aman untuk menghapus data adalah perintah ATA Secure Erase (jika diterapkan dengan benar), atau penghancuran fisik. Lihat juga Bagaimana saya bisa menghapus semua informasi pada hard drive?

Anda dapat menggunakan seperangkat alat yang disebut secure-delete.

Sudo apt-get install secure-delete

Ini memiliki empat alat:

srm - menghapus file yang ada dengan aman
smem - menghapus jejak file dari ram dengan aman
sfill - hapus semua ruang yang ditandai kosong di hard drive Anda
sswap - hapus semua data dari ruang swap Anda.

Dari halaman manual srm

srm dirancang untuk menghapus data pada media dengan cara yang aman yang tidak dapat dipulihkan oleh pencuri, penegak hukum atau ancaman lainnya. Algoritme penghapusan didasarkan pada kertas "Penghapusan Aman Data dari Memori Magnetik dan Solid-State" disajikan pada Simposium Keamanan Usenix ke-6 oleh Peter Gutmann, salah satu kriptografi sipil terkemuka.

Proses penghapusan data aman srm berjalan seperti ini:

  • 1 lulus dengan 0xff
  • 5 operan acak. /dev/urandom digunakan untuk RNG yang aman jika tersedia.
  • 27 berlalu dengan nilai-nilai khusus yang didefinisikan oleh Peter Gutmann.
  • 5 operan acak. /dev/urandom digunakan untuk RNG yang aman jika tersedia.
  • Ubah nama file menjadi nilai acak
  • Pangkas file

Sebagai langkah tambahan keamanan, file dibuka dalam mode O_SYNC dan setelah setiap melewati panggilan fsync() dilakukan. srm menulis 32k blok untuk keperluan kecepatan, mengisi buffer cache disk untuk memaksa mereka mem-flush dan menimpa data lama yang menjadi milik file tersebut.

105
fnord_ix

Cara tercepat, jika Anda hanya memerlukan satu pass dan hanya ingin mengganti semuanya dengan nol, adalah:

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

(dijalankan dari direktori pada sistem file yang ingin Anda hapus)
(perintah sync adalah ukuran paranoia yang memastikan semua data ditulis ke disk - manajer cache yang cerdas mungkin berhasil bahwa ia dapat membatalkan penulisan untuk blok yang tertunda ketika file tidak terhubung)

Akan ada waktu selama operasi ini ketika tidak akan ada ruang kosong sama sekali pada sistem file, yang bisa menjadi puluhan detik jika file yang dihasilkan besar dan terfragmentasi sehingga perlu beberapa saat untuk menghapus. Untuk mengurangi waktu ketika freespace benar-benar nol:

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

Ini harus cukup untuk menghentikan seseorang membaca konten file lama tanpa operasi forensik yang mahal. Untuk varian yang sedikit lebih aman, tetapi lebih lambat, ganti /dev/zero dengan /dev/urandom. Untuk lebih banyak paranoia, jalankan beberapa langkah dengan /dev/urandom, meskipun jika Anda membutuhkan banyak upaya, utilitas shred dari paket coreutils adalah cara yang harus dilakukan:

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

Perhatikan bahwa di atas file kecil diparut sebelum membuat yang lebih besar, sehingga dapat dihapus segera setelah yang lebih besar selesai daripada harus menunggu untuk diparut meninggalkan sistem file dengan nol ruang kosong untuk waktu yang diperlukan. Proses rusak dengan mengambil lama waktu lebih dari satu file besar dan kecuali Anda mencoba menyembunyikan sesuatu dari NSA tidak benar-benar diperlukan IMO.

Semua hal di atas harus bekerja pada sistem file apa pun.

Batas Ukuran File:

Seperti DanMoulding tunjukkan dalam komentar di bawah, ini mungkin memiliki masalah dengan batasan ukuran file pada beberapa sistem file.

Untuk FAT32 itu pasti menjadi perhatian karena batas file 2GiB: sebagian besar volume lebih besar dari ini hari ini (8TiB adalah batas ukuran volume IIRC). Anda dapat mengatasinya dengan memiparkan output output cat /dev/zero besar melalui split untuk menghasilkan beberapa file yang lebih kecil dan menyesuaikan rusak dan menghapus tahapan yang sesuai.

Dengan ext2/3/4 itu kurang menjadi perhatian: dengan blok standar/umum 4K batas ukuran file adalah 2TiB sehingga Anda harus memiliki volume besar untuk dapat menjadi masalah (ukuran volume maksimum dalam kondisi ini adalah 16TiB).

Dengan (masih eksperimental) btrf baik ukuran file dan volume maksimum adalah 16EiB besar.

Di bawah NTFS panjang file maks lebih besar dari panjang volume maks dalam beberapa kasus bahkan.

Titik awal untuk info lebih lanjut:
http://en.wikipedia.org/wiki/Ext3#Size_limits
http://en.wikipedia.org/wiki/Btrfs
http://en.wikipedia.org/wiki/Ntfs#Scalability

Perangkat Virtual

Seperti yang disebutkan dalam komentar baru-baru ini, ada pertimbangan tambahan untuk perangkat virtual:

  • Untuk disk virtual yang jarang dialokasikan, metode lain seperti yang digunakan oleh zerofree akan lebih cepat (meskipun tidak seperti cat dan dd ini bukan alat standar yang dapat Anda andalkan tersedia di hampir semua OS mirip unix).

  • Sadarilah bahwa mem-nolkan blok pada perangkat virtual yang jarang mungkin tidak menghapus blok pada perangkat yang mendasari fisik , sebenarnya saya akan mengatakan bahwa tidak mungkin - disk virtual manajer hanya akan membuat blok karena tidak lagi digunakan sehingga dapat dialokasikan untuk hal lain nanti.

  • Bahkan untuk perangkat virtual ukuran tetap, Anda mungkin tidak memiliki kontrol di mana perangkat hidup secara fisik sehingga dapat dipindahkan di sekitar lokasi saat ini atau ke set disk fisik baru kapan saja dan yang paling bisa Anda hapus adalah lokasi saat ini, bukan lokasi sebelumnya yang mungkin dihuni oleh blok tersebut.

  • Untuk masalah di atas pada perangkat virtual: kecuali Anda mengontrol Host dan dapat melakukan pembersihan ruang yang tidak teralokasi dengan aman setelah itu menghapus disk di VM atau memindahkan perangkat virtual, tidak ada yang Anda dapat melakukan ini setelah fakta. Satu-satunya jalan adalah dengan menggunakan enkripsi disk penuh dari awal sehingga tidak ada yang tidak dienkripsi setiap ditulis ke media fisik di tempat pertama. Mungkin masih ada panggilan untuk pembersihan ruang kosong dalam VM tentu saja. Perhatikan juga bahwa FDE dapat membuat perangkat virtual yang jarang sangat berguna karena lapisan virtualisasi tidak dapat benar-benar melihat blok mana yang tidak digunakan. Jika lapisan sistem file OS mengirimkan perintah trim ke perangkat virtual (seolah-olah itu adalah SSD), dan pengontrol virtual mengartikan ini, maka itu mungkin menyelesaikan ini, tapi saya tidak tahu keadaan di mana ini benar-benar terjadi dan lebih luas diskusi tentang hal itu adalah masalah di tempat lain (kami sudah hampir tidak berada di luar topik untuk pertanyaan awal, jadi jika ini telah menarik minat Anda, beberapa percobaan dan/atau pertanyaan lanjutan mungkin dilakukan).

69
David Spillett

PERINGATAN

Saya terkejut dengan berapa banyak file photorec yang dapat diambil dari disk saya, bahkan setelah dihapus.

Apakah ada keamanan lebih dalam mengisi "ruang kosong" hanya 1 kali dengan 0x00 atau 38 kali dengan standar kabalistik yang berbeda lebih merupakan diskusi akademis. Penulis makalah seminal 1996 tentang merobek-robek menulis sendiri epilog yang mengatakan bahwa ini sudah usang dan tidak perlu untuk perangkat keras modern. Tidak ada kasus data terdokumentasi yang secara fisik diganti nol dan dipulihkan sesudahnya.

Tautan rapuh sebenarnya dalam prosedur ini adalah sistem file . Beberapa filesystem cadangan ruang untuk penggunaan khusus, dan itu tidak tersedia sebagai "ruang kosong". Tapi data Anda mungkin ada di sana . Itu termasuk foto, email teks biasa pribadi, apa pun. Saya baru saja googled reserved + space + ext4 dan mengetahui bahwa 5% dari partisi home saya sudah dipesan. Saya kira ini adalah photorec menemukan begitu banyak barang saya. Kesimpulan: metode merobek-robek bukan yang paling penting, bahkan metode multi-pass masih meninggalkan data di tempat .

Anda dapat mencoba # tune2fs -m 0 /dev/sdn0 sebelum memasangnya. (Jika ini akan menjadi partisi root setelah reboot, pastikan jalankan -m 5 atau -m 1 setelah melepaskannya).

Tapi tetap saja, dengan satu atau lain cara, mungkin masih ada ruang tersisa.

Satu-satunya cara yang benar-benar aman adalah menghapus seluruh partisi, membuat sistem file lagi, dan kemudian mengembalikan file Anda dari cadangan.


Cara cepat (disarankan)

Jalankan dari direktori pada sistem file yang ingin Anda hapus:

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

Catatan: tujuan file kecil adalah untuk mengurangi waktu ketika ruang kosong sama sekali nol; tujuan sinkronisasi adalah untuk memastikan data benar-benar ditulis.

Ini harus cukup baik bagi kebanyakan orang.

Cara lambat (paranoid)

Tidak ada kasus data yang didokumentasikan yang dipulihkan setelah pembersihan di atas. Akan mahal dan membutuhkan banyak sumber daya, jika mungkin sama sekali.

Namun, jika Anda memiliki alasan untuk berpikir bahwa agen rahasia akan menghabiskan banyak sumber daya untuk memulihkan file Anda, ini sudah cukup:

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

Butuh waktu lebih lama.

Peringatan. Jika Anda telah memilih cara paranoid, setelah ini Anda masih ingin melakukan penghapusan cepat, dan itu bukan paranoia. Kehadiran data acak murni mudah dan murah untuk dideteksi, dan menimbulkan kecurigaan bahwa itu adalah data yang dienkripsi. Anda bisa mati di bawah siksaan karena tidak mengungkapkan kunci dekripsi.

Cara sangat lambat (paranoid gila)

Bahkan penulis makalah seminal 1996 tentang merobek-robek menulis sebuah epilog yang mengatakan bahwa ini sudah usang dan tidak perlu untuk perangkat keras modern.

Tetapi jika Anda masih memiliki banyak waktu luang dan Anda tidak keberatan menghabiskan disk Anda dengan banyak overwritting, ini dia:

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

Catatan: ini pada dasarnya setara dengan menggunakan alat hapus-aman.


Sebelum diedit, postingan ini adalah penulisan ulang karya David Spillett. Perintah "cat" menghasilkan pesan kesalahan, tapi saya tidak bisa menulis komentar pada posting orang lain.

44
user39559

Setidaknya ada utilitas zerofree di Ubuntu:

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.

Juga periksa tautan ini tentang zerofree: Menjaga gambar filesystem jarang - ini dari penulisnya - Ron Yorston (9 Agustus 2012)

27
osgx

Inilah cara melakukannya dengan GUI.

  1. Instal BleachBit
  2. Jalankan sebagai root dengan mengklik Aplikasi - Alat Sistem - BleachBit sebagai Administrator.
  3. Dalam preferensi, beri tahu jalur mana yang Anda inginkan. Secara umum tebakan mereka dengan baik. Anda ingin menyertakan satu jalur yang dapat ditulisi untuk setiap partisi. Umumnya itu adalah/home/nama pengguna dan/tmp, kecuali mereka adalah partisi yang sama, dalam hal ini hanya memilih satu.
  4. Centang kotak System - Wipe Free Disk Space.
  5. Klik Hapus.

Kemajuan BleachBit lebih dari dd (yang dinyatakan sangat bagus) adalah ketika disk akhirnya penuh, BleachBit membuat file kecil untuk menghapus inode (yang berisi metadata seperti nama file, dll).

3
Andrew Z

Anda dapat menghapus ruang kosong Anda dengan menggunakan paket penghapusan aman.

Dalam paket itu Anda dapat menemukan alat sfill, yang dirancang untuk menghapus data yang terletak pada ruang disk yang tersedia pada media secara aman yang tidak dapat dipulihkan oleh pencuri, penegak hukum atau ancaman lainnya.

Untuk menginstal paket penghapusan aman di Linux (Ubuntu), instal dengan perintah berikut:

$ Sudo apt-get install secure-delete

Kemudian untuk menghapus data Anda tanpa ruang kosong, coba perintah berikut:

sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY

Di mana/YOUR_MOUNTPOINT/OR_DIRECTORY adalah titik pemasangan Anda (df -h, mount) atau direktori untuk menghapus ruang kosong.

Baca manual di http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html

2
kenorb

Bersihkan drive dengan kecepatan tinggi.

Instruksi umum untuk mengenkripsi drive saat ini akan meminta Anda untuk terlebih dahulu WIPE drive.

Perintah di bawah ini akan mengisi drive Anda dengan ciphertext AES.

Gunakan live CD jika Anda perlu menghapus drive boot utama Anda.

Buka terminal dan tingkatkan hak istimewa Anda:

Sudo bash

Mari kita buat daftar semua drive di sistem agar aman:

cat /proc/partitions

CATATAN: Ganti /dev/sd{x} dengan perangkat yang ingin Anda hapus.

PERINGATAN: Ini bukan untuk amatir! Anda dapat membuat sistem Anda tidak dapat di-boot !!!

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}

Saya terkejut melihat seberapa cepat ini.

2
Roger Lawhorn

Saya menggunakan dd untuk mengalokasikan satu atau lebih file besar untuk mengisi ruang kosong, kemudian menggunakan utilitas penghapusan aman.

Untuk mengalokasikan file dengan dd coba:

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

Ini akan menghasilkan file bernama delete_me yang berukuran 100 MB. (Di sini bs adalah "ukuran blok" yang disetel ke 1k, dan count adalah jumlah blok yang dialokasikan.)

Kemudian gunakan utilitas penghapusan aman favorit Anda (Saya telah menggunakan shred ) pada file yang dibuat.

Tapi PERHATIKAN INI: buffering berarti bahkan jika Anda melakukanseluruhdisk, Anda mungkin tidak mendapatkan semuanya!


Tautan ini merekomendasikan scrub untuk penghapusan ruang kosong. Belum mencobanya.

2
dmckee

Anda mungkin sudah menginstal paket GNU coreutils pada sistem Anda. Ini memberikan perintah rusak .

2
dkaylor

Lebih mudah menggunakan scrub :

scrub -X dump

Ini akan membuat folder dump di lokasi saat ini dan membuat file hingga disk penuh. Anda dapat memilih pola dengan opsi -p (nnsa|dod|bsi|old|fastold|gutmann).

Tidak mudah untuk menginstal scrub ( lihat Forum Ubuntu tentang ini ), tetapi begitu instalasi selesai, Anda memiliki alat yang SANGAT SEDERHANA dan efisien di tanganmu.

1
FMaz008

Saya menemukan solusi sederhana yang berfungsi di Linux dan di MacOS. Pindahkan di folder root disk Anda dan luncurkan perintah ini:

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

di mana // DISKSPACE // adalah ukuran dalam GB hard disk Anda.

1
Enrico

gunakan dd dan kosongkan ruang kosong. itu adalah data mitos yang harus ditulis berulang kali (tanyakan peter guntmann) dan data acak, berbeda dengan 1 lalu 0 berarti aktivitas yang tidak wajar. maka hasil akhirnya adalah drive bersih dengan cara yang lebih sedikit menghabiskan waktu menulis. selain itu, program penghapusan aman tidak dapat menjamin mereka bahkan menimpa file nyata pada sistem file modern (dijurnal). bantulah diri Anda sendiri dan dapatkan photorec, pindai drive Anda untuk melihat kekacauan, usap dengan angka 1 dan secara opsional dengan nol untuk membuatnya tampak tidak tersentuh. Jika photorec masih menemukan hal-hal, ingat itu memindai semua yang tersedia, jadi lakukan ini dengan hati-hati lagi dengan pengguna root.

ingat, cia/fbi/nsa tidak memiliki mesin mewah yang dapat membaca keadaan sebenarnya dari bit media magnetik Anda. itu semua hanya kertas yang sudah lama ditulis. a "bagaimana-jika". Anda hanya perlu menghapus 1 kali.

1
fred

Berikut ini skrip "sdelete.sh" yang saya gunakan. Lihat komentar untuk detailnya.

# 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

Ini bukan jawaban! Hanya komentar untuk mereka yang ingin menggunakan pv ... jadi jangan repot-repot memilih.

Pada Linux Mint 17.3 Anda dapat menggunakan pv ( tampilan pipa ) untuk mendapatkan kemajuan penulisan. Sebagai contoh:

# 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

Keuntungannya di sini adalah Anda mendapatkan bilah kemajuan, ETA, dan laju data yang terus diperbarui. Kerugiannya adalah ini ditulis pada satu baris dan ketika disk penuh (mengembalikan kesalahan), ia menghilang. Ini terjadi karena ukuran penuh merupakan perkiraan karena OS kemungkinan akan menggunakan disk saat operasi yang sangat lama ini berlangsung, terutama pada volume OS.

Pada HD yang sangat lama, saya mendapatkan kecepatan data tentang 13 MB/s menggunakan /dev/urandom, dan sekitar 70 MB/s , saat menggunakan /dev/zero. Ini mungkin akan meningkat lebih lanjut ketika menggunakan dd mentah atau cat, dan bukan pv.

0
not2qubit

Saya terkadang menggunakan bash one-liner ini:

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

Ketika mulai mengatakan bahwa disk sudah penuh, cukup tekan Ctrl+C dan hapus file zero.* yang dibuat.

Ia bekerja pada sistem apa pun, apa pun batas ukuran file.
Abaikan kesalahan cat: write error: File too large.

0
Nicolas Raoul