NFS và SMB có hỗ trợ các tệp thưa thớt không?


18

Câu hỏi này trước đây đã được hỏi trong stack overflow nhưng những người tốt ở đó đã khuyên tôi nên thử cộng đồng ở đây để thay thế.

Tôi đang nghiên cứu về các tệp thưa thớt liên quan đến các hệ thống tệp khác nhau và đang cố gắng tìm một cái gì đó cụ thể nói rằng các tệp thưa được hỗ trợ bởi Hệ thống tệp mạng (NFS) hoặc Khối tin nhắn máy chủ (SMB).

Tôi hiểu rằng SMB được sử dụng rộng rãi trong Windows và theo mục này , máy chủ SMB có thể hỗ trợ tệp thưa thớt ngay cả khi hệ thống tệp bên dưới không có. Tuy nhiên, nếu tôi đúng, hệ thống tệp không hỗ trợ các tệp thưa sẽ chỉ lấp đầy 'lỗ hổng' bằng số 0 và điều này có thể dẫn đến sự cố về hiệu suất.

Liên quan đến NFS, tôi chưa thể tìm hiểu bất cứ điều gì về việc sử dụng NFS hỗ trợ các tệp thưa thớt.

Do đó, câu hỏi của tôi là,

Các tệp thưa có được hỗ trợ trong NFS và SMB không?

Câu trả lời:


12

NFS: nó có hỗ trợ một phần cho tệp thưa. Về cơ bản, nó hỗ trợ tạo một tệp thưa thớt, nhưng khi đọc, tệp được mở rộng để bao gồm các số 0. Điều này có nghĩa là, trong khi bạn có thể tạo một tệp thưa thớt qua NFS, khi đọc lại chính tệp đó, dữ liệu mạng chuyển tiếp sẽ bao gồm mọi số 0 được tìm thấy trên tệp gốc. Một thử nghiệm đơn giản cho thấy hành vi đó:

cd /mnt/nfs
truncate test.img -s 1G
ls -lh test.img

-rw-r - r--. 1 gốc 1.0G ngày 26 tháng 10 11:29 test.img

du -hs test.img

0 test.img

Như bạn có thể thấy, tệp test.img có kích thước trên đĩa là 0 byte. Tuy nhiên, đọc lại nó bằng dd if=test.img of=/dev/null bs=1M iflag=directchương trình

Bản ghi 1024 + 0 trong
1024 + 0 bản ghi ra
1073741824 byte (1.1 GB) được sao chép, 10.2269 s, 105 MB / s

Rõ ràng là khi chuyển tập tin thưa thớt, nó được mở rộng để bao gồm tất cả các số không.

NFSv4.2 sẽ mở rộng bằng cách bao gồm xử lý đặc biệt để chuyển mạng tệp tệp thưa. Nói cách khác, với NFSv4.2, phần trên ddsẽ hoàn thành gần như ngay lập tức.

SMB: nó có hành vi tương tự như NFS , ít nhất là trong môi trường thử nghiệm của tôi, sử dụng máy chủ Samba v3.6.x với CIFS v1 và máy khách Linux sử dụng mount.cifs. Có lẽ trong Windows, nó hoạt động khác ...


NFS có thể hỗ trợ các tệp thưa thớt nếu hệ thống tệp bên dưới của máy chủ NFS không hỗ trợ tệp thưa?
Andrew Henle

2
@shodanshok: bài kiểm tra của bạn không hợp lệ. Thực hiện các lệnh tương tự trên một hệ thống tập tin mà không hỗ trợ các file thưa thớt mang lại kết quả tương tự. ddđọc theo từng khối và hệ thống tệp bên dưới có hỗ trợ các tệp thưa thớt hay không, các lỗ hổng được HĐH biến thành số không. Hãy thử nó trên ext4 và bạn sẽ thấy những con số tương tự.
rút ngắn

@AndrewHenle nếu FS cơ bản không hỗ trợ tệp thưa thớt, làm thế nào NFS có thể phơi bày hỗ trợ không tồn tại? Dù sao, ngày nay khá khó để tìm một hệ thống tệp mà không hỗ trợ tệp thưa thớt, vì tất cả các hệ thống tệp Linux gần đây (ext3 / 4, xfs, v.v.) đều hỗ trợ tính năng đó.
shodanshok

1
@ableigh Bạn sai rồi. Thực hiện ddlệnh trên một tệp thưa thớt cục bộ sẽ cho kết quả nhanh hơn nhiều. Xem ở đây để biết ví dụ:, root@hubble:~# truncate -s 1G test.img root@hubble:~# dd if=test.img of=/dev/null bs=1M iflag=direct 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 0.10478 s, 10.2 GB/sNhư bạn có thể thấy, đọc một tệp thưa thớt cục bộ cho tốc độ I / O ở phía bắc 10 GB / s
shodanshok

2
@shodanshok - Ồ tôi hiểu rồi, bạn đang nhìn vào tốc độ chứ không phải số tiền được chuyển. Có lẽ làm rõ rằng trong câu trả lời của bạn sẽ hữu ích. Kiểm tra chính tắc cho một tệp được lưu trữ theo cách thưa thớt là du -sso với ls -l, nhưng bạn đúng là không giúp truyền qua mạng; nhưng trong cả hai trường hợp (như stracesẽ xác nhận) ddđang đọc toàn bộ tệp, bao gồm cả 'lỗ' dưới dạng số 0, sự khác biệt chỉ là nơi bắt nguồn của 'số không' (phía máy chủ hoặc máy khách). Tuy nhiên lưu ý (theo câu trả lời của tôi) rằng NFS 4.2 không hỗ trợ đầy đủ các tệp thưa thớt.
bỏ qua

10

NFS

Có, NFS 4.2 hỗ trợ đầy đủ các tệp thưa thớt (xem tài liệu chính tắc nàybản trình bày này ).

Trước NFS 4.2, mô hình máy khách / máy chủ NFS đã hỗ trợ các tệp thưa thớt theo nghĩa API hỗ trợ tất cả các hoạt động của tệp POSIX. Điều này có nghĩa là việc viết các tệp thưa thớt trên một máy chủ hỗ trợ các tệp thưa thớt trên hệ thống tệp sao lưu dẫn đến một tệp thưa thớt được tạo ra (thay vì lưu trữ nhiều số không). Nhưng đọc tệp sẽ dẫn đến việc truyền rất nhiều số không cho phần tử thưa thớt. IE câu trả lời là "một phần".

NFS 4.2 thêm khả năng cho các máy khách 'nhìn thấy' các lỗ hổng trong các tệp và do đó, máy chủ không phải truyền tất cả các số 0 đó. Từ ID:

1.4.3.  Sparse Files

Sparse files are ones which have unallocated or uninitialized data
blocks as holes in the file.  Such holes are typically transferred as
0s during I/O. READ_PLUS (see Section 15.10) allows a server to send
back to the client metadata describing the hole and DEALLOCATE (see
Section 15.4) allows the client to punch holes into a file.  In
addition, SEEK (see Section 15.11) is provided to scan for the next
hole or data from a given location.

Mặc dù thực tế đặc tả hỗ trợ các tệp thưa thớt, nhưng người triển khai lười biếng có thể tránh triển khai hỗ trợ cho các tệp thưa trong máy khách hoặc máy chủ.

SMB

Tôi biết ít hơn về SMB, nhưng tôi tin rằng nó cũng hỗ trợ các tệp thưa thớt, nếu bit khả năng FS có liên quan được đặt. Xem ở đây để biết thêm.

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.