Szukasz sposobu na skopiowanie pliku, który nie blokuje kopiowanego pliku


3

Łączę dane, które są generowane na wielu różnych źródłach, w mieszanym środowisku różnych wersji systemu Windows (XP / 7) i jednego Linuksa (Centos). Dane są dostępne za pośrednictwem udziałów sieciowych. Dane są wytwarzane przez różne oprogramowanie w każdej lokalizacji, tworząc i dołączając do plików w różnych odstępach czasu. Większość źródeł danych to systemy zamknięte, do których nie mam dostępu administracyjnego, co naprawdę komplikuje sytuację.

Muszę okresowo dołączać do udziałów sieciowych i gromadzić dane w centralnej lokalizacji, używanej do dalszej dystrybucji. Dane są generowane i zbierane 24 godziny na dobę przez 7 tygodni. Zostanie to uruchomione z komputera z systemem Windows 2008.

Jedynym problemem, jaki mam z organizowaniem tego, jest kopiowanie pliku ze zdalnego źródła bez blokowania pliku. Początkowo skonfigurowałem system, który działał dobrze przy użyciu robocopy, dopóki moje testy nie wykazały, że oprogramowanie źródła danych nie powiedzie się, jeśli spróbuje dołączyć do aktualnie kopiowanego pliku.

Niestety użycie vss nie jest opcją, ponieważ nie są to woluminy, które są udostępniane.

Po pewnym czasie kopiuję plik, który po prostu nie blokuje pliku podczas jego kopiowania. Obsługuję pliki, sprawdzając modyfikację czasów i rozmiarów przed i po kopiowaniu oraz zaznaczając te z różnicami. Brak dokładnych najnowszych plików nie stanowi problemu, ale utratą danych u źródła jest.

Zajrzałem do różnych rozwiązań do tworzenia kopii zapasowych, ale wszystko, co testowałem, nadal blokuje pliki, gdy nie mogą korzystać z vss.

Nie chcę implementować własnego oprogramowania do kopiowania plików dla czegoś, co powinno być całkiem proste.


To trudne zadanie, jeśli chcesz mieć widok atomowy. Robi się to poprzez tworzenie kopii w tle (a la Unix) lub przez włączenie dziennika w pliku. Ale jeśli możesz tolerować zmieniający się widok, jest to prosta sprawa otwarcia wspólnego odczytu, który umożliwia jednoczesne zapisywanie (jeśli system operacyjny na to pozwala).
Daniel R Hicks

Odpowiedzi:


2

Nie jestem pewien, czy XXCOPY może zrobić, co chcesz, więc możesz przeczytać post dotyczący jego dostęp do zablokowanych plików . W przeciwnym razie brzmi jak XCOPY (i RoboCopy) na sterydach. Nie jest darmowy do użytku biznesowego, chociaż nadal jest obsługiwany (najnowsza wersja wydana 27.12.2013)

Dodatek: Dokumentacja mówi, że sam XXCOPY nie blokuje pliku podczas kopiowania.


Świetnie, dzięki za to - XXCOPY wygląda jak realny sposób. flaga / SHRW otwiera się w trybie współdzielonym, czego właśnie szukam. Właśnie przetestowałem to teraz, a moje systemy akwizycyjne są w stanie kontynuować dołączanie do pliku danych podczas kopiowania :)
Steve

Zasługuje na +1 @JSanchez, dobre znalezisko. Używałem tego w przeszłości i zupełnie go straciłem.
Julian Knight

@ JulianKnight: Dzięki! Użyłem go już dawno temu, kiedy pracowałem na tym POS opartym na systemie DOS, a polecenie XCopy nie wycinało go z tego, co musiałem zrobić. Cieszę się, że wciąż jest w fazie rozwoju i że Steve był w stanie z niego korzystać. Mój harcerski czyn na tydzień. ;-)
JSanchez

Dzięki @JSanchez, XXCopy robi to, co chcę. Jedynym punktem wyjścia jest ich licencjonowanie, które wymaga licencji na każdą maszynę, której dotyka xxcopy. Może to być problematyczne, ponieważ część maszyn tworzących środowisko należałoby do zewnętrznych grup odwiedzających, obracających się co miesiąc. Jest to jednak problem odrębny od tego, co przedstawiłem. Dzięki jeszcze raz!
Steve

1

FileCopy.exe twierdzi, że jest w stanie to zrobić, ale jest dość stary (2004), więc nie wiem, czy to zadziała. Ponadto nie jest jasne, czy kopia pozostanie niezablokowana, gdy zostanie użyta przez udział sieciowy.

Wykonywanie kopii nieblokujących jest oczywiście dość niebezpieczne, dlatego większość narzędzi go nie obsługuje. Jeśli aplikacja główna aktualizuje plik podczas kopiowania, prawdopodobnie skończy się na uszkodzonej kopii.


Brak blokowania to raczej inna koncepcja otwierania plików. Właściwa terminologia to tryb udostępniania , w tym konkretnym przypadku z trybem udostępniania, który umożliwia czytanie i pisanie (i ewentualnie FILE_SHARE_DELETE również, chociaż doco wskazuje prawdopodobnie nie) przez inne procesy, które otwierają plik.
JdeBP

FileCopy wygląda trochę staro, ale nadal będę to sprawdzać, dzięki. Mogę żyć z odbieraniem / przetwarzaniem uszkodzonego pliku, o ile mogę zapewnić, że nie nastąpi utrata danych u źródła. Dziękujemy za wyjaśnienie terminologii.
Steve

Mówi też, że „sprawdza czasy i rozmiary modyfikacji przed i po kopiowaniu oraz zaznacza te z różnicami” - które powinny wykryć większość kopii uszkodzonych przez jednoczesną modyfikację pliku źródłowego.
Scott

1

Aby dodać kolejną opcję, znalazłem FastCopy kopiować pliki w trybie wspólnego odczytu / zapisu.

Wydaje się, że jest dość dojrzały i istnieje od 2004 roku i jest open source na podstawie licencji BSD tutaj . Wydaje się, że to dobra alternatywa, ponieważ nie wszystkie dodatkowe dzwonki i gwizdki, które zapewnia XXCOPY, są wymagane.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.