Setelah menghapus banyak file besar, ruang kosong bertambah dengan penundaan besar

15

Kemarin, saya telah menghapus 71 GB file di server rumah / media saya.
Ruang Kosong sebelum: 117 GB
Ruang kosong setelah: 126 GB

Jadi, alih-alih memiliki 71 GB ruang kosong tambahan, saya hanya punya 9 GB. Saya telah memeriksa ulang bahwa tidak ada file yang terbuka dan saya benar-benar telah menghapus 71 GB dan ruang kosong benar-benar meningkat hanya 9 GB.

Saya juga mencoba menyinkronkan, tetapi tidak ada efek.

Ini bukan pertama kalinya itu terjadi. Memang, saya telah melihat perilaku ini sejak bertahun-tahun. Pertama di ext3, sekarang di ext4.
Ketika ini terjadi, saya bisa mendapatkan kembali ruang kosong dengan melepas dan kemudian menginstal ulang sistem file. Dalam kasus ini, unmount membutuhkan waktu hingga 2 menit, bukannya hampir tanpa waktu.

Saat ini, saya tidak dapat dengan mudah melepas dan memasang kembali sistem file, karena sibuk secara permanen dari perangkat lunak perekam video saya, server owncloud untuk keluarga saya, dan beberapa layanan lainnya yang belum saya miliki sejauh ini. Dan saya tidak ingin bangun jam 3 malam hanya untuk melepas dan memasang kembali.

Tidak, utilitas 'at' tidak akan berfungsi karena salah satu layanan melakukan tugas yang berjalan lama yang tidak dapat dilanjutkan dan dengan demikian memerlukan pemeriksaan status manual untuk menemukan momen yang baik ketika dapat ditutup, yaitu tugas baru saja selesai.

Tapi pagi ini, saya perhatikan bahwa ruang telah dibebaskan semalam. Tampak bagi saya seolah-olah ada semacam pembersihan, dan ini mungkin hal yang sama yang membutuhkan waktu tambahan saat melepas.

Sejauh ini, saya hanya memperhatikan perilaku ini ketika menghapus sejumlah besar data. Di sisi lain, saya tidak yakin apakah itu terjadi secara teratur dan perbedaannya terlalu kecil untuk diperhatikan.

Sistem file dibuat dengan 0% dicadangkan untuk root ( mkfs -m 0). Menurut fsck -f(Saya melakukan ini selalu antara unmount dan remount), sistem file tidak rusak, dan menurut tes diagnostik diperpanjang SMART, perangkat keras juga OK.

[EDIT]

tune2fs 1.42 (29-Nov-2011)  
Filesystem volume name:   bigdata  
Last mounted on:          /bigdata  
Filesystem UUID:          6aebd17a-e064-41dc-9c68-c9a3acbe4f66  
Filesystem magic number:  0xEF53  
Filesystem revision #:    1 (dynamic)  
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize  
Filesystem flags:         signed_directory_hash   
Default mount options:    user_xattr acl  
Filesystem state:         clean  
Errors behavior:          Continue  
Filesystem OS type:       Linux  
Inode count:              121413632  
Block count:              485645568  
Reserved block count:     0  
Free blocks:              29081276  
Free inodes:              121382378  
First block:              0  
Block size:               4096  
Fragment size:            4096  
Reserved GDT blocks:      908  
Blocks per group:         32768  
Fragments per group:      32768  
Inodes per group:         8192  
Inode blocks per group:   512  
Flex block group size:    16  
Filesystem created:       Tue Dec 25 23:42:35 2012  
Last mount time:          Fri Jan  3 17:37:36 2014  
Last write time:          Fri Jan  3 17:37:36 2014  
Mount count:              37  
Maximum mount count:      -1  
Last checked:             Thu Apr 18 17:03:40 2013  
Check interval:           0 (<none>)  
Lifetime writes:          14 TB  
Reserved blocks uid:      0 (user root)  
Reserved blocks gid:      0 (group root)  
First inode:              11  
Inode size:           256  
Required extra isize:     28  
Desired extra isize:      28  
Journal inode:            8  
Default directory hash:   half_md4  
Directory Hash Seed:      be2b977e-5127-4843-9123-fe33b6d7b573  
Journal backup:           inode blocks  

[/ EDIT]

Jadi, inilah 2 pertanyaan saya:

  1. Apa yang terjadi disini? Mengapa ruang dibebaskan di umount atau dengan penundaan alih-alih segera dihapus?
  2. Apakah ada sesuatu yang bisa saya lakukan untuk memicu membebaskan ruang saat ini tanpa melepas dan memasang kembali?
Markus N.
sumber
Bagi saya ini bau sekali, seolah-olah file itu masih terbuka oleh sesuatu. Bagaimana Anda mengonfirmasi bahwa tidak ada file yang dibuka setelah dihapus? lsof | grep -i deletedbiasanya merupakan cara terbaik untuk memeriksanya.
Garrett
2
Biasanya Anda tidak dapat melakukan umount sistem file ketika file terbuka. Jadi, jika umount berhasil, tidak ada file yang terbuka. Kecuali kemarin, saya selalu melakukan siklus umount, me-mount kembali ketika saya melihat ini.
Markus N.
Ini memang masalahnya. Apa opsi mount ext4 Anda?
Garrett
noatime, standar
Markus N.
Apakah Anda memiliki semacam sistem cadangan yang berjalan yang mungkin menyimpan salinan file, atau sebagai alternatif hardlink kepada mereka?
derobert

Jawaban:

9

Ada dua faktor yang mungkin berinteraksi.

  • Tidak seperti Windows Anda dapat menghapus file yang terbuka. Jika Anda menghapus film yang sedang diputar, itu akan dihapus dari direktori, tetapi akan tetap ada sebagai file hingga program streaming menutupnya. Setelah perangkat lunak streaming menutupnya, ruang akan dirilis. The fuser -mperintah dapat digunakan untuk menemukan id proses dari setiap proses dengan file yang terbuka. Beberapa program mungkin tidak segera menutup file ketika selesai dengan mereka.

  • Ini adalah sistem file yang dijurnal. Perubahan ditulis ke jurnal dan kemudian dilakukan. Butuh beberapa saat untuk melakukan perubahan. Sistem operasi akan sering menyimpan perubahan disk dan hanya melakukan perubahan pada disk secara berkala. Menjalankan syncperintah harus menghapus setiap perubahan yang tertunda ke disk. Memasang disk dengan syncopsi akan meningkatkan kecepatan ke disk, tetapi bekerja dengan lebih keras.

BillThor
sumber
1
Kamu, saya tahu saya bisa menghapus file yang terbuka. Saya tahu tentang hubungan antara entri direktori dan inode. Tapi saya yakin file-file itu tidak terbuka, kalau tidak saya tidak akan bisa me-mount sistem file ... Tapi item kedua Anda tampak menarik. Bisakah benar-benar membutuhkan waktu lebih dari 30 menit untuk file terhapus untuk melakukan? 30 menit adalah waktu antara menghapus file dan tidur sehari sebelum kemarin, jadi saya tidak tahu berapa lama waktu yang dibutuhkan.
Markus N.
1
@MarkusN. Beberapa sistem operasi menyimpan banyak data sistem file. Jika ruang tidak diperlukan, mereka dapat menulis data log transaksi yang cukup untuk memastikan ruang dibebaskan, tetapi mengambil waktu mereka membebaskan ruang. Jika Anda melepas kunci USB setelah menulis banyak data, mungkin perlu waktu lama untuk menghapus data sebelum Anda dapat menghapusnya. Ini adalah trade off antara menulis dengan aman ke disk dan tidak menunda tindakan lain.
BillThor
Terima kasih atas hasil editnya. Tapi seperti yang Anda lihat di pertanyaan awal, saya sudah mencoba sinkronisasi tanpa efek.
Markus N.
1
@MarkusN. Saya tidak berpikir sinkronisasi seefektif dulu. Ini mungkin hanya memastikan data jurnal ditulis, tidak harus semua perubahan dilakukan. Lepas / mount akan memaksa jurnal diterapkan. Saya tidak tahu prioritas penjadwalan untuk penghapusan, tetapi saya berharap itu relatif rendah. Menjelajahi kode dapat menjawab lebih banyak pertanyaan Anda.
BillThor
Kedengarannya masuk akal bagi saya.
Markus N.