Mengapa menyalin jumlah data yang sama lebih lama jika tersebar di banyak file terpisah?

12

Saya perhatikan bahwa menyalin data senilai 24Mb dari satu folder ke folder lain membutuhkan waktu sekitar 30 detik karena (saya berasumsi inilah alasannya) itu adalah lebih dari 1.000 file terpisah. Menyalin 24Mb seharusnya tidak terlalu lama. Mengapa jumlah file berbeda?

Saya menjalankan Windows 7 pada MacBook (ram 4GB, Intel (R) Core (TM) 2 Duo CPU P7450 @ 2.13GHz, Sistem Operasi 32-bit)

EDIT: NTFS adalah sistem file yang digunakan pada drive

Trindaz
sumber

Jawaban:

5

HDD tidak memiliki kecepatan transfer yang tepat, itu tergantung pada perawatan yang tepat, yaitu yang tidak terfragmentasi, tidak memiliki sektor yang buruk, dll ...

Jika HDD adalah SATA 2 dan itu adalah partisi yang sama, itu hanya kecepatan transfer data.

Jika ada dua partisi dalam HDD yang sama, tidak diperlukan transfer data antara bus dan motherboard, yaitu memuat ke buffer. (tergantung pada ukuran buffer hdd.)

Tetapi untuk setiap file yang disalin, sistem harus menyimpan indeksnya dalam MFT (Master File Table) HDD, yang membuat proses penyalinan lebih lambat jika Anda menyalin banyak file. Dan jika Anda memiliki anti-virus, itu akan memindai setiap file yang disalin. Dan jika Anda telah mengaktifkan pengindeksan file pencarian microsoft (atau layanan pengindeksan file lainnya), hasilnya akan lebih buruk.

Saya pikir pasti ada banyak alasan lain mengapa salinan banyak file lebih lambat, tetapi ini harus menjadi yang utama.

Realcool
sumber
Menonaktifkan program antivirus membuat ekstrak 10x lebih cepat. Setelah itu memindai file untuk mencari virus.
fat_mike
30

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.

serbuk gergaji
sumber
-1

Inilah analogi konseptual:

(harap ingat internet terkasih, bahwa analoginya cacat. Silakan tunjukkan caranya dalam komentar.)

Asumsi:

  • Agen informasi mentransfer == beberapa anak, sebut saja dia Sam, memindahkan telur dari satu keranjang ke keranjang lain.
  • Media transfer informasi == saya kira. Tidak terlalu penting di sini.
  • Telur berasal dari berbagai spesies, termasuk seperti ... dinosaurus ... & mitos bawah laut & naga. (telurnya bisa sangat besar)
  • Ukuran telur dengan volume file == . Pikirkan telur robin vs. telur draggon.

Analogi:

Jadi Sam harus memindahkan telur dari satu keranjang ke keranjang lain karena dia bekerja di sebuah peternakan & siapa pun yang memberinya tugas adalah jahat. Ada berbagai hewan bertelur di peternakan ini, termasuk naga & binatang laut mitos; Sam berpikir ini luar biasa karena beberapa alasan. (tidak terlalu penting tapi ini analogi saya)
Sam adalah chillin di tepi sungai dengan 2 keranjangnya, salah satu keranjang adalah satu dengan telur di dalamnya. Ukuran telur dalam keranjang berkisar dari

  • telur robbins mengambil seperti 100 bytesruang di keranjang

untuk

  • Telur Kraken, berukuran sekitar 2.7Gb.

Sam harus mulai memindahkan telur, jadi dia mulai mengambil telur dan memindahkannya. Katakanlah dia memutuskan untuk pertama-tama memindahkan telur naga. Sekarang telurnya sangat besar dan padat, sehingga perlu beberapa saat untuk menariknya ke keranjang lain.
Sam memasukkan telur naga ke keranjang yang lain & dia marah. Itu sulit karena hal itu memakan banyak ruang; perpindahannya membutuhkan waktu lama untuk hanya satu telur.

Sam bodoh.

Sam kembali ke keranjang pertamanya untuk mengambil sebutir telur lagi. Dia menyadari dia hanya benar-benar punya 1 yang besar. Namun ada, 100.000.000.000 telur robin tersisa.

Seperti yang Anda lihat, sore Sam hancur. Kecenderungannya yang alami adalah bahwa telur dino harus jauh lebih buruk baginya untuk harus bergerak. Itu masuk akal ketika kita berbicara tentang telur & keranjang, tetapi komputer berurusan dalam jumlah seperti 100.000.000.000.

Pendeknya:

Jawaban tentang mengapa dibutuhkan waktu lebih lama untuk memindahkan beberapa file kecil dibandingkan dengan beberapa file besar, ada hubungannya dengan biaya yang terkait dengan tindakan memindahkannya. Semakin banyak file kecil yang Anda miliki, semakin sering tindakan harus dilakukan sebelumnya. Cara lain untuk melihat ini adalah berbicara tentang kepadatan informasi.

Rob Truxal
sumber
-2

Baca FAT, posisikan kembali kepala, buka file pada perubahan file - itu semua membutuhkan waktu

Malas Badger
sumber
Ini adalah drive NTFS
Trindaz
Di NTFS, semua data file — nama file, tanggal pembuatan, izin akses, dan konten — disimpan sebagai metadata di Tabel File Master. Master File Table (MFT) berisi metadata tentang setiap file, direktori, dan metafile pada volume NTFS. Ini termasuk nama file, lokasi, ukuran, dan izin. Entri direktori terdiri dari nama file dan "ID file" yang merupakan nomor catatan yang mewakili file dalam Tabel File Master. ID file juga berisi jumlah penggunaan kembali untuk mendeteksi referensi basi.
Malas Badger
Jadi, apakah jawaban Anda atas pertanyaan didasarkan pada fakta bahwa ia harus melakukan begitu banyak pekerjaan tambahan untuk membuat catatan nama file, lokasi, ukuran, izin, dll? Di situlah semua pekerjaan ekstra berasal.
Trindaz
Membuat yang baru dan membaca yang ada
Lazy Badger