Skopiuj na inny dysk NTFS i zachowaj twarde linki

10

Muszę skopiować strukturę katalogów z jednego lokalnego dysku NTFS na inny (Windows 7+) i zachować twarde linki istniejące w tej strukturze katalogów.

Dopuszczalnym rozwiązaniem byłoby zastąpienie dowiązań twardych (względnymi) dowiązaniami symbolicznymi przed kopiowaniem, ale nie jestem pewien, czy jest to wykonalne.

Jakie są tutaj opcje?

Estus Flask
źródło
Według superuser.com/questions/624811/… programowe oprogramowanie „Shadow Copy Cloner” może to zrobić.
Vojtech,
1
@Vojtech To nie jest darmowy i wydaje się być niedostępny. Ale ln.exe odpowiada moim potrzebom. Jednak wolałbym mieć alternatywę z GUI.
Estus Flask,
1
@PJMahoney Tak, to są twarde linki, nie byłoby problemów z kopiowaniem skrzyżowań i symboli, te ostatnie można po prostu skopiować i naprawić później. Nie zamierzam go klonować, wystarczy skopiować strukturę katalogów (która jest częścią całego dysku) na inny niepusty dysk.
Estus Flask,

Odpowiedzi:

9

Narzędzie do kopiowania twardych łączy na oddzielnych partycjach dysku

LN - twarde linki wiersza poleceń

Komenda: ln --copy x:\dir\dir2 y:\dir\newdir

W powyższym przykładzie katalogi i pliki poniżej x: \ dir \ dir2 są kopiowane do y: \ dir \ newdir, a wszystkie dowiązania / połączenia / dowiązania symboliczne w obrębie x: \ dir \ dir2 są kopiowane / wiązane do nowych lokalizacji pod y : \ dir \ newdir.

Zasób: http://schinagl.priv.at/nt/ln/ln.html

Pobierz: http://schinagl.priv.at/nt/ln/ln.html#contact

Uwaga: Wygląda na to, że po prostu pobierasz to oprogramowanie dla architektury procesora z pliku ZIP, a także vcredist (Visual C ++ Redistributable) i instalujesz go. Następnie wyodrębnij pliki i foldery z pliku ZIP do nowego folderu gdzieś (.eg C:\Temp). W wierszu poleceń wystarczy przejść do tego folderu [katalog], a następnie uruchomić potrzebne polecenia dla lokalizacji dysku, jak pokazuje powyższy przykład. Uruchamianie ln --helppokazuje szczegóły pomocy, ale powyższy przykład polecenia powinien skopiować hard linksdokumentację.


Rozszerzenie powłoki łącza

Zasób: http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html

Pobierz: http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#contact

Sekcje lub funkcje będące przedmiotem zainteresowania tego oprogramowania

  • Smart Mirror
  • Clone
  • Smart Copy

ln - Hardlinks wiersza poleceń - Pobierz zrzut ekranu wprowadź opis zdjęcia tutaj

Link Shell Extension - pobierz zrzut ekranu wprowadź opis zdjęcia tutaj


CIEKAWE UWAGI

Wygląda na hard linksto, że są zablokowane na tej samej partycji dysku ze względu na wskaźniki plików itp. I nie można ich używać na wielu partycjach. Ponadto hard linksna partycjach NTFS są częścią Master File Tablerekordów (lub atrybutów co najmniej zliczeń), więc kopiowanie ich na istniejący dysk, który ma własny MFT, wydaje się problemem, jeśli nie sklonujesz bajt po bajcie na poziomie partycji przynajmniej.

Pimp Juice IT
źródło
4

Narzędzie wiersza polecenia rsyncrobi to, o co prosisz.

Zakładając, że twoje stare dane znajdują się w lokalizacji A, a nowe w B, wykonaj następujące czynności:

rsync -ahPruvz --hard-links A B

Cytowanie z podręcznika rsync:

To mówi rsync, aby szukał połączonych plików w źródle i łączył odpowiednie pliki w miejscu docelowym.

Jak go uzyskać rsynci z niego korzystać? Istnieją 2 proste alternatywy dla systemu Windows:

Pierwsza alternatywa: użyj cygwin. To oprogramowanie Windows. Zainstaluj, dodaj rsyncna etapie wybierania pakietów. Pozostaw wszystko inne domyślne. Po zainstalowaniu użyj jego powłoki, aby wpisać polecenie. Jeśli chcesz, możesz użyć pełnej ścieżki /usr/bin/rsynczamiast tylko rsync. Jeśli chcesz uzyskać dostęp do dysków Windows, użyj ścieżek takich jak „/ cygwin / drives” i zawsze staraj się automatycznie uzupełniać za pomocą TAB.

Druga alternatywa: jeśli jest to komputer stacjonarny, użyj dystrybucji GNU / Linux na żywo. Przygotuj obraz USB na żywo, uruchom go, zamontuj żądane dyski i wywołaj rsync. Jeśli obraz na żywo nie ma rsync, zainstaluj go. ( apt-get install rsyncw Debianie i jego pochodnych.) Jeśli nie masz jeszcze doświadczenia z ekosystemem Linuksa, cygwin może być łatwiejszy.

VasyaNovikov
źródło
Dziękujemy za wyjaśnienie tego. Sprawdziłem rsync, i rzeczywiście działa on na twardych linkach (/ cygwin / driveletter i ukośniki powodują pewien dyskomfort, ale działa).
Estus Flask,
uwaga: jeśli Ajest katalogiem, to Bpowinna być nazwa, którą katalog przybierze na celu (inaczej niż cpna przykład, gdy ostatnim argumentem jest katalog nadrzędny)
MM
@estus - Jakie metody wypróbowałeś, jak to działało? a jakie wyniki widziałeś i lubiłeś najbardziej?
Alex S
@AlexS Nie pamiętam, ale prawdopodobnie skończyło się na tym, lnjak pokazano w innej odpowiedzi. Cygwin rsyncz tej odpowiedzi może również działać, jak już wspomniałem.
Estus Flask
1
@AlexS kiedyś CLI narzędziowego ln --copy. Jeśli chodzi o GUI, zakładam, że „Smart Copy” jest tym, czego szukasz.
Estus Flask
3

Spróbuj przeszukać rsync dla Windows. Ponieważ rsync ma opcję zachowania twardych linków (flaga -H, --hard-links), powinien wykonać to zadanie (źródło: https://download.samba.org/pub/rsync/rsync.html ).

Możesz spróbować spojrzeć na coś takiego jak cwRsync: https://www.itefix.net/cwrsync# ten ma GUI.

cwRsync to pakiet Rsync dla Windows z graficznym interfejsem klienta. Możesz użyć cwRsync do szybkiego zdalnego tworzenia kopii zapasowych plików i synchronizacji.

Martynas Smilgevičius
źródło
1
Zalecając ostrożność, zachowaj ostrożność. Jak napisano, twoja odpowiedź może być postrzegana jako spam. Twoja odpowiedź powinna zawierać opis oprogramowania i sposób, w jaki odpowiada on na pytanie. Więcej informacji: Jak polecić oprogramowanie w moich odpowiedziach?
bwDraco,
1
Nie mogłem tego wcześniej osiągnąć przy pomocy rsync (wydaje mi się, że użyłem DeltaCopy dla GUI). Może to mieć znaczenie dla implementacji twardego łącza NTFS i faktu, że rsync jest przede wszystkim narzędziem * nix. Docenione zostanie pewne wyjaśnienie.
Estus Flask,
1

Bardzo późno na imprezę tutaj.

Zwalczaj ogień ogniem. Ponieważ robocopy pozwoliło na bałagan, użyjemy robocopy również do jego wyczyszczenia.

Utwórz pusty katalog, a następnie użyj robocopy, aby skopiować pusty katalog do obiektu docelowego (który ma bardzo długie ścieżki) za pomocą opcji czyszczenia.

md %temp%\foo
robocopy %temp%\foo target /purge
rd target
rd %temp%\foo

To powinno działać.

Robert Ricketts
źródło