Seperti yang saya mengerti, "file jarang" berarti bahwa file tersebut mungkin memiliki 'kesenjangan' sehingga data yang digunakan sebenarnya mungkin lebih kecil dari ukuran file logis.
Bagaimana sistem file Linux menyimpan file pada disk? Saya terutama tertarik pada ext4. Tapi:
- Bisakah file disimpan tidak secara berurutan pada disk? Maksud saya, bagian dari file tersebut terletak di alamat fisik X dan bagian berikutnya di alamat fisik Y yang tidak dekat dengan X + offset).
- Bisakah saya entah bagaimana mengontrol urutan file?
Saya ingin mengalokasikan file 10GB. Saya ingin berurutan pada disk dan tidak terbagi antara offset yang berbeda. - Apakah itu bertindak secara berbeda antara berbagai jenis?
linux
filesystems
hard-disk
io
hudac
sumber
sumber
dmsetup
program, antarmuka ke perangkat mapper. Ini mungkin merupakan pilihan yang baik jika Anda merencanakan penyimpanan seperti basis data.iso9660
danromfs
tidak mampu melakukan itu dan memerlukan penyimpanan terus menerus (dari ini saya bisa daftar off-head).Jawaban:
Iya nih; ini dikenal sebagai fragmentasi file dan tidak jarang, terutama dengan file yang lebih besar. Sebagian besar sistem file mengalokasikan ruang sesuai kebutuhan, lebih atau kurang secara berurutan, tetapi mereka tidak dapat menebak perilaku di masa mendatang - jadi jika Anda menulis 200MiB ke file, kemudian menambahkan 100MiB lebih lanjut, ada peluang bukan-nol bahwa kedua set data akan disimpan di area disk yang berbeda (pada dasarnya, penulisan lain yang membutuhkan lebih banyak ruang pada disk, yang terjadi setelah penulisan pertama dan sebelum yang kedua, dapat dilakukan di antara keduanya). Jika sistem file hampir penuh, situasinya biasanya akan menjadi lebih buruk: mungkin tidak ada area bersebelahan dari ruang kosong yang cukup besar untuk menampung file baru, sehingga harus dipecah-pecah.
Anda bisa memberi tahu filesystem tentang ukuran target file Anda ketika itu 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 ketika perhitungan dilakukan. Anda dapat membantu proses ini dengan menggunakan
posix_fallocate(3)
fungsi untuk memberi tahu sistem file berapa banyak ruang disk yang harus dialokasikan secara total. Sistem file modern akan mencoba melakukan alokasi ini secara berurutan.Sistem file yang berbeda berperilaku berbeda, ya. Filesystem berbasis log seperti NILFS2 tidak mengalokasikan penyimpanan dengan cara yang sama seperti filesystem berbasis luas seperti Ext4, dan itu hanya satu contoh variasi.
sumber
fallocate(3)
sekuensialitas file terjamin? atau hanya akan mengisyaratkan sistem file? Saya tidak bisa sepenuhnya memahaminya dari halaman manual.Perintah ini
filefrag
akan memberi tahu Anda bagaimana file Anda secara fisik disimpan di perangkat Anda:Jika Anda menulis file Anda dalam satu pass, tebakan saya adalah file Anda tidak akan terfragmentasi.
Halaman manual dari
fallocate
(1) cukup jelas:Apakah ini berurutan? Sistem pertama-tama akan mencoba mengalokasikan blok secara berurutan. Jika tidak bisa, itu tidak akan memperingatkan Anda.
sumber
ext4
.filefrag
disembunyikan di/usr/sbin
. Tetapi tampaknya berfungsi untuk pengguna biasa (pada ext4, setidaknya). Mungkin bermanfaat bagistrace
operasinya untuk melihat bagaimana mengukur fragmentasi untuk diri Anda sendiri, jika kurangnya peringatan merupakan penghalang bagi 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 dalam sekali jalan, dari awal hingga akhir. Tidak ada lubang di sana.
Namun, Anda diizinkan 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 yang jarang.
Anda dapat melakukan ini berkali-kali untuk file yang sama, meninggalkan sejumlah kecil data yang tersebar di kehampaan yang luas.
Meskipun ini bisa bermanfaat, ada dua kelemahan.
Yang pertama adalah bahwa file tersebut akan terfragmentasi, yang Anda khawatirkan.
Yang kedua adalah tidak semua program menangani file-file ini dengan baik. Misalnya beberapa perangkat lunak cadangan akan mencoba untuk membuat cadangan kekosongan dan dengan demikian membuat cadangan yang jauh lebih besar dari yang diperlukan, mungkin terlalu besar untuk media cadangan.
sumber
Setidaknya ada beberapa cara untuk mencapai ini.
Gunakan sistem file dengan banyak ruang kosong dan pralokasi ruang (mis. Gunakan penanda akhir data khusus aplikasi dan tambahkan data acak hingga ukuran file mencapai 10GB). Ini tidak dijamin untuk menghasilkan data yang tidak terfragmentasi.
Gunakan filesystem mentah (tidak dimasak) daripada ext4 dll. DBMSs kadang-kadang melakukan ini untuk alasan kinerja. Imbalannya adalah Anda harus melakukan caching / penjurnalan / pemulihan, dll, jika perlu.
Contoh di mana Anda mendapatkan banyak dari melakukan ini relatif jarang - saya pertama kali mencari di tempat lain untuk mengoptimalkan kinerja.
Lihat juga
Benarkah sistem manajemen basis data biasanya memotong sistem file?
sumber
Jika ini hanya satu kali dan tidak penting bagaimana file disimpan awalnya, hanya hasilnya penting, maka Anda bisa menyimpan file secara normal dan kemudian menjalankan defragmenter dari sistem operasi Anda. Kemudian Anda dapat memeriksa dengan jawaban ini jika file Anda utuh, jika tidak, ulangi. Ini adalah cara termudah untuk melakukannya, tanpa menggunakan perintah atau program eksternal, tetapi ini jelas bukan metode tercepat, karena akan mendefrag seluruh disk Anda.
sumber
aptitude search ~ddefrag
adalahddrescueview
dannids
segmen TCP menyusun kembali perpustakaan. Jawaban Anda tidak terlalu membantu jika Anda tidak mengatakan program apa yang dipanggil, atau argumen apa yang perlu disampaikan.