Tại sao số lượng tập tin làm cho khác nhau?
Rõ ràng bạn chỉ tập trung vào khía cạnh "sao chép dữ liệu" của "sao chép tệp". Một tập tin không chỉ là dữ liệu; nó là một thực thể trong một hệ thống tập tin . Một tập tin có tên và thuộc tính và quyền. Tất cả thông tin bổ sung này về tệp phải được sao chép cùng với dữ liệu khi "tệp được sao chép". Có một số lượng đáng kể I / O đĩa để thực hiện chi phí hệ thống tập tin này.
Quy trình sao chép một (1) tệp trong hệ thống tệp chung sẽ giống như:
- Tìm tập tin nguồn trong hệ thống tập tin. (a)
- Đọc từ đĩa mục thư mục cho tập tin nguồn.
- Xác nhận quyền đọc.
- Tìm tập tin đích trong hệ thống tập tin. (b)
- Xác nhận quyền ghi trong thư mục đích.
- Mở rộng thư mục nếu cần thiết để chứa tập tin mới. (c)
- Cập nhật thư mục trên đĩa. (c1)
- Tìm các khối miễn phí, phân bổ chúng và cập nhật lại bảng. (d)
- Đọc dữ liệu tệp và sao chép vào tệp đích (tức là sao chép "tệp").
- Cập nhật mục nhập thư mục cho tệp mới với (kích thước và thời gian). (e)
- Cập nhật thời gian truy cập của mục nhập thư mục nguồn. (f)
(a) Ít nhất điều này có nghĩa là tìm kiếm thư mục hiện tại. Hoặc đường dẫn có thể bắt đầu từ thư mục gốc của hệ thống tập tin và một số cấp độ thư mục phải được duyệt qua.
(b) Ít nhất điều này có nghĩa là tìm kiếm thư mục hiện tại. Hoặc đường dẫn có thể bắt đầu từ thư mục gốc của hệ thống tập tin và một số cấp độ thư mục phải được duyệt qua. Nếu tệp đích đã tồn tại, sau đó xác định cách sao chép nên tiến hành hoặc hủy bỏ. Nếu tệp đích không tồn tại, thì phải tạo một mục nhập thư mục mới và có thể điều này liên quan đến việc mở rộng thư mục phân bổ (tức là khối tệp (còn gọi là cụm) ).
(c) Nếu thư mục phải được mở rộng, hãy phân bổ một khối mới bằng cách tìm một khối miễn phí, sửa đổi bảng phân bổ với phân bổ mới, sau đó ghi (các) khối ra đĩa. Vì hầu hết các hệ thống tập tin duy trì nhiều bản sao của bảng phân bổ, điều đó có nghĩa là nhiều lần ghi vào đĩa.
(c1) Khi thư mục đích được định vị, hãy đọc khối thư mục từ đĩa, sửa đổi nó với mục nhập thư mục mới cho tệp đã sao chép, sau đó ghi khối ra đĩa.
(d) Để sao chép tệp, phân bổ các khối bằng cách tìm các khối miễn phí, sửa đổi bảng phân bổ với các phân bổ mới, sau đó ghi (các) khối ra đĩa. Vì hầu hết các hệ thống tập tin duy trì nhiều bản sao của bảng phân bổ, điều đó có nghĩa là nhiều lần ghi vào đĩa. Để duy trì tính toàn vẹn dữ liệu, hệ thống tệp có thể không cố gắng kết hợp (trì hoãn và hợp nhất) các hoạt động ghi đĩa cho các thư mục và bảng phân bổ, mà thực hiện các thao tác ghi ngay lập tức khi các tệp mới được tạo và chặn phân bổ.
(e) Sau khi sao chép dữ liệu là tuân thủ, hãy cập nhật mục nhập thư mục mới cho tệp được sao chép với độ dài và dấu thời gian của tệp thích hợp, sau đó ghi khối thư mục ra đĩa.
(f) Cập nhật mục nhập thư mục nguồn với dấu thời gian "truy cập" mới và sau đó ghi khối thư mục ra đĩa.
Vì vậy, thay vì chỉ một tệp, câu hỏi của bạn là hỏi liệu thực hiện tất cả nội dung này cho một nghìn tệp có thể thêm thời gian để sao chép phần dữ liệu của tệp không? Nếu bạn chỉ sao chép một tệp 24MB, thì bạn sẽ có thứ gì đó để so sánh với thời gian sao chép của bạn là một nghìn tệp.
Khi sao lưu hệ thống tệp, sao chép các tệp riêng lẻ sang hệ thống tệp khác trên đĩa hoặc phân vùng hiếm khi được sử dụng vì đó là một quá trình khá chậm như bạn đã phát hiện ra. Phương pháp nhanh hơn là tạo và ghi một tệp lưu trữ duy nhất chứa các mục nhập thư mục nguồn và nội dung tệp ở định dạng tệp đặc biệt; các chương trình sao lưu và lệnh * nix 'tar' có thể xuất ra tệp lưu trữ như vậy. (Lưu ý rằng 'tar' chỉ xử lý các tệp lưu trữ và không sử dụng nén như lưu trữ + tiện ích nén.) Phương pháp sao lưu nhanh nhất là ghi vào thiết bị khối (chứ không phải là hệ thống tệp trên thiết bị), để hệ thống tệp nguồn là bỏ qua (được coi là nhiều dữ liệu hơn) và có thể thực hiện sao chép hình ảnh theo từng khối của thiết bị nguồn.