Di chuyển tệp giữa hai chia sẻ tệp windows trên cùng một máy chủ


4

Sử dụng Windows 7 Tôi có một máy chủ với các thư mục dùng chung được thiết lập. Nếu tôi mở một trong số chúng và lấy một tệp và di chuyển nó đến thư mục con thì ngay lập tức - tệp rõ ràng chỉ được di chuyển trên máy chủ. Tương tự cho hai cửa sổ có cùng một thư mục chia sẻ mở.

Mặt khác, nếu tôi mở một thư mục chia sẻ khác trên cùng một máy chủ và di chuyển một tệp giữa chúng thì sẽ mất rất nhiều thời gian - giống như việc tải tệp từ chia sẻ đầu tiên sang máy tính của tôi trong một thư mục tạm thời và sau đó tải nó lên chia sẻ khác .

Có cách nào để di chuyển các tệp giữa các chia sẻ khác nhau như thế này mà không cần máy tính của tôi tải xuống ở giữa không? Tôi muốn một số tốc độ vì nó thường là các tệp khá lớn.


Tất cả điều này xảy ra trên cùng một máy hay trên hai máy tính khác nhau chạy windows 7? Nghe có vẻ như điều này xảy ra trên cùng một máy, nhưng nếu vậy - tại sao bạn sẽ kết nối với chia sẻ tệp nằm trên máy mà bạn đã đăng nhập khi bạn có thể truy cập các tệp cục bộ?
Richie086

Có, một máy tính, một máy chủ hai (hoặc nhiều) thư mục dùng chung.
olofom

Câu trả lời:


2

Khi bạn nói, một thư mục chia sẻ khác khác, bạn có nghĩa là một thư mục trong một chia sẻ tệp khác (nghĩa là một ổ đĩa được ánh xạ khác) Nếu vậy, đó là vấn đề, và không có sửa chữa ma thuật dễ dàng. Khi bạn di chuyển một tệp từ thư mục này sang thư mục khác trên cùng một ổ đĩa , tất cả những gì cần xảy ra là để hệ điều hành viết một mục nhập thư mục mới trong thư mục đích và xóa mục nhập thư mục cũ trong thư mục nguồn - dữ liệu tệp không Không cần phải truy cập. Khi bạn sao chépmột tệp, HĐH phải đọc từng khối dữ liệu và ghi nó vào một vị trí mới. Và việc di chuyển giữa các ổ đĩa cũng có thể là di chuyển giữa các đĩa riêng biệt - nó phải được coi là một bản sao theo sau là xóa tệp nguồn - vì các mục nhập thư mục không thể trỏ đến các khối dữ liệu trên một ổ đĩa khác.

PS Trớ trêu thay, việc di chuyển giữa các đĩa riêng biệt thậm chí có thể nhanh hơn di chuyển giữa các phân vùng (ổ đĩa hoặc khối lượng chia sẻ) trên cùng một đĩa, bởi vì trong trường hợp sau, đầu I / O của đĩa cần phải nhảy qua lại giữa nguồn xi lanh (s) và xi lanh đích (s).


2

Mặc dù tôi đến trễ bữa tiệc, nhưng đây vẫn là công thức và tôi tin rằng đó là một phương pháp thực tế, với một số điều kiện tiên quyết .

  • Ý tưởng cốt lõi là bảo máy chủ di chuyển các đối tượng ở một vị trí cụ thể (tất nhiên là trong một chia sẻ Samba) đến một vị trí khác (tất nhiên là trong một chia sẻ Samba khác ).

  • inotifywaitlà đầu bếp, với bếp được gọi là while, readmv. Đó là đội cho bữa tối của chúng tôi.

  • Và nhà bếp (hoặc có thể là phòng ăn) trông như thế này:

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 │ └─[...] └─[...]

Một người dùng đăng nhập vào, giả sử, chia sẻ.x. Nếu người dùng muốn di chuyển / sao chép một cái gì đó bên trong share.x để share.y, thì đây là thao tác:

  1. Chọn các đối tượng bên trong share.x, di chuyển / sao chép chúng vào share.x/to.share.y.

  2. Máy chủ đang theo dõi các to.share.*thư mục inotifywaitđó, do đó nó biết đã đến lúc hoạt động.

  3. Máy chủ di chuyển các đối tượng bên trong share.x/to.share.yđến share.y/recv.

  4. Làm xong!

Các điều kiện tiên quyết bao gồm, một cấu trúc thư mục cụ thể như trên, một công việc / dịch vụ / tập lệnh chạy trên máy chủ để thực hiện mvthao tác thực sự .

Tôi có mã script riêng để chia sẻ với bạn, nhưng có rất nhiều cải tiến để thực hiện:

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

Sửa đổi những điều đó $source_dir$dest_dirđể phù hợp với nhu cầu của riêng bạn.

Tôi sử dụng supervisorđể quản lý một loạt các kịch bản như ở trên để thực hiện "dịch chuyển tức thời Samba". Nếu bạn không quen thuộc supervisor, vui lòng tham khảo http://supervisord.org/ và các câu trả lời khác về nó.


Xin vui lòng đọc lại câu hỏi một cách cẩn thận. Câu trả lời của bạn không trả lời câu hỏi ban đầu. "Mặc dù tôi đến trễ bữa tiệc" Bạn không chỉ trễ bữa tiệc mà bạn đang ở nhầm nhà hàng. Bạn đang đề xuất giải pháp bash khi OP đang sử dụng Windows 7.
DavidPostill

Như bạn đã nói, xin vui lòng đọc lại câu hỏi một cách cẩn thận, @DavidPostill. "Di chuyển tệp giữa hai chia sẻ tệp windows trên cùng một máy chủ", tiêu đề cho biết. Chúng tôi biết về CIFS và về cách di chuyển các đối tượng giữa các chia sẻ khác nhau trên cùng một máy chủ. Các máy khách đang chạy HĐH Windows, tuy nhiên phía máy chủ không được đề cập. Tôi đã cung cấp một cách giải quyết trên Linux, có thể đáp ứng yêu cầu của người hỏi của chúng tôi khá tốt nếu máy chủ đang chạy hệ thống * nix với Samba. Ngay cả khi đó là một số HĐH khác như Windows Server, câu trả lời của tôi vẫn cung cấp một phương pháp tốt và có thể được sửa đổi cho phù hợp với nó.
mo-han

1

Cách dễ nhất / nhanh nhất và bẩn sẽ là làm điều đó từ chính máy chủ hoặc tạo ra một chia sẻ có cả hai cổ phiếu mục tiêu là thư mục con (ví dụ \\servername\c$).


1
Thay vào đó, tôi đã nghĩ đến việc tạo ra một chia sẻ lớn với các thư mục con nhưng điều đó làm rối loạn quyền truy cập của người dùng, v.v. Tôi muốn tìm một giải pháp có thể áp dụng cho những gì tôi đã có. Rất tiếc, làm điều đó từ máy chủ không phải là một lựa chọn.
olofom

Là máy chủ Windows 7? Hay cái gì khác?
daniel

Tạo một chia sẻ trên cả hai chia sẻ khác không nên làm tổn thương quyền của người dùng, đặc biệt nếu bạn có quyền truy cập đầy đủ vào cả hai chia sẻ. Tuy nhiên, nếu bạn đang nói về một hộp NAS như LinkSys của tôi với chức năng rất hạn chế, đó có thể là một câu chuyện khác.
daniel

Đúng, thật không may, đó là một loại giải pháp NAS Synology nơi người dùng có quyền truy cập vào thư mục dùng chung và không phải thư mục con trong cây ...
olofom
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.