CIFS는 Windows 공유에 대한 연결이 임의로 끊어집니다.

CIFS는 Windows 공유에 대한 연결이 임의로 끊어집니다.

저는 몇 달 동안 Debian Jessie에서 Windows 공유로 여러 디렉터리를 원격으로 마운트해 왔습니다.

지난 몇 주 동안 마운트 지점의 무작위 연결 끊김에 대해 불만을 토로해 왔습니다.

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에서 발생하고 있으며 타이밍을 고려하면 의심스럽습니다. 관련 있는.

내가 아는 한(그리고 테스트 결과 이를 확인하는 한) 이 특정 서버에서 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 지원.
  • 폴더 및 파일 속성의 P2P 캐싱(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는 동일한 마운트 지점에 동일한 공유의 여러 복사본을 마운트합니다.

관련 정보