Locked File은 둘 이상의 클라이언트가 동일한 파일을 동시에 편집하려고 할 때 파일 손상 및 데이터 손실을 방지한다.
하지만 파일을 닫았지만 samba에서 잠금을 제대로 해제하지 않은 경우 강제로 해제해야 하는 상황이 있을 수 있다.
samba는 연결한 클라이언트 별로 프로세스를 할당하고 처리하므로 Locked Files 역시 프로세스를 Kill 함으로서 해제 할 수 있다.
물론 samba를 다시 시작하는 방법도 있지만 위험성이 존재한다.
Locked File 확인
smbstatus -S
- smb 프로세스를 할당한 클라이언트 리스트
- net status shares, net status sessions 와 비슷
> smbstatus -S
pid unixtime user ip shere_path
---------------------------------------------------------------
27945 1670549131 user 172.16.0.100 test_share1 SMB3_11
smbstatus -L
- locked file list
> smbstatus -L
Locked files:
Pid Uid DenyMode Access R/W Oplock SharePath Name Time
----------------------------------------------------------------------------------------------------------------------
28202 2457863525 DENY_NONE 0x100081 RDONLY NONE test_share test Fri Dec 9 17:30:00 2022
Process Kill
해당 액세스 파일의 pid를 kill 한다.
> kill <pid>
참고
DenyMode
클라이언트는 SharePath/Name 파일을 Time 시간에 열고 아래와 같은 DenyMode로 요청 할수 있다.
DENY_NONE | Do not deny any other file requests. |
DENY_ALL | Deny all open requests on the current file. |
DENY_READ | Deny any read-only open requests on the current file. |
DENY_WRITE | Deny any write-only open requests on the current file. |
DENY_DOS | If opened for reading, others can read but cannot write to the file. If opened for writing, others cannot open the file at all. |
DENY_FCB | Obsolete. |
Oplock(opportunistic locking)
서버에 있는 파일에 액세스할 때 네트워크 성능을 향상시키기 위해 레지스트리 항목(서버 및 클라이언트)을 통해 Windows 파일 시스템(API가 아님)에 의해 호출된다.
다음을 허용하는 클라이언트에서 로컬로 파일을 캐싱하여 성능이 향상된다.
Read-ahead:
The client reads the local copy of the file, eliminating network latency.
Write caching:
The client writes to the local copy of the file, eliminating network latency.
Lock caching:
The client caches application locks locally, eliminating network latency.
Windows는 oplock의 종류를 4가지로 분류
Level1
예를들면 Oplock을 통해 클라이언트는 액세스한 파일을 수정할 때 클라이언트 Local에 자체 캐시할것이라고 Samba서버에 알리고 파일을 잠그고 작업이 완료 될때까지 대기.
두번째 클라이언트가 액세스한 파일을 요청하면 samba 서버는 첫번째 클라이언트한테 oplock 중단을 요청하고 첫번째 클라이언트 local 캐시 내용을 서버 액세스 파일에 반영.
이후 두번째 클라이언트 한테 액세스 권한을 주는 등의 일련에 프로세스
Level2
Level1과 프로세스는 같지만 캐싱이 읽기에 대해서만 동작.
Filter
액세스한 파일에 쓰기, 삭제를 허용하지 않음.
Batch
액세스 파일의 열기, 닫기 및 속성 캐싱을 허용