CIFS가 Windows 공유에 대한 연결이 임의로 끊어짐

CIFS가 Windows 공유에 대한 연결이 임의로 끊어짐

나는 몇 달 동안 Windows 공유에 있는 Debian Jessie에서 원격으로 마운트된 두 개의 디렉토리를 가지고 있었습니다.

지난 몇 주 동안 마운트 지점에서 무작위로 연결이 끊긴다는 불만이 계속해서 발생했습니다.

sudo mount -a

마운트 연결을 다시 얻으려면 몇 번(서버는 일주일에 한두 번 사용됩니다).

예를 들어, 마운트를 사용하지 않고 일정 기간이 지나면 마운트가 자주 복구되지 않습니다.

Windows 관리자도 Windows 서버가 한동안 재부팅되지 않았다고 말했습니다.

오늘 우연히 mount -a다시 시도할 때 두 번째 시도에서만 작동했지만 첫 번째 시도에서는 다음 오류가 발생했습니다.

sudo mount -a
mount error(104): Connection reset by peer
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
mount error(112): Host is down
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

디렉토리는 /etc/fstab다음과 같이 마운트됩니다.

//10.2.1.2/XX/ZZ/YY /mnt/mount_point cifs credentials=/root/.smbcredentials,iocharset=utf8,file_mode=0770,dir_mode=0770,uid=1001,gid=1001 0 0

echo_intervalmount 명령을 실행하면 기본적으로 60초에 옵션이 활성화되는 것을 볼 수 있습니다 .

$mount //10.2.1.2/XX/ZZ/YY on /mnt/mount_point type cifs (rw,relatime,vers=1.0,cache=strict,username=someusername,domain=XXX,uid=1001,forceuid,gid=1001,forcegid,addr=10.2.1.2,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,echo_interval=60,actimeo=1)

무엇을 해야 할까요?

답변1

여기서 흥미로운 관련 게시물을 찾았습니다.cifs 마운트 폴더의 연결이 계속 끊어집니다(우분투 서버), 비슷한 문제에 대해 이야기합니다(동일한 오류, Samba 공유).

나머지 답변에 대한 관련 정보는 CIFS 마운트가 기본적으로 SMBv1.0 프로토콜을 사용한다는 것입니다. 이는 명령을 실행하고 필드 mount에 주의를 기울이는 것을 확인할 수 있습니다 vers=1.0.

$mount //10.2.1.2/XX/ZZ/YY on /mnt/mount_point type cifs (rw,relatime,vers=1.0,cache=strict,username=someusername,domain=XXX,uid=1001,forceuid,gid=1001,forcegid,addr=10.2.1.2,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,echo_interval=60,actimeo=1)

나는 또한 Stack Overflow에서 게시물을 찾았습니다.마운트 CIFS 호스트가 다운되었습니다.

이는 프로토콜 불일치 때문일 수도 있습니다. 2017년에 Microsoft는 Windows Server를 패치하고 SMB1 프로토콜을 비활성화하도록 권고했습니다.

이제부터 mount.cifs는 프로토콜 협상에 문제가 있을 수 있습니다.

표시되는 오류는 "호스트가 다운되었습니다."입니다. 하지만 다음을 사용하여 디버그할 때:

smbclient -L <server_ip> -U <username> -d 256

오류가 발생합니다.

protocol negotiation failed: NT_STATUS_CONNECTION_RESET

이 게시물에서는 프로토콜/Wannacry 및 기타 항목에 대한 Windows 패치가 문제를 일으키거나 더 정확하게는 일부 사람들이 v1 CIFS 요청 기능을 비활성화했다고 언급합니다. 유사한 문제가 Windows에서도 발생하고 있으며 타이밍을 고려하면 문제가 관련되어 있음에 틀림없다고 의심됩니다.

이 특정 서버인 AFAIK에서는 v1 CIFS를 비활성화하지 않았으며 테스트 결과 이를 확인했지만 MS 게시판에서는 기본 SMBv1 동작이 (약간) 변경되었음을 제안합니다.

나는 언급된 Samba 질문에서 제안된 일반적인 아이디어를 따르게 되었습니다. 에서남성mounts.cifs:

vers=

    SMB 프로토콜 버전. 허용되는 값은 다음과 같습니다.

    • 1.0 - 클래식 CIFS/SMBv1 프로토콜입니다. 이것이 기본값입니다.

    • 2.0 - SMBv2.002 프로토콜. 이는 Windows Vista 서비스 팩 1 및 Windows Server 2008에서 처음 도입되었습니다. Windows Vista의 초기 릴리스 버전에서는 지원되지 않는 약간 다른 방언(2.000)을 사용했습니다.

    • 2.1 - Microsoft Windows 7 및 Windows Server 2008R2에 도입된 SMBv2.1 프로토콜입니다.

    • 3.0 - Microsoft Windows 8 및 Windows Server 2012에 도입된 SMBv3.0 프로토콜입니다.

    이 옵션은 사용되는 프로토콜 버전을 제어하지만 각 버전의 모든 기능을 사용할 수 있는 것은 아닙니다.

--verbose

    마운트에 대한 추가 디버깅 정보를 인쇄합니다. 이 매개변수는 -o. 예를 들어:

     mount -t cifs //server/share /mnt --verbose -o user=username
    

매뉴얼에서 볼 수 있듯이 Windows 8 이후의 최신 Windows 버전에서는 적어도 사용하는 것이 vers=2.0더 합리적일 수 있습니다. 언급된 옵션 이 포함된 명령줄의 대체 구문은 --verbose발생할 수 있는 모든 문제를 추가로 디버깅하는 데에도 유용합니다.

따라서 이 질문에 대한 내용을 마운트하는 Windows 서버는 Windows Server 2008 R2이므로 다음을 입력했습니다 /etc/fstab.

//10.2.1.2/XX/ZZ/YY /mnt/mount_point cifs credentials=/root/.smbcredentials,iocharset=utf8,file_mode=0770,dir_mode=0770,uid=1001,gid=1001,vers=2.1 0 0

그런 다음 옵션을 적용하려면 다시 마운트하십시오.

sudo mount -o remount /mnt/mount_point

이제 mount협상된 프로토콜을 다시 확인합니다.

$mount //10.2.1.2/XX/ZZ/YY on /mnt/mount_point type cifs (rw,relatime,vers=2.1,cache=strict,username=someusername,domain=XXX,uid=1001,forceuid,gid=1001,forcegid,addr=10.2.1.2,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,echo_interval=60,actimeo=1)

그리고 실제로 사용 중인 SMB 프로토콜을 성공적으로 수정했음을 확인할 수 있습니다.

또한보십시오MS 개발자 네트워크 - [MS-SMB2]: 버전 관리 및 기능 협상 - 1.7 버전 관리 및 기능 협상

CIFS v1.0은 더 이상 사용되지 않을 뿐만 아니라 최신 버전의 프로토콜에 비해 극도로 비효율적이고 안전하지 않습니다.

에서MS 블로그 - SMB1 사용 중지

SMB1은 현대적이지 않거나 효율적이지 않습니다.
SMB1을 사용하면 최종 사용자를 위한 주요 성능 및 생산성 최적화가 손실됩니다.

  • 더 큰 읽기 및 쓰기(2.02+) – 더 빠른 네트워크 또는 더 높은 대기 시간의 WAN을 더 효율적으로 사용합니다. 대규모 MTU 지원.
  • 폴더 및 파일 속성의 피어 캐싱(2.02+) – 클라이언트는 BranchCache를 통해 폴더 및 파일의 로컬 복사본을 유지합니다.
  • 내구성 있는 핸들(2.02, 2.1) – 일시적으로 연결이 끊어진 경우 서버에 투명하게 다시 연결할 수 있도록 허용
  • 클라이언트 oplock 임대 모델(2.02+) – 클라이언트와 서버 간에 전송되는 데이터를 제한하여 대기 시간이 긴 네트워크의 성능을 향상하고 SMB 서버 확장성을 높입니다.
  • 다중 채널 및 SMB 다이렉트(3.0+) - 클라이언트와 서버 간에 여러 경로를 사용할 수 있는 경우 네트워크 대역폭 및 내결함성을 집계하고 RDMA 인프라 전반에 걸쳐 최신 초고속 기술을 사용합니다.
  • 디렉터리 임대(3.0+) – 캐싱을 통해 지점의 애플리케이션 응답 시간을 향상시킵니다.

흥미롭게도 이 마지막 기사에서는 프로토콜 >= 2.01을 사용하는 경우 연결 해제 문제(내구성 핸들)가 나타날 가능성이 낮다고 제안합니다. 따라서 CIFS v1.0을 계속 사용하지 말 것을 다시 한 번 강조하겠습니다. (예: 1.0에서는 echo_interval=60연결을 유지하지만 네트워크 결함이나 다른 서버 중단이 있는 경우 CIFS v1.0을 사용하는 동안 수동 개입 없이 마운트가 자체적으로 복구되지 않습니다.)

마지막 조언으로 다음을 수행하지 말고 sudo mount -a다음을 시작하십시오.

sudo mount -o remount -a

내 질문도 참조하세요CIFS는 동일한 마운트 지점에 동일한 공유의 여러 복사본을 마운트합니다.

관련 정보