Bagaimana cara menghapus ruang yang tidak terpakai dengan nol? (ext3, ext4)
Saya mencari sesuatu yang lebih pintar daripada
cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero
Seperti FSArchiver sedang mencari "ruang bekas" dan mengabaikan situs yang tidak digunakan, tetapi berlawanan.
Tujuan: Saya ingin mengompres gambar partisi, jadi mengisi ruang yang tidak digunakan dengan nol sangat dianjurkan.
Btw. Untuk btrfs: Bersihkan ruang yang tidak digunakan dengan nol (btrfs)
filesystems
partition
backup
storage
compression
Grzegorz Wierzowiecki
sumber
sumber
Jawaban:
Utilitas semacam itu
zerofree
.Dari uraiannya:
PEMBARUAN # 1
Deskripsi paket .deb berisi paragraf berikut sekarang yang akan menyiratkan ini akan berfungsi dengan baik dengan ext4 juga.
Penggunaan lainnya
Aplikasi lain utilitas ini adalah untuk mengompresi gambar disk yang merupakan cadangan disk nyata. Contoh khas dari ini adalah dump kartu SD di BeagleBone atau Raspberry Pi. Setelah ruang kosong dipusatkan, gambar cadangan dapat dikompres lebih efisien.
sumber
dd
metode kasar dalam pertanyaan asli, karena tidak berfungsi pada sistem file yang di-mount.zerofree
Astralinux (berbasis Debian) ...Ringkasan metode (seperti yang disebutkan dalam pertanyaan ini dan di tempat lain) untuk membersihkan ruang yang tidak digunakan pada ext2 / ext3 / ext4:
Menempatkan ruang yang tidak digunakan
Sistem file tidak dipasang
e2fsck -E discard src_fs
untuk membuang ruang yang tidak digunakan (memerlukan e2fsprogs 1.42.2 atau lebih tinggi).zerofree src_fs
) untuk secara eksplisit menulis nol di atas blok yang tidak digunakan.e2image -rap src_fs dest_fs
untuk hanya menyalin blok yang digunakan (filesystem baru harus pada "disk" yang tidak memiliki titik nol, membutuhkan e2fsprogs 1.42.9 atau lebih tinggi).Sistem file sudah terpasang
fstrim /mnt/fs/
untuk meminta sistem file untuk membuang ruang yang tidak digunakan.cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros
(sfill
dari penghapusan aman menggunakan teknik ini). Metode ini tidak efisien, tidak direkomendasikan oleh Ted Ts'o (penulis ext4), mungkin tidak nol hal-hal tertentu dan dapat memperlambat masa depanfsck
.Memasang sistem file akan memberikan hasil yang lebih baik daripada menginstalnya. Membuang cenderung menjadi metode tercepat ketika banyak ruang yang sebelumnya digunakan perlu memusatkan perhatian tetapi menggunakan
zerofree
setelah proses membuang kadang-kadang bisa sedikit lebih sedikit nol (tergantung pada bagaimana membuang dibuang pada "disk").Membuat file gambar lebih kecil
Gambar dalam format VM khusus
Anda perlu menggunakan alat disk image yang sesuai (seperti
qemu-img convert src_image dst_image
) untuk memungkinkan ruang kosong untuk direklamasi dan untuk memungkinkan file yang mewakili gambar menjadi lebih kecil.Gambar adalah file mentah
Salah satu teknik berikut ini dapat digunakan untuk membuat file jarang (sehingga menjalankan ruang berhenti nol):
cp --sparse=always src_image dst_image
.fallocate -d src_image
(membutuhkan util-linux v2.25 atau lebih tinggi).Saat ini mungkin lebih mudah untuk menggunakan alat seperti virt-sparsify untuk melakukan langkah-langkah ini dan lebih banyak lagi dalam sekali jalan.
Sumber
zerofree
sumber
sfill
dari secure-delete dapat melakukan ini dan beberapa pekerjaan terkait lainnya.misalnya
PEMBARUAN # 1
Ada pohon sumber yang tampaknya digunakan oleh proyek ArchLinux di github yang berisi sumber
sfill
yang merupakan alat yang termasuk dalam paket Secure-Delete.Salinan
sfill
halaman manual ada di sini:sumber
Jika Anda memiliki e2fsprogs 1.42.9, maka Anda dapat menggunakan
e2image
untuk membuat gambar partisi tanpa ruang kosong di tempat pertama, sehingga Anda dapat melewati langkah zeroing.sumber
e2image -ar /dev/foo1 | gzip > fs.img.gz
, atau beberapa variasi darinya. Sertakan-f
untuk menggunakannya pada fs yang terpasang.Anda bisa menggunakannya
sfill
. Ini solusi yang lebih baik untuk volume tipis.sumber
jika Anda tidak ingin menggunakan alat tambahan metode ini harus lebih cepat daripada
cat /dev/zero > /mnt/fs/zeros
:sumber
cat
? (Tidak, argumen ukuran blokdd
tidak membantu)dd
lebih cepat. Bahkan, itu mungkin membuatcat
lebih cepat. Ukuran blok hanya penting untuk meminimalkan overhead panggilan sistem, dan mengoptimalkan penggunaan cache CPU. Dengan overhead syscall, Anda memasuki area pengembalian yang semakin berkurang. Cache mulai terasa sakit di atas, katakanlah, 1MiB. Dan ketika beroperasi pada disk nyata, Anda I / O terikat dan intinya sebagian besar diperdebatkan. Coba ukur sendiri.