GNU/Linux >> Belajar Linux >  >> Linux

Apakah file disimpan di disk secara berurutan?

Bisakah file disimpan tidak berurutan pada disk? Maksud saya, sebagian file terletak di bawah alamat fisik X dan bagian lainnya di bawah alamat fisik Y yang tidak dekat dengan X + offset).

Ya; ini dikenal sebagai fragmentasi file dan tidak jarang, terutama dengan file yang lebih besar. Sebagian besar sistem file mengalokasikan ruang sesuai kebutuhan, kurang lebih secara berurutan, tetapi mereka tidak dapat menebak perilaku di masa mendatang — jadi jika Anda menulis 200MiB ke file, lalu menambahkan 100MiB lebih lanjut, ada kemungkinan tidak nol bahwa kedua set data akan disimpan di berbagai area disk (pada dasarnya, penulisan lain yang membutuhkan lebih banyak ruang pada disk, terjadi setelah penulisan pertama dan sebelum penulisan kedua, dapat terjadi di antara keduanya). Jika sistem file hampir penuh, situasinya biasanya akan lebih buruk:mungkin tidak ada area ruang kosong yang berdekatan yang cukup besar untuk menampung file baru, sehingga harus dipecah-pecah.

Bisakah saya mengontrol urutan file? Saya ingin mengalokasikan file besar sebesar 10GB. Saya ingin berurutan dalam disk dan tidak dibagi antara offset yang berbeda.

Anda dapat memberi tahu sistem file tentang ukuran target file Anda saat dibuat; ini akan membantu sistem file menyimpannya secara optimal. Banyak sistem file modern menggunakan teknik yang dikenal sebagai alokasi tertunda, di mana tata letak pada disk dari file baru dihitung selambat mungkin, untuk memaksimalkan informasi yang tersedia saat perhitungan dilakukan. Anda dapat membantu proses ini dengan menggunakan posix_fallocate(3) berfungsi untuk memberi tahu sistem file berapa banyak ruang disk yang harus dialokasikan secara total. Sistem file modern akan mencoba melakukan alokasi ini secara berurutan.

Apakah itu bertindak berbeda antara jenis yang berbeda?

Sistem file yang berbeda berperilaku berbeda, ya. Sistem file berbasis log seperti NILFS2 tidak mengalokasikan penyimpanan dengan cara yang sama seperti sistem file berbasis luasan seperti Ext4, dan itu hanyalah salah satu contoh variasi.


Perintah filefrag akan memberi tahu Anda bagaimana file Anda disimpan secara fisik di perangkat Anda:

# filefrag -v /var/log/messages.1 
Filesystem type is: ef53
File size of /var/log/messages.1 is 41733 (11 blocks, blocksize 4096)
 ext logical physical expected length flags
   0       0  2130567               1 
   1       1 15907576  2130568      1 
   2       2 15910400 15907577      1 
   3       3 15902720 15910401      7 
   4      10  2838546 15902727      1 eof
/var/log/messages.1: 5 extents found

Jika Anda menulis file Anda dalam sekali jalan, dugaan saya adalah file Anda tidak akan terfragmentasi.

Halaman manual fallocate (1) cukup jelas :

fallocate digunakan untuk mengalokasikan blok ke file. Untuk sistem file yang mendukung fallocate panggilan sistem, ini dilakukan dengan cepat dengan mengalokasikan blok dan menandainya sebagai tidak diinisialisasi, tidak memerlukan IO ke blok data. Ini jauh lebih cepat daripada membuat file dengan mengisinya dengan nol.

Pada Linux Kernel v2.6.31, fallocate panggilan sistem didukung oleh sistem file btrfs, ext4, ocfs2, dan xfs.

Apakah berurutan? Sistem pertama-tama akan mencoba mengalokasikan blok secara berurutan. Jika tidak bisa, itu tidak akan memperingatkan Anda.


Anda menyebutkan file jarang, dan tidak ada jawaban lain yang menyebutkannya.

Sebagian besar file tidak jarang. Cara paling umum untuk membuat file adalah menulis semuanya sekaligus, dari awal hingga akhir. Tidak ada lubang di sana.

Namun, Anda diperbolehkan untuk mengatakan "pindah ke posisi 1.000.000.000.000 dan tulis satu byte di sana". Ini akan membuat file yang terlihat seperti etabyte besar, tetapi sebenarnya hanya menggunakan (mungkin) 4k pada disk. Ini adalah file jarang.

Anda dapat melakukan ini berkali-kali untuk file yang sama, meninggalkan sejumlah kecil data yang tersebar di ruang hampa yang luas.

Meskipun ini bisa bermanfaat, ada dua kelemahannya.

Yang pertama adalah file akan terfragmentasi, yang Anda khawatirkan.

Yang kedua adalah tidak semua program menangani file-file ini dengan baik. Misalnya. beberapa perangkat lunak cadangan akan mencoba mencadangkan kekosongan dan dengan demikian membuat cadangan yang jauh lebih besar dari yang diperlukan, mungkin juga besar untuk media cadangan.


Linux
  1. Menyembunyikan Data Dalam Sistem File?

  2. Amazon EC2 - disk penuh

  3. Hapus file yang terdaftar dalam file teks

  1. Memindahkan file di Linux tanpa mv

  2. Script Untuk Menentukan Apakah File Adalah Gambar?

  3. Apakah hasil edit file di Linux langsung disimpan ke dalam disk?

  1. Bagaimana Cara Mengakses File yang Disimpan Pada Liveusb Persistent?

  2. Apa itu file /dev/zero dan /dev/null di Linux?

  3. Hitung baris dalam file besar