Mengapa jumlah file berbeda?
Rupanya Anda hanya berfokus pada aspek "salin data" dari "salin file". File lebih dari sekedar data; itu adalah entitas dalam sistem file . File memiliki nama dan atribut serta izin. Semua informasi tambahan tentang file ini harus digandakan bersama dengan data ketika "file disalin". Ada sejumlah besar I / O disk untuk melakukan overhead sistem file ini.
Prosedur untuk menyalin satu (1) file dalam sistem file generik akan seperti:
- Temukan file sumber di sistem file. (Sebuah)
- Baca dari disk entri direktori untuk file sumber.
- Verifikasi izin baca.
- Temukan file tujuan di sistem file. (b)
- Verifikasi izin menulis di direktori tujuan.
- Buka direktori jika perlu untuk mengakomodasi file baru. (c)
- Perbarui direktori pada disk. (c1)
- Temukan blok gratis, alokasikan, dan perbarui lagi tabel. (d)
- Baca data file dan salin ke file tujuan (mis. Salin "file").
- Perbarui entri direktori untuk file baru dengan (ukuran dan waktu). (e)
- Perbarui waktu akses entri direktori sumber. (f)
(a) Paling tidak ini berarti mencari direktori saat ini. Atau path mungkin dimulai pada root dari sistem file, dan beberapa level direktori harus dilalui.
(B) Paling tidak ini berarti mencari direktori saat ini. Atau path mungkin dimulai pada root dari sistem file, dan beberapa level direktori harus dilalui. Jika file tujuan sudah ada, maka tentukan bagaimana salinan harus diproses atau dibatalkan. Jika file tujuan tidak ada, maka entri direktori baru harus dibuat, dan mungkin ini melibatkan perluasan direktori (mis. File block (alias cluster) alokasi overhead ).
(c) Jika direktori harus diperluas, alokasikan blok baru dengan menemukan blok gratis, ubah tabel alokasi dengan alokasi baru, dan kemudian tulis blok tersebut ke disk. Karena sebagian besar sistem file mempertahankan banyak salinan dari tabel alokasi, maka itu berarti banyak penulisan ke disk.
(c1) Setelah direktori tujuan ditemukan, baca blok direktori dari disk, modifikasi dengan entri direktori baru untuk file yang disalin, dan kemudian tulis blok keluar ke disk.
(d) Untuk menyalin file, alokasikan blok dengan menemukan blok gratis, ubah tabel alokasi dengan alokasi baru, dan kemudian tulis blok tersebut ke disk. Karena sebagian besar sistem file mempertahankan banyak salinan dari tabel alokasi, maka itu berarti banyak penulisan ke disk. Untuk menjaga integritas data, sistem file mungkin tidak mencoba untuk menyatukan (menunda dan menggabungkan) operasi penulisan disk untuk direktori dan tabel alokasi, tetapi melakukan operasi penulisan segera ketika file baru dibuat dan blok dialokasikan.
(e) Setelah salinan data selesai, perbarui entri direktori baru untuk file yang disalin dengan panjang file yang tepat dan cap waktu, dan kemudian tulis blok direktori ke disk.
(f) Perbarui entri direktori sumber dengan cap waktu "akses" baru dan kemudian tulis blok direktori keluar ke disk.
Jadi, alih-alih hanya satu file, pertanyaan Anda adalah bertanya apakah melakukan semua hal ini untuk seribu file dapat menambah waktu yang diperlukan untuk hanya menyalin bagian data file? Jika Anda menyalin hanya satu file dari 24MB, maka Anda akan memiliki sesuatu untuk dibandingkan dengan waktu salinan Anda dari seribu file.
Saat mencadangkan sistem file, menyalin file individual ke sistem file lain pada disk atau partisi jarang dilakukan karena itu proses yang agak lambat seperti yang Anda temukan. Metode yang lebih cepat adalah membuat & menulis file arsip tunggal yang menyimpan entri direktori sumber dan konten file dalam format file khusus; program cadangan dan perintah * nix 'tar' dapat menampilkan file arsip tersebut. (Perhatikan bahwa 'tar' hanya menangani file arsip dan tidak menggunakan kompresi seperti utilitas kompresi + arsip.) Metode cadangan tercepat adalah menulis ke perangkat blok (daripada sistem file pada perangkat), sehingga sistem file sumber adalah diabaikan (diperlakukan sebagai lebih banyak data) dan salinan gambar blok-demi-blok dari perangkat sumber dapat dilakukan.