Salin ke disk NTFS lain dan pertahankan tautan keras

10

Saya harus menyalin struktur direktori dari satu disk NTFS lokal ke yang lain (Windows 7+) dan menjaga tautan keras yang ada dalam struktur direktori ini.

Solusi yang dapat diterima adalah mengganti tautan keras dengan tautan simbolis (relatif) sebelum disalin, tetapi saya juga tidak yakin apakah itu bisa diterapkan.

Apa saja opsi di sini?

Estus Flask
sumber
Menurut superuser.com/questions/624811/… , sebuah perangkat lunak bernama "Shadow Copy Cloner" dapat melakukan itu.
Vojtech
1
@ Vojtech Ini bukan freeware dan sepertinya tidak tersedia. Tapi ln.exe sesuai dengan kebutuhan saya, di sisi lain. Namun, saya lebih suka memiliki alternatif dengan GUI.
Estus Flask
1
@ PJMahoney Ya, ini adalah tautan keras, tidak akan ada masalah dengan menyalin persimpangan dan simbol, yang terakhir hanya bisa disalin dan diperbaiki nanti. Saya tidak bermaksud mengkloningnya, hanya menyalin struktur direktori (yang merupakan bagian dari keseluruhan disk) ke disk lain yang tidak kosong.
Estus Flask

Jawaban:

9

Alat Untuk Menyalin Hard Links Di Partisi Disk Terpisah

LN - Hardlinks Baris Perintah

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

Dalam contoh di atas direktori dan file di bawah x: \ dir \ dir2 disalin ke y: \ dir \ newdir, dan semua hardlinks / junctions / tautan simbolik dalam x: \ dir \ dir2 disalin / diikat ke lokasi baru mereka di bawah y : \ dir \ newdir.

Sumberdaya: http://schinagl.priv.at/nt/ln/ln.html

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

Catatan: Tampaknya Anda baru saja mengunduh perangkat lunak ini untuk arsitektur CPU Anda dari file ZIP, serta vcredist (Visual C ++ Redistributable) dan menginstalnya. Kemudian cukup ekstrak file dan folder dari file ZIP ke folder baru di suatu tempat (.eg C:\Temp). Di baris perintah, cukup buka folder [direktori] itu dan jalankan perintah yang diperlukan untuk lokasi drive Anda seperti yang ditunjukkan contoh di atas. Menjalankan ln --helpmenunjukkan detail bantuan tetapi contoh perintah di atas seharusnya menyalin hard linksper dokumentasi.


Tautan Ekstensi Shell

Sumberdaya: http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html

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

Bagian atau Fungsi Kepentingan dengan Perangkat Lunak ini

  • Smart Mirror
  • Clone
  • Smart Copy

ln - Command Line Hardlinks - Unduh Cuplikan Layar masukkan deskripsi gambar di sini

Link Shell Extension - Unduh Cuplikan Layar masukkan deskripsi gambar di sini


CATATAN MENARIK

Tampaknya hard linksdikunci ke partisi disk yang sama untuk penunjuk file mereka, dll. Dan tidak dapat digunakan di beberapa partisi. Juga, hard linkspada partisi NTFS adalah bagian dari Master File Tablecatatan (atau atribut untuk penghitungan setidaknya) sehingga menyalin ini ke disk yang sudah ada itu sendiri MFTakan tampak seperti masalah jika Anda tidak mengkloning byte-for-byte pada tingkat partisi paling sedikit.

Pimp Juice
sumber
4

Utilitas baris perintah rsyncmelakukan apa yang Anda minta.

Menganggap data lama Anda ada di lokasi A, dan data baru Anda ada di B, lakukan hal berikut:

rsync -ahPruvz --hard-links A B

Mengutip dari rsync manual:

Ini memberitahu rsync untuk mencari file yang terhubung dengan keras di sumber dan menghubungkan bersama file yang sesuai di tujuan.

Bagaimana cara memperoleh rsyncdan menggunakannya? Ada 2 alternatif mudah untuk Windows:

Alternatif pertama: gunakan cygwin. Ini adalah perangkat lunak windows. Instal, tambahkan rsyncpada langkah memilih paket. Biarkan semua yang lain default. Setelah Anda menginstalnya, gunakan shellnya untuk mengetikkan perintah. Jika ingin, Anda dapat menggunakan jalur lengkap, /usr/bin/rsyncbukan hanya rsync. Jika Anda ingin mengakses drive Windows, gunakan lintasan seperti "/ cygwin / drive" dan selalu coba lengkapi secara otomatis menggunakan TAB.

Alternatif kedua: jika itu komputer desktop, gunakan distribusi langsung GNU / Linux. Siapkan gambar USB langsung, boot darinya, pasang disk yang diinginkan dan aktifkan rsync. Jika gambar langsung tidak memiliki rsync, instal. ( apt-get install rsyncdalam Debian dan turunannya.) Jika Anda belum berpengalaman dengan ekosistem Linux, cygwin bisa lebih mudah.

VasyaNovikov
sumber
Terima kasih telah menjelaskan ini. Saya telah memeriksa rsync, dan itu memang berfungsi pada hard link (/ cygwin / driveletter dan slash menyebabkan beberapa ketidaknyamanan tetapi berhasil).
Estus Flask
catatan: jika Aadalah direktori, maka Bharuslah nama yang akan diambil direktori pada target (tidak seperti cpmisalnya, di mana argumen terakhir adalah direktori induk)
MM
@estus - Metode apa yang Anda coba, bagaimana cara kerjanya? dan apa hasil yang paling Anda lihat dan sukai?
Alex S
@AlexS Saya tidak ingat tetapi kemungkinan berakhir dengan lnseperti yang ditunjukkan pada jawaban lain. Cygwin rsyncdari jawaban ini dapat bekerja juga, seperti yang saya sebutkan.
Estus Flask
1
@AlexS Saya menggunakan utilitas CLI ln --copy,. Sedangkan untuk GUI, saya berasumsi bahwa 'Smart Copy' adalah yang Anda cari.
Estus Flask
3

Coba cari di rsync untuk windows. Karena rsync memiliki opsi untuk menyimpan hardlink (flag -H, --hard-links) ia harus melakukan pekerjaannya (sumber: https://download.samba.org/pub/rsync/rsync.html ).

Anda dapat mencoba melihat sesuatu seperti cwRsync: https://www.itefix.net/cwrsync# yang ini memiliki GUI.

cwRsync adalah kemasan Rsync untuk Windows dengan GUI klien. Anda dapat menggunakan cwRsync untuk pencadangan dan sinkronisasi file jarak jauh cepat.

Martynas Smilgevičius
sumber
1
Harap berhati-hati saat merekomendasikan perangkat lunak. Seperti yang tertulis, jawaban Anda dapat dilihat sebagai spam. Jawaban Anda harus mencakup deskripsi perangkat lunak dan cara menjawab pertanyaan. Informasi lebih lanjut: Bagaimana saya merekomendasikan perangkat lunak dalam jawaban saya?
bwDraco
1
Saya tidak dapat mencapai ini dengan rsync sebelumnya (saya percaya saya telah menggunakan DeltaCopy untuk GUI). Mungkin relevan untuk implementasi hard link NTFS dan fakta bahwa rsync terutama adalah * nix tool. Beberapa klarifikasi akan dihargai.
Estus Flask
1

Sangat terlambat ke pesta di sini.

Perangi api dengan api. Karena robocopy memperbolehkan kekacauan, maka kami akan menggunakan robocopy untuk membersihkannya juga.

Buat direktori kosong lalu gunakan robocopy untuk menyalin dir kosong ke target (yang memiliki jalur super panjang) menggunakan opsi purge.

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

Itu seharusnya bekerja.

Robert Ricketts
sumber