동일한 서버에 있는 두 Windows 파일 공유 간에 파일 이동

동일한 서버에 있는 두 Windows 파일 공유 간에 파일 이동

Windows 7을 사용하는 경우 공유 폴더가 설정된 서버가 있습니다. 그 중 하나를 열고 파일을 가져와 하위 폴더로 이동하면 즉시 발생합니다. 파일은 서버에서만 이동되는 것입니다. 동일한 공유 폴더가 열려 있는 두 개의 창에 대해서도 마찬가지입니다.

반면에 동일한 서버에서 다른 공유 폴더를 열고 그 사이에 파일을 이동하는 경우 시간이 매우 오래 걸립니다. 이는 첫 번째 공유에서 임시 폴더에 있는 내 컴퓨터의 파일을 다운로드한 다음 다른 공유에 업로드하는 것과 같습니다. .

내 컴퓨터가 중간에 파일을 다운로드하지 않고 이와 같은 다른 공유 간에 파일을 이동할 수 있는 방법이 있습니까? 파일이 꽤 큰 경우가 많기 때문에 속도가 좀 필요합니다.

답변1

"다른 공유 폴더"라고 하면 "다른 파일 공유(예: 다른 매핑된 드라이브)에 있는 폴더"를 의미합니까? 그렇다면 그게 문제이고, 쉽고 마법 같은 해결책은 없습니다. 때를이동하다한 폴더에서 다른 폴더로의 파일같은 볼륨에, 필요한 작업은 운영 체제가 대상 폴더에 새 디렉터리 항목을 쓰고 원본 폴더의 이전 디렉터리 항목을 지우는 것뿐입니다. 즉, 파일 데이터에 액세스할 필요가 없습니다. 때를복사파일이 있는 경우 OS는 각 데이터 블록을 읽고 이를 새 위치에 써야 합니다. 그리고 볼륨 간 이동은 물리적으로 분리된 디스크 간 이동일 수도 있습니다. 디렉터리 항목은 다른 볼륨의 데이터 블록을 가리킬 수 없기 때문에 원본 파일을 삭제한 후 복사본으로 처리해야 합니다.

PS 아이러니하게도 물리적으로 분리된 디스크 간의 이동은더 빠르게후자의 경우 디스크 I/O 헤드가 소스 실린더와 대상 실린더 사이를 앞뒤로 점프해야 하기 때문입니다.

답변2

비록 잔치에 늦었지만 그래도 레시피는 여기 있습니다.몇 가지 전제 조건이 있는 실용적인 방법.

  • 핵심 아이디어이는 서버에게 특정 위치(물론 하나의 Samba 공유에 있음)의 개체를 이동하라고 지시하는 것입니다.또 다른위치(물론또 다른삼바 공유).

  • inotifywait은(는) 요리사이고 while, read, 이라는 조리기구를 가지고 있습니다 mv. 저 사람이 우리 저녁 식사 팀이에요.

  • 그리고 부엌(혹은 식당)은 다음과 같습니다:

Samba shares ├─share.1 │ ├─recv │ ├─to.share.2 │ ├─to.share.3 │ └─[...] ├─share.2 │ ├─recv │ ├─to.share.1 │ ├─to.share.3 │ └─[...] ├─share.3 │ ├─recv │ ├─to.share.1 │ ├─to.share.2 │ └─[...] └─[...]

예를 들어 share.x에 로그인한 사용자입니다. 사용자가 share.x 내부의 항목을 share.y로 이동/복사하려는 경우 작업은 다음과 같습니다.

  1. share.x 내부의 개체를 선택하고 으로 이동/복사합니다 share.x/to.share.y.

  2. 서버는 을(를) to.share.*사용하여 해당 폴더를 모니터링하므로 inotifywait이제 작업할 시간임을 알 수 있습니다.

  3. 서버는 내부의 개체를 share.x/to.share.y으로 이동합니다 share.y/recv.

  4. 완료!

전제 조건에는 위와 같은 특정 폴더 구조, 실제 작업을 수행하기 위해 서버에서 실행되는 작업/서비스/스크립트가 포함됩니다 mv.

여러분과 공유할 나만의 스크립트 코드가 있지만 개선해야 할 부분이 많이 있습니다.

inotifywait -m "$source_dir" --format '%w%f' -e moved_to,create,modify | while read file; do mv -v "$file" "$dest_dir"; done

이를 수정 $source_dir하고 $dest_dir필요에 맞게 수정하십시오.

나는 supervisor"Samba 순간 이동"을 만들기 위해 위와 같은 여러 스크립트를 관리하는 데 사용합니다. 을 잘 모르신다면 supervisor참고하세요.http://supervisord.org/그리고 그것에 대한 다른 답변.

답변3

가장 쉽고 빠르고 더러운 방법은 서버 자체에서 수행하거나 두 대상 공유가 모두 하위 폴더로 있는 공유를 만드는 것입니다(예: \\servername\c$).

관련 정보