Có bất kỳ hệ thống tập tin nào thực hiện Sao chép trên cơ chế ghi cho CP


16

Chúng tôi đã thấy hệ điều hành thực hiện sao chép trên Tối ưu hóa ghi khi tiến hành một quy trình. Lý do là hầu hết các lần ngã ba được thực hiện bởi exec, vì vậy chúng tôi không muốn chịu chi phí phân bổ trang và sao chép dữ liệu từ không gian địa chỉ người gọi một cách không cần thiết.

Điều này cũng xảy ra khi thực hiện CP trên linux với hệ thống tệp ext4 hoặc xfs (ghi nhật ký). Nếu không xảy ra, thì tại sao không?


Hy vọng ai đó sẽ trả lời câu hỏi thú vị này
Karim Manaouil

Tuy nhiên tôi không nghĩ vậy bởi vì, ví dụ, việc tạo một tệp lớn sẽ mất nhiều thời gian hơn (sao chép dữ liệu sang các khối mới). Nếu có COW trong các hệ thống tệp như vậy (ít nhất là ext3 / ext4), bạn sẽ không nhận thấy độ trễ thời gian (có thể trong trường hợp đó chỉ sao chép inode mà không có con trỏ vào khối dữ liệu và đánh dấu một số cờ COW).
Karim Manaouil

Copy-on-Write được triển khai trên ZFS và nó thực sự có bản sao hệ thống tập tin / khối lượng rất rẻ. ext4 / xfs có định dạng trên đĩa quá thô sơ, tôi tin rằng, để hỗ trợ điều đó
myaut

Câu trả lời:


7

Các từ khóa để tìm kiếm là reflink. Nó đã được thực hiện gần đây trong XFS.

EDIT: việc triển khai XFS ban đầu được đánh dấu TRẢI NGHIỆM. Cảnh báo này đã bị xóa trong bản phát hành kernel 4.16, một vài tháng sau khi tôi viết ở trên :-).


11

Từ cp trang nam :

Khi --reflink [= always] được chỉ định, hãy thực hiện một bản sao nhẹ, trong đó các khối dữ liệu chỉ được sao chép khi sửa đổi. Nếu điều này là không thể, bản sao thất bại hoặc nếu --reflink = auto được chỉ định, hãy quay lại bản sao tiêu chuẩn.

Điều này hoạt động trên các hệ thống tệp hỗ trợ Copy-on-Write ( Reflink ), chủ yếu là BTRFS tại thời điểm này. Triển khai phản xạ XFS đang được phát triển [1] [2] .


1
Một số hệ thống tệp mạng như NFS, CIFS, OCFS2 cũng có thể chuyển chúng cho máy chủ.
Stéphane Chazelas

2

Linux có một cuộc gọi hệ thống cho phép các quá trình không gian người dùng báo cho kernel tạo bản sao khi ghi các bản sao của tệp. FICLONERANGE và FICLONE được sử dụng làm tùy chọn cho ioctl cho phép sao chép trên các bản sao ghi của các tệp và phạm vi trong các tệp sẽ được tạo.

Điều này được sử dụng bởi cp --reflink để tạo các bản sao mà hệ thống tệp hỗ trợ này.


1

Trừ khi bạn giới thiệu một tòa nhà chọc trời cho cp(hoặc ít nhất là để sao chép một khối), HĐH khó có thể nhận ra rằng dữ liệu mà cpchương trình sẽ viết giống như dữ liệu mà nó vừa đọc từ một khối khác. Trên hết, bạn sẽ có thêm chi phí để quản lý kịch bản "một số tệp chia sẻ cùng một khối". Các tệp lớn tương tự chỉ khác nhau trong một số khối hiếm khi xảy ra. Vì vậy, sẽ rẻ hơn khi chỉ sao chép các khối đó, sau đó thêm chi phí quản trị này vào tất cả các tệp.

Bây giờ nếu bạn "sao chép" các tệp (rất nhiều trong số chúng) bằng cách thêm một bản sao / ảnh chụp nhanh khác của hệ thống tệp vào, giả sử, BTRFS, tình huống đã khác: Bây giờ bạn đã "sao chép" tất cả các tệp trong hệ thống tệp và mọi thay đổi đối với chúng sẽ được sao chép trên văn bản. Điều này tồn tại, nhưng không có trong ext4.

"Nhật ký" là một khái niệm hoàn toàn độc lập với điều đó, đó là cấu trúc quản trị cho các tệp được tính.


Các tệp lớn một bản sao nhị phân của các thời điểm cực kỳ hiếm khác khác nhau trong một bit và khi nó xảy ra là do lỗi.
bitifet

Một cuộc gọi hệ thống để sao chép đã được giới thiệu (xem câu trả lời của tôi).
Q Thú mỏ vịt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.