NFS 및 SMB는 스파 스 파일을 지원합니까?


18

이 질문은 이전에 스택 오버플로로 요청되었지만 좋은 사람들은 대신 커뮤니티를 사용해 볼 것을 권장했습니다.

다양한 파일 시스템과 관련하여 스파 스 파일을 연구 중이며 스파 스 파일이 NFS (Network File Systems) 또는 SMB (Server Message Block)에서 지원된다는 구체적인 내용을 찾으려고합니다.

SMB는 Windows에서 널리 사용되며이 항목 에 따르면 기본 파일 시스템이 아닌 경우에도 SMB 서버가 스파 스 파일을 지원할 수 있음을 이해합니다 . 그러나 내가 옳다면 스파 스 파일을 지원하지 않는 파일 시스템은 '구멍'을 0으로 채우므로 성능 문제가 발생할 수 있습니다.

NFS와 관련하여 NFS 지원 스파 스 파일 사용에 대한 내용을 찾을 수 없었습니다.

따라서 제 질문은

NFS 및 SMB에서 스파 스 파일이 지원됩니까?

답변:


12

NFS : 스파 스 파일을 부분적으로 지원합니다. 기본적으로 희소 파일 작성을 지원하지만 읽을 때 파일이 0을 포함하도록 확장됩니다. 즉, NFS를 통해 스파 스 파일을 만들 수는 있지만 동일한 파일을 다시 읽을 때 전송중인 네트워크 데이터에는 원본 파일에서 찾은 0이 포함됩니다. 간단한 테스트 결과는 다음과 같습니다.

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

-rw-r--r--. 1 루트 루트 1.0G 10 월 26 일 11:29 test.img

du -hs test.img

0 test.img

보다시피 test.img 파일의 디스크 크기는 0 바이트입니다. 그러나 dd if=test.img of=/dev/null bs=1M iflag=direct쇼를 사용하여 다시 읽으면

1024 + 0 레코드의
1024 + 0 레코드
1073741824 바이트 (1.1GB) 복사, 10.2269 초, 105MB / 초

스파 스 파일을 전송할 때 모든 0을 포함하도록 확장됩니다.

NFSv4.2는 스파 스 파일의 네트워크 전송을위한 특수 처리를 포함하여 확장됩니다. 즉, NFSv4.2를 사용하면 위의 내용 dd이 거의 즉시 완료됩니다.

SMB : CIFS v1이 설치된 Samba v3.6.x 서버와 mount.cifs를 사용하는 Linux 클라이언트를 사용하는 테스트 환경에서는 NFS와 동일한 동작을 합니다. 아마도 Windows에서는 다르게 동작합니다 ...


NFS 서버의 기본 파일 시스템이 스파 스 파일을 지원 하지 않는 경우 NFS가 스파 스 파일을 지원할 수 있습니까 ?
Andrew Henle

2
@ shodanshok : 테스트가 유효하지 않습니다. 파일 시스템에서 같은 명령을 실행 하지 않습니다 지원 스파 스 파일은 같은 결과를 얻을 수 있습니다. dd블록 단위로 읽고 기본 파일 시스템이 스파 스 파일을 지원하는지 여부는 OS에 의해 구멍이 0으로 바뀝니다. ext4에서 시도하면 동일한 숫자가 표시됩니다.
abligh

@AndrewHenle 기본 FS가 스파 스 파일을 지원하지 않는 경우 NFS가 존재하지 않는 지원을 어떻게 노출시킬 수 있습니까? 어쨌든, 최근의 모든 (ext3 / 4, xfs 등) Linux 파일 시스템이 해당 기능을 지원하므로 스파 스 파일 지원이없는 파일 시스템을 찾기가 매우 어렵습니다.
shodanshok

1
@abligh 당신이 틀 렸습니다. dd로컬 스파 스 파일 에서 명령을 실행하면 결과가 훨씬 빨라집니다. 예 :, 여기를 참조하십시오 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/s당신이 볼 수 있듯이, 로컬 스파 스 파일을 읽는 것은 나에게의 / O 속도 북쪽 줄 10기가바이트 / s의
shodanshok

2
@ shodanshok-아, 당신은 전송 양이 아닌 속도를보고 있습니다. 아마도 당신의 대답에 도움이 될 것임을 분명히합니다. 스파 스 방식으로 저장되는 파일에 대한 정식 테스트는 du -svs ls -l이지만 네트워크를 통한 전송에 도움이되지 않는 것은 맞습니다. 그러나 어느 쪽이든 ( strace확인 하듯 이) dd'holes'를 포함하여 전체 파일을 0으로 읽습니다. 차이는 '0'이 시작되는 위치 (서버 또는 클라이언트 측)입니다. 그러나 내 대답에 따르면 NFS 4.2 스파 스 파일을 완전히 지원합니다.
abligh

10

NFS

예, NFS 4.2는 스파 스 파일을 완벽하게 지원합니다 ( 이 표준 문서이 프레젠테이션 참조 ).

NFS 4.2 이전에는 NFS 클라이언트 / 서버 모델이 API가 모든 POSIX 파일 작업을 지원한다는 의미에서 스파 스 파일을 지원했습니다. 즉, 백업 파일 시스템에서 스파 스 파일을 지원하는 서버에 스파 스 파일을 쓰면 스파 스 파일이 생성됩니다 (많은 0을 저장하지 않음). 그러나 파일을 읽으면 스파 스 요소에 많은 영점이 전송됩니다. IE의 대답은 '부분적으로'입니다.

NFS 4.2는 클라이언트가 파일의 홀을 '볼'수있는 기능을 추가하여 서버가 모든 0을 전송할 필요가 없습니다. 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.

사양이 스파 스 파일을 지원한다는 사실에도 불구하고, 게으른 구현자는 클라이언트 또는 서버에서 스파 스 파일에 대한 지원을 구현하지 않을 수 있습니다.

SMB

SMB에 대해서는 잘 모르지만 관련 FS 기능 비트가 설정된 경우 스파 스 파일도 지원한다고 생각합니다. 자세한 내용은 여기 를 참조 하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.