Mengapa ukuran direktori cache ext4 tidak?

2

Sekali lagi saya membersihkan desktop saya karena saya kehabisan ruang HDD dan setiap kali saya menelepon du -sh ~, dibutuhkan waktu yang sangat lama untuk menghitung ukuran direktori saat ini.

Dari sudut pandang saya, saya tidak dapat melihat alasan mengapa sistem file ext4 tidak akan men-cache informasi tentang ukuran direktori dan memperbaruinya setiap kali file dibuat / dihapus. Informasi tersebut kemudian akan diekspos ke sistem, dan akhirnya ke pengguna. Tentu saja perlu menyebarkan data ukuran direktori ke pohon direktori, tapi saya tidak bisa membayangkan situasi di mana pada desktop Linux normal itu akan menyebabkan masalah.

Di mana saya salah ini?

d33tah
sumber
Kernel melakukan cache beberapa data dalam subsistem file-nya. Sistem file individual (seperti Ext4) mungkin melakukan lebih banyak. Tetapi metadata pada disk Anda mungkin tidak akan masuk ke dalam RAM yang tersedia ....
Basile Starynkevitch
Itu bisa juga cache itu di HDD.
Tidak, cache di dalam HDD ditangani dengan firmware di dalam HDD, dan beberapa perintah SATA suka TRIM. Kernel hanya dapat mengirim perintah SATA ke hard disk drive.
Basile Starynkevitch
Dan Anda selalu dapat meningkatkan Ext4 (yang merupakan perangkat lunak gratis) sesuai dengan kebutuhan Anda sendiri, atau bahkan menerapkan sistem file baru. Manfaatkan bahwa GNU / Linux adalah perangkat lunak gratis.
Basile Starynkevitch
1
Sebenarnya saya maksudkan cache sebagai data nyata pada HDD. Sama seperti nama direktori disimpan di sana, saya tidak melihat mengapa ukurannya tidak. @BasileStarynkevitch, alasan saya tidak melakukannya adalah karena saya sama sekali tidak tahu tentang pengembangan FS. Saya hanya mencoba mengerti.

Jawaban:

4

Cache sederhana tidak akan berfungsi. Cache adalah tentang memeriksa apakah Anda sudah memiliki jawaban dan hanya memproses ulang jika tidak. Tetapi dalam kasus ini, satu entri yang hilang akan membuat orang lain tidak berguna. Jadi itu harus menjaga semua ukuran direktori diperbarui setiap saat.

Juga jangan meremehkan kemungkinan dampak dari proposal Anda. Kembali ketika penjurnalan filesystem baru, ada banyak oposisi karena memperbarui jurnal terlalu mahal. Juga sebagian besar filesystem memungkinkan opsi seperti noatime, nodiratimedan relatimeyang mengurangi memperbarui jenis medatata ini. Perhatikan bahwa semua ini (jurnal dan pemutakhiran waktu) terikat dalam waktu, semuanya mengambil jumlah tertentu dari akses blok (dan biasanya 'disembunyikan' dengan penjadwalan IO lanjutan), tetapi memperbarui ukuran setiap direktori di jalur berarti tidak diketahui jumlah akses.

Akhirnya, dalam sistem file POSIX, tidak ada 'direktori berisi' yang sebenarnya. Entri file pada direktori menunjuk ke inode (struktur disk yang menyimpan informasi file), tetapi tidak ada referensi dari inode kembali ke direktori. Ini memungkinkan fitur 'tautan keras', di mana lebih dari satu entri (biasanya dalam direktori berbeda) menunjuk ke inode yang sama. Bahkan jika Anda menyimpan daftar direktori yang mengarah ke inode, Anda mengalikan jumlah pembaruan (yang sudah besar). Lebih buruk lagi, sekarang Anda harus melacak jika Anda sudah memperbarui setiap direktori, karena di beberapa titik rantai Anda akan mendapatkan leluhur bersama, yang seharusnya tidak dihitung dua kali pembaruan. Atau haruskah itu? mungkin Anda harus menyimpan dua ukuran pada setiap direktori, satu yang menghitung semua file 'nyata',

Sepertinya tidak begitu berguna.

Javier
sumber
Anda menyentuh subjek yang sangat menarik di sana - leluhur bersama, yang saya pahami sebagai symlink. Tidak pernah memikirkan itu.
5
Nenek moyang yang dibagikan bukan symlink (yang dibuat menggunakan symlink(2)syscall) tetapi tautan keras yang dibuat dengan link(2)syscall
Basile Starynkevitch
0

Ada juga alasan lain. dutidak memperhitungkan jika bagian dari subsistem ada pada volume lain yang dipasang di direktori yang Anda ukur.

Jadi, bahkan jika penggunaan dievaluasi per volume, dutidak akan menggunakannya. Di sisi lain, dfmemanfaatkan informasi tersebut ....

Ottavio Campana
sumber